diff --git a/.changeset/afraid-flowers-thank.md b/.changeset/afraid-flowers-thank.md new file mode 100644 index 000000000..2bd2a077f --- /dev/null +++ b/.changeset/afraid-flowers-thank.md @@ -0,0 +1,7 @@ +--- +'gqty': minor +'@gqty/react': minor +--- + +Added `operationName` in `resolved()`, `inlineResolved()`, +`useTransactionQuery()` and `useLazyQuery()` diff --git a/.changeset/clever-plums-shout.md b/.changeset/clever-plums-shout.md new file mode 100644 index 000000000..eb42aec2b --- /dev/null +++ b/.changeset/clever-plums-shout.md @@ -0,0 +1,5 @@ +--- +'gqty': minor +--- + +feat: batching by microtask diff --git a/.changeset/config.json b/.changeset/config.json index 75653b37d..7fa399019 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -1,12 +1,16 @@ { - "$schema": "https://unpkg.com/@changesets/config@1.5.0/schema.json", - "changelog": "@changesets/cli/changelog", + "$schema": "https://unpkg.com/@changesets/config@2.1.0/schema.json", + "changelog": ["@changesets/changelog-github", { "repo": "gqty-dev/gqty" }], "commit": false, "linked": [], "access": "public", "baseBranch": "main", "updateInternalDependencies": "patch", - "ignore": ["example-*", "website"], + "ignore": ["example-*"], + "snapshot": { + "useCalculatedVersion": true, + "prereleaseTemplate": "{tag}-{datetime}.{commit}" + }, "___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": { "onlyUpdatePeerDependentsWhenOutOfRange": true } diff --git a/.changeset/cool-wolves-own.md b/.changeset/cool-wolves-own.md deleted file mode 100644 index d07d4395c..000000000 --- a/.changeset/cool-wolves-own.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'gqty': minor ---- - -Add `operationName` option to `resolved()` and `inlineResolved()`. diff --git a/.changeset/cyan-seas-relax.md b/.changeset/cyan-seas-relax.md new file mode 100644 index 000000000..1fd805f1c --- /dev/null +++ b/.changeset/cyan-seas-relax.md @@ -0,0 +1,5 @@ +--- +'gqty': minor +--- + +Added `$meta` API diff --git a/.changeset/dull-hotels-listen.md b/.changeset/dull-hotels-listen.md new file mode 100644 index 000000000..021c06c0a --- /dev/null +++ b/.changeset/dull-hotels-listen.md @@ -0,0 +1,5 @@ +--- +'gqty': major +--- + +Added "Legacy" prefix to deprecated types diff --git a/.changeset/empty-worms-smell.md b/.changeset/empty-worms-smell.md new file mode 100644 index 000000000..ac8be24f1 --- /dev/null +++ b/.changeset/empty-worms-smell.md @@ -0,0 +1,5 @@ +--- +'@gqty/cli': major +--- + +Dropped inferrable types from generated schema diff --git a/.changeset/four-toys-crash.md b/.changeset/four-toys-crash.md new file mode 100644 index 000000000..1e7269cfb --- /dev/null +++ b/.changeset/four-toys-crash.md @@ -0,0 +1,5 @@ +--- +'gqty': major +--- + +Added new logging interface for `@gqty/logger` diff --git a/.changeset/gold-lemons-pump.md b/.changeset/gold-lemons-pump.md new file mode 100644 index 000000000..1c29d5a95 --- /dev/null +++ b/.changeset/gold-lemons-pump.md @@ -0,0 +1,6 @@ +--- +'gqty': major +--- + +`backupPersistence()` and `restorePersistence()` is now replaced with +`persist()`, `restore()` and `restoreAsync()`. diff --git a/.changeset/grumpy-clouds-notice.md b/.changeset/grumpy-clouds-notice.md new file mode 100644 index 000000000..d7e63219d --- /dev/null +++ b/.changeset/grumpy-clouds-notice.md @@ -0,0 +1,5 @@ +--- +'@gqty/react': minor +--- + +Upgrade to the new core diff --git a/.changeset/hip-kangaroos-give.md b/.changeset/hip-kangaroos-give.md new file mode 100644 index 000000000..9fb12b73b --- /dev/null +++ b/.changeset/hip-kangaroos-give.md @@ -0,0 +1,5 @@ +--- +'gqty': major +--- + +QueryFetcher now accepts QueryPayload as the first parameter diff --git a/.changeset/lemon-bags-behave.md b/.changeset/lemon-bags-behave.md new file mode 100644 index 000000000..cef159bed --- /dev/null +++ b/.changeset/lemon-bags-behave.md @@ -0,0 +1,5 @@ +--- +'@gqty/cli': minor +--- + +feat: interactive mode diff --git a/.changeset/metal-windows-fly.md b/.changeset/metal-windows-fly.md new file mode 100644 index 000000000..3363de1ad --- /dev/null +++ b/.changeset/metal-windows-fly.md @@ -0,0 +1,5 @@ +--- +'gqty': major +--- + +Remade `Cache` with expiry, normalization and persistence diff --git a/.changeset/moody-onions-exercise.md b/.changeset/moody-onions-exercise.md new file mode 100644 index 000000000..68104c8e8 --- /dev/null +++ b/.changeset/moody-onions-exercise.md @@ -0,0 +1,5 @@ +--- +'gqty': major +--- + +Axed `Scheduler`, `Interceptor` and `EventHandler` diff --git a/.changeset/polite-maps-draw.md b/.changeset/polite-maps-draw.md new file mode 100644 index 000000000..46ad31348 --- /dev/null +++ b/.changeset/polite-maps-draw.md @@ -0,0 +1,5 @@ +--- +'@gqty/react': minor +--- + +Added `ResolverContainer` to replace scheduler for legacy resolvers. diff --git a/.changeset/polite-wolves-explode.md b/.changeset/polite-wolves-explode.md new file mode 100644 index 000000000..004c1b02d --- /dev/null +++ b/.changeset/polite-wolves-explode.md @@ -0,0 +1,5 @@ +--- +'gqty': major +--- + +Reworked `Accessor` and added scoped context diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 000000000..8064d073d --- /dev/null +++ b/.changeset/pre.json @@ -0,0 +1,45 @@ +{ + "mode": "exit", + "tag": "beta", + "initialVersions": { + "example-gnt": "0.1.0", + "example-react": "1.0.0", + "example-vite": "0.0.0", + "test-utils": "0.1.0", + "@gqty/cli": "3.3.0", + "gqty": "2.3.0", + "@gqty/logger": "2.0.2", + "@gqty/react": "2.1.1", + "@gqty/subscriptions": "2.0.1" + }, + "changesets": [ + "afraid-flowers-thank", + "curvy-dragons-smell", + "cyan-seas-relax", + "dull-hotels-listen", + "empty-worms-smell", + "four-toys-crash", + "gold-lemons-pump", + "grumpy-clouds-notice", + "hip-kangaroos-give", + "lemon-bags-behave", + "metal-windows-fly", + "moody-onions-exercise", + "polite-maps-draw", + "polite-wolves-explode", + "rare-pets-tan", + "real-camels-run", + "seven-rings-retire", + "small-fishes-dress", + "small-penguins-invent", + "sour-rocks-vanish", + "stale-schools-sleep", + "stale-windows-march", + "tiny-brooms-check", + "tricky-bats-glow", + "tricky-coins-breathe", + "violet-lions-count", + "wise-coins-doubt", + "young-clocks-attend" + ] +} diff --git a/.changeset/rare-pets-tan.md b/.changeset/rare-pets-tan.md new file mode 100644 index 000000000..422b665e8 --- /dev/null +++ b/.changeset/rare-pets-tan.md @@ -0,0 +1,5 @@ +--- +'gqty': major +--- + +Replaced `@gqty/subscriptions` with `graphql-ws` and `graphql-sse` diff --git a/.changeset/real-camels-run.md b/.changeset/real-camels-run.md new file mode 100644 index 000000000..cea9f7496 --- /dev/null +++ b/.changeset/real-camels-run.md @@ -0,0 +1,5 @@ +--- +'@gqty/react': minor +--- + +feat: Added onComplete for useMutation diff --git a/.changeset/seven-rings-retire.md b/.changeset/seven-rings-retire.md new file mode 100644 index 000000000..e52519fd7 --- /dev/null +++ b/.changeset/seven-rings-retire.md @@ -0,0 +1,5 @@ +--- +'@gqty/react': minor +--- + +Added `retry` in `useQuery()` diff --git a/.changeset/small-fishes-dress.md b/.changeset/small-fishes-dress.md new file mode 100644 index 000000000..a68826023 --- /dev/null +++ b/.changeset/small-fishes-dress.md @@ -0,0 +1,5 @@ +--- +'@gqty/cli': major +--- + +generated query fetcher now takes a single QueryPayload parameter diff --git a/.changeset/small-penguins-invent.md b/.changeset/small-penguins-invent.md index 2fbc31039..255c31fb2 100644 --- a/.changeset/small-penguins-invent.md +++ b/.changeset/small-penguins-invent.md @@ -2,4 +2,5 @@ '@gqty/react': minor --- -Window focus refetching +Added `refetchInteraval`, `refetchIntervalInBackground`, `refetchOnReconnect` +and `refetchOnWindowVisible` in `useQuery`. diff --git a/.changeset/stale-schools-sleep.md b/.changeset/stale-schools-sleep.md new file mode 100644 index 000000000..1f831ecba --- /dev/null +++ b/.changeset/stale-schools-sleep.md @@ -0,0 +1,5 @@ +--- +'gqty': major +--- + +Rewritten `Selection` class diff --git a/.changeset/stale-windows-march.md b/.changeset/stale-windows-march.md new file mode 100644 index 000000000..83e9987b1 --- /dev/null +++ b/.changeset/stale-windows-march.md @@ -0,0 +1,5 @@ +--- +'gqty': major +--- + +Introduced `resolve()` and `subscribe()` API diff --git a/.changeset/tall-cheetahs-help.md b/.changeset/tall-cheetahs-help.md new file mode 100644 index 000000000..2120dd950 --- /dev/null +++ b/.changeset/tall-cheetahs-help.md @@ -0,0 +1,9 @@ +--- +'@gqty/subscriptions': patch +'@gqty/logger': patch +'@gqty/react': patch +'gqty': patch +'@gqty/cli': patch +--- + +Fix missing exports types package.json diff --git a/.changeset/tiny-brooms-check.md b/.changeset/tiny-brooms-check.md new file mode 100644 index 000000000..d693acb5d --- /dev/null +++ b/.changeset/tiny-brooms-check.md @@ -0,0 +1,5 @@ +--- +'@gqty/react': minor +--- + +Fetch errors now throws to boundaries in suspense mode. diff --git a/.changeset/tricky-coins-breathe.md b/.changeset/tricky-coins-breathe.md new file mode 100644 index 000000000..146b9eaf9 --- /dev/null +++ b/.changeset/tricky-coins-breathe.md @@ -0,0 +1,5 @@ +--- +'gqty': major +--- + +Replaced `lodash` with `just-*` and dropped `@gqty/utils` diff --git a/.changeset/violet-lions-count.md b/.changeset/violet-lions-count.md new file mode 100644 index 000000000..e8c2e2ce5 --- /dev/null +++ b/.changeset/violet-lions-count.md @@ -0,0 +1,6 @@ +--- +'gqty': major +--- + +Deprecated `resolved()`, `inlineResolved()`, `mutate()`, `track()`, `prefetch()` +and `refetch()` diff --git a/.changeset/weak-cougars-compare.md b/.changeset/weak-cougars-compare.md new file mode 100644 index 000000000..520efc72e --- /dev/null +++ b/.changeset/weak-cougars-compare.md @@ -0,0 +1,6 @@ +--- +'@gqty/react': minor +'gqty': minor +--- + +feat: added extensions option diff --git a/.changeset/wise-coins-doubt.md b/.changeset/wise-coins-doubt.md new file mode 100644 index 000000000..1fb1b44f9 --- /dev/null +++ b/.changeset/wise-coins-doubt.md @@ -0,0 +1,5 @@ +--- +'gqty': minor +--- + +Added `name` in `GQtyError` for better logging diff --git a/.changeset/young-clocks-attend.md b/.changeset/young-clocks-attend.md new file mode 100644 index 000000000..f294abb40 --- /dev/null +++ b/.changeset/young-clocks-attend.md @@ -0,0 +1,5 @@ +--- +'gqty': major +--- + +Replace variable serializer with object-hash, now with shortened alias diff --git a/.github/workflows/canary.yaml b/.github/workflows/canary.yaml index cdcdb51af..855dd1ad3 100644 --- a/.github/workflows/canary.yaml +++ b/.github/workflows/canary.yaml @@ -6,38 +6,12 @@ on: - main jobs: - publish-canary: - name: Publish Canary - runs-on: ubuntu-latest - if: github.event.pull_request.head.repo.full_name == github.repository - steps: - - name: Checkout Repo - uses: actions/checkout@v3 - with: - # This makes Actions fetch all Git history so that Changesets can generate changelogs with the correct commits - fetch-depth: 0 - - - uses: pnpm/action-setup@v2.2.4 - with: - version: ^7.1.1 - - name: Setup Node.js 16.x - uses: actions/setup-node@v3 - with: - node-version: 16.x - cache: 'pnpm' - - - name: Setup NPM credentials - run: echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc - env: - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - - - name: Install Dependencies - run: pnpm install - - - name: Release Canary - id: canary - uses: 'kamilkisiela/release-canary@master' - with: - npm-token: ${{ secrets.NPM_TOKEN }} - npm-script: 'pnpm release:canary' - changesets: true + release-canary: + uses: the-guild-org/shared-config/.github/workflows/release-snapshot.yml@main + with: + packageManager: pnpm + nodeVersion: 16 # align with the-guild-org/changesets-snapshot-action + npmTag: canary + secrets: + githubToken: ${{ secrets.GITHUB_TOKEN }} + npmToken: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 437a363d4..93fa53463 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -22,7 +22,7 @@ jobs: - uses: pnpm/action-setup@v2.2.4 with: - version: ^7.1.1 + version: ^8.14.0 - name: Setup Node.js 16.x uses: actions/setup-node@v3 with: diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 4a3f8153f..39db77168 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -20,19 +20,19 @@ env: jobs: build: - timeout-minutes: 10 + timeout-minutes: 20 name: Install, Build and Test runs-on: ${{ matrix.os }} strategy: matrix: - node-version: [14, 16, 18] + node-version: [18, 20.5.1] os: [ubuntu-latest] steps: - name: Checkout code uses: actions/checkout@v3 - uses: pnpm/action-setup@v2.2.4 with: - version: ^7.1.1 + version: ^8.14.0 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: diff --git a/.prettierrc b/.prettierrc index 686ffa2ed..ec66f0d83 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,5 +1,6 @@ { "printWidth": 80, + "proseWrap": "always", "semi": true, "singleQuote": true, "trailingComma": "es5" diff --git a/.vscode/settings.json b/.vscode/settings.json index 25fa6215f..b87f0d5f5 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,4 @@ { - "typescript.tsdk": "node_modules/typescript/lib" + "typescript.tsdk": "node_modules/typescript/lib", + "prettier.proseWrap": "preserve" } diff --git a/README.md b/README.md index ec4bd185b..882c1793c 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,28 @@

- gqty + gqty

- a GraphQL client built for rapid iteration. - - Documentation - - - Discord - + The No-GraphQL Client for TypeScript + +[![Documentation](https://img.shields.io/badge/documentation-documentation?color=C00B84)](https://gqty.dev) +[![Discord](https://img.shields.io/discord/874477141834739762?color=7289d9&label=discord)](https://discord.gg/U967mp5qbQ) +

- - Example usage - +[![GQty Hero Section](internal/images/hero.png)](https://gqty.dev) --- -Head over to [gqty.dev](https://gqty.dev), to explore features and documentation. +Head over to [gqty.dev](https://gqty.dev) to explore features and documentation. --- ## Get involved -Documentation, bug reports, pull requests, and all other contributions are welcome! See [`CONTRIBUTING.md`](CONTRIBUTING.md). +Documentation, bug reports, pull requests, and all other contributions are +welcome! See [`CONTRIBUTING.md`](CONTRIBUTING.md). Docs powered by [Vercel](https://vercel.com/?utm_source=gqty&utm_campaign=oss) diff --git a/bob-esbuild.config.ts b/bob-esbuild.config.ts index ccd37e88c..eb2a2ba2a 100644 --- a/bob-esbuild.config.ts +++ b/bob-esbuild.config.ts @@ -1,5 +1,5 @@ -import { sep } from 'path'; import { readFileSync } from 'fs'; +import { sep } from 'path'; const isCLIPackage = process.cwd().endsWith(sep + 'cli'); diff --git a/examples/ez-react-next/gqty.config.cjs b/examples/ez-react-next/gqty.config.cjs deleted file mode 100644 index 8ff3234f7..000000000 --- a/examples/ez-react-next/gqty.config.cjs +++ /dev/null @@ -1,13 +0,0 @@ -/** - * @type {import("@gqty/cli").GQtyConfig} - */ -const config = { - react: true, - scalarTypes: { DateTime: 'string' }, - introspection: { endpoint: './schema.gql', headers: {} }, - destination: './src/gqty/index.ts', - subscriptions: false, - javascriptOutput: false, -}; - -module.exports = config; diff --git a/examples/ez-react-next/next-env.d.ts b/examples/ez-react-next/next-env.d.ts deleted file mode 100644 index 9bc3dd46b..000000000 --- a/examples/ez-react-next/next-env.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/// -/// -/// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/examples/ez-react-next/package.json b/examples/ez-react-next/package.json deleted file mode 100644 index df7430864..000000000 --- a/examples/ez-react-next/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "example-ez-react-next", - "version": "0.0.1", - "private": true, - "scripts": { - "build": "next build", - "dev": "concurrently -r \"next dev\" \"wait-on -s 1 http://localhost:3000 && open-cli http://localhost:3000\"", - "generate": "gqty generate", - "start": "next start" - }, - "dependencies": { - "@gqty/logger": "workspace:^2.0.2", - "@gqty/react": "workspace:^2.1.1", - "@graphql-ez/nextjs": "^0.11.0", - "@graphql-ez/plugin-codegen": "^0.8.0", - "@graphql-ez/plugin-graphiql": "^0.12.0", - "@graphql-ez/plugin-schema": "^0.9.0", - "gqty": "workspace:^2.3.0", - "graphql": "^16.6.0", - "graphql-ez": "^0.16.0", - "next": "^12.3.4", - "react": "^17.0.2", - "react-dom": "^17.0.2" - }, - "devDependencies": { - "@gqty/cli": "workspace:^3.3.0", - "@types/node": "^18.15.5", - "@types/react": "^17.0.53", - "@types/react-dom": "^18.0.11", - "concurrently": "^7.6.0", - "esbuild": "^0.17.12", - "open-cli": "^7.2.0", - "typescript": "^4.9.5", - "wait-on": "^7.0.1" - } -} diff --git a/examples/ez-react-next/schema.gql b/examples/ez-react-next/schema.gql deleted file mode 100644 index 4bedda35d..000000000 --- a/examples/ez-react-next/schema.gql +++ /dev/null @@ -1,13 +0,0 @@ -schema { - query: Query -} - -type Query { - hello: String! - user: User! -} - -type User { - id: ID! - users: [User!]! -} diff --git a/examples/ez-react-next/src/ez.generated.ts b/examples/ez-react-next/src/ez.generated.ts deleted file mode 100644 index 225cb9346..000000000 --- a/examples/ez-react-next/src/ez.generated.ts +++ /dev/null @@ -1,183 +0,0 @@ -import type { GraphQLResolveInfo } from 'graphql'; -import type { EZContext } from 'graphql-ez'; -export type Maybe = T | null; -export type InputMaybe = Maybe; -export type Exact = { - [K in keyof T]: T[K]; -}; -export type MakeOptional = Omit & { - [SubKey in K]?: Maybe; -}; -export type MakeMaybe = Omit & { - [SubKey in K]: Maybe; -}; -export type ResolverFn = ( - parent: TParent, - args: TArgs, - context: TContext, - info: GraphQLResolveInfo -) => - | Promise> - | import('graphql-ez').DeepPartial; -/** All built-in and custom scalars, mapped to their actual values */ -export type Scalars = { - ID: string; - String: string; - Boolean: boolean; - Int: number; - Float: number; -}; - -export type Query = { - __typename?: 'Query'; - hello: Scalars['String']; - user: User; -}; - -export type User = { - __typename?: 'User'; - id: Scalars['ID']; - users: Array; -}; - -export type ResolverTypeWrapper = Promise | T; - -export type ResolverWithResolve = { - resolve: ResolverFn; -}; -export type Resolver = - | ResolverFn - | ResolverWithResolve; - -export type SubscriptionSubscribeFn = ( - parent: TParent, - args: TArgs, - context: TContext, - info: GraphQLResolveInfo -) => AsyncIterable | Promise>; - -export type SubscriptionResolveFn = ( - parent: TParent, - args: TArgs, - context: TContext, - info: GraphQLResolveInfo -) => TResult | Promise; - -export interface SubscriptionSubscriberObject< - TResult, - TKey extends string, - TParent, - TContext, - TArgs -> { - subscribe: SubscriptionSubscribeFn< - { [key in TKey]: TResult }, - TParent, - TContext, - TArgs - >; - resolve?: SubscriptionResolveFn< - TResult, - { [key in TKey]: TResult }, - TContext, - TArgs - >; -} - -export interface SubscriptionResolverObject { - subscribe: SubscriptionSubscribeFn; - resolve: SubscriptionResolveFn; -} - -export type SubscriptionObject< - TResult, - TKey extends string, - TParent, - TContext, - TArgs -> = - | SubscriptionSubscriberObject - | SubscriptionResolverObject; - -export type SubscriptionResolver< - TResult, - TKey extends string, - TParent = {}, - TContext = {}, - TArgs = {} -> = - | (( - ...args: any[] - ) => SubscriptionObject) - | SubscriptionObject; - -export type TypeResolveFn = ( - parent: TParent, - context: TContext, - info: GraphQLResolveInfo -) => Maybe | Promise>; - -export type IsTypeOfResolverFn = ( - obj: T, - context: TContext, - info: GraphQLResolveInfo -) => boolean | Promise; - -export type NextResolverFn = () => Promise; - -export type DirectiveResolverFn< - TResult = {}, - TParent = {}, - TContext = {}, - TArgs = {} -> = ( - next: NextResolverFn, - parent: TParent, - args: TArgs, - context: TContext, - info: GraphQLResolveInfo -) => TResult | Promise; - -/** Mapping between all available schema types and the resolvers types */ -export type ResolversTypes = { - Query: ResolverTypeWrapper<{}>; - String: ResolverTypeWrapper; - User: ResolverTypeWrapper; - ID: ResolverTypeWrapper; - Boolean: ResolverTypeWrapper; -}; - -/** Mapping between all available schema types and the resolvers parents */ -export type ResolversParentTypes = { - Query: {}; - String: Scalars['String']; - User: User; - ID: Scalars['ID']; - Boolean: Scalars['Boolean']; -}; - -export type QueryResolvers< - ContextType = EZContext, - ParentType extends ResolversParentTypes['Query'] = ResolversParentTypes['Query'] -> = { - hello?: Resolver; - user?: Resolver; -}; - -export type UserResolvers< - ContextType = EZContext, - ParentType extends ResolversParentTypes['User'] = ResolversParentTypes['User'] -> = { - id?: Resolver; - users?: Resolver, ParentType, ContextType>; - __isTypeOf?: IsTypeOfResolverFn; -}; - -export type Resolvers = { - Query?: QueryResolvers; - User?: UserResolvers; -}; - -declare module 'graphql-ez' { - interface EZResolvers extends Resolvers {} -} diff --git a/examples/ez-react-next/src/gqty/index.ts b/examples/ez-react-next/src/gqty/index.ts deleted file mode 100644 index 42d52d461..000000000 --- a/examples/ez-react-next/src/gqty/index.ts +++ /dev/null @@ -1,101 +0,0 @@ -/** - * GQTY: You can safely modify this file and Query Fetcher based on your needs - */ - -import { createLogger } from '@gqty/logger'; -import { createReactClient } from '@gqty/react'; -import { createClient, QueryFetcher } from 'gqty'; -import { - generatedSchema, - GeneratedSchema, - scalarsEnumsHash, - SchemaObjectTypes, - SchemaObjectTypesNames, -} from './schema.generated'; - -const endpoint = - typeof window !== 'undefined' - ? '/api/graphql' - : 'http://localhost:3000/api/graphql'; - -const queryFetcher: QueryFetcher = async function ( - query, - variables, - fetchOptions -) { - const response = await fetch(endpoint, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - query, - variables, - }), - ...fetchOptions, - }); - - const json = await response.json(); - - return json; -}; - -export const client = createClient< - GeneratedSchema, - SchemaObjectTypesNames, - SchemaObjectTypes ->({ - schema: generatedSchema, - scalarsEnumsHash, - queryFetcher, -}); - -if (typeof window !== 'undefined') { - const logger = createLogger(client); - - logger.start(); -} - -const { query, mutation, mutate, subscription, resolved, refetch, track } = - client; - -export { query, mutation, mutate, subscription, resolved, refetch, track }; - -const { - graphql, - useQuery, - usePaginatedQuery, - useTransactionQuery, - useLazyQuery, - useRefetch, - useMutation, - useMetaState, - prepareReactRender, - useHydrateCache, - prepareQuery, -} = createReactClient(client, { - defaults: { - // Set this flag as "true" if your usage involves React Suspense - // Keep in mind that you can overwrite it in a per-hook basis - suspense: false, - - // Set this flag based on your needs - staleWhileRevalidate: false, - }, -}); - -export { - graphql, - useQuery, - usePaginatedQuery, - useTransactionQuery, - useLazyQuery, - useRefetch, - useMutation, - useMetaState, - prepareReactRender, - useHydrateCache, - prepareQuery, -}; - -export * from './schema.generated'; diff --git a/examples/ez-react-next/src/gqty/schema.generated.ts b/examples/ez-react-next/src/gqty/schema.generated.ts deleted file mode 100644 index ce5a5af65..000000000 --- a/examples/ez-react-next/src/gqty/schema.generated.ts +++ /dev/null @@ -1,87 +0,0 @@ -/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY - */ - -export type Maybe = T | null; -export type InputMaybe = Maybe; -export type Exact = { - [K in keyof T]: T[K]; -}; -export type MakeOptional = Omit & { - [SubKey in K]?: Maybe; -}; -export type MakeMaybe = Omit & { - [SubKey in K]: Maybe; -}; -/** All built-in and custom scalars, mapped to their actual values */ -export interface Scalars { - ID: string; - String: string; - Boolean: boolean; - Int: number; - Float: number; -} - -export const scalarsEnumsHash: import('gqty').ScalarsEnumsHash = { - Boolean: true, - ID: true, - String: true, -}; -export const generatedSchema = { - User: { - __typename: { __type: 'String!' }, - id: { __type: 'ID!' }, - users: { __type: '[User!]!' }, - }, - mutation: {}, - query: { - __typename: { __type: 'String!' }, - hello: { __type: 'String!' }, - user: { __type: 'User!' }, - }, - subscription: {}, -} as const; - -export interface User { - __typename?: 'User'; - id: ScalarsEnums['ID']; - users: Array; -} - -export interface Mutation { - __typename?: 'Mutation'; -} - -export interface Query { - __typename?: 'Query'; - hello: ScalarsEnums['String']; - user: User; -} - -export interface Subscription { - __typename?: 'Subscription'; -} - -export interface SchemaObjectTypes { - Mutation: Mutation; - Query: Query; - Subscription: Subscription; - User: User; -} -export type SchemaObjectTypesNames = - | 'Mutation' - | 'Query' - | 'Subscription' - | 'User'; - -export interface GeneratedSchema { - query: Query; - mutation: Mutation; - subscription: Subscription; -} - -export type MakeNullable = { - [K in keyof T]: T[K] | undefined; -}; - -export interface ScalarsEnums extends MakeNullable {} diff --git a/examples/ez-react-next/src/pages/api/graphql.ts b/examples/ez-react-next/src/pages/api/graphql.ts deleted file mode 100644 index ff49bf950..000000000 --- a/examples/ez-react-next/src/pages/api/graphql.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { useGenerateGQty } from '@gqty/cli/envelop'; -import { CreateApp } from '@graphql-ez/nextjs'; -import { ezCodegen } from '@graphql-ez/plugin-codegen'; -import { ezGraphiQLIDE } from '@graphql-ez/plugin-graphiql'; -import { ezSchema, gql } from '@graphql-ez/plugin-schema'; - -const { buildApp } = CreateApp({ - ez: { - plugins: [ - ezGraphiQLIDE(), - ezCodegen({ - outputSchema: true, - }), - ezSchema({ - schema: { - typeDefs: gql` - type Query { - hello: String! - user: User! - } - type User { - id: ID! - users: [User!]! - } - `, - resolvers: { - Query: { - hello() { - return 'Hello World'; - }, - user() { - return { - id: '1', - users: [], - }; - }, - }, - }, - }, - }), - ], - }, - envelop: { - plugins: [useGenerateGQty()], - }, -}); - -export default buildApp().apiHandler; diff --git a/examples/ez-react-next/src/pages/index.tsx b/examples/ez-react-next/src/pages/index.tsx deleted file mode 100644 index a4beb954f..000000000 --- a/examples/ez-react-next/src/pages/index.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { useQuery, useRefetch } from '../gqty'; - -export default function Index() { - const refetch = useRefetch(); - const { hello, user } = useQuery(); - return ( -
-

{hello || '...'}

-

{user.id}

-
- {user.users.map((v) => ( -

{v.id}

- ))} -
- -
- ); -} diff --git a/examples/ez-react-next/tsconfig.json b/examples/ez-react-next/tsconfig.json deleted file mode 100644 index 96cc1ff8b..000000000 --- a/examples/ez-react-next/tsconfig.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - /* Projects */ - // "incremental": true, /* Enable incremental compilation */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - /* Language and Environment */ - "target": "es2020" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ - // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - /* Modules */ - "module": "commonjs" /* Specify what module code is generated. */, - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "resolveJsonModule": true, /* Enable importing .json files */ - // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ - // "outDir": "./", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - /* Type Checking */ - "strict": true /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ - // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ - // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */, - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "noEmit": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], - "exclude": ["node_modules"] -} diff --git a/examples/ez/.gitignore b/examples/ez/.gitignore deleted file mode 100644 index 4c9d7c35a..000000000 --- a/examples/ez/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -*.log -.DS_Store -node_modules -dist diff --git a/examples/ez/LICENSE.md b/examples/ez/LICENSE.md deleted file mode 100644 index 2a6b02f89..000000000 --- a/examples/ez/LICENSE.md +++ /dev/null @@ -1,24 +0,0 @@ -# The MIT License (MIT) - -Copyright © `2021` `GQty` - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the “Software”), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/examples/ez/README.md b/examples/ez/README.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/examples/ez/gqty.config.cjs b/examples/ez/gqty.config.cjs deleted file mode 100644 index 1f38c5d85..000000000 --- a/examples/ez/gqty.config.cjs +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @type {import("@gqty/cli").GQtyConfig} - */ -const config = { - enumsAsStrings: false, - react: false, - scalarTypes: { DateTime: 'string', ExampleScalar: 'string' }, - preImport: '', - introspection: { endpoint: './schema.gql' }, - destination: './src/generated/gqty.ts', - subscriptions: false, -}; - -module.exports = config; diff --git a/examples/ez/jest.config.js b/examples/ez/jest.config.js deleted file mode 100644 index f2caf5bdd..000000000 --- a/examples/ez/jest.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = require('test-utils/jest.config.js').getConfig({ - testTimeout: 20000, -}); diff --git a/examples/ez/listen.ts b/examples/ez/listen.ts deleted file mode 100644 index 27ab855d6..000000000 --- a/examples/ez/listen.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { app } from './src/index'; - -app.listen(3000, (err) => { - if (err) { - console.error(err); - process.exit(1); - } - console.log('Listening on http://localhost:3000'); -}); diff --git a/examples/ez/package.json b/examples/ez/package.json deleted file mode 100644 index a764c19a4..000000000 --- a/examples/ez/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "example-ez", - "version": "0.1.0", - "private": true, - "license": "MIT", - "author": "PabloSzx ", - "scripts": { - "dev": "bob-tsm --watch src listen.ts --cjs listen.ts", - "generate": "gqty generate", - "listen": "bob-tsm --cjs listen.ts", - "test": "jest" - }, - "dependencies": { - "@gqty/cli": "workspace:^3.3.0", - "@graphql-ez/fastify": "^0.12.0", - "@graphql-ez/fastify-testing": "^0.4.0", - "@graphql-ez/plugin-altair": "^0.11.0", - "@graphql-ez/plugin-codegen": "^0.8.0", - "@graphql-ez/plugin-schema": "^0.9.0", - "@graphql-typed-document-node/core": "^3.2.0", - "fastify": "^4.11.0", - "gqty": "workspace:^2.3.0", - "graphql": "^16.6.0", - "graphql-ez": "^0.16.0", - "lodash": "^4.17.21", - "randomstring": "^1.2.3", - "test-utils": "workspace:^0.1.0" - }, - "devDependencies": { - "@types/lodash": "^4.14.191", - "@types/node": "^18.15.5", - "@types/randomstring": "^1.1.8", - "bob-tsm": "^1.1.2", - "esbuild": "^0.17.12", - "jest": "^29.5.0", - "typescript": "^4.9.5" - } -} diff --git a/examples/ez/schema.gql b/examples/ez/schema.gql deleted file mode 100644 index 73e08b84c..000000000 --- a/examples/ez/schema.gql +++ /dev/null @@ -1,75 +0,0 @@ -schema { - query: Query - mutation: Mutation -} - -interface NamedEntity { - name: String! -} - -scalar ExampleScalar - -enum GreetingsEnum { - Hello - Hi - Hey -} - -input GreetingsInput { - language: String! - value: String - scal: ExampleScalar -} - -type Query { - simpleString: String! - stringWithArgs(hello: String!): String! - stringNullableWithArgs(hello: String!, helloTwo: String): String - stringNullableWithArgsArray(hello: [String]!): String - object: Human - objectArray: [Human] - objectWithArgs(who: String!): Human! - arrayString: [String!]! - arrayObjectArgs(limit: Int!): [Human!]! - greetings: GreetingsEnum! - giveGreetingsInput(input: GreetingsInput!): String! - number: Int! - union: [TestUnion!]! -} - -type Mutation { - increment(n: Int!): Int! -} - -type Human implements NamedEntity { - name: String! - father: Human! - fieldWithArgs(id: Int!): Int! - sons: [Human!] - union: [TestUnion!]! - args(a: String): Int -} - -type Dog implements NamedEntity { - name: String! - owner: Human! -} - -type A { - a: String! - common(a: String): Int - z: String -} - -type B { - b: Int! - common(b: Int): String - z: String -} - -type C { - c: GreetingsEnum! - z: String -} - -union TestUnion = A | B | C diff --git a/examples/ez/src/ez.generated.ts b/examples/ez/src/ez.generated.ts deleted file mode 100644 index eef325fc3..000000000 --- a/examples/ez/src/ez.generated.ts +++ /dev/null @@ -1,706 +0,0 @@ -import type { - GraphQLResolveInfo, - GraphQLScalarType, - GraphQLScalarTypeConfig, -} from 'graphql'; -import type { EZContext } from 'graphql-ez'; -import type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core'; -export type Maybe = T | null; -export type InputMaybe = Maybe; -export type Exact = { - [K in keyof T]: T[K]; -}; -export type MakeOptional = Omit & { - [SubKey in K]?: Maybe; -}; -export type MakeMaybe = Omit & { - [SubKey in K]: Maybe; -}; -export type ResolverFn = ( - parent: TParent, - args: TArgs, - context: TContext, - info: GraphQLResolveInfo -) => - | Promise> - | import('graphql-ez').DeepPartial; -export type Omit = Pick>; -export type RequireFields = Omit & { - [P in K]-?: NonNullable; -}; -/** All built-in and custom scalars, mapped to their actual values */ -export type Scalars = { - ID: string; - String: string; - Boolean: boolean; - Int: number; - Float: number; - ExampleScalar: any; -}; - -export type NamedEntity = { - name: Scalars['String']; -}; - -export enum GreetingsEnum { - Hello = 'Hello', - Hi = 'Hi', - Hey = 'Hey', -} - -export type GreetingsInput = { - language: Scalars['String']; - value?: InputMaybe; - scal?: InputMaybe; -}; - -export type Query = { - __typename?: 'Query'; - simpleString: Scalars['String']; - stringWithArgs: Scalars['String']; - stringNullableWithArgs?: Maybe; - stringNullableWithArgsArray?: Maybe; - object?: Maybe; - objectArray?: Maybe>>; - objectWithArgs: Human; - arrayString: Array; - arrayObjectArgs: Array; - greetings: GreetingsEnum; - giveGreetingsInput: Scalars['String']; - number: Scalars['Int']; - union: Array; -}; - -export type QueryStringWithArgsArgs = { - hello: Scalars['String']; -}; - -export type QueryStringNullableWithArgsArgs = { - hello: Scalars['String']; - helloTwo?: InputMaybe; -}; - -export type QueryStringNullableWithArgsArrayArgs = { - hello: Array>; -}; - -export type QueryObjectWithArgsArgs = { - who: Scalars['String']; -}; - -export type QueryArrayObjectArgsArgs = { - limit: Scalars['Int']; -}; - -export type QueryGiveGreetingsInputArgs = { - input: GreetingsInput; -}; - -export type Mutation = { - __typename?: 'Mutation'; - increment: Scalars['Int']; -}; - -export type MutationIncrementArgs = { - n: Scalars['Int']; -}; - -export type Human = NamedEntity & { - __typename?: 'Human'; - name: Scalars['String']; - father: Human; - fieldWithArgs: Scalars['Int']; - sons?: Maybe>; - union: Array; - args?: Maybe; -}; - -export type HumanFieldWithArgsArgs = { - id: Scalars['Int']; -}; - -export type HumanArgsArgs = { - a?: InputMaybe; -}; - -export type Dog = NamedEntity & { - __typename?: 'Dog'; - name: Scalars['String']; - owner: Human; -}; - -export type A = { - __typename?: 'A'; - a: Scalars['String']; - common?: Maybe; - z?: Maybe; -}; - -export type ACommonArgs = { - a?: InputMaybe; -}; - -export type B = { - __typename?: 'B'; - b: Scalars['Int']; - common?: Maybe; - z?: Maybe; -}; - -export type BCommonArgs = { - b?: InputMaybe; -}; - -export type C = { - __typename?: 'C'; - c: GreetingsEnum; - z?: Maybe; -}; - -export type TestUnion = A | B | C; - -export type ResolverTypeWrapper = Promise | T; - -export type ResolverWithResolve = { - resolve: ResolverFn; -}; -export type Resolver = - | ResolverFn - | ResolverWithResolve; - -export type SubscriptionSubscribeFn = ( - parent: TParent, - args: TArgs, - context: TContext, - info: GraphQLResolveInfo -) => AsyncIterable | Promise>; - -export type SubscriptionResolveFn = ( - parent: TParent, - args: TArgs, - context: TContext, - info: GraphQLResolveInfo -) => TResult | Promise; - -export interface SubscriptionSubscriberObject< - TResult, - TKey extends string, - TParent, - TContext, - TArgs -> { - subscribe: SubscriptionSubscribeFn< - { [key in TKey]: TResult }, - TParent, - TContext, - TArgs - >; - resolve?: SubscriptionResolveFn< - TResult, - { [key in TKey]: TResult }, - TContext, - TArgs - >; -} - -export interface SubscriptionResolverObject { - subscribe: SubscriptionSubscribeFn; - resolve: SubscriptionResolveFn; -} - -export type SubscriptionObject< - TResult, - TKey extends string, - TParent, - TContext, - TArgs -> = - | SubscriptionSubscriberObject - | SubscriptionResolverObject; - -export type SubscriptionResolver< - TResult, - TKey extends string, - TParent = {}, - TContext = {}, - TArgs = {} -> = - | (( - ...args: any[] - ) => SubscriptionObject) - | SubscriptionObject; - -export type TypeResolveFn = ( - parent: TParent, - context: TContext, - info: GraphQLResolveInfo -) => Maybe | Promise>; - -export type IsTypeOfResolverFn = ( - obj: T, - context: TContext, - info: GraphQLResolveInfo -) => boolean | Promise; - -export type NextResolverFn = () => Promise; - -export type DirectiveResolverFn< - TResult = {}, - TParent = {}, - TContext = {}, - TArgs = {} -> = ( - next: NextResolverFn, - parent: TParent, - args: TArgs, - context: TContext, - info: GraphQLResolveInfo -) => TResult | Promise; - -/** Mapping between all available schema types and the resolvers types */ -export type ResolversTypes = { - NamedEntity: ResolversTypes['Human'] | ResolversTypes['Dog']; - String: ResolverTypeWrapper; - ExampleScalar: ResolverTypeWrapper; - GreetingsEnum: GreetingsEnum; - GreetingsInput: GreetingsInput; - Query: ResolverTypeWrapper<{}>; - Int: ResolverTypeWrapper; - Mutation: ResolverTypeWrapper<{}>; - Human: ResolverTypeWrapper< - Omit & { union: Array } - >; - Dog: ResolverTypeWrapper; - A: ResolverTypeWrapper; - B: ResolverTypeWrapper; - C: ResolverTypeWrapper; - TestUnion: ResolversTypes['A'] | ResolversTypes['B'] | ResolversTypes['C']; - Boolean: ResolverTypeWrapper; -}; - -/** Mapping between all available schema types and the resolvers parents */ -export type ResolversParentTypes = { - NamedEntity: ResolversParentTypes['Human'] | ResolversParentTypes['Dog']; - String: Scalars['String']; - ExampleScalar: Scalars['ExampleScalar']; - GreetingsInput: GreetingsInput; - Query: {}; - Int: Scalars['Int']; - Mutation: {}; - Human: Omit & { - union: Array; - }; - Dog: Dog; - A: A; - B: B; - C: C; - TestUnion: - | ResolversParentTypes['A'] - | ResolversParentTypes['B'] - | ResolversParentTypes['C']; - Boolean: Scalars['Boolean']; -}; - -export type NamedEntityResolvers< - ContextType = EZContext, - ParentType extends ResolversParentTypes['NamedEntity'] = ResolversParentTypes['NamedEntity'] -> = { - __resolveType: TypeResolveFn<'Human' | 'Dog', ParentType, ContextType>; - name?: Resolver; -}; - -export interface ExampleScalarScalarConfig - extends GraphQLScalarTypeConfig { - name: 'ExampleScalar'; -} - -export type QueryResolvers< - ContextType = EZContext, - ParentType extends ResolversParentTypes['Query'] = ResolversParentTypes['Query'] -> = { - simpleString?: Resolver; - stringWithArgs?: Resolver< - ResolversTypes['String'], - ParentType, - ContextType, - RequireFields - >; - stringNullableWithArgs?: Resolver< - Maybe, - ParentType, - ContextType, - RequireFields - >; - stringNullableWithArgsArray?: Resolver< - Maybe, - ParentType, - ContextType, - RequireFields - >; - object?: Resolver, ParentType, ContextType>; - objectArray?: Resolver< - Maybe>>, - ParentType, - ContextType - >; - objectWithArgs?: Resolver< - ResolversTypes['Human'], - ParentType, - ContextType, - RequireFields - >; - arrayString?: Resolver< - Array, - ParentType, - ContextType - >; - arrayObjectArgs?: Resolver< - Array, - ParentType, - ContextType, - RequireFields - >; - greetings?: Resolver< - ResolversTypes['GreetingsEnum'], - ParentType, - ContextType - >; - giveGreetingsInput?: Resolver< - ResolversTypes['String'], - ParentType, - ContextType, - RequireFields - >; - number?: Resolver; - union?: Resolver, ParentType, ContextType>; -}; - -export type MutationResolvers< - ContextType = EZContext, - ParentType extends ResolversParentTypes['Mutation'] = ResolversParentTypes['Mutation'] -> = { - increment?: Resolver< - ResolversTypes['Int'], - ParentType, - ContextType, - RequireFields - >; -}; - -export type HumanResolvers< - ContextType = EZContext, - ParentType extends ResolversParentTypes['Human'] = ResolversParentTypes['Human'] -> = { - name?: Resolver; - father?: Resolver; - fieldWithArgs?: Resolver< - ResolversTypes['Int'], - ParentType, - ContextType, - RequireFields - >; - sons?: Resolver< - Maybe>, - ParentType, - ContextType - >; - union?: Resolver, ParentType, ContextType>; - args?: Resolver< - Maybe, - ParentType, - ContextType, - Partial - >; - __isTypeOf?: IsTypeOfResolverFn; -}; - -export type DogResolvers< - ContextType = EZContext, - ParentType extends ResolversParentTypes['Dog'] = ResolversParentTypes['Dog'] -> = { - name?: Resolver; - owner?: Resolver; - __isTypeOf?: IsTypeOfResolverFn; -}; - -export type AResolvers< - ContextType = EZContext, - ParentType extends ResolversParentTypes['A'] = ResolversParentTypes['A'] -> = { - a?: Resolver; - common?: Resolver< - Maybe, - ParentType, - ContextType, - Partial - >; - z?: Resolver, ParentType, ContextType>; - __isTypeOf?: IsTypeOfResolverFn; -}; - -export type BResolvers< - ContextType = EZContext, - ParentType extends ResolversParentTypes['B'] = ResolversParentTypes['B'] -> = { - b?: Resolver; - common?: Resolver< - Maybe, - ParentType, - ContextType, - Partial - >; - z?: Resolver, ParentType, ContextType>; - __isTypeOf?: IsTypeOfResolverFn; -}; - -export type CResolvers< - ContextType = EZContext, - ParentType extends ResolversParentTypes['C'] = ResolversParentTypes['C'] -> = { - c?: Resolver; - z?: Resolver, ParentType, ContextType>; - __isTypeOf?: IsTypeOfResolverFn; -}; - -export type TestUnionResolvers< - ContextType = EZContext, - ParentType extends ResolversParentTypes['TestUnion'] = ResolversParentTypes['TestUnion'] -> = { - __resolveType: TypeResolveFn<'A' | 'B' | 'C', ParentType, ContextType>; -}; - -export type Resolvers = { - NamedEntity?: NamedEntityResolvers; - ExampleScalar?: GraphQLScalarType; - Query?: QueryResolvers; - Mutation?: MutationResolvers; - Human?: HumanResolvers; - Dog?: DogResolvers; - A?: AResolvers; - B?: BResolvers; - C?: CResolvers; - TestUnion?: TestUnionResolvers; -}; - -export type SimpleStringQueryVariables = Exact<{ [key: string]: never }>; - -export type SimpleStringQuery = { - __typename?: 'Query'; - simpleString: string; - union: Array< - | { __typename: 'A'; a: string } - | { __typename: 'B'; b: number } - | { __typename: 'C'; c: GreetingsEnum } - >; -}; - -export type ArrayObjectArgsQueryVariables = Exact<{ [key: string]: never }>; - -export type ArrayObjectArgsQuery = { - __typename?: 'Query'; - arrayObjectArgs: Array<{ - __typename?: 'Human'; - name: string; - father: { - __typename?: 'Human'; - name: string; - father: { __typename?: 'Human'; name: string }; - }; - }>; -}; - -export type MultipleArgsQueryVariables = Exact<{ [key: string]: never }>; - -export type MultipleArgsQuery = { - __typename?: 'Query'; - a1: { __typename?: 'Human'; zxc: string; abc: string }; - a2: { __typename?: 'Human'; name: string }; -}; - -export const SimpleStringDocument = { - kind: 'Document', - definitions: [ - { - kind: 'OperationDefinition', - operation: 'query', - name: { kind: 'Name', value: 'simpleString' }, - selectionSet: { - kind: 'SelectionSet', - selections: [ - { kind: 'Field', name: { kind: 'Name', value: 'simpleString' } }, - { - kind: 'Field', - name: { kind: 'Name', value: 'union' }, - selectionSet: { - kind: 'SelectionSet', - selections: [ - { kind: 'Field', name: { kind: 'Name', value: '__typename' } }, - { - kind: 'InlineFragment', - typeCondition: { - kind: 'NamedType', - name: { kind: 'Name', value: 'A' }, - }, - selectionSet: { - kind: 'SelectionSet', - selections: [ - { kind: 'Field', name: { kind: 'Name', value: 'a' } }, - ], - }, - }, - { - kind: 'InlineFragment', - typeCondition: { - kind: 'NamedType', - name: { kind: 'Name', value: 'B' }, - }, - selectionSet: { - kind: 'SelectionSet', - selections: [ - { kind: 'Field', name: { kind: 'Name', value: 'b' } }, - ], - }, - }, - { - kind: 'InlineFragment', - typeCondition: { - kind: 'NamedType', - name: { kind: 'Name', value: 'C' }, - }, - selectionSet: { - kind: 'SelectionSet', - selections: [ - { kind: 'Field', name: { kind: 'Name', value: 'c' } }, - ], - }, - }, - ], - }, - }, - ], - }, - }, - ], -} as unknown as DocumentNode; -export const ArrayObjectArgsDocument = { - kind: 'Document', - definitions: [ - { - kind: 'OperationDefinition', - operation: 'query', - name: { kind: 'Name', value: 'arrayObjectArgs' }, - selectionSet: { - kind: 'SelectionSet', - selections: [ - { - kind: 'Field', - name: { kind: 'Name', value: 'arrayObjectArgs' }, - arguments: [ - { - kind: 'Argument', - name: { kind: 'Name', value: 'limit' }, - value: { kind: 'IntValue', value: '2' }, - }, - ], - selectionSet: { - kind: 'SelectionSet', - selections: [ - { kind: 'Field', name: { kind: 'Name', value: 'name' } }, - { - kind: 'Field', - name: { kind: 'Name', value: 'father' }, - selectionSet: { - kind: 'SelectionSet', - selections: [ - { kind: 'Field', name: { kind: 'Name', value: 'name' } }, - { - kind: 'Field', - name: { kind: 'Name', value: 'father' }, - selectionSet: { - kind: 'SelectionSet', - selections: [ - { - kind: 'Field', - name: { kind: 'Name', value: 'name' }, - }, - ], - }, - }, - ], - }, - }, - ], - }, - }, - ], - }, - }, - ], -} as unknown as DocumentNode< - ArrayObjectArgsQuery, - ArrayObjectArgsQueryVariables ->; -export const MultipleArgsDocument = { - kind: 'Document', - definitions: [ - { - kind: 'OperationDefinition', - operation: 'query', - name: { kind: 'Name', value: 'multipleArgs' }, - selectionSet: { - kind: 'SelectionSet', - selections: [ - { - kind: 'Field', - alias: { kind: 'Name', value: 'a1' }, - name: { kind: 'Name', value: 'objectWithArgs' }, - arguments: [ - { - kind: 'Argument', - name: { kind: 'Name', value: 'who' }, - value: { kind: 'StringValue', value: 'hello', block: false }, - }, - ], - selectionSet: { - kind: 'SelectionSet', - selections: [ - { - kind: 'Field', - alias: { kind: 'Name', value: 'zxc' }, - name: { kind: 'Name', value: 'name' }, - }, - { - kind: 'Field', - alias: { kind: 'Name', value: 'abc' }, - name: { kind: 'Name', value: 'name' }, - }, - ], - }, - }, - { - kind: 'Field', - alias: { kind: 'Name', value: 'a2' }, - name: { kind: 'Name', value: 'objectWithArgs' }, - arguments: [ - { - kind: 'Argument', - name: { kind: 'Name', value: 'who' }, - value: { kind: 'StringValue', value: 'hello2', block: false }, - }, - ], - selectionSet: { - kind: 'SelectionSet', - selections: [ - { kind: 'Field', name: { kind: 'Name', value: 'name' } }, - ], - }, - }, - ], - }, - }, - ], -} as unknown as DocumentNode; - -declare module 'graphql-ez' { - interface EZResolvers extends Resolvers {} -} diff --git a/examples/ez/src/generated/gqty.ts b/examples/ez/src/generated/gqty.ts deleted file mode 100644 index ac036b71c..000000000 --- a/examples/ez/src/generated/gqty.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { createClient, QueryFetcher } from 'gqty'; - -import { ezApp } from '..'; -import { - GeneratedSchema, - generatedSchema, - scalarsEnumsHash, - SchemaObjectTypes, - SchemaObjectTypesNames, -} from './schema.generated'; - -import { CreateTestClient } from '@graphql-ez/fastify-testing'; - -const testClientPromise = CreateTestClient(ezApp); -const queryFetcher: QueryFetcher = async function (query, variables) { - const testClient = await testClientPromise; - - return testClient.query(query, { - variables, - }); -}; - -export const client = createClient< - GeneratedSchema, - SchemaObjectTypesNames, - SchemaObjectTypes ->({ - schema: generatedSchema, - scalarsEnumsHash, - queryFetcher, - normalization: { - identifier(obj) { - switch (obj.__typename) { - case 'A': { - return obj.a; - } - default: { - return; - } - } - }, - keyFields: {}, - }, -}); - -const { query, mutation, mutate, subscription, resolved, refetch } = client; - -export { query, mutation, mutate, subscription, resolved, refetch }; - -export * from './schema.generated'; diff --git a/examples/ez/src/generated/schema.generated.ts b/examples/ez/src/generated/schema.generated.ts deleted file mode 100644 index 769d2f8fc..000000000 --- a/examples/ez/src/generated/schema.generated.ts +++ /dev/null @@ -1,258 +0,0 @@ -/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY - */ - -import { SchemaUnionsKey } from 'gqty'; - -export type Maybe = T | null; -export type InputMaybe = Maybe; -export type Exact = { - [K in keyof T]: T[K]; -}; -export type MakeOptional = Omit & { - [SubKey in K]?: Maybe; -}; -export type MakeMaybe = Omit & { - [SubKey in K]: Maybe; -}; -/** All built-in and custom scalars, mapped to their actual values */ -export interface Scalars { - ID: string; - String: string; - Boolean: boolean; - Int: number; - Float: number; - ExampleScalar: string; -} - -export enum GreetingsEnum { - Hello = 'Hello', - Hey = 'Hey', - Hi = 'Hi', -} - -export interface GreetingsInput { - language: Scalars['String']; - scal?: InputMaybe; - value?: InputMaybe; -} - -export const scalarsEnumsHash: import('gqty').ScalarsEnumsHash = { - Boolean: true, - ExampleScalar: true, - GreetingsEnum: true, - Int: true, - String: true, -}; -export const generatedSchema = { - A: { - __typename: { __type: 'String!' }, - a: { __type: 'String!' }, - common: { __type: 'Int', __args: { a: 'String' } }, - z: { __type: 'String' }, - }, - B: { - __typename: { __type: 'String!' }, - b: { __type: 'Int!' }, - common: { __type: 'String', __args: { b: 'Int' } }, - z: { __type: 'String' }, - }, - C: { - __typename: { __type: 'String!' }, - c: { __type: 'GreetingsEnum!' }, - z: { __type: 'String' }, - }, - Dog: { - __typename: { __type: 'String!' }, - name: { __type: 'String!' }, - owner: { __type: 'Human!' }, - }, - GreetingsInput: { - language: { __type: 'String!' }, - scal: { __type: 'ExampleScalar' }, - value: { __type: 'String' }, - }, - Human: { - __typename: { __type: 'String!' }, - args: { __type: 'Int', __args: { a: 'String' } }, - father: { __type: 'Human!' }, - fieldWithArgs: { __type: 'Int!', __args: { id: 'Int!' } }, - name: { __type: 'String!' }, - sons: { __type: '[Human!]' }, - union: { __type: '[TestUnion!]!' }, - }, - NamedEntity: { - __typename: { __type: 'String!' }, - name: { __type: 'String!' }, - $on: { __type: '$NamedEntity!' }, - }, - TestUnion: { - __typename: { __type: 'String!' }, - $on: { __type: '$TestUnion!' }, - }, - mutation: { - __typename: { __type: 'String!' }, - increment: { __type: 'Int!', __args: { n: 'Int!' } }, - }, - query: { - __typename: { __type: 'String!' }, - arrayObjectArgs: { __type: '[Human!]!', __args: { limit: 'Int!' } }, - arrayString: { __type: '[String!]!' }, - giveGreetingsInput: { - __type: 'String!', - __args: { input: 'GreetingsInput!' }, - }, - greetings: { __type: 'GreetingsEnum!' }, - number: { __type: 'Int!' }, - object: { __type: 'Human' }, - objectArray: { __type: '[Human]' }, - objectWithArgs: { __type: 'Human!', __args: { who: 'String!' } }, - simpleString: { __type: 'String!' }, - stringNullableWithArgs: { - __type: 'String', - __args: { hello: 'String!', helloTwo: 'String' }, - }, - stringNullableWithArgsArray: { - __type: 'String', - __args: { hello: '[String]!' }, - }, - stringWithArgs: { __type: 'String!', __args: { hello: 'String!' } }, - union: { __type: '[TestUnion!]!' }, - }, - subscription: {}, - [SchemaUnionsKey]: { - NamedEntity: ['Dog', 'Human'], - TestUnion: ['A', 'B', 'C'], - }, -} as const; - -export interface A { - __typename?: 'A'; - a: ScalarsEnums['String']; - common: (args?: { - a?: Maybe; - }) => Maybe; - z?: Maybe; -} - -export interface B { - __typename?: 'B'; - b: ScalarsEnums['Int']; - common: (args?: { - b?: Maybe; - }) => Maybe; - z?: Maybe; -} - -export interface C { - __typename?: 'C'; - c: ScalarsEnums['GreetingsEnum']; - z?: Maybe; -} - -export interface Dog { - __typename?: 'Dog'; - name: ScalarsEnums['String']; - owner: Human; -} - -export interface Human { - __typename?: 'Human'; - args: (args?: { a?: Maybe }) => Maybe; - father: Human; - fieldWithArgs: (args: { id: Scalars['Int'] }) => ScalarsEnums['Int']; - name: ScalarsEnums['String']; - sons?: Maybe>; - union: Array; -} - -export interface NamedEntity { - __typename?: 'Dog' | 'Human'; - name: ScalarsEnums['String']; - $on: $NamedEntity; -} - -export interface TestUnion { - __typename?: 'A' | 'B' | 'C'; - $on: $TestUnion; -} - -export interface Mutation { - __typename?: 'Mutation'; - increment: (args: { n: Scalars['Int'] }) => ScalarsEnums['Int']; -} - -export interface Query { - __typename?: 'Query'; - arrayObjectArgs: (args: { limit: Scalars['Int'] }) => Array; - arrayString: Array; - giveGreetingsInput: (args: { - input: GreetingsInput; - }) => ScalarsEnums['String']; - greetings: ScalarsEnums['GreetingsEnum']; - number: ScalarsEnums['Int']; - object?: Maybe; - objectArray?: Maybe>>; - objectWithArgs: (args: { who: Scalars['String'] }) => Human; - simpleString: ScalarsEnums['String']; - stringNullableWithArgs: (args: { - hello: Scalars['String']; - helloTwo?: Maybe; - }) => Maybe; - stringNullableWithArgsArray: (args: { - hello: Array>; - }) => Maybe; - stringWithArgs: (args: { - hello: Scalars['String']; - }) => ScalarsEnums['String']; - union: Array; -} - -export interface Subscription { - __typename?: 'Subscription'; -} - -export interface SchemaObjectTypes { - A: A; - B: B; - C: C; - Dog: Dog; - Human: Human; - Mutation: Mutation; - Query: Query; - Subscription: Subscription; -} -export type SchemaObjectTypesNames = - | 'A' - | 'B' - | 'C' - | 'Dog' - | 'Human' - | 'Mutation' - | 'Query' - | 'Subscription'; - -export interface $NamedEntity { - Dog?: Dog; - Human?: Human; -} - -export interface $TestUnion { - A?: A; - B?: B; - C?: C; -} - -export interface GeneratedSchema { - query: Query; - mutation: Mutation; - subscription: Subscription; -} - -export type MakeNullable = { - [K in keyof T]: T[K] | undefined; -}; - -export interface ScalarsEnums extends MakeNullable { - GreetingsEnum: GreetingsEnum | undefined; -} diff --git a/examples/ez/src/graphql/operations.gql b/examples/ez/src/graphql/operations.gql deleted file mode 100644 index 06d4b7635..000000000 --- a/examples/ez/src/graphql/operations.gql +++ /dev/null @@ -1,37 +0,0 @@ -query simpleString { - simpleString - union { - __typename - ... on A { - a - } - ... on B { - b - } - ... on C { - c - } - } -} - -query arrayObjectArgs { - arrayObjectArgs(limit: 2) { - name - father { - name - father { - name - } - } - } -} - -query multipleArgs { - a1: objectWithArgs(who: "hello") { - zxc: name - abc: name - } - a2: objectWithArgs(who: "hello2") { - name - } -} diff --git a/examples/ez/src/index.ts b/examples/ez/src/index.ts deleted file mode 100644 index b034a5afd..000000000 --- a/examples/ez/src/index.ts +++ /dev/null @@ -1,187 +0,0 @@ -import { useGenerateGQty } from '@gqty/cli/envelop'; -import { CreateApp } from '@graphql-ez/fastify'; -import { ezAltairIDE } from '@graphql-ez/plugin-altair/static'; -import { ezCodegen } from '@graphql-ez/plugin-codegen'; -import { ezSchema } from '@graphql-ez/plugin-schema'; -import Fastify, { LogLevel } from 'fastify'; -import { random, range } from 'lodash'; -import { generate } from 'randomstring'; -import { gql } from 'test-utils'; -import { GreetingsEnum, Human, TestUnion } from './ez.generated'; - -export const app = Fastify({ - logger: { - level: 'warn' as LogLevel, - }, -}); - -const getUnion = (): TestUnion[] => [ - { - a: 'asd', - }, - { - b: 123, - }, - { - c: GreetingsEnum.Hey, - }, -]; - -export const newHuman = ({ name }: { name?: string } = {}): Partial => { - return { - name: name || generate(), - union: getUnion(), - }; -}; - -export const ezApp = CreateApp({ - ez: { - plugins: [ - ezCodegen({ - outputSchema: true, - config: { - documents: 'src/graphql/operations.gql', - }, - enableCodegen: true, - }), - ezSchema(), - ezAltairIDE(), - ], - }, - envelop: { - plugins: [useGenerateGQty()], - }, - prepare({ registerTypeDefs, registerResolvers }) { - let inc = 0; - registerTypeDefs(gql` - interface NamedEntity { - name: String! - } - scalar ExampleScalar - - enum GreetingsEnum { - Hello - Hi - Hey - } - input GreetingsInput { - language: String! - value: String - scal: ExampleScalar - } - type Query { - simpleString: String! - stringWithArgs(hello: String!): String! - stringNullableWithArgs(hello: String!, helloTwo: String): String - stringNullableWithArgsArray(hello: [String]!): String - object: Human - objectArray: [Human] - objectWithArgs(who: String!): Human! - arrayString: [String!]! - arrayObjectArgs(limit: Int!): [Human!]! - greetings: GreetingsEnum! - giveGreetingsInput(input: GreetingsInput!): String! - number: Int! - union: [TestUnion!]! - } - type Mutation { - increment(n: Int!): Int! - } - type Human implements NamedEntity { - name: String! - father: Human! - fieldWithArgs(id: Int!): Int! - sons: [Human!] - union: [TestUnion!]! - args(a: String): Int - } - type Dog implements NamedEntity { - name: String! - owner: Human! - } - type A { - a: String! - common(a: String): Int - z: String - } - type B { - b: Int! - common(b: Int): String - z: String - } - type C { - c: GreetingsEnum! - z: String - } - union TestUnion = A | B | C - `); - registerResolvers({ - Query: { - simpleString() { - return generate(); - }, - stringWithArgs(_root, { hello }) { - return hello; - }, - object() { - return newHuman(); - }, - objectArray() { - return range(random(2, 3)).map(() => newHuman()); - }, - objectWithArgs(_root, { who }) { - return newHuman({ name: who }); - }, - arrayString() { - return range(random(1, 2)).map(() => generate()); - }, - arrayObjectArgs(_root, { limit }) { - return range(limit).map(() => newHuman()); - }, - giveGreetingsInput(_root, { input }) { - return input.language; - }, - greetings() { - return GreetingsEnum.Hello; - }, - stringNullableWithArgs(_root, { hello, helloTwo }) { - return hello || helloTwo; - }, - stringNullableWithArgsArray(_root, { hello }) { - return hello[0]; - }, - number() { - return inc; - }, - union() { - return getUnion(); - }, - }, - Mutation: { - increment(_root, { n }) { - return (inc += n); - }, - }, - Human: { - father() { - return newHuman(); - }, - fieldWithArgs(_root, { id }) { - return id; - }, - sons() { - return range(random(2, 3)).map(() => newHuman()); - }, - }, - TestUnion: { - __resolveType(obj) { - if ('a' in obj) return 'A'; - if ('b' in obj) return 'B'; - return 'C'; - }, - }, - }); - }, -}); - -app.register(ezApp.buildApp().fastifyPlugin); diff --git a/examples/ez/test/example.test.ts b/examples/ez/test/example.test.ts deleted file mode 100644 index fd34cbd3f..000000000 --- a/examples/ez/test/example.test.ts +++ /dev/null @@ -1,340 +0,0 @@ -import { waitForExpect } from 'test-utils'; - -import { selectFields } from 'gqty'; - -import { - client as generatedClient, - GreetingsEnum, - mutation, - query, - resolved, -} from '../src/generated/gqty'; -import { - ArrayObjectArgsDocument, - MultipleArgsDocument, - SimpleStringDocument, -} from '../src/ez.generated'; - -import { CreateTestClient, GlobalTeardown } from '@graphql-ez/fastify-testing'; -import { ezApp } from '../src'; - -const testClientPromise = CreateTestClient(ezApp); - -afterAll(GlobalTeardown); - -test('works', async () => { - const testClient = await testClientPromise; - - await testClient.query(SimpleStringDocument).then((response) => { - expect(typeof response.data?.simpleString).toBe('string'); - }); - - await testClient.query(ArrayObjectArgsDocument).then((resp) => { - expect(resp.errors).toBe(undefined); - }); -}); - -test('multiple args', async () => { - const testClient = await testClientPromise; - - const response = await testClient.query(MultipleArgsDocument); - - expect(response).toEqual({ - data: { - a1: { - zxc: 'hello', - abc: 'hello', - }, - a2: { - name: 'hello2', - }, - }, - }); -}); - -describe('gqty integration tests', () => { - test('generatedClient', async () => { - const anon = generatedClient.query.objectWithArgs({ - who: 'anon', - }); - - const { name, fatherName } = await resolved(() => { - return { - name: anon.name, - fatherName: anon.father.father.name, - }; - }); - - expect(typeof name).toBe('string'); - - expect(typeof fatherName).toBe('string'); - - expect(typeof anon.name).toBe('string'); - - expect(typeof anon.father.father.name).toBe('string'); - - const arrayDataAfterResolved = await resolved(() => { - return generatedClient.query.objectArray?.map((v) => v?.name); - }); - - expect((arrayDataAfterResolved?.length ?? 0) > 0).toBeTruthy(); - - expect( - arrayDataAfterResolved?.every( - (v) => typeof v === 'string' && v.length > 30 - ) - ).toBeTruthy(); - }); - - test('args', async () => { - const name = await resolved(() => { - return generatedClient.query.objectWithArgs({ - who: 'asd', - }).name; - }); - - expect(name).toBe('asd'); - }); - - test('refetch works', async () => { - const firstHumanName = await resolved(() => { - return generatedClient.query.object?.name; - }); - - expect((firstHumanName?.length ?? 0) > 20).toBeTruthy(); - - const secondHumanName = await resolved( - () => { - return generatedClient.query.object?.name; - }, - { - refetch: true, - } - ); - - expect((secondHumanName?.length ?? 0) > 20).toBeTruthy(); - - expect(firstHumanName !== secondHumanName).toBeTruthy(); - }); - - test('scheduler', async () => { - const hello = 'zxczxc'; - const shouldBeUndefined = generatedClient.query.stringWithArgs({ - hello, - }); - - expect(shouldBeUndefined).toBe(undefined); - - waitForExpect(() => { - const shouldBeString = generatedClient.query.stringWithArgs({ - hello, - }); - - expect(shouldBeString).toBe(hello); - }); - }); - - test('resolved no cache', async () => { - const hello = 'asdasd'; - const helloQueryString = await resolved( - () => { - return generatedClient.query.stringWithArgs({ - hello, - }); - }, - { - noCache: true, - } - ); - - expect(helloQueryString).toBe(hello); - - const shouldBeUndefined = generatedClient.query.stringWithArgs({ - hello, - }); - - expect(shouldBeUndefined).toBe(undefined); - }); - - test('arrays', async () => { - const result = await resolved(() => { - return generatedClient.query.arrayString; - }); - - expect(result.length).toBeGreaterThanOrEqual(1); - - expect( - result.every((v) => { - expect(v!.length).toBeGreaterThan(10); - expect(typeof v).toBe('string'); - }) - ); - }); - - test('input type', async () => { - const result = await resolved(() => { - return generatedClient.query.giveGreetingsInput({ - input: { - language: 'spanish', - }, - }); - }); - - expect(result).toBe('spanish'); - }); - - test('enum', async () => { - const result = await resolved(() => { - return generatedClient.query.greetings; - }); - - expect(Object.values(GreetingsEnum).includes(result!)).toBeTruthy(); - }); - - test('nullable', async () => { - const resultA = await resolved(() => { - return generatedClient.query.stringNullableWithArgs({ - hello: 'a', - }); - }); - - expect(resultA).toBe('a'); - - const resultB = await resolved(() => { - return generatedClient.query.stringNullableWithArgs({ - hello: '', - helloTwo: 'b', - }); - }); - - expect(resultB).toBe('b'); - }); - - test('args array', async () => { - const resultA = await resolved(() => { - return generatedClient.query.stringNullableWithArgsArray({ - hello: ['a', 'b', 'c'], - }); - }); - - expect(resultA).toBe('a'); - - const resultEmpty = await resolved(() => { - return generatedClient.query.stringNullableWithArgsArray({ - hello: [], - }); - }); - - expect(resultEmpty).toBe(null); - }); - - test('type field with args', async () => { - const result = await resolved(() => { - return generatedClient.query.object?.fieldWithArgs({ - id: 123, - }); - }); - - expect(result).toBe(123); - }); - - describe('mutation', () => { - test('mutation works', async () => { - await resolved(() => { - return mutation.increment({ - n: 1, - }); - }).then((n) => { - expect(n).toBe(1); - }); - - await resolved( - () => { - return mutation.increment({ - n: 2, - }); - }, - { - refetch: true, - } - ).then((n) => { - expect(n).toBe(3); - }); - - const n = mutation.increment({ - n: 2, - }); - - expect(n).toBe(3); - - await resolved(() => { - return query.number; - }).then((n) => { - expect(n).toBe(3); - }); - }); - }); -}); - -describe('select fields', () => { - test('selectFields recursive', async () => { - await resolved( - () => { - const one = selectFields(query, '*', 1); - const two = selectFields(query, '*', 2); - const three = selectFields(query, '*', 3); - - return { - one, - two, - three, - }; - }, - { - refetch: true, - } - ).then((response) => { - expect(typeof response.one?.arrayObjectArgs).toBe('function'); - expect(response.one?.objectArray?.length).toBeGreaterThanOrEqual(2); - expect(typeof response.two?.object?.name).toBe('string'); - }); - }); - - test('selectFields an array', async () => { - await resolved( - () => { - return selectFields(query.objectArray, '*', 2); - }, - { - noCache: true, - } - ).then((response) => { - expect(typeof response?.[0]?.name).toBe('string'); - expect(typeof response?.[0]?.father.name).toBe('string'); - }); - }); - - test('selectFields named', async () => { - await resolved( - () => { - return selectFields(query.object, [ - 'name', - 'father.name', - 'sons.0.name', - 'fieldWithArgs', - 'sons', - ]); - }, - { - noCache: true, - } - ).then((response) => { - expect(typeof response?.name).toBe('string'); - expect(typeof response?.father?.name).toBe('string'); - expect(typeof response?.fieldWithArgs).toBe('function'); - expect(response?.sons?.length).toBeGreaterThanOrEqual(2); - expect(typeof response?.sons?.[0]?.name).toBe('string'); - expect(typeof response?.sons?.[1]?.name).toBe('string'); - }); - }); -}); diff --git a/examples/ez/test/tsconfig.json b/examples/ez/test/tsconfig.json deleted file mode 100644 index 18fd4c7a2..000000000 --- a/examples/ez/test/tsconfig.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "../tsconfig.json", - "include": ["example.test.ts"], - "exclude": [] -} diff --git a/examples/ez/tsconfig.json b/examples/ez/tsconfig.json deleted file mode 100644 index 980738209..000000000 --- a/examples/ez/tsconfig.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "include": ["**/*.ts"] -} diff --git a/examples/github/gqty.config.cjs b/examples/github/gqty.config.cjs deleted file mode 100644 index 46966f971..000000000 --- a/examples/github/gqty.config.cjs +++ /dev/null @@ -1,32 +0,0 @@ -require('dotenv').config(); - -/** - * @type {import("@gqty/cli").GQtyConfig} - */ -const config = { - enumsAsStrings: false, - react: false, - scalarTypes: { - DateTime: 'string', - Date: 'string', - GitObjectID: 'string', - GitSSHRemote: 'string', - GitTimestamp: 'string', - HTML: 'string', - PreciseDateTime: 'string', - URI: 'string', - X509Certificate: 'string', - }, - preImport: '', - introspection: { - endpoint: 'https://api.github.com/graphql', - headers: { - authorization: `bearer ${process.env.GITHUB_TOKEN}`, - }, - }, - destination: './src/gqty/index.ts', - subscriptions: false, - javascriptOutput: false, -}; - -module.exports = config; diff --git a/examples/github/jest.config.js b/examples/github/jest.config.js deleted file mode 100644 index 6e155aacb..000000000 --- a/examples/github/jest.config.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('test-utils/jest.config.js').default; diff --git a/examples/github/package.json b/examples/github/package.json deleted file mode 100644 index 70d099ebc..000000000 --- a/examples/github/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "example-github", - "version": "1.0.0", - "private": true, - "description": "", - "license": "MIT", - "author": "PabloSzx ", - "scripts": { - "generate": "gqty generate", - "test:manual": "jest -u" - }, - "dependencies": { - "@gqty/cli": "workspace:^3.3.0", - "dotenv": "^16.0.3", - "gqty": "workspace:^2.3.0", - "test-utils": "workspace:^0.1.0" - }, - "devDependencies": { - "@types/node": "^18.15.5", - "esbuild": "^0.17.12", - "isomorphic-unfetch": "^4.0.2", - "jest": "^29.5.0", - "typescript": "^4.9.5" - } -} diff --git a/examples/github/src/gqty/index.ts b/examples/github/src/gqty/index.ts deleted file mode 100644 index 940913bda..000000000 --- a/examples/github/src/gqty/index.ts +++ /dev/null @@ -1,58 +0,0 @@ -/** - * GQTY: You can safely modify this file and Query Fetcher based on your needs - */ - -import 'isomorphic-unfetch'; -import 'dotenv/config'; - -import { createClient, QueryFetcher } from 'gqty'; - -import { - generatedSchema, - GeneratedSchema, - scalarsEnumsHash, - SchemaObjectTypes, - SchemaObjectTypesNames, -} from './schema.generated'; - -if (!process.env.GITHUB_TOKEN) { - console.error( - 'You have to create a .env file with a Github Personal Access token, like this: \nGITHUB_TOKEN=your_token_here' - ); - process.exit(1); -} - -const queryFetcher: QueryFetcher = async function (query, variables) { - const response = await fetch('https://api.github.com/graphql', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - authorization: `bearer ${process.env.GITHUB_TOKEN}`, - }, - body: JSON.stringify({ - query, - variables, - }), - mode: 'cors', - }); - - const json = await response.json(); - - return json; -}; - -export const client = createClient< - GeneratedSchema, - SchemaObjectTypesNames, - SchemaObjectTypes ->({ - schema: generatedSchema, - scalarsEnumsHash, - queryFetcher, -}); - -const { query, mutation, mutate, subscription, resolved, refetch } = client; - -export { query, mutation, mutate, subscription, resolved, refetch }; - -export * from './schema.generated'; diff --git a/examples/github/src/gqty/schema.generated.ts b/examples/github/src/gqty/schema.generated.ts deleted file mode 100644 index d927e7358..000000000 --- a/examples/github/src/gqty/schema.generated.ts +++ /dev/null @@ -1,52993 +0,0 @@ -/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY - */ - -import { SchemaUnionsKey } from 'gqty'; - -export type Maybe = T | null; -export type InputMaybe = Maybe; -export type Exact = { - [K in keyof T]: T[K]; -}; -export type MakeOptional = Omit & { - [SubKey in K]?: Maybe; -}; -export type MakeMaybe = Omit & { - [SubKey in K]: Maybe; -}; -/** All built-in and custom scalars, mapped to their actual values */ -export interface Scalars { - ID: string; - String: string; - Boolean: boolean; - Int: number; - Float: number; - /** A (potentially binary) string encoded using base64. */ - Base64String: any; - /** An ISO-8601 encoded date string. */ - Date: string; - /** An ISO-8601 encoded UTC date string. */ - DateTime: string; - /** A Git object ID. */ - GitObjectID: string; - /** Git SSH string */ - GitSSHRemote: string; - /** An ISO-8601 encoded date string. Unlike the DateTime type, GitTimestamp is not converted in UTC. */ - GitTimestamp: string; - /** A string containing HTML code. */ - HTML: string; - /** An ISO-8601 encoded UTC date string with millisecond precision. */ - PreciseDateTime: string; - /** An RFC 3986, RFC 3987, and RFC 6570 (level 4) compliant URI string. */ - URI: string; - /** A valid x509 certificate string */ - X509Certificate: string; -} - -/** Autogenerated input type of AcceptEnterpriseAdministratorInvitation */ -export interface AcceptEnterpriseAdministratorInvitationInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The id of the invitation being accepted */ - invitationId: Scalars['ID']; -} - -/** Autogenerated input type of AcceptTopicSuggestion */ -export interface AcceptTopicSuggestionInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The name of the suggested topic. */ - name: Scalars['String']; - /** The Node ID of the repository. */ - repositoryId: Scalars['ID']; -} - -/** Autogenerated input type of AddAssigneesToAssignable */ -export interface AddAssigneesToAssignableInput { - /** The id of the assignable object to add assignees to. */ - assignableId: Scalars['ID']; - /** The id of users to add as assignees. */ - assigneeIds: Array; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; -} - -/** Autogenerated input type of AddComment */ -export interface AddCommentInput { - /** The contents of the comment. */ - body: Scalars['String']; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node ID of the subject to modify. */ - subjectId: Scalars['ID']; -} - -/** Autogenerated input type of AddDiscussionComment */ -export interface AddDiscussionCommentInput { - /** The contents of the comment. */ - body: Scalars['String']; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node ID of the discussion to comment on. */ - discussionId: Scalars['ID']; - /** The Node ID of the discussion comment within this discussion to reply to. */ - replyToId?: InputMaybe; -} - -/** Autogenerated input type of AddEnterpriseSupportEntitlement */ -export interface AddEnterpriseSupportEntitlementInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the Enterprise which the admin belongs to. */ - enterpriseId: Scalars['ID']; - /** The login of a member who will receive the support entitlement. */ - login: Scalars['String']; -} - -/** Autogenerated input type of AddLabelsToLabelable */ -export interface AddLabelsToLabelableInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ids of the labels to add. */ - labelIds: Array; - /** The id of the labelable object to add labels to. */ - labelableId: Scalars['ID']; -} - -/** Autogenerated input type of AddProjectCard */ -export interface AddProjectCardInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The content of the card. Must be a member of the ProjectCardItem union */ - contentId?: InputMaybe; - /** The note on the card. */ - note?: InputMaybe; - /** The Node ID of the ProjectColumn. */ - projectColumnId: Scalars['ID']; -} - -/** Autogenerated input type of AddProjectColumn */ -export interface AddProjectColumnInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The name of the column. */ - name: Scalars['String']; - /** The Node ID of the project. */ - projectId: Scalars['ID']; -} - -/** Autogenerated input type of AddProjectNextItem */ -export interface AddProjectNextItemInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The content id of the item (Issue or PullRequest). */ - contentId: Scalars['ID']; - /** The ID of the Project to add the item to. */ - projectId: Scalars['ID']; -} - -/** Autogenerated input type of AddPullRequestReviewComment */ -export interface AddPullRequestReviewCommentInput { - /** The text of the comment. */ - body: Scalars['String']; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The SHA of the commit to comment on. */ - commitOID?: InputMaybe; - /** The comment id to reply to. */ - inReplyTo?: InputMaybe; - /** The relative path of the file to comment on. */ - path?: InputMaybe; - /** The line index in the diff to comment on. */ - position?: InputMaybe; - /** The node ID of the pull request reviewing */ - pullRequestId?: InputMaybe; - /** The Node ID of the review to modify. */ - pullRequestReviewId?: InputMaybe; -} - -/** Autogenerated input type of AddPullRequestReview */ -export interface AddPullRequestReviewInput { - /** The contents of the review body comment. */ - body?: InputMaybe; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The review line comments. */ - comments?: InputMaybe>>; - /** The commit OID the review pertains to. */ - commitOID?: InputMaybe; - /** The event to perform on the pull request review. */ - event?: InputMaybe; - /** The Node ID of the pull request to modify. */ - pullRequestId: Scalars['ID']; - /** The review line comment threads. */ - threads?: InputMaybe>>; -} - -/** Autogenerated input type of AddPullRequestReviewThread */ -export interface AddPullRequestReviewThreadInput { - /** Body of the thread's first comment. */ - body: Scalars['String']; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The line of the blob to which the thread refers. The end of the line range for multi-line comments. */ - line: Scalars['Int']; - /** Path to the file being commented on. */ - path: Scalars['String']; - /** The node ID of the pull request reviewing */ - pullRequestId?: InputMaybe; - /** The Node ID of the review to modify. */ - pullRequestReviewId?: InputMaybe; - /** The side of the diff on which the line resides. For multi-line comments, this is the side for the end of the line range. */ - side?: InputMaybe; - /** The first line of the range to which the comment refers. */ - startLine?: InputMaybe; - /** The side of the diff on which the start line resides. */ - startSide?: InputMaybe; -} - -/** Autogenerated input type of AddReaction */ -export interface AddReactionInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The name of the emoji to react with. */ - content: ReactionContent; - /** The Node ID of the subject to modify. */ - subjectId: Scalars['ID']; -} - -/** Autogenerated input type of AddStar */ -export interface AddStarInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Starrable ID to star. */ - starrableId: Scalars['ID']; -} - -/** Autogenerated input type of AddUpvote */ -export interface AddUpvoteInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node ID of the discussion or comment to upvote. */ - subjectId: Scalars['ID']; -} - -/** Autogenerated input type of AddVerifiableDomain */ -export interface AddVerifiableDomainInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The URL of the domain */ - domain: Scalars['URI']; - /** The ID of the owner to add the domain to */ - ownerId: Scalars['ID']; -} - -/** Autogenerated input type of ApproveDeployments */ -export interface ApproveDeploymentsInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** Optional comment for approving deployments */ - comment?: InputMaybe; - /** The ids of environments to reject deployments */ - environmentIds: Array; - /** The node ID of the workflow run containing the pending deployments. */ - workflowRunId: Scalars['ID']; -} - -/** Autogenerated input type of ApproveVerifiableDomain */ -export interface ApproveVerifiableDomainInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the verifiable domain to approve. */ - id: Scalars['ID']; -} - -/** Autogenerated input type of ArchiveRepository */ -export interface ArchiveRepositoryInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the repository to mark as archived. */ - repositoryId: Scalars['ID']; -} - -/** Ordering options for Audit Log connections. */ -export interface AuditLogOrder { - /** The ordering direction. */ - direction?: InputMaybe; - /** The field to order Audit Logs by. */ - field?: InputMaybe; -} - -/** Properties by which Audit Log connections can be ordered. */ -export enum AuditLogOrderField { - /** Order audit log entries by timestamp */ - CREATED_AT = 'CREATED_AT', -} - -/** Autogenerated input type of CancelEnterpriseAdminInvitation */ -export interface CancelEnterpriseAdminInvitationInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node ID of the pending enterprise administrator invitation. */ - invitationId: Scalars['ID']; -} - -/** Autogenerated input type of CancelSponsorship */ -export interface CancelSponsorshipInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the user or organization who is acting as the sponsor, paying for the sponsorship. Required if sponsorLogin is not given. */ - sponsorId?: InputMaybe; - /** The username of the user or organization who is acting as the sponsor, paying for the sponsorship. Required if sponsorId is not given. */ - sponsorLogin?: InputMaybe; - /** The ID of the user or organization who is receiving the sponsorship. Required if sponsorableLogin is not given. */ - sponsorableId?: InputMaybe; - /** The username of the user or organization who is receiving the sponsorship. Required if sponsorableId is not given. */ - sponsorableLogin?: InputMaybe; -} - -/** Autogenerated input type of ChangeUserStatus */ -export interface ChangeUserStatusInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The emoji to represent your status. Can either be a native Unicode emoji or an emoji name with colons, e.g., :grinning:. */ - emoji?: InputMaybe; - /** If set, the user status will not be shown after this date. */ - expiresAt?: InputMaybe; - /** Whether this status should indicate you are not fully available on GitHub, e.g., you are away. */ - limitedAvailability?: InputMaybe; - /** A short description of your current status. */ - message?: InputMaybe; - /** The ID of the organization whose members will be allowed to see the status. If omitted, the status will be publicly visible. */ - organizationId?: InputMaybe; -} - -/** Information from a check run analysis to specific lines of code. */ -export interface CheckAnnotationData { - /** Represents an annotation's information level */ - annotationLevel: CheckAnnotationLevel; - /** The location of the annotation */ - location: CheckAnnotationRange; - /** A short description of the feedback for these lines of code. */ - message: Scalars['String']; - /** The path of the file to add an annotation to. */ - path: Scalars['String']; - /** Details about this annotation. */ - rawDetails?: InputMaybe; - /** The title that represents the annotation. */ - title?: InputMaybe; -} - -/** Represents an annotation's information level. */ -export enum CheckAnnotationLevel { - /** An annotation indicating an inescapable error. */ - FAILURE = 'FAILURE', - /** An annotation indicating some information. */ - NOTICE = 'NOTICE', - /** An annotation indicating an ignorable error. */ - WARNING = 'WARNING', -} - -/** Information from a check run analysis to specific lines of code. */ -export interface CheckAnnotationRange { - /** The ending column of the range. */ - endColumn?: InputMaybe; - /** The ending line of the range. */ - endLine: Scalars['Int']; - /** The starting column of the range. */ - startColumn?: InputMaybe; - /** The starting line of the range. */ - startLine: Scalars['Int']; -} - -/** The possible states for a check suite or run conclusion. */ -export enum CheckConclusionState { - /** The check suite or run requires action. */ - ACTION_REQUIRED = 'ACTION_REQUIRED', - /** The check suite or run has been cancelled. */ - CANCELLED = 'CANCELLED', - /** The check suite or run has failed. */ - FAILURE = 'FAILURE', - /** The check suite or run was neutral. */ - NEUTRAL = 'NEUTRAL', - /** The check suite or run was skipped. */ - SKIPPED = 'SKIPPED', - /** The check suite or run was marked stale by GitHub. Only GitHub can use this conclusion. */ - STALE = 'STALE', - /** The check suite or run has failed at startup. */ - STARTUP_FAILURE = 'STARTUP_FAILURE', - /** The check suite or run has succeeded. */ - SUCCESS = 'SUCCESS', - /** The check suite or run has timed out. */ - TIMED_OUT = 'TIMED_OUT', -} - -/** Possible further actions the integrator can perform. */ -export interface CheckRunAction { - /** A short explanation of what this action would do. */ - description: Scalars['String']; - /** A reference for the action on the integrator's system. */ - identifier: Scalars['String']; - /** The text to be displayed on a button in the web UI. */ - label: Scalars['String']; -} - -/** The filters that are available when fetching check runs. */ -export interface CheckRunFilter { - /** Filters the check runs created by this application ID. */ - appId?: InputMaybe; - /** Filters the check runs by this name. */ - checkName?: InputMaybe; - /** Filters the check runs by this type. */ - checkType?: InputMaybe; - /** Filters the check runs by this status. */ - status?: InputMaybe; -} - -/** Descriptive details about the check run. */ -export interface CheckRunOutput { - /** The annotations that are made as part of the check run. */ - annotations?: InputMaybe>; - /** Images attached to the check run output displayed in the GitHub pull request UI. */ - images?: InputMaybe>; - /** The summary of the check run (supports Commonmark). */ - summary: Scalars['String']; - /** The details of the check run (supports Commonmark). */ - text?: InputMaybe; - /** A title to provide for this check run. */ - title: Scalars['String']; -} - -/** Images attached to the check run output displayed in the GitHub pull request UI. */ -export interface CheckRunOutputImage { - /** The alternative text for the image. */ - alt: Scalars['String']; - /** A short image description. */ - caption?: InputMaybe; - /** The full URL of the image. */ - imageUrl: Scalars['URI']; -} - -/** The possible types of check runs. */ -export enum CheckRunType { - /** Every check run available. */ - ALL = 'ALL', - /** The latest check run. */ - LATEST = 'LATEST', -} - -/** The possible states for a check suite or run status. */ -export enum CheckStatusState { - /** The check suite or run has been completed. */ - COMPLETED = 'COMPLETED', - /** The check suite or run is in progress. */ - IN_PROGRESS = 'IN_PROGRESS', - /** The check suite or run is in pending state. */ - PENDING = 'PENDING', - /** The check suite or run has been queued. */ - QUEUED = 'QUEUED', - /** The check suite or run has been requested. */ - REQUESTED = 'REQUESTED', - /** The check suite or run is in waiting state. */ - WAITING = 'WAITING', -} - -/** The auto-trigger preferences that are available for check suites. */ -export interface CheckSuiteAutoTriggerPreference { - /** The node ID of the application that owns the check suite. */ - appId: Scalars['ID']; - /** Set to `true` to enable automatic creation of CheckSuite events upon pushes to the repository. */ - setting: Scalars['Boolean']; -} - -/** The filters that are available when fetching check suites. */ -export interface CheckSuiteFilter { - /** Filters the check suites created by this application ID. */ - appId?: InputMaybe; - /** Filters the check suites by this name. */ - checkName?: InputMaybe; -} - -/** Autogenerated input type of ClearLabelsFromLabelable */ -export interface ClearLabelsFromLabelableInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The id of the labelable object to clear the labels from. */ - labelableId: Scalars['ID']; -} - -/** Autogenerated input type of CloneProject */ -export interface CloneProjectInput { - /** The description of the project. */ - body?: InputMaybe; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** Whether or not to clone the source project's workflows. */ - includeWorkflows: Scalars['Boolean']; - /** The name of the project. */ - name: Scalars['String']; - /** The visibility of the project, defaults to false (private). */ - public?: InputMaybe; - /** The source project to clone. */ - sourceId: Scalars['ID']; - /** The owner ID to create the project under. */ - targetOwnerId: Scalars['ID']; -} - -/** Autogenerated input type of CloneTemplateRepository */ -export interface CloneTemplateRepositoryInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** A short description of the new repository. */ - description?: InputMaybe; - /** Whether to copy all branches from the template to the new repository. Defaults to copying only the default branch of the template. */ - includeAllBranches?: InputMaybe; - /** The name of the new repository. */ - name: Scalars['String']; - /** The ID of the owner for the new repository. */ - ownerId: Scalars['ID']; - /** The Node ID of the template repository. */ - repositoryId: Scalars['ID']; - /** Indicates the repository's visibility level. */ - visibility: RepositoryVisibility; -} - -/** Autogenerated input type of CloseIssue */ -export interface CloseIssueInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** ID of the issue to be closed. */ - issueId: Scalars['ID']; -} - -/** Autogenerated input type of ClosePullRequest */ -export interface ClosePullRequestInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** ID of the pull request to be closed. */ - pullRequestId: Scalars['ID']; -} - -/** Collaborators affiliation level with a subject. */ -export enum CollaboratorAffiliation { - /** All collaborators the authenticated user can see. */ - ALL = 'ALL', - /** All collaborators with permissions to an organization-owned subject, regardless of organization membership status. */ - DIRECT = 'DIRECT', - /** All outside collaborators of an organization-owned subject. */ - OUTSIDE = 'OUTSIDE', -} - -/** A comment author association with repository. */ -export enum CommentAuthorAssociation { - /** Author has been invited to collaborate on the repository. */ - COLLABORATOR = 'COLLABORATOR', - /** Author has previously committed to the repository. */ - CONTRIBUTOR = 'CONTRIBUTOR', - /** Author has not previously committed to GitHub. */ - FIRST_TIMER = 'FIRST_TIMER', - /** Author has not previously committed to the repository. */ - FIRST_TIME_CONTRIBUTOR = 'FIRST_TIME_CONTRIBUTOR', - /** Author is a placeholder for an unclaimed user. */ - MANNEQUIN = 'MANNEQUIN', - /** Author is a member of the organization that owns the repository. */ - MEMBER = 'MEMBER', - /** Author has no association with the repository. */ - NONE = 'NONE', - /** Author is the owner of the repository. */ - OWNER = 'OWNER', -} - -/** The possible errors that will prevent a user from updating a comment. */ -export enum CommentCannotUpdateReason { - /** Unable to create comment because repository is archived. */ - ARCHIVED = 'ARCHIVED', - /** You cannot update this comment */ - DENIED = 'DENIED', - /** You must be the author or have write access to this repository to update this comment. */ - INSUFFICIENT_ACCESS = 'INSUFFICIENT_ACCESS', - /** Unable to create comment because issue is locked. */ - LOCKED = 'LOCKED', - /** You must be logged in to update this comment. */ - LOGIN_REQUIRED = 'LOGIN_REQUIRED', - /** Repository is under maintenance. */ - MAINTENANCE = 'MAINTENANCE', - /** At least one email address must be verified to update this comment. */ - VERIFIED_EMAIL_REQUIRED = 'VERIFIED_EMAIL_REQUIRED', -} - -/** Specifies an author for filtering Git commits. */ -export interface CommitAuthor { - /** Email addresses to filter by. Commits authored by any of the specified email addresses will be returned. */ - emails?: InputMaybe>; - /** ID of a User to filter by. If non-null, only commits authored by this user will be returned. This field takes precedence over emails. */ - id?: InputMaybe; -} - -/** Ordering options for commit contribution connections. */ -export interface CommitContributionOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field by which to order commit contributions. */ - field: CommitContributionOrderField; -} - -/** Properties by which commit contribution connections can be ordered. */ -export enum CommitContributionOrderField { - /** Order commit contributions by how many commits they represent. */ - COMMIT_COUNT = 'COMMIT_COUNT', - /** Order commit contributions by when they were made. */ - OCCURRED_AT = 'OCCURRED_AT', -} - -/** A message to include with a new commit */ -export interface CommitMessage { - /** The body of the message. */ - body?: InputMaybe; - /** The headline of the message. */ - headline: Scalars['String']; -} - -/** - * A git ref for a commit to be appended to. - * - * The ref must be a branch, i.e. its fully qualified name must start - * with `refs/heads/` (although the input is not required to be fully - * qualified). - * - * The Ref may be specified by its global node ID or by the - * repository nameWithOwner and branch name. - * - * ### Examples - * - * Specify a branch using a global node ID: - * - * { "id": "MDM6UmVmMTpyZWZzL2hlYWRzL21haW4=" } - * - * Specify a branch using nameWithOwner and branch name: - * - * { - * "nameWithOwner": "github/graphql-client", - * "branchName": "main" - * } - */ -export interface CommittableBranch { - /** The unqualified name of the branch to append the commit to. */ - branchName?: InputMaybe; - /** The Node ID of the Ref to be updated. */ - id?: InputMaybe; - /** The nameWithOwner of the repository to commit to. */ - repositoryNameWithOwner?: InputMaybe; -} - -/** Varying levels of contributions from none to many. */ -export enum ContributionLevel { - /** Lowest 25% of days of contributions. */ - FIRST_QUARTILE = 'FIRST_QUARTILE', - /** Highest 25% of days of contributions. More contributions than the third quartile. */ - FOURTH_QUARTILE = 'FOURTH_QUARTILE', - /** No contributions occurred. */ - NONE = 'NONE', - /** Second lowest 25% of days of contributions. More contributions than the first quartile. */ - SECOND_QUARTILE = 'SECOND_QUARTILE', - /** Second highest 25% of days of contributions. More contributions than second quartile, less than the fourth quartile. */ - THIRD_QUARTILE = 'THIRD_QUARTILE', -} - -/** Ordering options for contribution connections. */ -export interface ContributionOrder { - /** The ordering direction. */ - direction: OrderDirection; -} - -/** Autogenerated input type of ConvertProjectCardNoteToIssue */ -export interface ConvertProjectCardNoteToIssueInput { - /** The body of the newly created issue. */ - body?: InputMaybe; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ProjectCard ID to convert. */ - projectCardId: Scalars['ID']; - /** The ID of the repository to create the issue in. */ - repositoryId: Scalars['ID']; - /** The title of the newly created issue. Defaults to the card's note text. */ - title?: InputMaybe; -} - -/** Autogenerated input type of ConvertPullRequestToDraft */ -export interface ConvertPullRequestToDraftInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** ID of the pull request to convert to draft */ - pullRequestId: Scalars['ID']; -} - -/** Autogenerated input type of CreateBranchProtectionRule */ -export interface CreateBranchProtectionRuleInput { - /** Can this branch be deleted. */ - allowsDeletions?: InputMaybe; - /** Are force pushes allowed on this branch. */ - allowsForcePushes?: InputMaybe; - /** A list of User or Team IDs allowed to bypass force push targeting matching branches. */ - bypassForcePushActorIds?: InputMaybe>; - /** A list of User or Team IDs allowed to bypass pull requests targeting matching branches. */ - bypassPullRequestActorIds?: InputMaybe>; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** Will new commits pushed to matching branches dismiss pull request review approvals. */ - dismissesStaleReviews?: InputMaybe; - /** Can admins overwrite branch protection. */ - isAdminEnforced?: InputMaybe; - /** The glob-like pattern used to determine matching branches. */ - pattern: Scalars['String']; - /** A list of User, Team or App IDs allowed to push to matching branches. */ - pushActorIds?: InputMaybe>; - /** The global relay id of the repository in which a new branch protection rule should be created in. */ - repositoryId: Scalars['ID']; - /** Number of approving reviews required to update matching branches. */ - requiredApprovingReviewCount?: InputMaybe; - /** List of required status check contexts that must pass for commits to be accepted to matching branches. */ - requiredStatusCheckContexts?: InputMaybe>; - /** The list of required status checks */ - requiredStatusChecks?: InputMaybe>; - /** Are approving reviews required to update matching branches. */ - requiresApprovingReviews?: InputMaybe; - /** Are reviews from code owners required to update matching branches. */ - requiresCodeOwnerReviews?: InputMaybe; - /** Are commits required to be signed. */ - requiresCommitSignatures?: InputMaybe; - /** Are conversations required to be resolved before merging. */ - requiresConversationResolution?: InputMaybe; - /** Are merge commits prohibited from being pushed to this branch. */ - requiresLinearHistory?: InputMaybe; - /** Are status checks required to update matching branches. */ - requiresStatusChecks?: InputMaybe; - /** Are branches required to be up to date before merging. */ - requiresStrictStatusChecks?: InputMaybe; - /** Is pushing to matching branches restricted. */ - restrictsPushes?: InputMaybe; - /** Is dismissal of pull request reviews restricted. */ - restrictsReviewDismissals?: InputMaybe; - /** A list of User or Team IDs allowed to dismiss reviews on pull requests targeting matching branches. */ - reviewDismissalActorIds?: InputMaybe>; -} - -/** Autogenerated input type of CreateCheckRun */ -export interface CreateCheckRunInput { - /** Possible further actions the integrator can perform, which a user may trigger. */ - actions?: InputMaybe>; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The time that the check run finished. */ - completedAt?: InputMaybe; - /** The final conclusion of the check. */ - conclusion?: InputMaybe; - /** The URL of the integrator's site that has the full details of the check. */ - detailsUrl?: InputMaybe; - /** A reference for the run on the integrator's system. */ - externalId?: InputMaybe; - /** The SHA of the head commit. */ - headSha: Scalars['GitObjectID']; - /** The name of the check. */ - name: Scalars['String']; - /** Descriptive details about the run. */ - output?: InputMaybe; - /** The node ID of the repository. */ - repositoryId: Scalars['ID']; - /** The time that the check run began. */ - startedAt?: InputMaybe; - /** The current status. */ - status?: InputMaybe; -} - -/** Autogenerated input type of CreateCheckSuite */ -export interface CreateCheckSuiteInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The SHA of the head commit. */ - headSha: Scalars['GitObjectID']; - /** The Node ID of the repository. */ - repositoryId: Scalars['ID']; -} - -/** Autogenerated input type of CreateCommitOnBranch */ -export interface CreateCommitOnBranchInput { - /** The Ref to be updated. Must be a branch. */ - branch: CommittableBranch; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The git commit oid expected at the head of the branch prior to the commit */ - expectedHeadOid: Scalars['GitObjectID']; - /** A description of changes to files in this commit. */ - fileChanges?: InputMaybe; - /** The commit message the be included with the commit. */ - message: CommitMessage; -} - -/** Autogenerated input type of CreateDiscussion */ -export interface CreateDiscussionInput { - /** The body of the discussion. */ - body: Scalars['String']; - /** The id of the discussion category to associate with this discussion. */ - categoryId: Scalars['ID']; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The id of the repository on which to create the discussion. */ - repositoryId: Scalars['ID']; - /** The title of the discussion. */ - title: Scalars['String']; -} - -/** Autogenerated input type of CreateEnterpriseOrganization */ -export interface CreateEnterpriseOrganizationInput { - /** The logins for the administrators of the new organization. */ - adminLogins: Array; - /** The email used for sending billing receipts. */ - billingEmail: Scalars['String']; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the enterprise owning the new organization. */ - enterpriseId: Scalars['ID']; - /** The login of the new organization. */ - login: Scalars['String']; - /** The profile name of the new organization. */ - profileName: Scalars['String']; -} - -/** Autogenerated input type of CreateEnvironment */ -export interface CreateEnvironmentInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The name of the environment. */ - name: Scalars['String']; - /** The node ID of the repository. */ - repositoryId: Scalars['ID']; -} - -/** Autogenerated input type of CreateIpAllowListEntry */ -export interface CreateIpAllowListEntryInput { - /** An IP address or range of addresses in CIDR notation. */ - allowListValue: Scalars['String']; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** Whether the IP allow list entry is active when an IP allow list is enabled. */ - isActive: Scalars['Boolean']; - /** An optional name for the IP allow list entry. */ - name?: InputMaybe; - /** The ID of the owner for which to create the new IP allow list entry. */ - ownerId: Scalars['ID']; -} - -/** Autogenerated input type of CreateIssue */ -export interface CreateIssueInput { - /** The Node ID for the user assignee for this issue. */ - assigneeIds?: InputMaybe>; - /** The body for the issue description. */ - body?: InputMaybe; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The name of an issue template in the repository, assigns labels and assignees from the template to the issue */ - issueTemplate?: InputMaybe; - /** An array of Node IDs of labels for this issue. */ - labelIds?: InputMaybe>; - /** The Node ID of the milestone for this issue. */ - milestoneId?: InputMaybe; - /** An array of Node IDs for projects associated with this issue. */ - projectIds?: InputMaybe>; - /** The Node ID of the repository. */ - repositoryId: Scalars['ID']; - /** The title for the issue. */ - title: Scalars['String']; -} - -/** Autogenerated input type of CreateProject */ -export interface CreateProjectInput { - /** The description of project. */ - body?: InputMaybe; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The name of project. */ - name: Scalars['String']; - /** The owner ID to create the project under. */ - ownerId: Scalars['ID']; - /** A list of repository IDs to create as linked repositories for the project */ - repositoryIds?: InputMaybe>; - /** The name of the GitHub-provided template. */ - template?: InputMaybe; -} - -/** Autogenerated input type of CreatePullRequest */ -export interface CreatePullRequestInput { - /** - * The name of the branch you want your changes pulled into. This should be an existing branch - * on the current repository. You cannot update the base branch on a pull request to point - * to another repository. - */ - baseRefName: Scalars['String']; - /** The contents of the pull request. */ - body?: InputMaybe; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** Indicates whether this pull request should be a draft. */ - draft?: InputMaybe; - /** - * The name of the branch where your changes are implemented. For cross-repository pull requests - * in the same network, namespace `head_ref_name` with a user like this: `username:branch`. - */ - headRefName: Scalars['String']; - /** Indicates whether maintainers can modify the pull request. */ - maintainerCanModify?: InputMaybe; - /** The Node ID of the repository. */ - repositoryId: Scalars['ID']; - /** The title of the pull request. */ - title: Scalars['String']; -} - -/** Autogenerated input type of CreateRef */ -export interface CreateRefInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The fully qualified name of the new Ref (ie: `refs/heads/my_new_branch`). */ - name: Scalars['String']; - /** The GitObjectID that the new Ref shall target. Must point to a commit. */ - oid: Scalars['GitObjectID']; - /** The Node ID of the Repository to create the Ref in. */ - repositoryId: Scalars['ID']; -} - -/** Autogenerated input type of CreateRepository */ -export interface CreateRepositoryInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** A short description of the new repository. */ - description?: InputMaybe; - /** Indicates if the repository should have the issues feature enabled. */ - hasIssuesEnabled?: InputMaybe; - /** Indicates if the repository should have the wiki feature enabled. */ - hasWikiEnabled?: InputMaybe; - /** The URL for a web page about this repository. */ - homepageUrl?: InputMaybe; - /** The name of the new repository. */ - name: Scalars['String']; - /** The ID of the owner for the new repository. */ - ownerId?: InputMaybe; - /** When an organization is specified as the owner, this ID identifies the team that should be granted access to the new repository. */ - teamId?: InputMaybe; - /** Whether this repository should be marked as a template such that anyone who can access it can create new repositories with the same files and directory structure. */ - template?: InputMaybe; - /** Indicates the repository's visibility level. */ - visibility: RepositoryVisibility; -} - -/** Autogenerated input type of CreateSponsorship */ -export interface CreateSponsorshipInput { - /** The amount to pay to the sponsorable in US dollars. Required if a tierId is not specified. Valid values: 1-12000. */ - amount?: InputMaybe; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** Whether the sponsorship should happen monthly/yearly or just this one time. Required if a tierId is not specified. */ - isRecurring?: InputMaybe; - /** Specify whether others should be able to see that the sponsor is sponsoring the sponsorable. Public visibility still does not reveal which tier is used. */ - privacyLevel?: InputMaybe; - /** Whether the sponsor should receive email updates from the sponsorable. */ - receiveEmails?: InputMaybe; - /** The ID of the user or organization who is acting as the sponsor, paying for the sponsorship. Required if sponsorLogin is not given. */ - sponsorId?: InputMaybe; - /** The username of the user or organization who is acting as the sponsor, paying for the sponsorship. Required if sponsorId is not given. */ - sponsorLogin?: InputMaybe; - /** The ID of the user or organization who is receiving the sponsorship. Required if sponsorableLogin is not given. */ - sponsorableId?: InputMaybe; - /** The username of the user or organization who is receiving the sponsorship. Required if sponsorableId is not given. */ - sponsorableLogin?: InputMaybe; - /** The ID of one of sponsorable's existing tiers to sponsor at. Required if amount is not specified. */ - tierId?: InputMaybe; -} - -/** Autogenerated input type of CreateTeamDiscussionComment */ -export interface CreateTeamDiscussionCommentInput { - /** The content of the comment. */ - body: Scalars['String']; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the discussion to which the comment belongs. */ - discussionId: Scalars['ID']; -} - -/** Autogenerated input type of CreateTeamDiscussion */ -export interface CreateTeamDiscussionInput { - /** The content of the discussion. */ - body: Scalars['String']; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** If true, restricts the visibility of this discussion to team members and organization admins. If false or not specified, allows any organization member to view this discussion. */ - private?: InputMaybe; - /** The ID of the team to which the discussion belongs. */ - teamId: Scalars['ID']; - /** The title of the discussion. */ - title: Scalars['String']; -} - -/** Autogenerated input type of DeclineTopicSuggestion */ -export interface DeclineTopicSuggestionInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The name of the suggested topic. */ - name: Scalars['String']; - /** The reason why the suggested topic is declined. */ - reason: TopicSuggestionDeclineReason; - /** The Node ID of the repository. */ - repositoryId: Scalars['ID']; -} - -/** The possible base permissions for repositories. */ -export enum DefaultRepositoryPermissionField { - /** Can read, write, and administrate repos by default */ - ADMIN = 'ADMIN', - /** No access */ - NONE = 'NONE', - /** Can read repos by default */ - READ = 'READ', - /** Can read and write repos by default */ - WRITE = 'WRITE', -} - -/** Autogenerated input type of DeleteBranchProtectionRule */ -export interface DeleteBranchProtectionRuleInput { - /** The global relay id of the branch protection rule to be deleted. */ - branchProtectionRuleId: Scalars['ID']; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; -} - -/** Autogenerated input type of DeleteDeployment */ -export interface DeleteDeploymentInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node ID of the deployment to be deleted. */ - id: Scalars['ID']; -} - -/** Autogenerated input type of DeleteDiscussionComment */ -export interface DeleteDiscussionCommentInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node id of the discussion comment to delete. */ - id: Scalars['ID']; -} - -/** Autogenerated input type of DeleteDiscussion */ -export interface DeleteDiscussionInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The id of the discussion to delete. */ - id: Scalars['ID']; -} - -/** Autogenerated input type of DeleteEnvironment */ -export interface DeleteEnvironmentInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node ID of the environment to be deleted. */ - id: Scalars['ID']; -} - -/** Autogenerated input type of DeleteIpAllowListEntry */ -export interface DeleteIpAllowListEntryInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the IP allow list entry to delete. */ - ipAllowListEntryId: Scalars['ID']; -} - -/** Autogenerated input type of DeleteIssueComment */ -export interface DeleteIssueCommentInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the comment to delete. */ - id: Scalars['ID']; -} - -/** Autogenerated input type of DeleteIssue */ -export interface DeleteIssueInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the issue to delete. */ - issueId: Scalars['ID']; -} - -/** Autogenerated input type of DeleteProjectCard */ -export interface DeleteProjectCardInput { - /** The id of the card to delete. */ - cardId: Scalars['ID']; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; -} - -/** Autogenerated input type of DeleteProjectColumn */ -export interface DeleteProjectColumnInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The id of the column to delete. */ - columnId: Scalars['ID']; -} - -/** Autogenerated input type of DeleteProject */ -export interface DeleteProjectInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Project ID to update. */ - projectId: Scalars['ID']; -} - -/** Autogenerated input type of DeleteProjectNextItem */ -export interface DeleteProjectNextItemInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the item to be removed. */ - itemId: Scalars['ID']; - /** The ID of the Project from which the item should be removed. */ - projectId: Scalars['ID']; -} - -/** Autogenerated input type of DeletePullRequestReviewComment */ -export interface DeletePullRequestReviewCommentInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the comment to delete. */ - id: Scalars['ID']; -} - -/** Autogenerated input type of DeletePullRequestReview */ -export interface DeletePullRequestReviewInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node ID of the pull request review to delete. */ - pullRequestReviewId: Scalars['ID']; -} - -/** Autogenerated input type of DeleteRef */ -export interface DeleteRefInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node ID of the Ref to be deleted. */ - refId: Scalars['ID']; -} - -/** Autogenerated input type of DeleteTeamDiscussionComment */ -export interface DeleteTeamDiscussionCommentInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the comment to delete. */ - id: Scalars['ID']; -} - -/** Autogenerated input type of DeleteTeamDiscussion */ -export interface DeleteTeamDiscussionInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The discussion ID to delete. */ - id: Scalars['ID']; -} - -/** Autogenerated input type of DeleteVerifiableDomain */ -export interface DeleteVerifiableDomainInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the verifiable domain to delete. */ - id: Scalars['ID']; -} - -/** Ordering options for deployment connections */ -export interface DeploymentOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order deployments by. */ - field: DeploymentOrderField; -} - -/** Properties by which deployment connections can be ordered. */ -export enum DeploymentOrderField { - /** Order collection by creation time */ - CREATED_AT = 'CREATED_AT', -} - -/** The possible protection rule types. */ -export enum DeploymentProtectionRuleType { - /** Required reviewers */ - REQUIRED_REVIEWERS = 'REQUIRED_REVIEWERS', - /** Wait timer */ - WAIT_TIMER = 'WAIT_TIMER', -} - -/** The possible states for a deployment review. */ -export enum DeploymentReviewState { - /** The deployment was approved. */ - APPROVED = 'APPROVED', - /** The deployment was rejected. */ - REJECTED = 'REJECTED', -} - -/** The possible states in which a deployment can be. */ -export enum DeploymentState { - /** The pending deployment was not updated after 30 minutes. */ - ABANDONED = 'ABANDONED', - /** The deployment is currently active. */ - ACTIVE = 'ACTIVE', - /** An inactive transient deployment. */ - DESTROYED = 'DESTROYED', - /** The deployment experienced an error. */ - ERROR = 'ERROR', - /** The deployment has failed. */ - FAILURE = 'FAILURE', - /** The deployment is inactive. */ - INACTIVE = 'INACTIVE', - /** The deployment is in progress. */ - IN_PROGRESS = 'IN_PROGRESS', - /** The deployment is pending. */ - PENDING = 'PENDING', - /** The deployment has queued */ - QUEUED = 'QUEUED', - /** The deployment is waiting. */ - WAITING = 'WAITING', -} - -/** The possible states for a deployment status. */ -export enum DeploymentStatusState { - /** The deployment experienced an error. */ - ERROR = 'ERROR', - /** The deployment has failed. */ - FAILURE = 'FAILURE', - /** The deployment is inactive. */ - INACTIVE = 'INACTIVE', - /** The deployment is in progress. */ - IN_PROGRESS = 'IN_PROGRESS', - /** The deployment is pending. */ - PENDING = 'PENDING', - /** The deployment is queued */ - QUEUED = 'QUEUED', - /** The deployment was successful. */ - SUCCESS = 'SUCCESS', - /** The deployment is waiting. */ - WAITING = 'WAITING', -} - -/** The possible sides of a diff. */ -export enum DiffSide { - /** The left side of the diff. */ - LEFT = 'LEFT', - /** The right side of the diff. */ - RIGHT = 'RIGHT', -} - -/** Autogenerated input type of DisablePullRequestAutoMerge */ -export interface DisablePullRequestAutoMergeInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** ID of the pull request to disable auto merge on. */ - pullRequestId: Scalars['ID']; -} - -/** Ways in which lists of discussions can be ordered upon return. */ -export interface DiscussionOrder { - /** The direction in which to order discussions by the specified field. */ - direction: OrderDirection; - /** The field by which to order discussions. */ - field: DiscussionOrderField; -} - -/** Properties by which discussion connections can be ordered. */ -export enum DiscussionOrderField { - /** Order discussions by creation time. */ - CREATED_AT = 'CREATED_AT', - /** Order discussions by most recent modification time. */ - UPDATED_AT = 'UPDATED_AT', -} - -/** Autogenerated input type of DismissPullRequestReview */ -export interface DismissPullRequestReviewInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The contents of the pull request review dismissal message. */ - message: Scalars['String']; - /** The Node ID of the pull request review to modify. */ - pullRequestReviewId: Scalars['ID']; -} - -/** The possible reasons that a Dependabot alert was dismissed. */ -export enum DismissReason { - /** A fix has already been started */ - FIX_STARTED = 'FIX_STARTED', - /** This alert is inaccurate or incorrect */ - INACCURATE = 'INACCURATE', - /** Vulnerable code is not actually used */ - NOT_USED = 'NOT_USED', - /** No bandwidth to fix this */ - NO_BANDWIDTH = 'NO_BANDWIDTH', - /** Risk is tolerable to this project */ - TOLERABLE_RISK = 'TOLERABLE_RISK', -} - -/** Autogenerated input type of DismissRepositoryVulnerabilityAlert */ -export interface DismissRepositoryVulnerabilityAlertInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The reason the Dependabot alert is being dismissed. */ - dismissReason: DismissReason; - /** The Dependabot alert ID to dismiss. */ - repositoryVulnerabilityAlertId: Scalars['ID']; -} - -/** Specifies a review comment to be left with a Pull Request Review. */ -export interface DraftPullRequestReviewComment { - /** Body of the comment to leave. */ - body: Scalars['String']; - /** Path to the file being commented on. */ - path: Scalars['String']; - /** Position in the file to leave a comment on. */ - position: Scalars['Int']; -} - -/** Specifies a review comment thread to be left with a Pull Request Review. */ -export interface DraftPullRequestReviewThread { - /** Body of the comment to leave. */ - body: Scalars['String']; - /** The line of the blob to which the thread refers. The end of the line range for multi-line comments. */ - line: Scalars['Int']; - /** Path to the file being commented on. */ - path: Scalars['String']; - /** The side of the diff on which the line resides. For multi-line comments, this is the side for the end of the line range. */ - side?: InputMaybe; - /** The first line of the range to which the comment refers. */ - startLine?: InputMaybe; - /** The side of the diff on which the start line resides. */ - startSide?: InputMaybe; -} - -/** Autogenerated input type of EnablePullRequestAutoMerge */ -export interface EnablePullRequestAutoMergeInput { - /** The email address to associate with this merge. */ - authorEmail?: InputMaybe; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** Commit body to use for the commit when the PR is mergable; if omitted, a default message will be used. */ - commitBody?: InputMaybe; - /** Commit headline to use for the commit when the PR is mergable; if omitted, a default message will be used. */ - commitHeadline?: InputMaybe; - /** The merge method to use. If omitted, defaults to 'MERGE' */ - mergeMethod?: InputMaybe; - /** ID of the pull request to enable auto-merge on. */ - pullRequestId: Scalars['ID']; -} - -/** Ordering options for enterprise administrator invitation connections */ -export interface EnterpriseAdministratorInvitationOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order enterprise administrator invitations by. */ - field: EnterpriseAdministratorInvitationOrderField; -} - -/** Properties by which enterprise administrator invitation connections can be ordered. */ -export enum EnterpriseAdministratorInvitationOrderField { - /** Order enterprise administrator member invitations by creation time */ - CREATED_AT = 'CREATED_AT', -} - -/** The possible administrator roles in an enterprise account. */ -export enum EnterpriseAdministratorRole { - /** Represents a billing manager of the enterprise account. */ - BILLING_MANAGER = 'BILLING_MANAGER', - /** Represents an owner of the enterprise account. */ - OWNER = 'OWNER', -} - -/** The possible values for the enterprise base repository permission setting. */ -export enum EnterpriseDefaultRepositoryPermissionSettingValue { - /** Organization members will be able to clone, pull, push, and add new collaborators to all organization repositories. */ - ADMIN = 'ADMIN', - /** Organization members will only be able to clone and pull public repositories. */ - NONE = 'NONE', - /** Organizations in the enterprise choose base repository permissions for their members. */ - NO_POLICY = 'NO_POLICY', - /** Organization members will be able to clone and pull all organization repositories. */ - READ = 'READ', - /** Organization members will be able to clone, pull, and push all organization repositories. */ - WRITE = 'WRITE', -} - -/** The possible values for an enabled/disabled enterprise setting. */ -export enum EnterpriseEnabledDisabledSettingValue { - /** The setting is disabled for organizations in the enterprise. */ - DISABLED = 'DISABLED', - /** The setting is enabled for organizations in the enterprise. */ - ENABLED = 'ENABLED', - /** There is no policy set for organizations in the enterprise. */ - NO_POLICY = 'NO_POLICY', -} - -/** The possible values for an enabled/no policy enterprise setting. */ -export enum EnterpriseEnabledSettingValue { - /** The setting is enabled for organizations in the enterprise. */ - ENABLED = 'ENABLED', - /** There is no policy set for organizations in the enterprise. */ - NO_POLICY = 'NO_POLICY', -} - -/** Ordering options for enterprise member connections. */ -export interface EnterpriseMemberOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order enterprise members by. */ - field: EnterpriseMemberOrderField; -} - -/** Properties by which enterprise member connections can be ordered. */ -export enum EnterpriseMemberOrderField { - /** Order enterprise members by creation time */ - CREATED_AT = 'CREATED_AT', - /** Order enterprise members by login */ - LOGIN = 'LOGIN', -} - -/** The possible values for the enterprise members can create repositories setting. */ -export enum EnterpriseMembersCanCreateRepositoriesSettingValue { - /** Members will be able to create public and private repositories. */ - ALL = 'ALL', - /** Members will not be able to create public or private repositories. */ - DISABLED = 'DISABLED', - /** Organization administrators choose whether to allow members to create repositories. */ - NO_POLICY = 'NO_POLICY', - /** Members will be able to create only private repositories. */ - PRIVATE = 'PRIVATE', - /** Members will be able to create only public repositories. */ - PUBLIC = 'PUBLIC', -} - -/** The possible values for the members can make purchases setting. */ -export enum EnterpriseMembersCanMakePurchasesSettingValue { - /** The setting is disabled for organizations in the enterprise. */ - DISABLED = 'DISABLED', - /** The setting is enabled for organizations in the enterprise. */ - ENABLED = 'ENABLED', -} - -/** Ordering options for Enterprise Server installation connections. */ -export interface EnterpriseServerInstallationOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order Enterprise Server installations by. */ - field: EnterpriseServerInstallationOrderField; -} - -/** Properties by which Enterprise Server installation connections can be ordered. */ -export enum EnterpriseServerInstallationOrderField { - /** Order Enterprise Server installations by creation time */ - CREATED_AT = 'CREATED_AT', - /** Order Enterprise Server installations by customer name */ - CUSTOMER_NAME = 'CUSTOMER_NAME', - /** Order Enterprise Server installations by host name */ - HOST_NAME = 'HOST_NAME', -} - -/** Ordering options for Enterprise Server user account email connections. */ -export interface EnterpriseServerUserAccountEmailOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order emails by. */ - field: EnterpriseServerUserAccountEmailOrderField; -} - -/** Properties by which Enterprise Server user account email connections can be ordered. */ -export enum EnterpriseServerUserAccountEmailOrderField { - /** Order emails by email */ - EMAIL = 'EMAIL', -} - -/** Ordering options for Enterprise Server user account connections. */ -export interface EnterpriseServerUserAccountOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order user accounts by. */ - field: EnterpriseServerUserAccountOrderField; -} - -/** Properties by which Enterprise Server user account connections can be ordered. */ -export enum EnterpriseServerUserAccountOrderField { - /** Order user accounts by login */ - LOGIN = 'LOGIN', - /** Order user accounts by creation time on the Enterprise Server installation */ - REMOTE_CREATED_AT = 'REMOTE_CREATED_AT', -} - -/** Ordering options for Enterprise Server user accounts upload connections. */ -export interface EnterpriseServerUserAccountsUploadOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order user accounts uploads by. */ - field: EnterpriseServerUserAccountsUploadOrderField; -} - -/** Properties by which Enterprise Server user accounts upload connections can be ordered. */ -export enum EnterpriseServerUserAccountsUploadOrderField { - /** Order user accounts uploads by creation time */ - CREATED_AT = 'CREATED_AT', -} - -/** Synchronization state of the Enterprise Server user accounts upload */ -export enum EnterpriseServerUserAccountsUploadSyncState { - /** The synchronization of the upload failed. */ - FAILURE = 'FAILURE', - /** The synchronization of the upload is pending. */ - PENDING = 'PENDING', - /** The synchronization of the upload succeeded. */ - SUCCESS = 'SUCCESS', -} - -/** The possible roles for enterprise membership. */ -export enum EnterpriseUserAccountMembershipRole { - /** The user is a member of the enterprise membership. */ - MEMBER = 'MEMBER', - /** The user is an owner of the enterprise membership. */ - OWNER = 'OWNER', -} - -/** The possible GitHub Enterprise deployments where this user can exist. */ -export enum EnterpriseUserDeployment { - /** The user is part of a GitHub Enterprise Cloud deployment. */ - CLOUD = 'CLOUD', - /** The user is part of a GitHub Enterprise Server deployment. */ - SERVER = 'SERVER', -} - -/** A command to add a file at the given path with the given contents as part of a commit. Any existing file at that that path will be replaced. */ -export interface FileAddition { - /** The base64 encoded contents of the file */ - contents: Scalars['Base64String']; - /** The path in the repository where the file will be located */ - path: Scalars['String']; -} - -/** - * A description of a set of changes to a file tree to be made as part of - * a git commit, modeled as zero or more file `additions` and zero or more - * file `deletions`. - * - * Both fields are optional; omitting both will produce a commit with no - * file changes. - * - * `deletions` and `additions` describe changes to files identified - * by their path in the git tree using unix-style path separators, i.e. - * `/`. The root of a git tree is an empty string, so paths are not - * slash-prefixed. - * - * `path` values must be unique across all `additions` and `deletions` - * provided. Any duplication will result in a validation error. - * - * ### Encoding - * - * File contents must be provided in full for each `FileAddition`. - * - * The `contents` of a `FileAddition` must be encoded using RFC 4648 - * compliant base64, i.e. correct padding is required and no characters - * outside the standard alphabet may be used. Invalid base64 - * encoding will be rejected with a validation error. - * - * The encoded contents may be binary. - * - * For text files, no assumptions are made about the character encoding of - * the file contents (after base64 decoding). No charset transcoding or - * line-ending normalization will be performed; it is the client's - * responsibility to manage the character encoding of files they provide. - * However, for maximum compatibility we recommend using UTF-8 encoding - * and ensuring that all files in a repository use a consistent - * line-ending convention (`\n` or `\r\n`), and that all files end - * with a newline. - * - * ### Modeling file changes - * - * Each of the the five types of conceptual changes that can be made in a - * git commit can be described using the `FileChanges` type as follows: - * - * 1. New file addition: create file `hello world\n` at path `docs/README.txt`: - * - * { - * "additions" [ - * { - * "path": "docs/README.txt", - * "contents": base64encode("hello world\n") - * } - * ] - * } - * - * 2. Existing file modification: change existing `docs/README.txt` to have new - * content `new content here\n`: - * - * { - * "additions" [ - * { - * "path": "docs/README.txt", - * "contents": base64encode("new content here\n") - * } - * ] - * } - * - * 3. Existing file deletion: remove existing file `docs/README.txt`. - * Note that the path is required to exist -- specifying a - * path that does not exist on the given branch will abort the - * commit and return an error. - * - * { - * "deletions" [ - * { - * "path": "docs/README.txt" - * } - * ] - * } - * - * - * 4. File rename with no changes: rename `docs/README.txt` with - * previous content `hello world\n` to the same content at - * `newdocs/README.txt`: - * - * { - * "deletions" [ - * { - * "path": "docs/README.txt", - * } - * ], - * "additions" [ - * { - * "path": "newdocs/README.txt", - * "contents": base64encode("hello world\n") - * } - * ] - * } - * - * - * 5. File rename with changes: rename `docs/README.txt` with - * previous content `hello world\n` to a file at path - * `newdocs/README.txt` with content `new contents\n`: - * - * { - * "deletions" [ - * { - * "path": "docs/README.txt", - * } - * ], - * "additions" [ - * { - * "path": "newdocs/README.txt", - * "contents": base64encode("new contents\n") - * } - * ] - * } - */ -export interface FileChanges { - /** File to add or change. */ - additions?: InputMaybe>; - /** Files to delete. */ - deletions?: InputMaybe>; -} - -/** A command to delete the file at the given path as part of a commit. */ -export interface FileDeletion { - /** The path to delete */ - path: Scalars['String']; -} - -/** The possible viewed states of a file . */ -export enum FileViewedState { - /** The file has new changes since last viewed. */ - DISMISSED = 'DISMISSED', - /** The file has not been marked as viewed. */ - UNVIEWED = 'UNVIEWED', - /** The file has been marked as viewed. */ - VIEWED = 'VIEWED', -} - -/** Autogenerated input type of FollowUser */ -export interface FollowUserInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** ID of the user to follow. */ - userId: Scalars['ID']; -} - -/** The possible funding platforms for repository funding links. */ -export enum FundingPlatform { - /** Community Bridge funding platform. */ - COMMUNITY_BRIDGE = 'COMMUNITY_BRIDGE', - /** Custom funding platform. */ - CUSTOM = 'CUSTOM', - /** GitHub funding platform. */ - GITHUB = 'GITHUB', - /** IssueHunt funding platform. */ - ISSUEHUNT = 'ISSUEHUNT', - /** Ko-fi funding platform. */ - KO_FI = 'KO_FI', - /** Liberapay funding platform. */ - LIBERAPAY = 'LIBERAPAY', - /** Open Collective funding platform. */ - OPEN_COLLECTIVE = 'OPEN_COLLECTIVE', - /** Otechie funding platform. */ - OTECHIE = 'OTECHIE', - /** Patreon funding platform. */ - PATREON = 'PATREON', - /** Tidelift funding platform. */ - TIDELIFT = 'TIDELIFT', -} - -/** Ordering options for gist connections */ -export interface GistOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order repositories by. */ - field: GistOrderField; -} - -/** Properties by which gist connections can be ordered. */ -export enum GistOrderField { - /** Order gists by creation time */ - CREATED_AT = 'CREATED_AT', - /** Order gists by push time */ - PUSHED_AT = 'PUSHED_AT', - /** Order gists by update time */ - UPDATED_AT = 'UPDATED_AT', -} - -/** The privacy of a Gist */ -export enum GistPrivacy { - /** Gists that are public and secret */ - ALL = 'ALL', - /** Public */ - PUBLIC = 'PUBLIC', - /** Secret */ - SECRET = 'SECRET', -} - -/** The state of a Git signature. */ -export enum GitSignatureState { - /** The signing certificate or its chain could not be verified */ - BAD_CERT = 'BAD_CERT', - /** Invalid email used for signing */ - BAD_EMAIL = 'BAD_EMAIL', - /** Signing key expired */ - EXPIRED_KEY = 'EXPIRED_KEY', - /** Internal error - the GPG verification service misbehaved */ - GPGVERIFY_ERROR = 'GPGVERIFY_ERROR', - /** Internal error - the GPG verification service is unavailable at the moment */ - GPGVERIFY_UNAVAILABLE = 'GPGVERIFY_UNAVAILABLE', - /** Invalid signature */ - INVALID = 'INVALID', - /** Malformed signature */ - MALFORMED_SIG = 'MALFORMED_SIG', - /** The usage flags for the key that signed this don't allow signing */ - NOT_SIGNING_KEY = 'NOT_SIGNING_KEY', - /** Email used for signing not known to GitHub */ - NO_USER = 'NO_USER', - /** Valid signature, though certificate revocation check failed */ - OCSP_ERROR = 'OCSP_ERROR', - /** Valid signature, pending certificate revocation checking */ - OCSP_PENDING = 'OCSP_PENDING', - /** One or more certificates in chain has been revoked */ - OCSP_REVOKED = 'OCSP_REVOKED', - /** Key used for signing not known to GitHub */ - UNKNOWN_KEY = 'UNKNOWN_KEY', - /** Unknown signature type */ - UNKNOWN_SIG_TYPE = 'UNKNOWN_SIG_TYPE', - /** Unsigned */ - UNSIGNED = 'UNSIGNED', - /** Email used for signing unverified on GitHub */ - UNVERIFIED_EMAIL = 'UNVERIFIED_EMAIL', - /** Valid signature and verified by GitHub */ - VALID = 'VALID', -} - -/** The possible states in which authentication can be configured with an identity provider. */ -export enum IdentityProviderConfigurationState { - /** Authentication with an identity provider is configured but not enforced. */ - CONFIGURED = 'CONFIGURED', - /** Authentication with an identity provider is configured and enforced. */ - ENFORCED = 'ENFORCED', - /** Authentication with an identity provider is not configured. */ - UNCONFIGURED = 'UNCONFIGURED', -} - -/** Autogenerated input type of InviteEnterpriseAdmin */ -export interface InviteEnterpriseAdminInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The email of the person to invite as an administrator. */ - email?: InputMaybe; - /** The ID of the enterprise to which you want to invite an administrator. */ - enterpriseId: Scalars['ID']; - /** The login of a user to invite as an administrator. */ - invitee?: InputMaybe; - /** The role of the administrator. */ - role?: InputMaybe; -} - -/** The possible values for the IP allow list enabled setting. */ -export enum IpAllowListEnabledSettingValue { - /** The setting is disabled for the owner. */ - DISABLED = 'DISABLED', - /** The setting is enabled for the owner. */ - ENABLED = 'ENABLED', -} - -/** Ordering options for IP allow list entry connections. */ -export interface IpAllowListEntryOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order IP allow list entries by. */ - field: IpAllowListEntryOrderField; -} - -/** Properties by which IP allow list entry connections can be ordered. */ -export enum IpAllowListEntryOrderField { - /** Order IP allow list entries by the allow list value. */ - ALLOW_LIST_VALUE = 'ALLOW_LIST_VALUE', - /** Order IP allow list entries by creation time. */ - CREATED_AT = 'CREATED_AT', -} - -/** The possible values for the IP allow list configuration for installed GitHub Apps setting. */ -export enum IpAllowListForInstalledAppsEnabledSettingValue { - /** The setting is disabled for the owner. */ - DISABLED = 'DISABLED', - /** The setting is enabled for the owner. */ - ENABLED = 'ENABLED', -} - -/** Ways in which lists of issue comments can be ordered upon return. */ -export interface IssueCommentOrder { - /** The direction in which to order issue comments by the specified field. */ - direction: OrderDirection; - /** The field in which to order issue comments by. */ - field: IssueCommentOrderField; -} - -/** Properties by which issue comment connections can be ordered. */ -export enum IssueCommentOrderField { - /** Order issue comments by update time */ - UPDATED_AT = 'UPDATED_AT', -} - -/** Ways in which to filter lists of issues. */ -export interface IssueFilters { - /** List issues assigned to given name. Pass in `null` for issues with no assigned user, and `*` for issues assigned to any user. */ - assignee?: InputMaybe; - /** List issues created by given name. */ - createdBy?: InputMaybe; - /** List issues where the list of label names exist on the issue. */ - labels?: InputMaybe>; - /** List issues where the given name is mentioned in the issue. */ - mentioned?: InputMaybe; - /** List issues by given milestone argument. If an string representation of an integer is passed, it should refer to a milestone by its number field. Pass in `null` for issues with no milestone, and `*` for issues that are assigned to any milestone. */ - milestone?: InputMaybe; - /** List issues that have been updated at or after the given date. */ - since?: InputMaybe; - /** List issues filtered by the list of states given. */ - states?: InputMaybe>; - /** List issues subscribed to by viewer. */ - viewerSubscribed?: InputMaybe; -} - -/** Ways in which lists of issues can be ordered upon return. */ -export interface IssueOrder { - /** The direction in which to order issues by the specified field. */ - direction: OrderDirection; - /** The field in which to order issues by. */ - field: IssueOrderField; -} - -/** Properties by which issue connections can be ordered. */ -export enum IssueOrderField { - /** Order issues by comment count */ - COMMENTS = 'COMMENTS', - /** Order issues by creation time */ - CREATED_AT = 'CREATED_AT', - /** Order issues by update time */ - UPDATED_AT = 'UPDATED_AT', -} - -/** The possible states of an issue. */ -export enum IssueState { - /** An issue that has been closed */ - CLOSED = 'CLOSED', - /** An issue that is still open */ - OPEN = 'OPEN', -} - -/** The possible item types found in a timeline. */ -export enum IssueTimelineItemsItemType { - /** Represents a 'added_to_project' event on a given issue or pull request. */ - ADDED_TO_PROJECT_EVENT = 'ADDED_TO_PROJECT_EVENT', - /** Represents an 'assigned' event on any assignable object. */ - ASSIGNED_EVENT = 'ASSIGNED_EVENT', - /** Represents a 'closed' event on any `Closable`. */ - CLOSED_EVENT = 'CLOSED_EVENT', - /** Represents a 'comment_deleted' event on a given issue or pull request. */ - COMMENT_DELETED_EVENT = 'COMMENT_DELETED_EVENT', - /** Represents a 'connected' event on a given issue or pull request. */ - CONNECTED_EVENT = 'CONNECTED_EVENT', - /** Represents a 'converted_note_to_issue' event on a given issue or pull request. */ - CONVERTED_NOTE_TO_ISSUE_EVENT = 'CONVERTED_NOTE_TO_ISSUE_EVENT', - /** Represents a 'converted_to_discussion' event on a given issue. */ - CONVERTED_TO_DISCUSSION_EVENT = 'CONVERTED_TO_DISCUSSION_EVENT', - /** Represents a mention made by one issue or pull request to another. */ - CROSS_REFERENCED_EVENT = 'CROSS_REFERENCED_EVENT', - /** Represents a 'demilestoned' event on a given issue or pull request. */ - DEMILESTONED_EVENT = 'DEMILESTONED_EVENT', - /** Represents a 'disconnected' event on a given issue or pull request. */ - DISCONNECTED_EVENT = 'DISCONNECTED_EVENT', - /** Represents a comment on an Issue. */ - ISSUE_COMMENT = 'ISSUE_COMMENT', - /** Represents a 'labeled' event on a given issue or pull request. */ - LABELED_EVENT = 'LABELED_EVENT', - /** Represents a 'locked' event on a given issue or pull request. */ - LOCKED_EVENT = 'LOCKED_EVENT', - /** Represents a 'marked_as_duplicate' event on a given issue or pull request. */ - MARKED_AS_DUPLICATE_EVENT = 'MARKED_AS_DUPLICATE_EVENT', - /** Represents a 'mentioned' event on a given issue or pull request. */ - MENTIONED_EVENT = 'MENTIONED_EVENT', - /** Represents a 'milestoned' event on a given issue or pull request. */ - MILESTONED_EVENT = 'MILESTONED_EVENT', - /** Represents a 'moved_columns_in_project' event on a given issue or pull request. */ - MOVED_COLUMNS_IN_PROJECT_EVENT = 'MOVED_COLUMNS_IN_PROJECT_EVENT', - /** Represents a 'pinned' event on a given issue or pull request. */ - PINNED_EVENT = 'PINNED_EVENT', - /** Represents a 'referenced' event on a given `ReferencedSubject`. */ - REFERENCED_EVENT = 'REFERENCED_EVENT', - /** Represents a 'removed_from_project' event on a given issue or pull request. */ - REMOVED_FROM_PROJECT_EVENT = 'REMOVED_FROM_PROJECT_EVENT', - /** Represents a 'renamed' event on a given issue or pull request */ - RENAMED_TITLE_EVENT = 'RENAMED_TITLE_EVENT', - /** Represents a 'reopened' event on any `Closable`. */ - REOPENED_EVENT = 'REOPENED_EVENT', - /** Represents a 'subscribed' event on a given `Subscribable`. */ - SUBSCRIBED_EVENT = 'SUBSCRIBED_EVENT', - /** Represents a 'transferred' event on a given issue or pull request. */ - TRANSFERRED_EVENT = 'TRANSFERRED_EVENT', - /** Represents an 'unassigned' event on any assignable object. */ - UNASSIGNED_EVENT = 'UNASSIGNED_EVENT', - /** Represents an 'unlabeled' event on a given issue or pull request. */ - UNLABELED_EVENT = 'UNLABELED_EVENT', - /** Represents an 'unlocked' event on a given issue or pull request. */ - UNLOCKED_EVENT = 'UNLOCKED_EVENT', - /** Represents an 'unmarked_as_duplicate' event on a given issue or pull request. */ - UNMARKED_AS_DUPLICATE_EVENT = 'UNMARKED_AS_DUPLICATE_EVENT', - /** Represents an 'unpinned' event on a given issue or pull request. */ - UNPINNED_EVENT = 'UNPINNED_EVENT', - /** Represents an 'unsubscribed' event on a given `Subscribable`. */ - UNSUBSCRIBED_EVENT = 'UNSUBSCRIBED_EVENT', - /** Represents a 'user_blocked' event on a given user. */ - USER_BLOCKED_EVENT = 'USER_BLOCKED_EVENT', -} - -/** Ways in which lists of labels can be ordered upon return. */ -export interface LabelOrder { - /** The direction in which to order labels by the specified field. */ - direction: OrderDirection; - /** The field in which to order labels by. */ - field: LabelOrderField; -} - -/** Properties by which label connections can be ordered. */ -export enum LabelOrderField { - /** Order labels by creation time */ - CREATED_AT = 'CREATED_AT', - /** Order labels by name */ - NAME = 'NAME', -} - -/** Ordering options for language connections. */ -export interface LanguageOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order languages by. */ - field: LanguageOrderField; -} - -/** Properties by which language connections can be ordered. */ -export enum LanguageOrderField { - /** Order languages by the size of all files containing the language */ - SIZE = 'SIZE', -} - -/** Autogenerated input type of LinkRepositoryToProject */ -export interface LinkRepositoryToProjectInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the Project to link to a Repository */ - projectId: Scalars['ID']; - /** The ID of the Repository to link to a Project. */ - repositoryId: Scalars['ID']; -} - -/** Autogenerated input type of LockLockable */ -export interface LockLockableInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** A reason for why the item will be locked. */ - lockReason?: InputMaybe; - /** ID of the item to be locked. */ - lockableId: Scalars['ID']; -} - -/** The possible reasons that an issue or pull request was locked. */ -export enum LockReason { - /** The issue or pull request was locked because the conversation was off-topic. */ - OFF_TOPIC = 'OFF_TOPIC', - /** The issue or pull request was locked because the conversation was resolved. */ - RESOLVED = 'RESOLVED', - /** The issue or pull request was locked because the conversation was spam. */ - SPAM = 'SPAM', - /** The issue or pull request was locked because the conversation was too heated. */ - TOO_HEATED = 'TOO_HEATED', -} - -/** Autogenerated input type of MarkDiscussionCommentAsAnswer */ -export interface MarkDiscussionCommentAsAnswerInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node ID of the discussion comment to mark as an answer. */ - id: Scalars['ID']; -} - -/** Autogenerated input type of MarkFileAsViewed */ -export interface MarkFileAsViewedInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The path of the file to mark as viewed */ - path: Scalars['String']; - /** The Node ID of the pull request. */ - pullRequestId: Scalars['ID']; -} - -/** Autogenerated input type of MarkPullRequestReadyForReview */ -export interface MarkPullRequestReadyForReviewInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** ID of the pull request to be marked as ready for review. */ - pullRequestId: Scalars['ID']; -} - -/** Autogenerated input type of MergeBranch */ -export interface MergeBranchInput { - /** The email address to associate with this commit. */ - authorEmail?: InputMaybe; - /** The name of the base branch that the provided head will be merged into. */ - base: Scalars['String']; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** Message to use for the merge commit. If omitted, a default will be used. */ - commitMessage?: InputMaybe; - /** The head to merge into the base branch. This can be a branch name or a commit GitObjectID. */ - head: Scalars['String']; - /** The Node ID of the Repository containing the base branch that will be modified. */ - repositoryId: Scalars['ID']; -} - -/** Autogenerated input type of MergePullRequest */ -export interface MergePullRequestInput { - /** The email address to associate with this merge. */ - authorEmail?: InputMaybe; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** Commit body to use for the merge commit; if omitted, a default message will be used */ - commitBody?: InputMaybe; - /** Commit headline to use for the merge commit; if omitted, a default message will be used. */ - commitHeadline?: InputMaybe; - /** OID that the pull request head ref must match to allow merge; if omitted, no check is performed. */ - expectedHeadOid?: InputMaybe; - /** The merge method to use. If omitted, defaults to 'MERGE' */ - mergeMethod?: InputMaybe; - /** ID of the pull request to be merged. */ - pullRequestId: Scalars['ID']; -} - -/** Whether or not a PullRequest can be merged. */ -export enum MergeableState { - /** The pull request cannot be merged due to merge conflicts. */ - CONFLICTING = 'CONFLICTING', - /** The pull request can be merged. */ - MERGEABLE = 'MERGEABLE', - /** The mergeability of the pull request is still being calculated. */ - UNKNOWN = 'UNKNOWN', -} - -/** Ordering options for milestone connections. */ -export interface MilestoneOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order milestones by. */ - field: MilestoneOrderField; -} - -/** Properties by which milestone connections can be ordered. */ -export enum MilestoneOrderField { - /** Order milestones by when they were created. */ - CREATED_AT = 'CREATED_AT', - /** Order milestones by when they are due. */ - DUE_DATE = 'DUE_DATE', - /** Order milestones by their number. */ - NUMBER = 'NUMBER', - /** Order milestones by when they were last updated. */ - UPDATED_AT = 'UPDATED_AT', -} - -/** The possible states of a milestone. */ -export enum MilestoneState { - /** A milestone that has been closed. */ - CLOSED = 'CLOSED', - /** A milestone that is still open. */ - OPEN = 'OPEN', -} - -/** Autogenerated input type of MinimizeComment */ -export interface MinimizeCommentInput { - /** The classification of comment */ - classifier: ReportedContentClassifiers; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node ID of the subject to modify. */ - subjectId: Scalars['ID']; -} - -/** Autogenerated input type of MoveProjectCard */ -export interface MoveProjectCardInput { - /** Place the new card after the card with this id. Pass null to place it at the top. */ - afterCardId?: InputMaybe; - /** The id of the card to move. */ - cardId: Scalars['ID']; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The id of the column to move it into. */ - columnId: Scalars['ID']; -} - -/** Autogenerated input type of MoveProjectColumn */ -export interface MoveProjectColumnInput { - /** Place the new column after the column with this id. Pass null to place it at the front. */ - afterColumnId?: InputMaybe; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The id of the column to move. */ - columnId: Scalars['ID']; -} - -/** The possible values for the notification restriction setting. */ -export enum NotificationRestrictionSettingValue { - /** The setting is disabled for the owner. */ - DISABLED = 'DISABLED', - /** The setting is enabled for the owner. */ - ENABLED = 'ENABLED', -} - -/** The OIDC identity provider type */ -export enum OIDCProviderType { - /** Azure Active Directory */ - AAD = 'AAD', -} - -/** The state of an OAuth Application when it was created. */ -export enum OauthApplicationCreateAuditEntryState { - /** The OAuth Application was active and allowed to have OAuth Accesses. */ - ACTIVE = 'ACTIVE', - /** The OAuth Application was in the process of being deleted. */ - PENDING_DELETION = 'PENDING_DELETION', - /** The OAuth Application was suspended from generating OAuth Accesses due to abuse or security concerns. */ - SUSPENDED = 'SUSPENDED', -} - -/** The corresponding operation type for the action */ -export enum OperationType { - /** An existing resource was accessed */ - ACCESS = 'ACCESS', - /** A resource performed an authentication event */ - AUTHENTICATION = 'AUTHENTICATION', - /** A new resource was created */ - CREATE = 'CREATE', - /** An existing resource was modified */ - MODIFY = 'MODIFY', - /** An existing resource was removed */ - REMOVE = 'REMOVE', - /** An existing resource was restored */ - RESTORE = 'RESTORE', - /** An existing resource was transferred between multiple resources */ - TRANSFER = 'TRANSFER', -} - -/** Possible directions in which to order a list of items when provided an `orderBy` argument. */ -export enum OrderDirection { - /** Specifies an ascending order for a given `orderBy` argument. */ - ASC = 'ASC', - /** Specifies a descending order for a given `orderBy` argument. */ - DESC = 'DESC', -} - -/** The permissions available to members on an Organization. */ -export enum OrgAddMemberAuditEntryPermission { - /** Can read, clone, push, and add collaborators to repositories. */ - ADMIN = 'ADMIN', - /** Can read and clone repositories. */ - READ = 'READ', -} - -/** The billing plans available for organizations. */ -export enum OrgCreateAuditEntryBillingPlan { - /** Team Plan */ - BUSINESS = 'BUSINESS', - /** Enterprise Cloud Plan */ - BUSINESS_PLUS = 'BUSINESS_PLUS', - /** Free Plan */ - FREE = 'FREE', - /** Tiered Per Seat Plan */ - TIERED_PER_SEAT = 'TIERED_PER_SEAT', - /** Legacy Unlimited Plan */ - UNLIMITED = 'UNLIMITED', -} - -/** The reason a billing manager was removed from an Organization. */ -export enum OrgRemoveBillingManagerAuditEntryReason { - /** SAML external identity missing */ - SAML_EXTERNAL_IDENTITY_MISSING = 'SAML_EXTERNAL_IDENTITY_MISSING', - /** SAML SSO enforcement requires an external identity */ - SAML_SSO_ENFORCEMENT_REQUIRES_EXTERNAL_IDENTITY = 'SAML_SSO_ENFORCEMENT_REQUIRES_EXTERNAL_IDENTITY', - /** The organization required 2FA of its billing managers and this user did not have 2FA enabled. */ - TWO_FACTOR_REQUIREMENT_NON_COMPLIANCE = 'TWO_FACTOR_REQUIREMENT_NON_COMPLIANCE', -} - -/** The type of membership a user has with an Organization. */ -export enum OrgRemoveMemberAuditEntryMembershipType { - /** Organization administrators have full access and can change several settings, including the names of repositories that belong to the Organization and Owners team membership. In addition, organization admins can delete the organization and all of its repositories. */ - ADMIN = 'ADMIN', - /** A billing manager is a user who manages the billing settings for the Organization, such as updating payment information. */ - BILLING_MANAGER = 'BILLING_MANAGER', - /** A direct member is a user that is a member of the Organization. */ - DIRECT_MEMBER = 'DIRECT_MEMBER', - /** An outside collaborator is a person who isn't explicitly a member of the Organization, but who has Read, Write, or Admin permissions to one or more repositories in the organization. */ - OUTSIDE_COLLABORATOR = 'OUTSIDE_COLLABORATOR', - /** An unaffiliated collaborator is a person who is not a member of the Organization and does not have access to any repositories in the Organization. */ - UNAFFILIATED = 'UNAFFILIATED', -} - -/** The reason a member was removed from an Organization. */ -export enum OrgRemoveMemberAuditEntryReason { - /** SAML external identity missing */ - SAML_EXTERNAL_IDENTITY_MISSING = 'SAML_EXTERNAL_IDENTITY_MISSING', - /** SAML SSO enforcement requires an external identity */ - SAML_SSO_ENFORCEMENT_REQUIRES_EXTERNAL_IDENTITY = 'SAML_SSO_ENFORCEMENT_REQUIRES_EXTERNAL_IDENTITY', - /** User was removed from organization during account recovery */ - TWO_FACTOR_ACCOUNT_RECOVERY = 'TWO_FACTOR_ACCOUNT_RECOVERY', - /** The organization required 2FA of its billing managers and this user did not have 2FA enabled. */ - TWO_FACTOR_REQUIREMENT_NON_COMPLIANCE = 'TWO_FACTOR_REQUIREMENT_NON_COMPLIANCE', - /** User account has been deleted */ - USER_ACCOUNT_DELETED = 'USER_ACCOUNT_DELETED', -} - -/** The type of membership a user has with an Organization. */ -export enum OrgRemoveOutsideCollaboratorAuditEntryMembershipType { - /** A billing manager is a user who manages the billing settings for the Organization, such as updating payment information. */ - BILLING_MANAGER = 'BILLING_MANAGER', - /** An outside collaborator is a person who isn't explicitly a member of the Organization, but who has Read, Write, or Admin permissions to one or more repositories in the organization. */ - OUTSIDE_COLLABORATOR = 'OUTSIDE_COLLABORATOR', - /** An unaffiliated collaborator is a person who is not a member of the Organization and does not have access to any repositories in the organization. */ - UNAFFILIATED = 'UNAFFILIATED', -} - -/** The reason an outside collaborator was removed from an Organization. */ -export enum OrgRemoveOutsideCollaboratorAuditEntryReason { - /** SAML external identity missing */ - SAML_EXTERNAL_IDENTITY_MISSING = 'SAML_EXTERNAL_IDENTITY_MISSING', - /** The organization required 2FA of its billing managers and this user did not have 2FA enabled. */ - TWO_FACTOR_REQUIREMENT_NON_COMPLIANCE = 'TWO_FACTOR_REQUIREMENT_NON_COMPLIANCE', -} - -/** The default permission a repository can have in an Organization. */ -export enum OrgUpdateDefaultRepositoryPermissionAuditEntryPermission { - /** Can read, clone, push, and add collaborators to repositories. */ - ADMIN = 'ADMIN', - /** No default permission value. */ - NONE = 'NONE', - /** Can read and clone repositories. */ - READ = 'READ', - /** Can read, clone and push to repositories. */ - WRITE = 'WRITE', -} - -/** The permissions available to members on an Organization. */ -export enum OrgUpdateMemberAuditEntryPermission { - /** Can read, clone, push, and add collaborators to repositories. */ - ADMIN = 'ADMIN', - /** Can read and clone repositories. */ - READ = 'READ', -} - -/** The permissions available for repository creation on an Organization. */ -export enum OrgUpdateMemberRepositoryCreationPermissionAuditEntryVisibility { - /** All organization members are restricted from creating any repositories. */ - ALL = 'ALL', - /** All organization members are restricted from creating internal repositories. */ - INTERNAL = 'INTERNAL', - /** All organization members are allowed to create any repositories. */ - NONE = 'NONE', - /** All organization members are restricted from creating private repositories. */ - PRIVATE = 'PRIVATE', - /** All organization members are restricted from creating private or internal repositories. */ - PRIVATE_INTERNAL = 'PRIVATE_INTERNAL', - /** All organization members are restricted from creating public repositories. */ - PUBLIC = 'PUBLIC', - /** All organization members are restricted from creating public or internal repositories. */ - PUBLIC_INTERNAL = 'PUBLIC_INTERNAL', - /** All organization members are restricted from creating public or private repositories. */ - PUBLIC_PRIVATE = 'PUBLIC_PRIVATE', -} - -/** The possible organization invitation roles. */ -export enum OrganizationInvitationRole { - /** The user is invited to be an admin of the organization. */ - ADMIN = 'ADMIN', - /** The user is invited to be a billing manager of the organization. */ - BILLING_MANAGER = 'BILLING_MANAGER', - /** The user is invited to be a direct member of the organization. */ - DIRECT_MEMBER = 'DIRECT_MEMBER', - /** The user's previous role will be reinstated. */ - REINSTATE = 'REINSTATE', -} - -/** The possible organization invitation types. */ -export enum OrganizationInvitationType { - /** The invitation was to an email address. */ - EMAIL = 'EMAIL', - /** The invitation was to an existing user. */ - USER = 'USER', -} - -/** The possible roles within an organization for its members. */ -export enum OrganizationMemberRole { - /** The user is an administrator of the organization. */ - ADMIN = 'ADMIN', - /** The user is a member of the organization. */ - MEMBER = 'MEMBER', -} - -/** The possible values for the members can create repositories setting on an organization. */ -export enum OrganizationMembersCanCreateRepositoriesSettingValue { - /** Members will be able to create public and private repositories. */ - ALL = 'ALL', - /** Members will not be able to create public or private repositories. */ - DISABLED = 'DISABLED', - /** Members will be able to create only internal repositories. */ - INTERNAL = 'INTERNAL', - /** Members will be able to create only private repositories. */ - PRIVATE = 'PRIVATE', -} - -/** Ordering options for organization connections. */ -export interface OrganizationOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order organizations by. */ - field: OrganizationOrderField; -} - -/** Properties by which organization connections can be ordered. */ -export enum OrganizationOrderField { - /** Order organizations by creation time */ - CREATED_AT = 'CREATED_AT', - /** Order organizations by login */ - LOGIN = 'LOGIN', -} - -/** Ways in which lists of package files can be ordered upon return. */ -export interface PackageFileOrder { - /** The direction in which to order package files by the specified field. */ - direction?: InputMaybe; - /** The field in which to order package files by. */ - field?: InputMaybe; -} - -/** Properties by which package file connections can be ordered. */ -export enum PackageFileOrderField { - /** Order package files by creation time */ - CREATED_AT = 'CREATED_AT', -} - -/** Ways in which lists of packages can be ordered upon return. */ -export interface PackageOrder { - /** The direction in which to order packages by the specified field. */ - direction?: InputMaybe; - /** The field in which to order packages by. */ - field?: InputMaybe; -} - -/** Properties by which package connections can be ordered. */ -export enum PackageOrderField { - /** Order packages by creation time */ - CREATED_AT = 'CREATED_AT', -} - -/** The possible types of a package. */ -export enum PackageType { - /** A debian package. */ - DEBIAN = 'DEBIAN', - /** A docker image. */ - DOCKER = 'DOCKER', - /** A maven package. */ - MAVEN = 'MAVEN', - /** An npm package. */ - NPM = 'NPM', - /** A nuget package. */ - NUGET = 'NUGET', - /** A python package. */ - PYPI = 'PYPI', - /** A rubygems package. */ - RUBYGEMS = 'RUBYGEMS', -} - -/** Ways in which lists of package versions can be ordered upon return. */ -export interface PackageVersionOrder { - /** The direction in which to order package versions by the specified field. */ - direction?: InputMaybe; - /** The field in which to order package versions by. */ - field?: InputMaybe; -} - -/** Properties by which package version connections can be ordered. */ -export enum PackageVersionOrderField { - /** Order package versions by creation time */ - CREATED_AT = 'CREATED_AT', -} - -/** Autogenerated input type of PinIssue */ -export interface PinIssueInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the issue to be pinned */ - issueId: Scalars['ID']; -} - -/** Represents items that can be pinned to a profile page or dashboard. */ -export enum PinnableItemType { - /** A gist. */ - GIST = 'GIST', - /** An issue. */ - ISSUE = 'ISSUE', - /** An organization. */ - ORGANIZATION = 'ORGANIZATION', - /** A project. */ - PROJECT = 'PROJECT', - /** A pull request. */ - PULL_REQUEST = 'PULL_REQUEST', - /** A repository. */ - REPOSITORY = 'REPOSITORY', - /** A team. */ - TEAM = 'TEAM', - /** A user. */ - USER = 'USER', -} - -/** Preconfigured gradients that may be used to style discussions pinned within a repository. */ -export enum PinnedDiscussionGradient { - /** A gradient of blue to mint */ - BLUE_MINT = 'BLUE_MINT', - /** A gradient of blue to purple */ - BLUE_PURPLE = 'BLUE_PURPLE', - /** A gradient of pink to blue */ - PINK_BLUE = 'PINK_BLUE', - /** A gradient of purple to coral */ - PURPLE_CORAL = 'PURPLE_CORAL', - /** A gradient of red to orange */ - RED_ORANGE = 'RED_ORANGE', -} - -/** Preconfigured background patterns that may be used to style discussions pinned within a repository. */ -export enum PinnedDiscussionPattern { - /** An upward-facing chevron pattern */ - CHEVRON_UP = 'CHEVRON_UP', - /** A hollow dot pattern */ - DOT = 'DOT', - /** A solid dot pattern */ - DOT_FILL = 'DOT_FILL', - /** A heart pattern */ - HEART_FILL = 'HEART_FILL', - /** A plus sign pattern */ - PLUS = 'PLUS', - /** A lightning bolt pattern */ - ZAP = 'ZAP', -} - -/** The possible archived states of a project card. */ -export enum ProjectCardArchivedState { - /** A project card that is archived */ - ARCHIVED = 'ARCHIVED', - /** A project card that is not archived */ - NOT_ARCHIVED = 'NOT_ARCHIVED', -} - -/** Various content states of a ProjectCard */ -export enum ProjectCardState { - /** The card has content only. */ - CONTENT_ONLY = 'CONTENT_ONLY', - /** The card has a note only. */ - NOTE_ONLY = 'NOTE_ONLY', - /** The card is redacted. */ - REDACTED = 'REDACTED', -} - -/** The semantic purpose of the column - todo, in progress, or done. */ -export enum ProjectColumnPurpose { - /** The column contains cards which are complete */ - DONE = 'DONE', - /** The column contains cards which are currently being worked on */ - IN_PROGRESS = 'IN_PROGRESS', - /** The column contains cards still to be worked on */ - TODO = 'TODO', -} - -/** Properties by which the return project can be ordered. */ -export enum ProjectNextOrderField { - /** The project's date and time of creation */ - CREATED_AT = 'CREATED_AT', - /** The project's number */ - NUMBER = 'NUMBER', - /** The project's title */ - TITLE = 'TITLE', - /** The project's date and time of update */ - UPDATED_AT = 'UPDATED_AT', -} - -/** Ways in which lists of projects can be ordered upon return. */ -export interface ProjectOrder { - /** The direction in which to order projects by the specified field. */ - direction: OrderDirection; - /** The field in which to order projects by. */ - field: ProjectOrderField; -} - -/** Properties by which project connections can be ordered. */ -export enum ProjectOrderField { - /** Order projects by creation time */ - CREATED_AT = 'CREATED_AT', - /** Order projects by name */ - NAME = 'NAME', - /** Order projects by update time */ - UPDATED_AT = 'UPDATED_AT', -} - -/** State of the project; either 'open' or 'closed' */ -export enum ProjectState { - /** The project is closed. */ - CLOSED = 'CLOSED', - /** The project is open. */ - OPEN = 'OPEN', -} - -/** GitHub-provided templates for Projects */ -export enum ProjectTemplate { - /** Create a board with v2 triggers to automatically move cards across To do, In progress and Done columns. */ - AUTOMATED_KANBAN_V2 = 'AUTOMATED_KANBAN_V2', - /** Create a board with triggers to automatically move cards across columns with review automation. */ - AUTOMATED_REVIEWS_KANBAN = 'AUTOMATED_REVIEWS_KANBAN', - /** Create a board with columns for To do, In progress and Done. */ - BASIC_KANBAN = 'BASIC_KANBAN', - /** Create a board to triage and prioritize bugs with To do, priority, and Done columns. */ - BUG_TRIAGE = 'BUG_TRIAGE', -} - -/** Represents available types of methods to use when merging a pull request. */ -export enum PullRequestMergeMethod { - /** Add all commits from the head branch to the base branch with a merge commit. */ - MERGE = 'MERGE', - /** Add all commits from the head branch onto the base branch individually. */ - REBASE = 'REBASE', - /** Combine all commits from the head branch into a single commit in the base branch. */ - SQUASH = 'SQUASH', -} - -/** Ways in which lists of issues can be ordered upon return. */ -export interface PullRequestOrder { - /** The direction in which to order pull requests by the specified field. */ - direction: OrderDirection; - /** The field in which to order pull requests by. */ - field: PullRequestOrderField; -} - -/** Properties by which pull_requests connections can be ordered. */ -export enum PullRequestOrderField { - /** Order pull_requests by creation time */ - CREATED_AT = 'CREATED_AT', - /** Order pull_requests by update time */ - UPDATED_AT = 'UPDATED_AT', -} - -/** The possible states of a pull request review comment. */ -export enum PullRequestReviewCommentState { - /** A comment that is part of a pending review */ - PENDING = 'PENDING', - /** A comment that is part of a submitted review */ - SUBMITTED = 'SUBMITTED', -} - -/** The review status of a pull request. */ -export enum PullRequestReviewDecision { - /** The pull request has received an approving review. */ - APPROVED = 'APPROVED', - /** Changes have been requested on the pull request. */ - CHANGES_REQUESTED = 'CHANGES_REQUESTED', - /** A review is required before the pull request can be merged. */ - REVIEW_REQUIRED = 'REVIEW_REQUIRED', -} - -/** The possible events to perform on a pull request review. */ -export enum PullRequestReviewEvent { - /** Submit feedback and approve merging these changes. */ - APPROVE = 'APPROVE', - /** Submit general feedback without explicit approval. */ - COMMENT = 'COMMENT', - /** Dismiss review so it now longer effects merging. */ - DISMISS = 'DISMISS', - /** Submit feedback that must be addressed before merging. */ - REQUEST_CHANGES = 'REQUEST_CHANGES', -} - -/** The possible states of a pull request review. */ -export enum PullRequestReviewState { - /** A review allowing the pull request to merge. */ - APPROVED = 'APPROVED', - /** A review blocking the pull request from merging. */ - CHANGES_REQUESTED = 'CHANGES_REQUESTED', - /** An informational review. */ - COMMENTED = 'COMMENTED', - /** A review that has been dismissed. */ - DISMISSED = 'DISMISSED', - /** A review that has not yet been submitted. */ - PENDING = 'PENDING', -} - -/** The possible states of a pull request. */ -export enum PullRequestState { - /** A pull request that has been closed without being merged. */ - CLOSED = 'CLOSED', - /** A pull request that has been closed by being merged. */ - MERGED = 'MERGED', - /** A pull request that is still open. */ - OPEN = 'OPEN', -} - -/** The possible item types found in a timeline. */ -export enum PullRequestTimelineItemsItemType { - /** Represents a 'added_to_project' event on a given issue or pull request. */ - ADDED_TO_PROJECT_EVENT = 'ADDED_TO_PROJECT_EVENT', - /** Represents an 'assigned' event on any assignable object. */ - ASSIGNED_EVENT = 'ASSIGNED_EVENT', - /** Represents a 'automatic_base_change_failed' event on a given pull request. */ - AUTOMATIC_BASE_CHANGE_FAILED_EVENT = 'AUTOMATIC_BASE_CHANGE_FAILED_EVENT', - /** Represents a 'automatic_base_change_succeeded' event on a given pull request. */ - AUTOMATIC_BASE_CHANGE_SUCCEEDED_EVENT = 'AUTOMATIC_BASE_CHANGE_SUCCEEDED_EVENT', - /** Represents a 'auto_merge_disabled' event on a given pull request. */ - AUTO_MERGE_DISABLED_EVENT = 'AUTO_MERGE_DISABLED_EVENT', - /** Represents a 'auto_merge_enabled' event on a given pull request. */ - AUTO_MERGE_ENABLED_EVENT = 'AUTO_MERGE_ENABLED_EVENT', - /** Represents a 'auto_rebase_enabled' event on a given pull request. */ - AUTO_REBASE_ENABLED_EVENT = 'AUTO_REBASE_ENABLED_EVENT', - /** Represents a 'auto_squash_enabled' event on a given pull request. */ - AUTO_SQUASH_ENABLED_EVENT = 'AUTO_SQUASH_ENABLED_EVENT', - /** Represents a 'base_ref_changed' event on a given issue or pull request. */ - BASE_REF_CHANGED_EVENT = 'BASE_REF_CHANGED_EVENT', - /** Represents a 'base_ref_deleted' event on a given pull request. */ - BASE_REF_DELETED_EVENT = 'BASE_REF_DELETED_EVENT', - /** Represents a 'base_ref_force_pushed' event on a given pull request. */ - BASE_REF_FORCE_PUSHED_EVENT = 'BASE_REF_FORCE_PUSHED_EVENT', - /** Represents a 'closed' event on any `Closable`. */ - CLOSED_EVENT = 'CLOSED_EVENT', - /** Represents a 'comment_deleted' event on a given issue or pull request. */ - COMMENT_DELETED_EVENT = 'COMMENT_DELETED_EVENT', - /** Represents a 'connected' event on a given issue or pull request. */ - CONNECTED_EVENT = 'CONNECTED_EVENT', - /** Represents a 'converted_note_to_issue' event on a given issue or pull request. */ - CONVERTED_NOTE_TO_ISSUE_EVENT = 'CONVERTED_NOTE_TO_ISSUE_EVENT', - /** Represents a 'converted_to_discussion' event on a given issue. */ - CONVERTED_TO_DISCUSSION_EVENT = 'CONVERTED_TO_DISCUSSION_EVENT', - /** Represents a 'convert_to_draft' event on a given pull request. */ - CONVERT_TO_DRAFT_EVENT = 'CONVERT_TO_DRAFT_EVENT', - /** Represents a mention made by one issue or pull request to another. */ - CROSS_REFERENCED_EVENT = 'CROSS_REFERENCED_EVENT', - /** Represents a 'demilestoned' event on a given issue or pull request. */ - DEMILESTONED_EVENT = 'DEMILESTONED_EVENT', - /** Represents a 'deployed' event on a given pull request. */ - DEPLOYED_EVENT = 'DEPLOYED_EVENT', - /** Represents a 'deployment_environment_changed' event on a given pull request. */ - DEPLOYMENT_ENVIRONMENT_CHANGED_EVENT = 'DEPLOYMENT_ENVIRONMENT_CHANGED_EVENT', - /** Represents a 'disconnected' event on a given issue or pull request. */ - DISCONNECTED_EVENT = 'DISCONNECTED_EVENT', - /** Represents a 'head_ref_deleted' event on a given pull request. */ - HEAD_REF_DELETED_EVENT = 'HEAD_REF_DELETED_EVENT', - /** Represents a 'head_ref_force_pushed' event on a given pull request. */ - HEAD_REF_FORCE_PUSHED_EVENT = 'HEAD_REF_FORCE_PUSHED_EVENT', - /** Represents a 'head_ref_restored' event on a given pull request. */ - HEAD_REF_RESTORED_EVENT = 'HEAD_REF_RESTORED_EVENT', - /** Represents a comment on an Issue. */ - ISSUE_COMMENT = 'ISSUE_COMMENT', - /** Represents a 'labeled' event on a given issue or pull request. */ - LABELED_EVENT = 'LABELED_EVENT', - /** Represents a 'locked' event on a given issue or pull request. */ - LOCKED_EVENT = 'LOCKED_EVENT', - /** Represents a 'marked_as_duplicate' event on a given issue or pull request. */ - MARKED_AS_DUPLICATE_EVENT = 'MARKED_AS_DUPLICATE_EVENT', - /** Represents a 'mentioned' event on a given issue or pull request. */ - MENTIONED_EVENT = 'MENTIONED_EVENT', - /** Represents a 'merged' event on a given pull request. */ - MERGED_EVENT = 'MERGED_EVENT', - /** Represents a 'milestoned' event on a given issue or pull request. */ - MILESTONED_EVENT = 'MILESTONED_EVENT', - /** Represents a 'moved_columns_in_project' event on a given issue or pull request. */ - MOVED_COLUMNS_IN_PROJECT_EVENT = 'MOVED_COLUMNS_IN_PROJECT_EVENT', - /** Represents a 'pinned' event on a given issue or pull request. */ - PINNED_EVENT = 'PINNED_EVENT', - /** Represents a Git commit part of a pull request. */ - PULL_REQUEST_COMMIT = 'PULL_REQUEST_COMMIT', - /** Represents a commit comment thread part of a pull request. */ - PULL_REQUEST_COMMIT_COMMENT_THREAD = 'PULL_REQUEST_COMMIT_COMMENT_THREAD', - /** A review object for a given pull request. */ - PULL_REQUEST_REVIEW = 'PULL_REQUEST_REVIEW', - /** A threaded list of comments for a given pull request. */ - PULL_REQUEST_REVIEW_THREAD = 'PULL_REQUEST_REVIEW_THREAD', - /** Represents the latest point in the pull request timeline for which the viewer has seen the pull request's commits. */ - PULL_REQUEST_REVISION_MARKER = 'PULL_REQUEST_REVISION_MARKER', - /** Represents a 'ready_for_review' event on a given pull request. */ - READY_FOR_REVIEW_EVENT = 'READY_FOR_REVIEW_EVENT', - /** Represents a 'referenced' event on a given `ReferencedSubject`. */ - REFERENCED_EVENT = 'REFERENCED_EVENT', - /** Represents a 'removed_from_project' event on a given issue or pull request. */ - REMOVED_FROM_PROJECT_EVENT = 'REMOVED_FROM_PROJECT_EVENT', - /** Represents a 'renamed' event on a given issue or pull request */ - RENAMED_TITLE_EVENT = 'RENAMED_TITLE_EVENT', - /** Represents a 'reopened' event on any `Closable`. */ - REOPENED_EVENT = 'REOPENED_EVENT', - /** Represents a 'review_dismissed' event on a given issue or pull request. */ - REVIEW_DISMISSED_EVENT = 'REVIEW_DISMISSED_EVENT', - /** Represents an 'review_requested' event on a given pull request. */ - REVIEW_REQUESTED_EVENT = 'REVIEW_REQUESTED_EVENT', - /** Represents an 'review_request_removed' event on a given pull request. */ - REVIEW_REQUEST_REMOVED_EVENT = 'REVIEW_REQUEST_REMOVED_EVENT', - /** Represents a 'subscribed' event on a given `Subscribable`. */ - SUBSCRIBED_EVENT = 'SUBSCRIBED_EVENT', - /** Represents a 'transferred' event on a given issue or pull request. */ - TRANSFERRED_EVENT = 'TRANSFERRED_EVENT', - /** Represents an 'unassigned' event on any assignable object. */ - UNASSIGNED_EVENT = 'UNASSIGNED_EVENT', - /** Represents an 'unlabeled' event on a given issue or pull request. */ - UNLABELED_EVENT = 'UNLABELED_EVENT', - /** Represents an 'unlocked' event on a given issue or pull request. */ - UNLOCKED_EVENT = 'UNLOCKED_EVENT', - /** Represents an 'unmarked_as_duplicate' event on a given issue or pull request. */ - UNMARKED_AS_DUPLICATE_EVENT = 'UNMARKED_AS_DUPLICATE_EVENT', - /** Represents an 'unpinned' event on a given issue or pull request. */ - UNPINNED_EVENT = 'UNPINNED_EVENT', - /** Represents an 'unsubscribed' event on a given `Subscribable`. */ - UNSUBSCRIBED_EVENT = 'UNSUBSCRIBED_EVENT', - /** Represents a 'user_blocked' event on a given user. */ - USER_BLOCKED_EVENT = 'USER_BLOCKED_EVENT', -} - -/** The possible target states when updating a pull request. */ -export enum PullRequestUpdateState { - /** A pull request that has been closed without being merged. */ - CLOSED = 'CLOSED', - /** A pull request that is still open. */ - OPEN = 'OPEN', -} - -/** Emojis that can be attached to Issues, Pull Requests and Comments. */ -export enum ReactionContent { - /** Represents the `:confused:` emoji. */ - CONFUSED = 'CONFUSED', - /** Represents the `:eyes:` emoji. */ - EYES = 'EYES', - /** Represents the `:heart:` emoji. */ - HEART = 'HEART', - /** Represents the `:hooray:` emoji. */ - HOORAY = 'HOORAY', - /** Represents the `:laugh:` emoji. */ - LAUGH = 'LAUGH', - /** Represents the `:rocket:` emoji. */ - ROCKET = 'ROCKET', - /** Represents the `:-1:` emoji. */ - THUMBS_DOWN = 'THUMBS_DOWN', - /** Represents the `:+1:` emoji. */ - THUMBS_UP = 'THUMBS_UP', -} - -/** Ways in which lists of reactions can be ordered upon return. */ -export interface ReactionOrder { - /** The direction in which to order reactions by the specified field. */ - direction: OrderDirection; - /** The field in which to order reactions by. */ - field: ReactionOrderField; -} - -/** A list of fields that reactions can be ordered by. */ -export enum ReactionOrderField { - /** Allows ordering a list of reactions by when they were created. */ - CREATED_AT = 'CREATED_AT', -} - -/** Ways in which lists of git refs can be ordered upon return. */ -export interface RefOrder { - /** The direction in which to order refs by the specified field. */ - direction: OrderDirection; - /** The field in which to order refs by. */ - field: RefOrderField; -} - -/** Properties by which ref connections can be ordered. */ -export enum RefOrderField { - /** Order refs by their alphanumeric name */ - ALPHABETICAL = 'ALPHABETICAL', - /** Order refs by underlying commit date if the ref prefix is refs/tags/ */ - TAG_COMMIT_DATE = 'TAG_COMMIT_DATE', -} - -/** Autogenerated input type of RegenerateEnterpriseIdentityProviderRecoveryCodes */ -export interface RegenerateEnterpriseIdentityProviderRecoveryCodesInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the enterprise on which to set an identity provider. */ - enterpriseId: Scalars['ID']; -} - -/** Autogenerated input type of RegenerateVerifiableDomainToken */ -export interface RegenerateVerifiableDomainTokenInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the verifiable domain to regenerate the verification token of. */ - id: Scalars['ID']; -} - -/** Autogenerated input type of RejectDeployments */ -export interface RejectDeploymentsInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** Optional comment for rejecting deployments */ - comment?: InputMaybe; - /** The ids of environments to reject deployments */ - environmentIds: Array; - /** The node ID of the workflow run containing the pending deployments. */ - workflowRunId: Scalars['ID']; -} - -/** Ways in which lists of releases can be ordered upon return. */ -export interface ReleaseOrder { - /** The direction in which to order releases by the specified field. */ - direction: OrderDirection; - /** The field in which to order releases by. */ - field: ReleaseOrderField; -} - -/** Properties by which release connections can be ordered. */ -export enum ReleaseOrderField { - /** Order releases by creation time */ - CREATED_AT = 'CREATED_AT', - /** Order releases alphabetically by name */ - NAME = 'NAME', -} - -/** Autogenerated input type of RemoveAssigneesFromAssignable */ -export interface RemoveAssigneesFromAssignableInput { - /** The id of the assignable object to remove assignees from. */ - assignableId: Scalars['ID']; - /** The id of users to remove as assignees. */ - assigneeIds: Array; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; -} - -/** Autogenerated input type of RemoveEnterpriseAdmin */ -export interface RemoveEnterpriseAdminInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Enterprise ID from which to remove the administrator. */ - enterpriseId: Scalars['ID']; - /** The login of the user to remove as an administrator. */ - login: Scalars['String']; -} - -/** Autogenerated input type of RemoveEnterpriseIdentityProvider */ -export interface RemoveEnterpriseIdentityProviderInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the enterprise from which to remove the identity provider. */ - enterpriseId: Scalars['ID']; -} - -/** Autogenerated input type of RemoveEnterpriseOrganization */ -export interface RemoveEnterpriseOrganizationInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the enterprise from which the organization should be removed. */ - enterpriseId: Scalars['ID']; - /** The ID of the organization to remove from the enterprise. */ - organizationId: Scalars['ID']; -} - -/** Autogenerated input type of RemoveEnterpriseSupportEntitlement */ -export interface RemoveEnterpriseSupportEntitlementInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the Enterprise which the admin belongs to. */ - enterpriseId: Scalars['ID']; - /** The login of a member who will lose the support entitlement. */ - login: Scalars['String']; -} - -/** Autogenerated input type of RemoveLabelsFromLabelable */ -export interface RemoveLabelsFromLabelableInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ids of labels to remove. */ - labelIds: Array; - /** The id of the Labelable to remove labels from. */ - labelableId: Scalars['ID']; -} - -/** Autogenerated input type of RemoveOutsideCollaborator */ -export interface RemoveOutsideCollaboratorInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the organization to remove the outside collaborator from. */ - organizationId: Scalars['ID']; - /** The ID of the outside collaborator to remove. */ - userId: Scalars['ID']; -} - -/** Autogenerated input type of RemoveReaction */ -export interface RemoveReactionInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The name of the emoji reaction to remove. */ - content: ReactionContent; - /** The Node ID of the subject to modify. */ - subjectId: Scalars['ID']; -} - -/** Autogenerated input type of RemoveStar */ -export interface RemoveStarInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Starrable ID to unstar. */ - starrableId: Scalars['ID']; -} - -/** Autogenerated input type of RemoveUpvote */ -export interface RemoveUpvoteInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node ID of the discussion or comment to remove upvote. */ - subjectId: Scalars['ID']; -} - -/** Autogenerated input type of ReopenIssue */ -export interface ReopenIssueInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** ID of the issue to be opened. */ - issueId: Scalars['ID']; -} - -/** Autogenerated input type of ReopenPullRequest */ -export interface ReopenPullRequestInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** ID of the pull request to be reopened. */ - pullRequestId: Scalars['ID']; -} - -/** The privacy of a repository */ -export enum RepoAccessAuditEntryVisibility { - /** The repository is visible only to users in the same business. */ - INTERNAL = 'INTERNAL', - /** The repository is visible only to those with explicit access. */ - PRIVATE = 'PRIVATE', - /** The repository is visible to everyone. */ - PUBLIC = 'PUBLIC', -} - -/** The privacy of a repository */ -export enum RepoAddMemberAuditEntryVisibility { - /** The repository is visible only to users in the same business. */ - INTERNAL = 'INTERNAL', - /** The repository is visible only to those with explicit access. */ - PRIVATE = 'PRIVATE', - /** The repository is visible to everyone. */ - PUBLIC = 'PUBLIC', -} - -/** The privacy of a repository */ -export enum RepoArchivedAuditEntryVisibility { - /** The repository is visible only to users in the same business. */ - INTERNAL = 'INTERNAL', - /** The repository is visible only to those with explicit access. */ - PRIVATE = 'PRIVATE', - /** The repository is visible to everyone. */ - PUBLIC = 'PUBLIC', -} - -/** The merge options available for pull requests to this repository. */ -export enum RepoChangeMergeSettingAuditEntryMergeType { - /** The pull request is added to the base branch in a merge commit. */ - MERGE = 'MERGE', - /** Commits from the pull request are added onto the base branch individually without a merge commit. */ - REBASE = 'REBASE', - /** The pull request's commits are squashed into a single commit before they are merged to the base branch. */ - SQUASH = 'SQUASH', -} - -/** The privacy of a repository */ -export enum RepoCreateAuditEntryVisibility { - /** The repository is visible only to users in the same business. */ - INTERNAL = 'INTERNAL', - /** The repository is visible only to those with explicit access. */ - PRIVATE = 'PRIVATE', - /** The repository is visible to everyone. */ - PUBLIC = 'PUBLIC', -} - -/** The privacy of a repository */ -export enum RepoDestroyAuditEntryVisibility { - /** The repository is visible only to users in the same business. */ - INTERNAL = 'INTERNAL', - /** The repository is visible only to those with explicit access. */ - PRIVATE = 'PRIVATE', - /** The repository is visible to everyone. */ - PUBLIC = 'PUBLIC', -} - -/** The privacy of a repository */ -export enum RepoRemoveMemberAuditEntryVisibility { - /** The repository is visible only to users in the same business. */ - INTERNAL = 'INTERNAL', - /** The repository is visible only to those with explicit access. */ - PRIVATE = 'PRIVATE', - /** The repository is visible to everyone. */ - PUBLIC = 'PUBLIC', -} - -/** The reasons a piece of content can be reported or minimized. */ -export enum ReportedContentClassifiers { - /** An abusive or harassing piece of content */ - ABUSE = 'ABUSE', - /** A duplicated piece of content */ - DUPLICATE = 'DUPLICATE', - /** An irrelevant piece of content */ - OFF_TOPIC = 'OFF_TOPIC', - /** An outdated piece of content */ - OUTDATED = 'OUTDATED', - /** The content has been resolved */ - RESOLVED = 'RESOLVED', - /** A spammy piece of content */ - SPAM = 'SPAM', -} - -/** The affiliation of a user to a repository */ -export enum RepositoryAffiliation { - /** Repositories that the user has been added to as a collaborator. */ - COLLABORATOR = 'COLLABORATOR', - /** Repositories that the user has access to through being a member of an organization. This includes every repository on every team that the user is on. */ - ORGANIZATION_MEMBER = 'ORGANIZATION_MEMBER', - /** Repositories that are owned by the authenticated user. */ - OWNER = 'OWNER', -} - -/** The reason a repository is listed as 'contributed'. */ -export enum RepositoryContributionType { - /** Created a commit */ - COMMIT = 'COMMIT', - /** Created an issue */ - ISSUE = 'ISSUE', - /** Created a pull request */ - PULL_REQUEST = 'PULL_REQUEST', - /** Reviewed a pull request */ - PULL_REQUEST_REVIEW = 'PULL_REQUEST_REVIEW', - /** Created the repository */ - REPOSITORY = 'REPOSITORY', -} - -/** A repository interaction limit. */ -export enum RepositoryInteractionLimit { - /** Users that are not collaborators will not be able to interact with the repository. */ - COLLABORATORS_ONLY = 'COLLABORATORS_ONLY', - /** Users that have not previously committed to a repository’s default branch will be unable to interact with the repository. */ - CONTRIBUTORS_ONLY = 'CONTRIBUTORS_ONLY', - /** Users that have recently created their account will be unable to interact with the repository. */ - EXISTING_USERS = 'EXISTING_USERS', - /** No interaction limits are enabled. */ - NO_LIMIT = 'NO_LIMIT', -} - -/** The length for a repository interaction limit to be enabled for. */ -export enum RepositoryInteractionLimitExpiry { - /** The interaction limit will expire after 1 day. */ - ONE_DAY = 'ONE_DAY', - /** The interaction limit will expire after 1 month. */ - ONE_MONTH = 'ONE_MONTH', - /** The interaction limit will expire after 1 week. */ - ONE_WEEK = 'ONE_WEEK', - /** The interaction limit will expire after 6 months. */ - SIX_MONTHS = 'SIX_MONTHS', - /** The interaction limit will expire after 3 days. */ - THREE_DAYS = 'THREE_DAYS', -} - -/** Indicates where an interaction limit is configured. */ -export enum RepositoryInteractionLimitOrigin { - /** A limit that is configured at the organization level. */ - ORGANIZATION = 'ORGANIZATION', - /** A limit that is configured at the repository level. */ - REPOSITORY = 'REPOSITORY', - /** A limit that is configured at the user-wide level. */ - USER = 'USER', -} - -/** Ordering options for repository invitation connections. */ -export interface RepositoryInvitationOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order repository invitations by. */ - field: RepositoryInvitationOrderField; -} - -/** Properties by which repository invitation connections can be ordered. */ -export enum RepositoryInvitationOrderField { - /** Order repository invitations by creation time */ - CREATED_AT = 'CREATED_AT', - /** Order repository invitations by invitee login */ - INVITEE_LOGIN = 'INVITEE_LOGIN', -} - -/** The possible reasons a given repository could be in a locked state. */ -export enum RepositoryLockReason { - /** The repository is locked due to a billing related reason. */ - BILLING = 'BILLING', - /** The repository is locked due to a migration. */ - MIGRATING = 'MIGRATING', - /** The repository is locked due to a move. */ - MOVING = 'MOVING', - /** The repository is locked due to a rename. */ - RENAME = 'RENAME', -} - -/** Ordering options for repository connections */ -export interface RepositoryOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order repositories by. */ - field: RepositoryOrderField; -} - -/** Properties by which repository connections can be ordered. */ -export enum RepositoryOrderField { - /** Order repositories by creation time */ - CREATED_AT = 'CREATED_AT', - /** Order repositories by name */ - NAME = 'NAME', - /** Order repositories by push time */ - PUSHED_AT = 'PUSHED_AT', - /** Order repositories by number of stargazers */ - STARGAZERS = 'STARGAZERS', - /** Order repositories by update time */ - UPDATED_AT = 'UPDATED_AT', -} - -/** The access level to a repository */ -export enum RepositoryPermission { - /** Can read, clone, and push to this repository. Can also manage issues, pull requests, and repository settings, including adding collaborators */ - ADMIN = 'ADMIN', - /** Can read, clone, and push to this repository. They can also manage issues, pull requests, and some repository settings */ - MAINTAIN = 'MAINTAIN', - /** Can read and clone this repository. Can also open and comment on issues and pull requests */ - READ = 'READ', - /** Can read and clone this repository. Can also manage issues and pull requests */ - TRIAGE = 'TRIAGE', - /** Can read, clone, and push to this repository. Can also manage issues and pull requests */ - WRITE = 'WRITE', -} - -/** The privacy of a repository */ -export enum RepositoryPrivacy { - /** Private */ - PRIVATE = 'PRIVATE', - /** Public */ - PUBLIC = 'PUBLIC', -} - -/** The repository's visibility level. */ -export enum RepositoryVisibility { - /** The repository is visible only to users in the same business. */ - INTERNAL = 'INTERNAL', - /** The repository is visible only to those with explicit access. */ - PRIVATE = 'PRIVATE', - /** The repository is visible to everyone. */ - PUBLIC = 'PUBLIC', -} - -/** Autogenerated input type of RequestReviews */ -export interface RequestReviewsInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node ID of the pull request to modify. */ - pullRequestId: Scalars['ID']; - /** The Node IDs of the team to request. */ - teamIds?: InputMaybe>; - /** Add users to the set rather than replace. */ - union?: InputMaybe; - /** The Node IDs of the user to request. */ - userIds?: InputMaybe>; -} - -/** The possible states that can be requested when creating a check run. */ -export enum RequestableCheckStatusState { - /** The check suite or run has been completed. */ - COMPLETED = 'COMPLETED', - /** The check suite or run is in progress. */ - IN_PROGRESS = 'IN_PROGRESS', - /** The check suite or run is in pending state. */ - PENDING = 'PENDING', - /** The check suite or run has been queued. */ - QUEUED = 'QUEUED', - /** The check suite or run is in waiting state. */ - WAITING = 'WAITING', -} - -/** Specifies the attributes for a new or updated required status check. */ -export interface RequiredStatusCheckInput { - /** The ID of the App that must set the status in order for it to be accepted. Omit this value to use whichever app has recently been setting this status, or use "any" to allow any app to set the status. */ - appId?: InputMaybe; - /** Status check context that must pass for commits to be accepted to the matching branch. */ - context: Scalars['String']; -} - -/** Autogenerated input type of RerequestCheckSuite */ -export interface RerequestCheckSuiteInput { - /** The Node ID of the check suite. */ - checkSuiteId: Scalars['ID']; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node ID of the repository. */ - repositoryId: Scalars['ID']; -} - -/** Autogenerated input type of ResolveReviewThread */ -export interface ResolveReviewThreadInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the thread to resolve */ - threadId: Scalars['ID']; -} - -/** Possible roles a user may have in relation to an organization. */ -export enum RoleInOrganization { - /** A user who is a direct member of the organization. */ - DIRECT_MEMBER = 'DIRECT_MEMBER', - /** A user with full administrative access to the organization. */ - OWNER = 'OWNER', - /** A user who is unaffiliated with the organization. */ - UNAFFILIATED = 'UNAFFILIATED', -} - -/** The possible digest algorithms used to sign SAML requests for an identity provider. */ -export enum SamlDigestAlgorithm { - /** SHA1 */ - SHA1 = 'SHA1', - /** SHA256 */ - SHA256 = 'SHA256', - /** SHA384 */ - SHA384 = 'SHA384', - /** SHA512 */ - SHA512 = 'SHA512', -} - -/** The possible signature algorithms used to sign SAML requests for a Identity Provider. */ -export enum SamlSignatureAlgorithm { - /** RSA-SHA1 */ - RSA_SHA1 = 'RSA_SHA1', - /** RSA-SHA256 */ - RSA_SHA256 = 'RSA_SHA256', - /** RSA-SHA384 */ - RSA_SHA384 = 'RSA_SHA384', - /** RSA-SHA512 */ - RSA_SHA512 = 'RSA_SHA512', -} - -/** Ordering options for saved reply connections. */ -export interface SavedReplyOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order saved replies by. */ - field: SavedReplyOrderField; -} - -/** Properties by which saved reply connections can be ordered. */ -export enum SavedReplyOrderField { - /** Order saved reply by when they were updated. */ - UPDATED_AT = 'UPDATED_AT', -} - -/** Represents the individual results of a search. */ -export enum SearchType { - /** Returns matching discussions in repositories. */ - DISCUSSION = 'DISCUSSION', - /** Returns results matching issues in repositories. */ - ISSUE = 'ISSUE', - /** Returns results matching repositories. */ - REPOSITORY = 'REPOSITORY', - /** Returns results matching users and organizations on GitHub. */ - USER = 'USER', -} - -/** The possible ecosystems of a security vulnerability's package. */ -export enum SecurityAdvisoryEcosystem { - /** PHP packages hosted at packagist.org */ - COMPOSER = 'COMPOSER', - /** Go modules */ - GO = 'GO', - /** Java artifacts hosted at the Maven central repository */ - MAVEN = 'MAVEN', - /** JavaScript packages hosted at npmjs.com */ - NPM = 'NPM', - /** .NET packages hosted at the NuGet Gallery */ - NUGET = 'NUGET', - /** Python packages hosted at PyPI.org */ - PIP = 'PIP', - /** Ruby gems hosted at RubyGems.org */ - RUBYGEMS = 'RUBYGEMS', - /** Rust crates */ - RUST = 'RUST', -} - -/** An advisory identifier to filter results on. */ -export interface SecurityAdvisoryIdentifierFilter { - /** The identifier type. */ - type: SecurityAdvisoryIdentifierType; - /** The identifier string. Supports exact or partial matching. */ - value: Scalars['String']; -} - -/** Identifier formats available for advisories. */ -export enum SecurityAdvisoryIdentifierType { - /** Common Vulnerabilities and Exposures Identifier. */ - CVE = 'CVE', - /** GitHub Security Advisory ID. */ - GHSA = 'GHSA', -} - -/** Ordering options for security advisory connections */ -export interface SecurityAdvisoryOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order security advisories by. */ - field: SecurityAdvisoryOrderField; -} - -/** Properties by which security advisory connections can be ordered. */ -export enum SecurityAdvisoryOrderField { - /** Order advisories by publication time */ - PUBLISHED_AT = 'PUBLISHED_AT', - /** Order advisories by update time */ - UPDATED_AT = 'UPDATED_AT', -} - -/** Severity of the vulnerability. */ -export enum SecurityAdvisorySeverity { - /** Critical. */ - CRITICAL = 'CRITICAL', - /** High. */ - HIGH = 'HIGH', - /** Low. */ - LOW = 'LOW', - /** Moderate. */ - MODERATE = 'MODERATE', -} - -/** Ordering options for security vulnerability connections */ -export interface SecurityVulnerabilityOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order security vulnerabilities by. */ - field: SecurityVulnerabilityOrderField; -} - -/** Properties by which security vulnerability connections can be ordered. */ -export enum SecurityVulnerabilityOrderField { - /** Order vulnerability by update time */ - UPDATED_AT = 'UPDATED_AT', -} - -/** Autogenerated input type of SetEnterpriseIdentityProvider */ -export interface SetEnterpriseIdentityProviderInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The digest algorithm used to sign SAML requests for the identity provider. */ - digestMethod: SamlDigestAlgorithm; - /** The ID of the enterprise on which to set an identity provider. */ - enterpriseId: Scalars['ID']; - /** The x509 certificate used by the identity provider to sign assertions and responses. */ - idpCertificate: Scalars['String']; - /** The Issuer Entity ID for the SAML identity provider */ - issuer?: InputMaybe; - /** The signature algorithm used to sign SAML requests for the identity provider. */ - signatureMethod: SamlSignatureAlgorithm; - /** The URL endpoint for the identity provider's SAML SSO. */ - ssoUrl: Scalars['URI']; -} - -/** Autogenerated input type of SetOrganizationInteractionLimit */ -export interface SetOrganizationInteractionLimitInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** When this limit should expire. */ - expiry?: InputMaybe; - /** The limit to set. */ - limit: RepositoryInteractionLimit; - /** The ID of the organization to set a limit for. */ - organizationId: Scalars['ID']; -} - -/** Autogenerated input type of SetRepositoryInteractionLimit */ -export interface SetRepositoryInteractionLimitInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** When this limit should expire. */ - expiry?: InputMaybe; - /** The limit to set. */ - limit: RepositoryInteractionLimit; - /** The ID of the repository to set a limit for. */ - repositoryId: Scalars['ID']; -} - -/** Autogenerated input type of SetUserInteractionLimit */ -export interface SetUserInteractionLimitInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** When this limit should expire. */ - expiry?: InputMaybe; - /** The limit to set. */ - limit: RepositoryInteractionLimit; - /** The ID of the user to set a limit for. */ - userId: Scalars['ID']; -} - -/** Ordering options for connections to get sponsor entities for GitHub Sponsors. */ -export interface SponsorOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order sponsor entities by. */ - field: SponsorOrderField; -} - -/** Properties by which sponsor connections can be ordered. */ -export enum SponsorOrderField { - /** Order sponsorable entities by login (username). */ - LOGIN = 'LOGIN', - /** Order sponsors by their relevance to the viewer. */ - RELEVANCE = 'RELEVANCE', -} - -/** Ordering options for connections to get sponsorable entities for GitHub Sponsors. */ -export interface SponsorableOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order sponsorable entities by. */ - field: SponsorableOrderField; -} - -/** Properties by which sponsorable connections can be ordered. */ -export enum SponsorableOrderField { - /** Order sponsorable entities by login (username). */ - LOGIN = 'LOGIN', -} - -/** The possible actions that GitHub Sponsors activities can represent. */ -export enum SponsorsActivityAction { - /** The activity was cancelling a sponsorship. */ - CANCELLED_SPONSORSHIP = 'CANCELLED_SPONSORSHIP', - /** The activity was starting a sponsorship. */ - NEW_SPONSORSHIP = 'NEW_SPONSORSHIP', - /** The activity was scheduling a downgrade or cancellation. */ - PENDING_CHANGE = 'PENDING_CHANGE', - /** The activity was funds being refunded to the sponsor or GitHub. */ - REFUND = 'REFUND', - /** The activity was disabling matching for a previously matched sponsorship. */ - SPONSOR_MATCH_DISABLED = 'SPONSOR_MATCH_DISABLED', - /** The activity was changing the sponsorship tier, either directly by the sponsor or by a scheduled/pending change. */ - TIER_CHANGE = 'TIER_CHANGE', -} - -/** Ordering options for GitHub Sponsors activity connections. */ -export interface SponsorsActivityOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order activity by. */ - field: SponsorsActivityOrderField; -} - -/** Properties by which GitHub Sponsors activity connections can be ordered. */ -export enum SponsorsActivityOrderField { - /** Order activities by when they happened. */ - TIMESTAMP = 'TIMESTAMP', -} - -/** The possible time periods for which Sponsors activities can be requested. */ -export enum SponsorsActivityPeriod { - /** Don't restrict the activity to any date range, include all activity. */ - ALL = 'ALL', - /** The previous calendar day. */ - DAY = 'DAY', - /** The previous thirty days. */ - MONTH = 'MONTH', - /** The previous seven days. */ - WEEK = 'WEEK', -} - -/** The different kinds of goals a GitHub Sponsors member can have. */ -export enum SponsorsGoalKind { - /** The goal is about getting a certain amount in USD from sponsorships each month. */ - MONTHLY_SPONSORSHIP_AMOUNT = 'MONTHLY_SPONSORSHIP_AMOUNT', - /** The goal is about reaching a certain number of sponsors. */ - TOTAL_SPONSORS_COUNT = 'TOTAL_SPONSORS_COUNT', -} - -/** Ordering options for Sponsors tiers connections. */ -export interface SponsorsTierOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order tiers by. */ - field: SponsorsTierOrderField; -} - -/** Properties by which Sponsors tiers connections can be ordered. */ -export enum SponsorsTierOrderField { - /** Order tiers by creation time. */ - CREATED_AT = 'CREATED_AT', - /** Order tiers by their monthly price in cents */ - MONTHLY_PRICE_IN_CENTS = 'MONTHLY_PRICE_IN_CENTS', -} - -/** Ordering options for sponsorship newsletter connections. */ -export interface SponsorshipNewsletterOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order sponsorship newsletters by. */ - field: SponsorshipNewsletterOrderField; -} - -/** Properties by which sponsorship update connections can be ordered. */ -export enum SponsorshipNewsletterOrderField { - /** Order sponsorship newsletters by when they were created. */ - CREATED_AT = 'CREATED_AT', -} - -/** Ordering options for sponsorship connections. */ -export interface SponsorshipOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order sponsorship by. */ - field: SponsorshipOrderField; -} - -/** Properties by which sponsorship connections can be ordered. */ -export enum SponsorshipOrderField { - /** Order sponsorship by creation time. */ - CREATED_AT = 'CREATED_AT', -} - -/** The privacy of a sponsorship */ -export enum SponsorshipPrivacy { - /** Private */ - PRIVATE = 'PRIVATE', - /** Public */ - PUBLIC = 'PUBLIC', -} - -/** Ways in which star connections can be ordered. */ -export interface StarOrder { - /** The direction in which to order nodes. */ - direction: OrderDirection; - /** The field in which to order nodes by. */ - field: StarOrderField; -} - -/** Properties by which star connections can be ordered. */ -export enum StarOrderField { - /** Allows ordering a list of stars by when they were created. */ - STARRED_AT = 'STARRED_AT', -} - -/** The possible commit status states. */ -export enum StatusState { - /** Status is errored. */ - ERROR = 'ERROR', - /** Status is expected. */ - EXPECTED = 'EXPECTED', - /** Status is failing. */ - FAILURE = 'FAILURE', - /** Status is pending. */ - PENDING = 'PENDING', - /** Status is successful. */ - SUCCESS = 'SUCCESS', -} - -/** Autogenerated input type of SubmitPullRequestReview */ -export interface SubmitPullRequestReviewInput { - /** The text field to set on the Pull Request Review. */ - body?: InputMaybe; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The event to send to the Pull Request Review. */ - event: PullRequestReviewEvent; - /** The Pull Request ID to submit any pending reviews. */ - pullRequestId?: InputMaybe; - /** The Pull Request Review ID to submit. */ - pullRequestReviewId?: InputMaybe; -} - -/** The possible states of a subscription. */ -export enum SubscriptionState { - /** The User is never notified. */ - IGNORED = 'IGNORED', - /** The User is notified of all conversations. */ - SUBSCRIBED = 'SUBSCRIBED', - /** The User is only notified when participating or @mentioned. */ - UNSUBSCRIBED = 'UNSUBSCRIBED', -} - -/** Ways in which team discussion comment connections can be ordered. */ -export interface TeamDiscussionCommentOrder { - /** The direction in which to order nodes. */ - direction: OrderDirection; - /** The field by which to order nodes. */ - field: TeamDiscussionCommentOrderField; -} - -/** Properties by which team discussion comment connections can be ordered. */ -export enum TeamDiscussionCommentOrderField { - /** Allows sequential ordering of team discussion comments (which is equivalent to chronological ordering). */ - NUMBER = 'NUMBER', -} - -/** Ways in which team discussion connections can be ordered. */ -export interface TeamDiscussionOrder { - /** The direction in which to order nodes. */ - direction: OrderDirection; - /** The field by which to order nodes. */ - field: TeamDiscussionOrderField; -} - -/** Properties by which team discussion connections can be ordered. */ -export enum TeamDiscussionOrderField { - /** Allows chronological ordering of team discussions. */ - CREATED_AT = 'CREATED_AT', -} - -/** Ordering options for team member connections */ -export interface TeamMemberOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order team members by. */ - field: TeamMemberOrderField; -} - -/** Properties by which team member connections can be ordered. */ -export enum TeamMemberOrderField { - /** Order team members by creation time */ - CREATED_AT = 'CREATED_AT', - /** Order team members by login */ - LOGIN = 'LOGIN', -} - -/** The possible team member roles; either 'maintainer' or 'member'. */ -export enum TeamMemberRole { - /** A team maintainer has permission to add and remove team members. */ - MAINTAINER = 'MAINTAINER', - /** A team member has no administrative permissions on the team. */ - MEMBER = 'MEMBER', -} - -/** Defines which types of team members are included in the returned list. Can be one of IMMEDIATE, CHILD_TEAM or ALL. */ -export enum TeamMembershipType { - /** Includes immediate and child team members for the team. */ - ALL = 'ALL', - /** Includes only child team members for the team. */ - CHILD_TEAM = 'CHILD_TEAM', - /** Includes only immediate members of the team. */ - IMMEDIATE = 'IMMEDIATE', -} - -/** Ways in which team connections can be ordered. */ -export interface TeamOrder { - /** The direction in which to order nodes. */ - direction: OrderDirection; - /** The field in which to order nodes by. */ - field: TeamOrderField; -} - -/** Properties by which team connections can be ordered. */ -export enum TeamOrderField { - /** Allows ordering a list of teams by name. */ - NAME = 'NAME', -} - -/** The possible team privacy values. */ -export enum TeamPrivacy { - /** A secret team can only be seen by its members. */ - SECRET = 'SECRET', - /** A visible team can be seen and @mentioned by every member of the organization. */ - VISIBLE = 'VISIBLE', -} - -/** Ordering options for team repository connections */ -export interface TeamRepositoryOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order repositories by. */ - field: TeamRepositoryOrderField; -} - -/** Properties by which team repository connections can be ordered. */ -export enum TeamRepositoryOrderField { - /** Order repositories by creation time */ - CREATED_AT = 'CREATED_AT', - /** Order repositories by name */ - NAME = 'NAME', - /** Order repositories by permission */ - PERMISSION = 'PERMISSION', - /** Order repositories by push time */ - PUSHED_AT = 'PUSHED_AT', - /** Order repositories by number of stargazers */ - STARGAZERS = 'STARGAZERS', - /** Order repositories by update time */ - UPDATED_AT = 'UPDATED_AT', -} - -/** The role of a user on a team. */ -export enum TeamRole { - /** User has admin rights on the team. */ - ADMIN = 'ADMIN', - /** User is a member of the team. */ - MEMBER = 'MEMBER', -} - -/** Reason that the suggested topic is declined. */ -export enum TopicSuggestionDeclineReason { - /** The suggested topic is not relevant to the repository. */ - NOT_RELEVANT = 'NOT_RELEVANT', - /** The viewer does not like the suggested topic. */ - PERSONAL_PREFERENCE = 'PERSONAL_PREFERENCE', - /** The suggested topic is too general for the repository. */ - TOO_GENERAL = 'TOO_GENERAL', - /** The suggested topic is too specific for the repository (e.g. #ruby-on-rails-version-4-2-1). */ - TOO_SPECIFIC = 'TOO_SPECIFIC', -} - -/** Autogenerated input type of TransferIssue */ -export interface TransferIssueInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node ID of the issue to be transferred */ - issueId: Scalars['ID']; - /** The Node ID of the repository the issue should be transferred to */ - repositoryId: Scalars['ID']; -} - -/** Autogenerated input type of UnarchiveRepository */ -export interface UnarchiveRepositoryInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the repository to unarchive. */ - repositoryId: Scalars['ID']; -} - -/** Autogenerated input type of UnfollowUser */ -export interface UnfollowUserInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** ID of the user to unfollow. */ - userId: Scalars['ID']; -} - -/** Autogenerated input type of UnlinkRepositoryFromProject */ -export interface UnlinkRepositoryFromProjectInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the Project linked to the Repository. */ - projectId: Scalars['ID']; - /** The ID of the Repository linked to the Project. */ - repositoryId: Scalars['ID']; -} - -/** Autogenerated input type of UnlockLockable */ -export interface UnlockLockableInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** ID of the item to be unlocked. */ - lockableId: Scalars['ID']; -} - -/** Autogenerated input type of UnmarkDiscussionCommentAsAnswer */ -export interface UnmarkDiscussionCommentAsAnswerInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node ID of the discussion comment to unmark as an answer. */ - id: Scalars['ID']; -} - -/** Autogenerated input type of UnmarkFileAsViewed */ -export interface UnmarkFileAsViewedInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The path of the file to mark as unviewed */ - path: Scalars['String']; - /** The Node ID of the pull request. */ - pullRequestId: Scalars['ID']; -} - -/** Autogenerated input type of UnmarkIssueAsDuplicate */ -export interface UnmarkIssueAsDuplicateInput { - /** ID of the issue or pull request currently considered canonical/authoritative/original. */ - canonicalId: Scalars['ID']; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** ID of the issue or pull request currently marked as a duplicate. */ - duplicateId: Scalars['ID']; -} - -/** Autogenerated input type of UnminimizeComment */ -export interface UnminimizeCommentInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node ID of the subject to modify. */ - subjectId: Scalars['ID']; -} - -/** Autogenerated input type of UnpinIssue */ -export interface UnpinIssueInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the issue to be unpinned */ - issueId: Scalars['ID']; -} - -/** Autogenerated input type of UnresolveReviewThread */ -export interface UnresolveReviewThreadInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the thread to unresolve */ - threadId: Scalars['ID']; -} - -/** Autogenerated input type of UpdateBranchProtectionRule */ -export interface UpdateBranchProtectionRuleInput { - /** Can this branch be deleted. */ - allowsDeletions?: InputMaybe; - /** Are force pushes allowed on this branch. */ - allowsForcePushes?: InputMaybe; - /** The global relay id of the branch protection rule to be updated. */ - branchProtectionRuleId: Scalars['ID']; - /** A list of User or Team IDs allowed to bypass force push targeting matching branches. */ - bypassForcePushActorIds?: InputMaybe>; - /** A list of User or Team IDs allowed to bypass pull requests targeting matching branches. */ - bypassPullRequestActorIds?: InputMaybe>; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** Will new commits pushed to matching branches dismiss pull request review approvals. */ - dismissesStaleReviews?: InputMaybe; - /** Can admins overwrite branch protection. */ - isAdminEnforced?: InputMaybe; - /** The glob-like pattern used to determine matching branches. */ - pattern?: InputMaybe; - /** A list of User, Team or App IDs allowed to push to matching branches. */ - pushActorIds?: InputMaybe>; - /** Number of approving reviews required to update matching branches. */ - requiredApprovingReviewCount?: InputMaybe; - /** List of required status check contexts that must pass for commits to be accepted to matching branches. */ - requiredStatusCheckContexts?: InputMaybe>; - /** The list of required status checks */ - requiredStatusChecks?: InputMaybe>; - /** Are approving reviews required to update matching branches. */ - requiresApprovingReviews?: InputMaybe; - /** Are reviews from code owners required to update matching branches. */ - requiresCodeOwnerReviews?: InputMaybe; - /** Are commits required to be signed. */ - requiresCommitSignatures?: InputMaybe; - /** Are conversations required to be resolved before merging. */ - requiresConversationResolution?: InputMaybe; - /** Are merge commits prohibited from being pushed to this branch. */ - requiresLinearHistory?: InputMaybe; - /** Are status checks required to update matching branches. */ - requiresStatusChecks?: InputMaybe; - /** Are branches required to be up to date before merging. */ - requiresStrictStatusChecks?: InputMaybe; - /** Is pushing to matching branches restricted. */ - restrictsPushes?: InputMaybe; - /** Is dismissal of pull request reviews restricted. */ - restrictsReviewDismissals?: InputMaybe; - /** A list of User or Team IDs allowed to dismiss reviews on pull requests targeting matching branches. */ - reviewDismissalActorIds?: InputMaybe>; -} - -/** Autogenerated input type of UpdateCheckRun */ -export interface UpdateCheckRunInput { - /** Possible further actions the integrator can perform, which a user may trigger. */ - actions?: InputMaybe>; - /** The node of the check. */ - checkRunId: Scalars['ID']; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The time that the check run finished. */ - completedAt?: InputMaybe; - /** The final conclusion of the check. */ - conclusion?: InputMaybe; - /** The URL of the integrator's site that has the full details of the check. */ - detailsUrl?: InputMaybe; - /** A reference for the run on the integrator's system. */ - externalId?: InputMaybe; - /** The name of the check. */ - name?: InputMaybe; - /** Descriptive details about the run. */ - output?: InputMaybe; - /** The node ID of the repository. */ - repositoryId: Scalars['ID']; - /** The time that the check run began. */ - startedAt?: InputMaybe; - /** The current status. */ - status?: InputMaybe; -} - -/** Autogenerated input type of UpdateCheckSuitePreferences */ -export interface UpdateCheckSuitePreferencesInput { - /** The check suite preferences to modify. */ - autoTriggerPreferences: Array; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node ID of the repository. */ - repositoryId: Scalars['ID']; -} - -/** Autogenerated input type of UpdateDiscussionComment */ -export interface UpdateDiscussionCommentInput { - /** The new contents of the comment body. */ - body: Scalars['String']; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node ID of the discussion comment to update. */ - commentId: Scalars['ID']; -} - -/** Autogenerated input type of UpdateDiscussion */ -export interface UpdateDiscussionInput { - /** The new contents of the discussion body. */ - body?: InputMaybe; - /** The Node ID of a discussion category within the same repository to change this discussion to. */ - categoryId?: InputMaybe; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node ID of the discussion to update. */ - discussionId: Scalars['ID']; - /** The new discussion title. */ - title?: InputMaybe; -} - -/** Autogenerated input type of UpdateEnterpriseAdministratorRole */ -export interface UpdateEnterpriseAdministratorRoleInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the Enterprise which the admin belongs to. */ - enterpriseId: Scalars['ID']; - /** The login of a administrator whose role is being changed. */ - login: Scalars['String']; - /** The new role for the Enterprise administrator. */ - role: EnterpriseAdministratorRole; -} - -/** Autogenerated input type of UpdateEnterpriseAllowPrivateRepositoryForkingSetting */ -export interface UpdateEnterpriseAllowPrivateRepositoryForkingSettingInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the enterprise on which to set the allow private repository forking setting. */ - enterpriseId: Scalars['ID']; - /** The value for the allow private repository forking setting on the enterprise. */ - settingValue: EnterpriseEnabledDisabledSettingValue; -} - -/** Autogenerated input type of UpdateEnterpriseDefaultRepositoryPermissionSetting */ -export interface UpdateEnterpriseDefaultRepositoryPermissionSettingInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the enterprise on which to set the base repository permission setting. */ - enterpriseId: Scalars['ID']; - /** The value for the base repository permission setting on the enterprise. */ - settingValue: EnterpriseDefaultRepositoryPermissionSettingValue; -} - -/** Autogenerated input type of UpdateEnterpriseMembersCanChangeRepositoryVisibilitySetting */ -export interface UpdateEnterpriseMembersCanChangeRepositoryVisibilitySettingInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the enterprise on which to set the members can change repository visibility setting. */ - enterpriseId: Scalars['ID']; - /** The value for the members can change repository visibility setting on the enterprise. */ - settingValue: EnterpriseEnabledDisabledSettingValue; -} - -/** Autogenerated input type of UpdateEnterpriseMembersCanCreateRepositoriesSetting */ -export interface UpdateEnterpriseMembersCanCreateRepositoriesSettingInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the enterprise on which to set the members can create repositories setting. */ - enterpriseId: Scalars['ID']; - /** Allow members to create internal repositories. Defaults to current value. */ - membersCanCreateInternalRepositories?: InputMaybe; - /** Allow members to create private repositories. Defaults to current value. */ - membersCanCreatePrivateRepositories?: InputMaybe; - /** Allow members to create public repositories. Defaults to current value. */ - membersCanCreatePublicRepositories?: InputMaybe; - /** When false, allow member organizations to set their own repository creation member privileges. */ - membersCanCreateRepositoriesPolicyEnabled?: InputMaybe; - /** Value for the members can create repositories setting on the enterprise. This or the granular public/private/internal allowed fields (but not both) must be provided. */ - settingValue?: InputMaybe; -} - -/** Autogenerated input type of UpdateEnterpriseMembersCanDeleteIssuesSetting */ -export interface UpdateEnterpriseMembersCanDeleteIssuesSettingInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the enterprise on which to set the members can delete issues setting. */ - enterpriseId: Scalars['ID']; - /** The value for the members can delete issues setting on the enterprise. */ - settingValue: EnterpriseEnabledDisabledSettingValue; -} - -/** Autogenerated input type of UpdateEnterpriseMembersCanDeleteRepositoriesSetting */ -export interface UpdateEnterpriseMembersCanDeleteRepositoriesSettingInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the enterprise on which to set the members can delete repositories setting. */ - enterpriseId: Scalars['ID']; - /** The value for the members can delete repositories setting on the enterprise. */ - settingValue: EnterpriseEnabledDisabledSettingValue; -} - -/** Autogenerated input type of UpdateEnterpriseMembersCanInviteCollaboratorsSetting */ -export interface UpdateEnterpriseMembersCanInviteCollaboratorsSettingInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the enterprise on which to set the members can invite collaborators setting. */ - enterpriseId: Scalars['ID']; - /** The value for the members can invite collaborators setting on the enterprise. */ - settingValue: EnterpriseEnabledDisabledSettingValue; -} - -/** Autogenerated input type of UpdateEnterpriseMembersCanMakePurchasesSetting */ -export interface UpdateEnterpriseMembersCanMakePurchasesSettingInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the enterprise on which to set the members can make purchases setting. */ - enterpriseId: Scalars['ID']; - /** The value for the members can make purchases setting on the enterprise. */ - settingValue: EnterpriseMembersCanMakePurchasesSettingValue; -} - -/** Autogenerated input type of UpdateEnterpriseMembersCanUpdateProtectedBranchesSetting */ -export interface UpdateEnterpriseMembersCanUpdateProtectedBranchesSettingInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the enterprise on which to set the members can update protected branches setting. */ - enterpriseId: Scalars['ID']; - /** The value for the members can update protected branches setting on the enterprise. */ - settingValue: EnterpriseEnabledDisabledSettingValue; -} - -/** Autogenerated input type of UpdateEnterpriseMembersCanViewDependencyInsightsSetting */ -export interface UpdateEnterpriseMembersCanViewDependencyInsightsSettingInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the enterprise on which to set the members can view dependency insights setting. */ - enterpriseId: Scalars['ID']; - /** The value for the members can view dependency insights setting on the enterprise. */ - settingValue: EnterpriseEnabledDisabledSettingValue; -} - -/** Autogenerated input type of UpdateEnterpriseOrganizationProjectsSetting */ -export interface UpdateEnterpriseOrganizationProjectsSettingInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the enterprise on which to set the organization projects setting. */ - enterpriseId: Scalars['ID']; - /** The value for the organization projects setting on the enterprise. */ - settingValue: EnterpriseEnabledDisabledSettingValue; -} - -/** Autogenerated input type of UpdateEnterpriseProfile */ -export interface UpdateEnterpriseProfileInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The description of the enterprise. */ - description?: InputMaybe; - /** The Enterprise ID to update. */ - enterpriseId: Scalars['ID']; - /** The location of the enterprise. */ - location?: InputMaybe; - /** The name of the enterprise. */ - name?: InputMaybe; - /** The URL of the enterprise's website. */ - websiteUrl?: InputMaybe; -} - -/** Autogenerated input type of UpdateEnterpriseRepositoryProjectsSetting */ -export interface UpdateEnterpriseRepositoryProjectsSettingInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the enterprise on which to set the repository projects setting. */ - enterpriseId: Scalars['ID']; - /** The value for the repository projects setting on the enterprise. */ - settingValue: EnterpriseEnabledDisabledSettingValue; -} - -/** Autogenerated input type of UpdateEnterpriseTeamDiscussionsSetting */ -export interface UpdateEnterpriseTeamDiscussionsSettingInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the enterprise on which to set the team discussions setting. */ - enterpriseId: Scalars['ID']; - /** The value for the team discussions setting on the enterprise. */ - settingValue: EnterpriseEnabledDisabledSettingValue; -} - -/** Autogenerated input type of UpdateEnterpriseTwoFactorAuthenticationRequiredSetting */ -export interface UpdateEnterpriseTwoFactorAuthenticationRequiredSettingInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the enterprise on which to set the two factor authentication required setting. */ - enterpriseId: Scalars['ID']; - /** The value for the two factor authentication required setting on the enterprise. */ - settingValue: EnterpriseEnabledSettingValue; -} - -/** Autogenerated input type of UpdateEnvironment */ -export interface UpdateEnvironmentInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The node ID of the environment. */ - environmentId: Scalars['ID']; - /** The ids of users or teams that can approve deployments to this environment */ - reviewers?: InputMaybe>; - /** The wait timer in minutes. */ - waitTimer?: InputMaybe; -} - -/** Autogenerated input type of UpdateIpAllowListEnabledSetting */ -export interface UpdateIpAllowListEnabledSettingInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the owner on which to set the IP allow list enabled setting. */ - ownerId: Scalars['ID']; - /** The value for the IP allow list enabled setting. */ - settingValue: IpAllowListEnabledSettingValue; -} - -/** Autogenerated input type of UpdateIpAllowListEntry */ -export interface UpdateIpAllowListEntryInput { - /** An IP address or range of addresses in CIDR notation. */ - allowListValue: Scalars['String']; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the IP allow list entry to update. */ - ipAllowListEntryId: Scalars['ID']; - /** Whether the IP allow list entry is active when an IP allow list is enabled. */ - isActive: Scalars['Boolean']; - /** An optional name for the IP allow list entry. */ - name?: InputMaybe; -} - -/** Autogenerated input type of UpdateIpAllowListForInstalledAppsEnabledSetting */ -export interface UpdateIpAllowListForInstalledAppsEnabledSettingInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the owner. */ - ownerId: Scalars['ID']; - /** The value for the IP allow list configuration for installed GitHub Apps setting. */ - settingValue: IpAllowListForInstalledAppsEnabledSettingValue; -} - -/** Autogenerated input type of UpdateIssueComment */ -export interface UpdateIssueCommentInput { - /** The updated text of the comment. */ - body: Scalars['String']; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the IssueComment to modify. */ - id: Scalars['ID']; -} - -/** Autogenerated input type of UpdateIssue */ -export interface UpdateIssueInput { - /** An array of Node IDs of users for this issue. */ - assigneeIds?: InputMaybe>; - /** The body for the issue description. */ - body?: InputMaybe; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the Issue to modify. */ - id: Scalars['ID']; - /** An array of Node IDs of labels for this issue. */ - labelIds?: InputMaybe>; - /** The Node ID of the milestone for this issue. */ - milestoneId?: InputMaybe; - /** An array of Node IDs for projects associated with this issue. */ - projectIds?: InputMaybe>; - /** The desired issue state. */ - state?: InputMaybe; - /** The title for the issue. */ - title?: InputMaybe; -} - -/** Autogenerated input type of UpdateNotificationRestrictionSetting */ -export interface UpdateNotificationRestrictionSettingInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the owner on which to set the restrict notifications setting. */ - ownerId: Scalars['ID']; - /** The value for the restrict notifications setting. */ - settingValue: NotificationRestrictionSettingValue; -} - -/** Autogenerated input type of UpdateOrganizationAllowPrivateRepositoryForkingSetting */ -export interface UpdateOrganizationAllowPrivateRepositoryForkingSettingInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** Enable forking of private repositories in the organization? */ - forkingEnabled: Scalars['Boolean']; - /** The ID of the organization on which to set the allow private repository forking setting. */ - organizationId: Scalars['ID']; -} - -/** Autogenerated input type of UpdateProjectCard */ -export interface UpdateProjectCardInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** Whether or not the ProjectCard should be archived */ - isArchived?: InputMaybe; - /** The note of ProjectCard. */ - note?: InputMaybe; - /** The ProjectCard ID to update. */ - projectCardId: Scalars['ID']; -} - -/** Autogenerated input type of UpdateProjectColumn */ -export interface UpdateProjectColumnInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The name of project column. */ - name: Scalars['String']; - /** The ProjectColumn ID to update. */ - projectColumnId: Scalars['ID']; -} - -/** Autogenerated input type of UpdateProject */ -export interface UpdateProjectInput { - /** The description of project. */ - body?: InputMaybe; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The name of project. */ - name?: InputMaybe; - /** The Project ID to update. */ - projectId: Scalars['ID']; - /** Whether the project is public or not. */ - public?: InputMaybe; - /** Whether the project is open or closed. */ - state?: InputMaybe; -} - -/** Autogenerated input type of UpdateProjectNextItemField */ -export interface UpdateProjectNextItemFieldInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The id of the field to be updated. Only supports custom fields and status for now. */ - fieldId: Scalars['ID']; - /** The id of the item to be updated. */ - itemId: Scalars['ID']; - /** The ID of the Project. */ - projectId: Scalars['ID']; - /** The value which will be set on the field. */ - value: Scalars['String']; -} - -/** Autogenerated input type of UpdatePullRequestBranch */ -export interface UpdatePullRequestBranchInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The head ref oid for the upstream branch. */ - expectedHeadOid?: InputMaybe; - /** The Node ID of the pull request. */ - pullRequestId: Scalars['ID']; -} - -/** Autogenerated input type of UpdatePullRequest */ -export interface UpdatePullRequestInput { - /** An array of Node IDs of users for this pull request. */ - assigneeIds?: InputMaybe>; - /** - * The name of the branch you want your changes pulled into. This should be an existing branch - * on the current repository. - */ - baseRefName?: InputMaybe; - /** The contents of the pull request. */ - body?: InputMaybe; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** An array of Node IDs of labels for this pull request. */ - labelIds?: InputMaybe>; - /** Indicates whether maintainers can modify the pull request. */ - maintainerCanModify?: InputMaybe; - /** The Node ID of the milestone for this pull request. */ - milestoneId?: InputMaybe; - /** An array of Node IDs for projects associated with this pull request. */ - projectIds?: InputMaybe>; - /** The Node ID of the pull request. */ - pullRequestId: Scalars['ID']; - /** The target state of the pull request. */ - state?: InputMaybe; - /** The title of the pull request. */ - title?: InputMaybe; -} - -/** Autogenerated input type of UpdatePullRequestReviewComment */ -export interface UpdatePullRequestReviewCommentInput { - /** The text of the comment. */ - body: Scalars['String']; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node ID of the comment to modify. */ - pullRequestReviewCommentId: Scalars['ID']; -} - -/** Autogenerated input type of UpdatePullRequestReview */ -export interface UpdatePullRequestReviewInput { - /** The contents of the pull request review body. */ - body: Scalars['String']; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node ID of the pull request review to modify. */ - pullRequestReviewId: Scalars['ID']; -} - -/** Autogenerated input type of UpdateRef */ -export interface UpdateRefInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** Permit updates of branch Refs that are not fast-forwards? */ - force?: InputMaybe; - /** The GitObjectID that the Ref shall be updated to target. */ - oid: Scalars['GitObjectID']; - /** The Node ID of the Ref to be updated. */ - refId: Scalars['ID']; -} - -/** Autogenerated input type of UpdateRepository */ -export interface UpdateRepositoryInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** A new description for the repository. Pass an empty string to erase the existing description. */ - description?: InputMaybe; - /** Indicates if the repository should have the issues feature enabled. */ - hasIssuesEnabled?: InputMaybe; - /** Indicates if the repository should have the project boards feature enabled. */ - hasProjectsEnabled?: InputMaybe; - /** Indicates if the repository should have the wiki feature enabled. */ - hasWikiEnabled?: InputMaybe; - /** The URL for a web page about this repository. Pass an empty string to erase the existing URL. */ - homepageUrl?: InputMaybe; - /** The new name of the repository. */ - name?: InputMaybe; - /** The ID of the repository to update. */ - repositoryId: Scalars['ID']; - /** Whether this repository should be marked as a template such that anyone who can access it can create new repositories with the same files and directory structure. */ - template?: InputMaybe; -} - -/** Autogenerated input type of UpdateSponsorshipPreferences */ -export interface UpdateSponsorshipPreferencesInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** Specify whether others should be able to see that the sponsor is sponsoring the sponsorable. Public visibility still does not reveal which tier is used. */ - privacyLevel?: InputMaybe; - /** Whether the sponsor should receive email updates from the sponsorable. */ - receiveEmails?: InputMaybe; - /** The ID of the user or organization who is acting as the sponsor, paying for the sponsorship. Required if sponsorLogin is not given. */ - sponsorId?: InputMaybe; - /** The username of the user or organization who is acting as the sponsor, paying for the sponsorship. Required if sponsorId is not given. */ - sponsorLogin?: InputMaybe; - /** The ID of the user or organization who is receiving the sponsorship. Required if sponsorableLogin is not given. */ - sponsorableId?: InputMaybe; - /** The username of the user or organization who is receiving the sponsorship. Required if sponsorableId is not given. */ - sponsorableLogin?: InputMaybe; -} - -/** Autogenerated input type of UpdateSubscription */ -export interface UpdateSubscriptionInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The new state of the subscription. */ - state: SubscriptionState; - /** The Node ID of the subscribable object to modify. */ - subscribableId: Scalars['ID']; -} - -/** Autogenerated input type of UpdateTeamDiscussionComment */ -export interface UpdateTeamDiscussionCommentInput { - /** The updated text of the comment. */ - body: Scalars['String']; - /** The current version of the body content. */ - bodyVersion?: InputMaybe; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the comment to modify. */ - id: Scalars['ID']; -} - -/** Autogenerated input type of UpdateTeamDiscussion */ -export interface UpdateTeamDiscussionInput { - /** The updated text of the discussion. */ - body?: InputMaybe; - /** The current version of the body content. If provided, this update operation will be rejected if the given version does not match the latest version on the server. */ - bodyVersion?: InputMaybe; - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node ID of the discussion to modify. */ - id: Scalars['ID']; - /** If provided, sets the pinned state of the updated discussion. */ - pinned?: InputMaybe; - /** The updated title of the discussion. */ - title?: InputMaybe; -} - -/** Autogenerated input type of UpdateTopics */ -export interface UpdateTopicsInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The Node ID of the repository. */ - repositoryId: Scalars['ID']; - /** An array of topic names. */ - topicNames: Array; -} - -/** The possible durations that a user can be blocked for. */ -export enum UserBlockDuration { - /** The user was blocked for 1 day */ - ONE_DAY = 'ONE_DAY', - /** The user was blocked for 30 days */ - ONE_MONTH = 'ONE_MONTH', - /** The user was blocked for 7 days */ - ONE_WEEK = 'ONE_WEEK', - /** The user was blocked permanently */ - PERMANENT = 'PERMANENT', - /** The user was blocked for 3 days */ - THREE_DAYS = 'THREE_DAYS', -} - -/** Ordering options for user status connections. */ -export interface UserStatusOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order user statuses by. */ - field: UserStatusOrderField; -} - -/** Properties by which user status connections can be ordered. */ -export enum UserStatusOrderField { - /** Order user statuses by when they were updated. */ - UPDATED_AT = 'UPDATED_AT', -} - -/** Ordering options for verifiable domain connections. */ -export interface VerifiableDomainOrder { - /** The ordering direction. */ - direction: OrderDirection; - /** The field to order verifiable domains by. */ - field: VerifiableDomainOrderField; -} - -/** Properties by which verifiable domain connections can be ordered. */ -export enum VerifiableDomainOrderField { - /** Order verifiable domains by their creation date. */ - CREATED_AT = 'CREATED_AT', - /** Order verifiable domains by the domain name. */ - DOMAIN = 'DOMAIN', -} - -/** Autogenerated input type of VerifyVerifiableDomain */ -export interface VerifyVerifiableDomainInput { - /** A unique identifier for the client performing the mutation. */ - clientMutationId?: InputMaybe; - /** The ID of the verifiable domain to verify. */ - id: Scalars['ID']; -} - -export const scalarsEnumsHash: import('gqty').ScalarsEnumsHash = { - AuditLogOrderField: true, - Base64String: true, - Boolean: true, - CheckAnnotationLevel: true, - CheckConclusionState: true, - CheckRunType: true, - CheckStatusState: true, - CollaboratorAffiliation: true, - CommentAuthorAssociation: true, - CommentCannotUpdateReason: true, - CommitContributionOrderField: true, - ContributionLevel: true, - Date: true, - DateTime: true, - DefaultRepositoryPermissionField: true, - DeploymentOrderField: true, - DeploymentProtectionRuleType: true, - DeploymentReviewState: true, - DeploymentState: true, - DeploymentStatusState: true, - DiffSide: true, - DiscussionOrderField: true, - DismissReason: true, - EnterpriseAdministratorInvitationOrderField: true, - EnterpriseAdministratorRole: true, - EnterpriseDefaultRepositoryPermissionSettingValue: true, - EnterpriseEnabledDisabledSettingValue: true, - EnterpriseEnabledSettingValue: true, - EnterpriseMemberOrderField: true, - EnterpriseMembersCanCreateRepositoriesSettingValue: true, - EnterpriseMembersCanMakePurchasesSettingValue: true, - EnterpriseServerInstallationOrderField: true, - EnterpriseServerUserAccountEmailOrderField: true, - EnterpriseServerUserAccountOrderField: true, - EnterpriseServerUserAccountsUploadOrderField: true, - EnterpriseServerUserAccountsUploadSyncState: true, - EnterpriseUserAccountMembershipRole: true, - EnterpriseUserDeployment: true, - FileViewedState: true, - Float: true, - FundingPlatform: true, - GistOrderField: true, - GistPrivacy: true, - GitObjectID: true, - GitSSHRemote: true, - GitSignatureState: true, - GitTimestamp: true, - HTML: true, - ID: true, - IdentityProviderConfigurationState: true, - Int: true, - IpAllowListEnabledSettingValue: true, - IpAllowListEntryOrderField: true, - IpAllowListForInstalledAppsEnabledSettingValue: true, - IssueCommentOrderField: true, - IssueOrderField: true, - IssueState: true, - IssueTimelineItemsItemType: true, - LabelOrderField: true, - LanguageOrderField: true, - LockReason: true, - MergeableState: true, - MilestoneOrderField: true, - MilestoneState: true, - NotificationRestrictionSettingValue: true, - OIDCProviderType: true, - OauthApplicationCreateAuditEntryState: true, - OperationType: true, - OrderDirection: true, - OrgAddMemberAuditEntryPermission: true, - OrgCreateAuditEntryBillingPlan: true, - OrgRemoveBillingManagerAuditEntryReason: true, - OrgRemoveMemberAuditEntryMembershipType: true, - OrgRemoveMemberAuditEntryReason: true, - OrgRemoveOutsideCollaboratorAuditEntryMembershipType: true, - OrgRemoveOutsideCollaboratorAuditEntryReason: true, - OrgUpdateDefaultRepositoryPermissionAuditEntryPermission: true, - OrgUpdateMemberAuditEntryPermission: true, - OrgUpdateMemberRepositoryCreationPermissionAuditEntryVisibility: true, - OrganizationInvitationRole: true, - OrganizationInvitationType: true, - OrganizationMemberRole: true, - OrganizationMembersCanCreateRepositoriesSettingValue: true, - OrganizationOrderField: true, - PackageFileOrderField: true, - PackageOrderField: true, - PackageType: true, - PackageVersionOrderField: true, - PinnableItemType: true, - PinnedDiscussionGradient: true, - PinnedDiscussionPattern: true, - PreciseDateTime: true, - ProjectCardArchivedState: true, - ProjectCardState: true, - ProjectColumnPurpose: true, - ProjectNextOrderField: true, - ProjectOrderField: true, - ProjectState: true, - ProjectTemplate: true, - PullRequestMergeMethod: true, - PullRequestOrderField: true, - PullRequestReviewCommentState: true, - PullRequestReviewDecision: true, - PullRequestReviewEvent: true, - PullRequestReviewState: true, - PullRequestState: true, - PullRequestTimelineItemsItemType: true, - PullRequestUpdateState: true, - ReactionContent: true, - ReactionOrderField: true, - RefOrderField: true, - ReleaseOrderField: true, - RepoAccessAuditEntryVisibility: true, - RepoAddMemberAuditEntryVisibility: true, - RepoArchivedAuditEntryVisibility: true, - RepoChangeMergeSettingAuditEntryMergeType: true, - RepoCreateAuditEntryVisibility: true, - RepoDestroyAuditEntryVisibility: true, - RepoRemoveMemberAuditEntryVisibility: true, - ReportedContentClassifiers: true, - RepositoryAffiliation: true, - RepositoryContributionType: true, - RepositoryInteractionLimit: true, - RepositoryInteractionLimitExpiry: true, - RepositoryInteractionLimitOrigin: true, - RepositoryInvitationOrderField: true, - RepositoryLockReason: true, - RepositoryOrderField: true, - RepositoryPermission: true, - RepositoryPrivacy: true, - RepositoryVisibility: true, - RequestableCheckStatusState: true, - RoleInOrganization: true, - SamlDigestAlgorithm: true, - SamlSignatureAlgorithm: true, - SavedReplyOrderField: true, - SearchType: true, - SecurityAdvisoryEcosystem: true, - SecurityAdvisoryIdentifierType: true, - SecurityAdvisoryOrderField: true, - SecurityAdvisorySeverity: true, - SecurityVulnerabilityOrderField: true, - SponsorOrderField: true, - SponsorableOrderField: true, - SponsorsActivityAction: true, - SponsorsActivityOrderField: true, - SponsorsActivityPeriod: true, - SponsorsGoalKind: true, - SponsorsTierOrderField: true, - SponsorshipNewsletterOrderField: true, - SponsorshipOrderField: true, - SponsorshipPrivacy: true, - StarOrderField: true, - StatusState: true, - String: true, - SubscriptionState: true, - TeamDiscussionCommentOrderField: true, - TeamDiscussionOrderField: true, - TeamMemberOrderField: true, - TeamMemberRole: true, - TeamMembershipType: true, - TeamOrderField: true, - TeamPrivacy: true, - TeamRepositoryOrderField: true, - TeamRole: true, - TopicSuggestionDeclineReason: true, - URI: true, - UserBlockDuration: true, - UserStatusOrderField: true, - VerifiableDomainOrderField: true, - X509Certificate: true, -}; -export const generatedSchema = { - AcceptEnterpriseAdministratorInvitationInput: { - clientMutationId: { __type: 'String' }, - invitationId: { __type: 'ID!' }, - }, - AcceptEnterpriseAdministratorInvitationPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - invitation: { __type: 'EnterpriseAdministratorInvitation' }, - message: { __type: 'String' }, - }, - AcceptTopicSuggestionInput: { - clientMutationId: { __type: 'String' }, - name: { __type: 'String!' }, - repositoryId: { __type: 'ID!' }, - }, - AcceptTopicSuggestionPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - topic: { __type: 'Topic' }, - }, - Actor: { - __typename: { __type: 'String!' }, - avatarUrl: { __type: 'URI!', __args: { size: 'Int' } }, - login: { __type: 'String!' }, - resourcePath: { __type: 'URI!' }, - url: { __type: 'URI!' }, - $on: { __type: '$Actor!' }, - }, - ActorLocation: { - __typename: { __type: 'String!' }, - city: { __type: 'String' }, - country: { __type: 'String' }, - countryCode: { __type: 'String' }, - region: { __type: 'String' }, - regionCode: { __type: 'String' }, - }, - AddAssigneesToAssignableInput: { - assignableId: { __type: 'ID!' }, - assigneeIds: { __type: '[ID!]!' }, - clientMutationId: { __type: 'String' }, - }, - AddAssigneesToAssignablePayload: { - __typename: { __type: 'String!' }, - assignable: { __type: 'Assignable' }, - clientMutationId: { __type: 'String' }, - }, - AddCommentInput: { - body: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - subjectId: { __type: 'ID!' }, - }, - AddCommentPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - commentEdge: { __type: 'IssueCommentEdge' }, - subject: { __type: 'Node' }, - timelineEdge: { __type: 'IssueTimelineItemEdge' }, - }, - AddDiscussionCommentInput: { - body: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - discussionId: { __type: 'ID!' }, - replyToId: { __type: 'ID' }, - }, - AddDiscussionCommentPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - comment: { __type: 'DiscussionComment' }, - }, - AddEnterpriseSupportEntitlementInput: { - clientMutationId: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - login: { __type: 'String!' }, - }, - AddEnterpriseSupportEntitlementPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - message: { __type: 'String' }, - }, - AddLabelsToLabelableInput: { - clientMutationId: { __type: 'String' }, - labelIds: { __type: '[ID!]!' }, - labelableId: { __type: 'ID!' }, - }, - AddLabelsToLabelablePayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - labelable: { __type: 'Labelable' }, - }, - AddProjectCardInput: { - clientMutationId: { __type: 'String' }, - contentId: { __type: 'ID' }, - note: { __type: 'String' }, - projectColumnId: { __type: 'ID!' }, - }, - AddProjectCardPayload: { - __typename: { __type: 'String!' }, - cardEdge: { __type: 'ProjectCardEdge' }, - clientMutationId: { __type: 'String' }, - projectColumn: { __type: 'ProjectColumn' }, - }, - AddProjectColumnInput: { - clientMutationId: { __type: 'String' }, - name: { __type: 'String!' }, - projectId: { __type: 'ID!' }, - }, - AddProjectColumnPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - columnEdge: { __type: 'ProjectColumnEdge' }, - project: { __type: 'Project' }, - }, - AddProjectNextItemInput: { - clientMutationId: { __type: 'String' }, - contentId: { __type: 'ID!' }, - projectId: { __type: 'ID!' }, - }, - AddProjectNextItemPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - projectNextItem: { __type: 'ProjectNextItem' }, - }, - AddPullRequestReviewCommentInput: { - body: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - commitOID: { __type: 'GitObjectID' }, - inReplyTo: { __type: 'ID' }, - path: { __type: 'String' }, - position: { __type: 'Int' }, - pullRequestId: { __type: 'ID' }, - pullRequestReviewId: { __type: 'ID' }, - }, - AddPullRequestReviewCommentPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - comment: { __type: 'PullRequestReviewComment' }, - commentEdge: { __type: 'PullRequestReviewCommentEdge' }, - }, - AddPullRequestReviewInput: { - body: { __type: 'String' }, - clientMutationId: { __type: 'String' }, - comments: { __type: '[DraftPullRequestReviewComment]' }, - commitOID: { __type: 'GitObjectID' }, - event: { __type: 'PullRequestReviewEvent' }, - pullRequestId: { __type: 'ID!' }, - threads: { __type: '[DraftPullRequestReviewThread]' }, - }, - AddPullRequestReviewPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - pullRequestReview: { __type: 'PullRequestReview' }, - reviewEdge: { __type: 'PullRequestReviewEdge' }, - }, - AddPullRequestReviewThreadInput: { - body: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - line: { __type: 'Int!' }, - path: { __type: 'String!' }, - pullRequestId: { __type: 'ID' }, - pullRequestReviewId: { __type: 'ID' }, - side: { __type: 'DiffSide' }, - startLine: { __type: 'Int' }, - startSide: { __type: 'DiffSide' }, - }, - AddPullRequestReviewThreadPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - thread: { __type: 'PullRequestReviewThread' }, - }, - AddReactionInput: { - clientMutationId: { __type: 'String' }, - content: { __type: 'ReactionContent!' }, - subjectId: { __type: 'ID!' }, - }, - AddReactionPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - reaction: { __type: 'Reaction' }, - subject: { __type: 'Reactable' }, - }, - AddStarInput: { - clientMutationId: { __type: 'String' }, - starrableId: { __type: 'ID!' }, - }, - AddStarPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - starrable: { __type: 'Starrable' }, - }, - AddUpvoteInput: { - clientMutationId: { __type: 'String' }, - subjectId: { __type: 'ID!' }, - }, - AddUpvotePayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - subject: { __type: 'Votable' }, - }, - AddVerifiableDomainInput: { - clientMutationId: { __type: 'String' }, - domain: { __type: 'URI!' }, - ownerId: { __type: 'ID!' }, - }, - AddVerifiableDomainPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - domain: { __type: 'VerifiableDomain' }, - }, - AddedToProjectEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - id: { __type: 'ID!' }, - }, - App: { - __typename: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - description: { __type: 'String' }, - id: { __type: 'ID!' }, - ipAllowListEntries: { - __type: 'IpAllowListEntryConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'IpAllowListEntryOrder', - }, - }, - logoBackgroundColor: { __type: 'String!' }, - logoUrl: { __type: 'URI!', __args: { size: 'Int' } }, - name: { __type: 'String!' }, - slug: { __type: 'String!' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - }, - ApproveDeploymentsInput: { - clientMutationId: { __type: 'String' }, - comment: { __type: 'String' }, - environmentIds: { __type: '[ID!]!' }, - workflowRunId: { __type: 'ID!' }, - }, - ApproveDeploymentsPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - deployments: { __type: '[Deployment!]' }, - }, - ApproveVerifiableDomainInput: { - clientMutationId: { __type: 'String' }, - id: { __type: 'ID!' }, - }, - ApproveVerifiableDomainPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - domain: { __type: 'VerifiableDomain' }, - }, - ArchiveRepositoryInput: { - clientMutationId: { __type: 'String' }, - repositoryId: { __type: 'ID!' }, - }, - ArchiveRepositoryPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - repository: { __type: 'Repository' }, - }, - Assignable: { - __typename: { __type: 'String!' }, - assignees: { - __type: 'UserConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - $on: { __type: '$Assignable!' }, - }, - AssignedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - assignable: { __type: 'Assignable!' }, - assignee: { __type: 'Assignee' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - user: { __type: 'User' }, - }, - Assignee: { - __typename: { __type: 'String!' }, - $on: { __type: '$Assignee!' }, - }, - AuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - operationType: { __type: 'OperationType' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - $on: { __type: '$AuditEntry!' }, - }, - AuditEntryActor: { - __typename: { __type: 'String!' }, - $on: { __type: '$AuditEntryActor!' }, - }, - AuditLogOrder: { - direction: { __type: 'OrderDirection' }, - field: { __type: 'AuditLogOrderField' }, - }, - AutoMergeDisabledEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - disabler: { __type: 'User' }, - id: { __type: 'ID!' }, - pullRequest: { __type: 'PullRequest' }, - reason: { __type: 'String' }, - reasonCode: { __type: 'String' }, - }, - AutoMergeEnabledEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - enabler: { __type: 'User' }, - id: { __type: 'ID!' }, - pullRequest: { __type: 'PullRequest' }, - }, - AutoMergeRequest: { - __typename: { __type: 'String!' }, - authorEmail: { __type: 'String' }, - commitBody: { __type: 'String' }, - commitHeadline: { __type: 'String' }, - enabledAt: { __type: 'DateTime' }, - enabledBy: { __type: 'Actor' }, - mergeMethod: { __type: 'PullRequestMergeMethod!' }, - pullRequest: { __type: 'PullRequest!' }, - }, - AutoRebaseEnabledEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - enabler: { __type: 'User' }, - id: { __type: 'ID!' }, - pullRequest: { __type: 'PullRequest' }, - }, - AutoSquashEnabledEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - enabler: { __type: 'User' }, - id: { __type: 'ID!' }, - pullRequest: { __type: 'PullRequest' }, - }, - AutomaticBaseChangeFailedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - newBase: { __type: 'String!' }, - oldBase: { __type: 'String!' }, - pullRequest: { __type: 'PullRequest!' }, - }, - AutomaticBaseChangeSucceededEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - newBase: { __type: 'String!' }, - oldBase: { __type: 'String!' }, - pullRequest: { __type: 'PullRequest!' }, - }, - BaseRefChangedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - currentRefName: { __type: 'String!' }, - databaseId: { __type: 'Int' }, - id: { __type: 'ID!' }, - previousRefName: { __type: 'String!' }, - pullRequest: { __type: 'PullRequest!' }, - }, - BaseRefDeletedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - baseRefName: { __type: 'String' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - pullRequest: { __type: 'PullRequest' }, - }, - BaseRefForcePushedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - afterCommit: { __type: 'Commit' }, - beforeCommit: { __type: 'Commit' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - pullRequest: { __type: 'PullRequest!' }, - ref: { __type: 'Ref' }, - }, - Blame: { - __typename: { __type: 'String!' }, - ranges: { __type: '[BlameRange!]!' }, - }, - BlameRange: { - __typename: { __type: 'String!' }, - age: { __type: 'Int!' }, - commit: { __type: 'Commit!' }, - endingLine: { __type: 'Int!' }, - startingLine: { __type: 'Int!' }, - }, - Blob: { - __typename: { __type: 'String!' }, - abbreviatedOid: { __type: 'String!' }, - byteSize: { __type: 'Int!' }, - commitResourcePath: { __type: 'URI!' }, - commitUrl: { __type: 'URI!' }, - id: { __type: 'ID!' }, - isBinary: { __type: 'Boolean' }, - isTruncated: { __type: 'Boolean!' }, - oid: { __type: 'GitObjectID!' }, - repository: { __type: 'Repository!' }, - text: { __type: 'String' }, - }, - Bot: { - __typename: { __type: 'String!' }, - avatarUrl: { __type: 'URI!', __args: { size: 'Int' } }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - id: { __type: 'ID!' }, - login: { __type: 'String!' }, - resourcePath: { __type: 'URI!' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - }, - BranchActorAllowanceActor: { - __typename: { __type: 'String!' }, - $on: { __type: '$BranchActorAllowanceActor!' }, - }, - BranchProtectionRule: { - __typename: { __type: 'String!' }, - allowsDeletions: { __type: 'Boolean!' }, - allowsForcePushes: { __type: 'Boolean!' }, - branchProtectionRuleConflicts: { - __type: 'BranchProtectionRuleConflictConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - bypassForcePushAllowances: { - __type: 'BypassForcePushAllowanceConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - bypassPullRequestAllowances: { - __type: 'BypassPullRequestAllowanceConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - creator: { __type: 'Actor' }, - databaseId: { __type: 'Int' }, - dismissesStaleReviews: { __type: 'Boolean!' }, - id: { __type: 'ID!' }, - isAdminEnforced: { __type: 'Boolean!' }, - matchingRefs: { - __type: 'RefConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - query: 'String', - }, - }, - pattern: { __type: 'String!' }, - pushAllowances: { - __type: 'PushAllowanceConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - repository: { __type: 'Repository' }, - requiredApprovingReviewCount: { __type: 'Int' }, - requiredStatusCheckContexts: { __type: '[String]' }, - requiredStatusChecks: { __type: '[RequiredStatusCheckDescription!]' }, - requiresApprovingReviews: { __type: 'Boolean!' }, - requiresCodeOwnerReviews: { __type: 'Boolean!' }, - requiresCommitSignatures: { __type: 'Boolean!' }, - requiresConversationResolution: { __type: 'Boolean!' }, - requiresLinearHistory: { __type: 'Boolean!' }, - requiresStatusChecks: { __type: 'Boolean!' }, - requiresStrictStatusChecks: { __type: 'Boolean!' }, - restrictsPushes: { __type: 'Boolean!' }, - restrictsReviewDismissals: { __type: 'Boolean!' }, - reviewDismissalAllowances: { - __type: 'ReviewDismissalAllowanceConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - }, - BranchProtectionRuleConflict: { - __typename: { __type: 'String!' }, - branchProtectionRule: { __type: 'BranchProtectionRule' }, - conflictingBranchProtectionRule: { __type: 'BranchProtectionRule' }, - ref: { __type: 'Ref' }, - }, - BranchProtectionRuleConflictConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[BranchProtectionRuleConflictEdge]' }, - nodes: { __type: '[BranchProtectionRuleConflict]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - BranchProtectionRuleConflictEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'BranchProtectionRuleConflict' }, - }, - BranchProtectionRuleConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[BranchProtectionRuleEdge]' }, - nodes: { __type: '[BranchProtectionRule]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - BranchProtectionRuleEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'BranchProtectionRule' }, - }, - BypassForcePushAllowance: { - __typename: { __type: 'String!' }, - actor: { __type: 'BranchActorAllowanceActor' }, - branchProtectionRule: { __type: 'BranchProtectionRule' }, - id: { __type: 'ID!' }, - }, - BypassForcePushAllowanceConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[BypassForcePushAllowanceEdge]' }, - nodes: { __type: '[BypassForcePushAllowance]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - BypassForcePushAllowanceEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'BypassForcePushAllowance' }, - }, - BypassPullRequestAllowance: { - __typename: { __type: 'String!' }, - actor: { __type: 'BranchActorAllowanceActor' }, - branchProtectionRule: { __type: 'BranchProtectionRule' }, - id: { __type: 'ID!' }, - }, - BypassPullRequestAllowanceConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[BypassPullRequestAllowanceEdge]' }, - nodes: { __type: '[BypassPullRequestAllowance]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - BypassPullRequestAllowanceEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'BypassPullRequestAllowance' }, - }, - CVSS: { - __typename: { __type: 'String!' }, - score: { __type: 'Float!' }, - vectorString: { __type: 'String' }, - }, - CWE: { - __typename: { __type: 'String!' }, - cweId: { __type: 'String!' }, - description: { __type: 'String!' }, - id: { __type: 'ID!' }, - name: { __type: 'String!' }, - }, - CWEConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[CWEEdge]' }, - nodes: { __type: '[CWE]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - CWEEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'CWE' }, - }, - CancelEnterpriseAdminInvitationInput: { - clientMutationId: { __type: 'String' }, - invitationId: { __type: 'ID!' }, - }, - CancelEnterpriseAdminInvitationPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - invitation: { __type: 'EnterpriseAdministratorInvitation' }, - message: { __type: 'String' }, - }, - CancelSponsorshipInput: { - clientMutationId: { __type: 'String' }, - sponsorId: { __type: 'ID' }, - sponsorLogin: { __type: 'String' }, - sponsorableId: { __type: 'ID' }, - sponsorableLogin: { __type: 'String' }, - }, - CancelSponsorshipPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - sponsorsTier: { __type: 'SponsorsTier' }, - }, - ChangeUserStatusInput: { - clientMutationId: { __type: 'String' }, - emoji: { __type: 'String' }, - expiresAt: { __type: 'DateTime' }, - limitedAvailability: { __type: 'Boolean' }, - message: { __type: 'String' }, - organizationId: { __type: 'ID' }, - }, - ChangeUserStatusPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - status: { __type: 'UserStatus' }, - }, - CheckAnnotation: { - __typename: { __type: 'String!' }, - annotationLevel: { __type: 'CheckAnnotationLevel' }, - blobUrl: { __type: 'URI!' }, - databaseId: { __type: 'Int' }, - location: { __type: 'CheckAnnotationSpan!' }, - message: { __type: 'String!' }, - path: { __type: 'String!' }, - rawDetails: { __type: 'String' }, - title: { __type: 'String' }, - }, - CheckAnnotationConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[CheckAnnotationEdge]' }, - nodes: { __type: '[CheckAnnotation]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - CheckAnnotationData: { - annotationLevel: { __type: 'CheckAnnotationLevel!' }, - location: { __type: 'CheckAnnotationRange!' }, - message: { __type: 'String!' }, - path: { __type: 'String!' }, - rawDetails: { __type: 'String' }, - title: { __type: 'String' }, - }, - CheckAnnotationEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'CheckAnnotation' }, - }, - CheckAnnotationPosition: { - __typename: { __type: 'String!' }, - column: { __type: 'Int' }, - line: { __type: 'Int!' }, - }, - CheckAnnotationRange: { - endColumn: { __type: 'Int' }, - endLine: { __type: 'Int!' }, - startColumn: { __type: 'Int' }, - startLine: { __type: 'Int!' }, - }, - CheckAnnotationSpan: { - __typename: { __type: 'String!' }, - end: { __type: 'CheckAnnotationPosition!' }, - start: { __type: 'CheckAnnotationPosition!' }, - }, - CheckRun: { - __typename: { __type: 'String!' }, - annotations: { - __type: 'CheckAnnotationConnection', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - checkSuite: { __type: 'CheckSuite!' }, - completedAt: { __type: 'DateTime' }, - conclusion: { __type: 'CheckConclusionState' }, - databaseId: { __type: 'Int' }, - deployment: { __type: 'Deployment' }, - detailsUrl: { __type: 'URI' }, - externalId: { __type: 'String' }, - id: { __type: 'ID!' }, - isRequired: { - __type: 'Boolean!', - __args: { pullRequestId: 'ID', pullRequestNumber: 'Int' }, - }, - name: { __type: 'String!' }, - pendingDeploymentRequest: { __type: 'DeploymentRequest' }, - permalink: { __type: 'URI!' }, - repository: { __type: 'Repository!' }, - resourcePath: { __type: 'URI!' }, - startedAt: { __type: 'DateTime' }, - status: { __type: 'CheckStatusState!' }, - steps: { - __type: 'CheckStepConnection', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - number: 'Int', - }, - }, - summary: { __type: 'String' }, - text: { __type: 'String' }, - title: { __type: 'String' }, - url: { __type: 'URI!' }, - }, - CheckRunAction: { - description: { __type: 'String!' }, - identifier: { __type: 'String!' }, - label: { __type: 'String!' }, - }, - CheckRunConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[CheckRunEdge]' }, - nodes: { __type: '[CheckRun]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - CheckRunEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'CheckRun' }, - }, - CheckRunFilter: { - appId: { __type: 'Int' }, - checkName: { __type: 'String' }, - checkType: { __type: 'CheckRunType' }, - status: { __type: 'CheckStatusState' }, - }, - CheckRunOutput: { - annotations: { __type: '[CheckAnnotationData!]' }, - images: { __type: '[CheckRunOutputImage!]' }, - summary: { __type: 'String!' }, - text: { __type: 'String' }, - title: { __type: 'String!' }, - }, - CheckRunOutputImage: { - alt: { __type: 'String!' }, - caption: { __type: 'String' }, - imageUrl: { __type: 'URI!' }, - }, - CheckStep: { - __typename: { __type: 'String!' }, - completedAt: { __type: 'DateTime' }, - conclusion: { __type: 'CheckConclusionState' }, - externalId: { __type: 'String' }, - name: { __type: 'String!' }, - number: { __type: 'Int!' }, - secondsToCompletion: { __type: 'Int' }, - startedAt: { __type: 'DateTime' }, - status: { __type: 'CheckStatusState!' }, - }, - CheckStepConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[CheckStepEdge]' }, - nodes: { __type: '[CheckStep]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - CheckStepEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'CheckStep' }, - }, - CheckSuite: { - __typename: { __type: 'String!' }, - app: { __type: 'App' }, - branch: { __type: 'Ref' }, - checkRuns: { - __type: 'CheckRunConnection', - __args: { - after: 'String', - before: 'String', - filterBy: 'CheckRunFilter', - first: 'Int', - last: 'Int', - }, - }, - commit: { __type: 'Commit!' }, - conclusion: { __type: 'CheckConclusionState' }, - createdAt: { __type: 'DateTime!' }, - creator: { __type: 'User' }, - databaseId: { __type: 'Int' }, - id: { __type: 'ID!' }, - matchingPullRequests: { - __type: 'PullRequestConnection', - __args: { - after: 'String', - baseRefName: 'String', - before: 'String', - first: 'Int', - headRefName: 'String', - labels: '[String!]', - last: 'Int', - orderBy: 'IssueOrder', - states: '[PullRequestState!]', - }, - }, - push: { __type: 'Push' }, - repository: { __type: 'Repository!' }, - resourcePath: { __type: 'URI!' }, - status: { __type: 'CheckStatusState!' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - workflowRun: { __type: 'WorkflowRun' }, - }, - CheckSuiteAutoTriggerPreference: { - appId: { __type: 'ID!' }, - setting: { __type: 'Boolean!' }, - }, - CheckSuiteConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[CheckSuiteEdge]' }, - nodes: { __type: '[CheckSuite]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - CheckSuiteEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'CheckSuite' }, - }, - CheckSuiteFilter: { - appId: { __type: 'Int' }, - checkName: { __type: 'String' }, - }, - ClearLabelsFromLabelableInput: { - clientMutationId: { __type: 'String' }, - labelableId: { __type: 'ID!' }, - }, - ClearLabelsFromLabelablePayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - labelable: { __type: 'Labelable' }, - }, - CloneProjectInput: { - body: { __type: 'String' }, - clientMutationId: { __type: 'String' }, - includeWorkflows: { __type: 'Boolean!' }, - name: { __type: 'String!' }, - public: { __type: 'Boolean' }, - sourceId: { __type: 'ID!' }, - targetOwnerId: { __type: 'ID!' }, - }, - CloneProjectPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - jobStatusId: { __type: 'String' }, - project: { __type: 'Project' }, - }, - CloneTemplateRepositoryInput: { - clientMutationId: { __type: 'String' }, - description: { __type: 'String' }, - includeAllBranches: { __type: 'Boolean' }, - name: { __type: 'String!' }, - ownerId: { __type: 'ID!' }, - repositoryId: { __type: 'ID!' }, - visibility: { __type: 'RepositoryVisibility!' }, - }, - CloneTemplateRepositoryPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - repository: { __type: 'Repository' }, - }, - Closable: { - __typename: { __type: 'String!' }, - closed: { __type: 'Boolean!' }, - closedAt: { __type: 'DateTime' }, - $on: { __type: '$Closable!' }, - }, - CloseIssueInput: { - clientMutationId: { __type: 'String' }, - issueId: { __type: 'ID!' }, - }, - CloseIssuePayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - issue: { __type: 'Issue' }, - }, - ClosePullRequestInput: { - clientMutationId: { __type: 'String' }, - pullRequestId: { __type: 'ID!' }, - }, - ClosePullRequestPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - pullRequest: { __type: 'PullRequest' }, - }, - ClosedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - closable: { __type: 'Closable!' }, - closer: { __type: 'Closer' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - resourcePath: { __type: 'URI!' }, - url: { __type: 'URI!' }, - }, - Closer: { __typename: { __type: 'String!' }, $on: { __type: '$Closer!' } }, - CodeOfConduct: { - __typename: { __type: 'String!' }, - body: { __type: 'String' }, - id: { __type: 'ID!' }, - key: { __type: 'String!' }, - name: { __type: 'String!' }, - resourcePath: { __type: 'URI' }, - url: { __type: 'URI' }, - }, - Comment: { - __typename: { __type: 'String!' }, - author: { __type: 'Actor' }, - authorAssociation: { __type: 'CommentAuthorAssociation!' }, - body: { __type: 'String!' }, - bodyHTML: { __type: 'HTML!' }, - bodyText: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - createdViaEmail: { __type: 'Boolean!' }, - editor: { __type: 'Actor' }, - id: { __type: 'ID!' }, - includesCreatedEdit: { __type: 'Boolean!' }, - lastEditedAt: { __type: 'DateTime' }, - publishedAt: { __type: 'DateTime' }, - updatedAt: { __type: 'DateTime!' }, - userContentEdits: { - __type: 'UserContentEditConnection', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - viewerDidAuthor: { __type: 'Boolean!' }, - $on: { __type: '$Comment!' }, - }, - CommentDeletedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - deletedCommentAuthor: { __type: 'Actor' }, - id: { __type: 'ID!' }, - }, - Commit: { - __typename: { __type: 'String!' }, - abbreviatedOid: { __type: 'String!' }, - additions: { __type: 'Int!' }, - associatedPullRequests: { - __type: 'PullRequestConnection', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'PullRequestOrder', - }, - }, - author: { __type: 'GitActor' }, - authoredByCommitter: { __type: 'Boolean!' }, - authoredDate: { __type: 'DateTime!' }, - authors: { - __type: 'GitActorConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - blame: { __type: 'Blame!', __args: { path: 'String!' } }, - changedFiles: { __type: 'Int!' }, - checkSuites: { - __type: 'CheckSuiteConnection', - __args: { - after: 'String', - before: 'String', - filterBy: 'CheckSuiteFilter', - first: 'Int', - last: 'Int', - }, - }, - comments: { - __type: 'CommitCommentConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - commitResourcePath: { __type: 'URI!' }, - commitUrl: { __type: 'URI!' }, - committedDate: { __type: 'DateTime!' }, - committedViaWeb: { __type: 'Boolean!' }, - committer: { __type: 'GitActor' }, - deletions: { __type: 'Int!' }, - deployments: { - __type: 'DeploymentConnection', - __args: { - after: 'String', - before: 'String', - environments: '[String!]', - first: 'Int', - last: 'Int', - orderBy: 'DeploymentOrder', - }, - }, - file: { __type: 'TreeEntry', __args: { path: 'String!' } }, - history: { - __type: 'CommitHistoryConnection!', - __args: { - after: 'String', - author: 'CommitAuthor', - before: 'String', - first: 'Int', - last: 'Int', - path: 'String', - since: 'GitTimestamp', - until: 'GitTimestamp', - }, - }, - id: { __type: 'ID!' }, - message: { __type: 'String!' }, - messageBody: { __type: 'String!' }, - messageBodyHTML: { __type: 'HTML!' }, - messageHeadline: { __type: 'String!' }, - messageHeadlineHTML: { __type: 'HTML!' }, - oid: { __type: 'GitObjectID!' }, - onBehalfOf: { __type: 'Organization' }, - parents: { - __type: 'CommitConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - pushedDate: { __type: 'DateTime' }, - repository: { __type: 'Repository!' }, - resourcePath: { __type: 'URI!' }, - signature: { __type: 'GitSignature' }, - status: { __type: 'Status' }, - statusCheckRollup: { __type: 'StatusCheckRollup' }, - submodules: { - __type: 'SubmoduleConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - tarballUrl: { __type: 'URI!' }, - tree: { __type: 'Tree!' }, - treeResourcePath: { __type: 'URI!' }, - treeUrl: { __type: 'URI!' }, - url: { __type: 'URI!' }, - viewerCanSubscribe: { __type: 'Boolean!' }, - viewerSubscription: { __type: 'SubscriptionState' }, - zipballUrl: { __type: 'URI!' }, - }, - CommitAuthor: { emails: { __type: '[String!]' }, id: { __type: 'ID' } }, - CommitComment: { - __typename: { __type: 'String!' }, - author: { __type: 'Actor' }, - authorAssociation: { __type: 'CommentAuthorAssociation!' }, - body: { __type: 'String!' }, - bodyHTML: { __type: 'HTML!' }, - bodyText: { __type: 'String!' }, - commit: { __type: 'Commit' }, - createdAt: { __type: 'DateTime!' }, - createdViaEmail: { __type: 'Boolean!' }, - databaseId: { __type: 'Int' }, - editor: { __type: 'Actor' }, - id: { __type: 'ID!' }, - includesCreatedEdit: { __type: 'Boolean!' }, - isMinimized: { __type: 'Boolean!' }, - lastEditedAt: { __type: 'DateTime' }, - minimizedReason: { __type: 'String' }, - path: { __type: 'String' }, - position: { __type: 'Int' }, - publishedAt: { __type: 'DateTime' }, - reactionGroups: { __type: '[ReactionGroup!]' }, - reactions: { - __type: 'ReactionConnection!', - __args: { - after: 'String', - before: 'String', - content: 'ReactionContent', - first: 'Int', - last: 'Int', - orderBy: 'ReactionOrder', - }, - }, - repository: { __type: 'Repository!' }, - resourcePath: { __type: 'URI!' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - userContentEdits: { - __type: 'UserContentEditConnection', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - viewerCanDelete: { __type: 'Boolean!' }, - viewerCanMinimize: { __type: 'Boolean!' }, - viewerCanReact: { __type: 'Boolean!' }, - viewerCanUpdate: { __type: 'Boolean!' }, - viewerCannotUpdateReasons: { __type: '[CommentCannotUpdateReason!]!' }, - viewerDidAuthor: { __type: 'Boolean!' }, - }, - CommitCommentConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[CommitCommentEdge]' }, - nodes: { __type: '[CommitComment]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - CommitCommentEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'CommitComment' }, - }, - CommitCommentThread: { - __typename: { __type: 'String!' }, - comments: { - __type: 'CommitCommentConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - commit: { __type: 'Commit' }, - id: { __type: 'ID!' }, - path: { __type: 'String' }, - position: { __type: 'Int' }, - repository: { __type: 'Repository!' }, - }, - CommitConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[CommitEdge]' }, - nodes: { __type: '[Commit]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - CommitContributionOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'CommitContributionOrderField!' }, - }, - CommitContributionsByRepository: { - __typename: { __type: 'String!' }, - contributions: { - __type: 'CreatedCommitContributionConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'CommitContributionOrder', - }, - }, - repository: { __type: 'Repository!' }, - resourcePath: { __type: 'URI!' }, - url: { __type: 'URI!' }, - }, - CommitEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Commit' }, - }, - CommitHistoryConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[CommitEdge]' }, - nodes: { __type: '[Commit]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - CommitMessage: { - body: { __type: 'String' }, - headline: { __type: 'String!' }, - }, - CommittableBranch: { - branchName: { __type: 'String' }, - id: { __type: 'ID' }, - repositoryNameWithOwner: { __type: 'String' }, - }, - ConnectedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - isCrossRepository: { __type: 'Boolean!' }, - source: { __type: 'ReferencedSubject!' }, - subject: { __type: 'ReferencedSubject!' }, - }, - Contribution: { - __typename: { __type: 'String!' }, - isRestricted: { __type: 'Boolean!' }, - occurredAt: { __type: 'DateTime!' }, - resourcePath: { __type: 'URI!' }, - url: { __type: 'URI!' }, - user: { __type: 'User!' }, - $on: { __type: '$Contribution!' }, - }, - ContributionCalendar: { - __typename: { __type: 'String!' }, - colors: { __type: '[String!]!' }, - isHalloween: { __type: 'Boolean!' }, - months: { __type: '[ContributionCalendarMonth!]!' }, - totalContributions: { __type: 'Int!' }, - weeks: { __type: '[ContributionCalendarWeek!]!' }, - }, - ContributionCalendarDay: { - __typename: { __type: 'String!' }, - color: { __type: 'String!' }, - contributionCount: { __type: 'Int!' }, - contributionLevel: { __type: 'ContributionLevel!' }, - date: { __type: 'Date!' }, - weekday: { __type: 'Int!' }, - }, - ContributionCalendarMonth: { - __typename: { __type: 'String!' }, - firstDay: { __type: 'Date!' }, - name: { __type: 'String!' }, - totalWeeks: { __type: 'Int!' }, - year: { __type: 'Int!' }, - }, - ContributionCalendarWeek: { - __typename: { __type: 'String!' }, - contributionDays: { __type: '[ContributionCalendarDay!]!' }, - firstDay: { __type: 'Date!' }, - }, - ContributionOrder: { direction: { __type: 'OrderDirection!' } }, - ContributionsCollection: { - __typename: { __type: 'String!' }, - commitContributionsByRepository: { - __type: '[CommitContributionsByRepository!]!', - __args: { maxRepositories: 'Int' }, - }, - contributionCalendar: { __type: 'ContributionCalendar!' }, - contributionYears: { __type: '[Int!]!' }, - doesEndInCurrentMonth: { __type: 'Boolean!' }, - earliestRestrictedContributionDate: { __type: 'Date' }, - endedAt: { __type: 'DateTime!' }, - firstIssueContribution: { __type: 'CreatedIssueOrRestrictedContribution' }, - firstPullRequestContribution: { - __type: 'CreatedPullRequestOrRestrictedContribution', - }, - firstRepositoryContribution: { - __type: 'CreatedRepositoryOrRestrictedContribution', - }, - hasActivityInThePast: { __type: 'Boolean!' }, - hasAnyContributions: { __type: 'Boolean!' }, - hasAnyRestrictedContributions: { __type: 'Boolean!' }, - isSingleDay: { __type: 'Boolean!' }, - issueContributions: { - __type: 'CreatedIssueContributionConnection!', - __args: { - after: 'String', - before: 'String', - excludeFirst: 'Boolean', - excludePopular: 'Boolean', - first: 'Int', - last: 'Int', - orderBy: 'ContributionOrder', - }, - }, - issueContributionsByRepository: { - __type: '[IssueContributionsByRepository!]!', - __args: { - excludeFirst: 'Boolean', - excludePopular: 'Boolean', - maxRepositories: 'Int', - }, - }, - joinedGitHubContribution: { __type: 'JoinedGitHubContribution' }, - latestRestrictedContributionDate: { __type: 'Date' }, - mostRecentCollectionWithActivity: { __type: 'ContributionsCollection' }, - mostRecentCollectionWithoutActivity: { __type: 'ContributionsCollection' }, - popularIssueContribution: { __type: 'CreatedIssueContribution' }, - popularPullRequestContribution: { - __type: 'CreatedPullRequestContribution', - }, - pullRequestContributions: { - __type: 'CreatedPullRequestContributionConnection!', - __args: { - after: 'String', - before: 'String', - excludeFirst: 'Boolean', - excludePopular: 'Boolean', - first: 'Int', - last: 'Int', - orderBy: 'ContributionOrder', - }, - }, - pullRequestContributionsByRepository: { - __type: '[PullRequestContributionsByRepository!]!', - __args: { - excludeFirst: 'Boolean', - excludePopular: 'Boolean', - maxRepositories: 'Int', - }, - }, - pullRequestReviewContributions: { - __type: 'CreatedPullRequestReviewContributionConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'ContributionOrder', - }, - }, - pullRequestReviewContributionsByRepository: { - __type: '[PullRequestReviewContributionsByRepository!]!', - __args: { maxRepositories: 'Int' }, - }, - repositoryContributions: { - __type: 'CreatedRepositoryContributionConnection!', - __args: { - after: 'String', - before: 'String', - excludeFirst: 'Boolean', - first: 'Int', - last: 'Int', - orderBy: 'ContributionOrder', - }, - }, - restrictedContributionsCount: { __type: 'Int!' }, - startedAt: { __type: 'DateTime!' }, - totalCommitContributions: { __type: 'Int!' }, - totalIssueContributions: { - __type: 'Int!', - __args: { excludeFirst: 'Boolean', excludePopular: 'Boolean' }, - }, - totalPullRequestContributions: { - __type: 'Int!', - __args: { excludeFirst: 'Boolean', excludePopular: 'Boolean' }, - }, - totalPullRequestReviewContributions: { __type: 'Int!' }, - totalRepositoriesWithContributedCommits: { __type: 'Int!' }, - totalRepositoriesWithContributedIssues: { - __type: 'Int!', - __args: { excludeFirst: 'Boolean', excludePopular: 'Boolean' }, - }, - totalRepositoriesWithContributedPullRequestReviews: { __type: 'Int!' }, - totalRepositoriesWithContributedPullRequests: { - __type: 'Int!', - __args: { excludeFirst: 'Boolean', excludePopular: 'Boolean' }, - }, - totalRepositoryContributions: { - __type: 'Int!', - __args: { excludeFirst: 'Boolean' }, - }, - user: { __type: 'User!' }, - }, - ConvertProjectCardNoteToIssueInput: { - body: { __type: 'String' }, - clientMutationId: { __type: 'String' }, - projectCardId: { __type: 'ID!' }, - repositoryId: { __type: 'ID!' }, - title: { __type: 'String' }, - }, - ConvertProjectCardNoteToIssuePayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - projectCard: { __type: 'ProjectCard' }, - }, - ConvertPullRequestToDraftInput: { - clientMutationId: { __type: 'String' }, - pullRequestId: { __type: 'ID!' }, - }, - ConvertPullRequestToDraftPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - pullRequest: { __type: 'PullRequest' }, - }, - ConvertToDraftEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - pullRequest: { __type: 'PullRequest!' }, - resourcePath: { __type: 'URI!' }, - url: { __type: 'URI!' }, - }, - ConvertedNoteToIssueEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - id: { __type: 'ID!' }, - }, - ConvertedToDiscussionEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - discussion: { __type: 'Discussion' }, - id: { __type: 'ID!' }, - }, - CreateBranchProtectionRuleInput: { - allowsDeletions: { __type: 'Boolean' }, - allowsForcePushes: { __type: 'Boolean' }, - bypassForcePushActorIds: { __type: '[ID!]' }, - bypassPullRequestActorIds: { __type: '[ID!]' }, - clientMutationId: { __type: 'String' }, - dismissesStaleReviews: { __type: 'Boolean' }, - isAdminEnforced: { __type: 'Boolean' }, - pattern: { __type: 'String!' }, - pushActorIds: { __type: '[ID!]' }, - repositoryId: { __type: 'ID!' }, - requiredApprovingReviewCount: { __type: 'Int' }, - requiredStatusCheckContexts: { __type: '[String!]' }, - requiredStatusChecks: { __type: '[RequiredStatusCheckInput!]' }, - requiresApprovingReviews: { __type: 'Boolean' }, - requiresCodeOwnerReviews: { __type: 'Boolean' }, - requiresCommitSignatures: { __type: 'Boolean' }, - requiresConversationResolution: { __type: 'Boolean' }, - requiresLinearHistory: { __type: 'Boolean' }, - requiresStatusChecks: { __type: 'Boolean' }, - requiresStrictStatusChecks: { __type: 'Boolean' }, - restrictsPushes: { __type: 'Boolean' }, - restrictsReviewDismissals: { __type: 'Boolean' }, - reviewDismissalActorIds: { __type: '[ID!]' }, - }, - CreateBranchProtectionRulePayload: { - __typename: { __type: 'String!' }, - branchProtectionRule: { __type: 'BranchProtectionRule' }, - clientMutationId: { __type: 'String' }, - }, - CreateCheckRunInput: { - actions: { __type: '[CheckRunAction!]' }, - clientMutationId: { __type: 'String' }, - completedAt: { __type: 'DateTime' }, - conclusion: { __type: 'CheckConclusionState' }, - detailsUrl: { __type: 'URI' }, - externalId: { __type: 'String' }, - headSha: { __type: 'GitObjectID!' }, - name: { __type: 'String!' }, - output: { __type: 'CheckRunOutput' }, - repositoryId: { __type: 'ID!' }, - startedAt: { __type: 'DateTime' }, - status: { __type: 'RequestableCheckStatusState' }, - }, - CreateCheckRunPayload: { - __typename: { __type: 'String!' }, - checkRun: { __type: 'CheckRun' }, - clientMutationId: { __type: 'String' }, - }, - CreateCheckSuiteInput: { - clientMutationId: { __type: 'String' }, - headSha: { __type: 'GitObjectID!' }, - repositoryId: { __type: 'ID!' }, - }, - CreateCheckSuitePayload: { - __typename: { __type: 'String!' }, - checkSuite: { __type: 'CheckSuite' }, - clientMutationId: { __type: 'String' }, - }, - CreateCommitOnBranchInput: { - branch: { __type: 'CommittableBranch!' }, - clientMutationId: { __type: 'String' }, - expectedHeadOid: { __type: 'GitObjectID!' }, - fileChanges: { __type: 'FileChanges' }, - message: { __type: 'CommitMessage!' }, - }, - CreateCommitOnBranchPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - commit: { __type: 'Commit' }, - ref: { __type: 'Ref' }, - }, - CreateDiscussionInput: { - body: { __type: 'String!' }, - categoryId: { __type: 'ID!' }, - clientMutationId: { __type: 'String' }, - repositoryId: { __type: 'ID!' }, - title: { __type: 'String!' }, - }, - CreateDiscussionPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - discussion: { __type: 'Discussion' }, - }, - CreateEnterpriseOrganizationInput: { - adminLogins: { __type: '[String!]!' }, - billingEmail: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - login: { __type: 'String!' }, - profileName: { __type: 'String!' }, - }, - CreateEnterpriseOrganizationPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - enterprise: { __type: 'Enterprise' }, - organization: { __type: 'Organization' }, - }, - CreateEnvironmentInput: { - clientMutationId: { __type: 'String' }, - name: { __type: 'String!' }, - repositoryId: { __type: 'ID!' }, - }, - CreateEnvironmentPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - environment: { __type: 'Environment' }, - }, - CreateIpAllowListEntryInput: { - allowListValue: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - isActive: { __type: 'Boolean!' }, - name: { __type: 'String' }, - ownerId: { __type: 'ID!' }, - }, - CreateIpAllowListEntryPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - ipAllowListEntry: { __type: 'IpAllowListEntry' }, - }, - CreateIssueInput: { - assigneeIds: { __type: '[ID!]' }, - body: { __type: 'String' }, - clientMutationId: { __type: 'String' }, - issueTemplate: { __type: 'String' }, - labelIds: { __type: '[ID!]' }, - milestoneId: { __type: 'ID' }, - projectIds: { __type: '[ID!]' }, - repositoryId: { __type: 'ID!' }, - title: { __type: 'String!' }, - }, - CreateIssuePayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - issue: { __type: 'Issue' }, - }, - CreateProjectInput: { - body: { __type: 'String' }, - clientMutationId: { __type: 'String' }, - name: { __type: 'String!' }, - ownerId: { __type: 'ID!' }, - repositoryIds: { __type: '[ID!]' }, - template: { __type: 'ProjectTemplate' }, - }, - CreateProjectPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - project: { __type: 'Project' }, - }, - CreatePullRequestInput: { - baseRefName: { __type: 'String!' }, - body: { __type: 'String' }, - clientMutationId: { __type: 'String' }, - draft: { __type: 'Boolean' }, - headRefName: { __type: 'String!' }, - maintainerCanModify: { __type: 'Boolean' }, - repositoryId: { __type: 'ID!' }, - title: { __type: 'String!' }, - }, - CreatePullRequestPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - pullRequest: { __type: 'PullRequest' }, - }, - CreateRefInput: { - clientMutationId: { __type: 'String' }, - name: { __type: 'String!' }, - oid: { __type: 'GitObjectID!' }, - repositoryId: { __type: 'ID!' }, - }, - CreateRefPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - ref: { __type: 'Ref' }, - }, - CreateRepositoryInput: { - clientMutationId: { __type: 'String' }, - description: { __type: 'String' }, - hasIssuesEnabled: { __type: 'Boolean' }, - hasWikiEnabled: { __type: 'Boolean' }, - homepageUrl: { __type: 'URI' }, - name: { __type: 'String!' }, - ownerId: { __type: 'ID' }, - teamId: { __type: 'ID' }, - template: { __type: 'Boolean' }, - visibility: { __type: 'RepositoryVisibility!' }, - }, - CreateRepositoryPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - repository: { __type: 'Repository' }, - }, - CreateSponsorshipInput: { - amount: { __type: 'Int' }, - clientMutationId: { __type: 'String' }, - isRecurring: { __type: 'Boolean' }, - privacyLevel: { __type: 'SponsorshipPrivacy' }, - receiveEmails: { __type: 'Boolean' }, - sponsorId: { __type: 'ID' }, - sponsorLogin: { __type: 'String' }, - sponsorableId: { __type: 'ID' }, - sponsorableLogin: { __type: 'String' }, - tierId: { __type: 'ID' }, - }, - CreateSponsorshipPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - sponsorship: { __type: 'Sponsorship' }, - }, - CreateTeamDiscussionCommentInput: { - body: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - discussionId: { __type: 'ID!' }, - }, - CreateTeamDiscussionCommentPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - teamDiscussionComment: { __type: 'TeamDiscussionComment' }, - }, - CreateTeamDiscussionInput: { - body: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - private: { __type: 'Boolean' }, - teamId: { __type: 'ID!' }, - title: { __type: 'String!' }, - }, - CreateTeamDiscussionPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - teamDiscussion: { __type: 'TeamDiscussion' }, - }, - CreatedCommitContribution: { - __typename: { __type: 'String!' }, - commitCount: { __type: 'Int!' }, - isRestricted: { __type: 'Boolean!' }, - occurredAt: { __type: 'DateTime!' }, - repository: { __type: 'Repository!' }, - resourcePath: { __type: 'URI!' }, - url: { __type: 'URI!' }, - user: { __type: 'User!' }, - }, - CreatedCommitContributionConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[CreatedCommitContributionEdge]' }, - nodes: { __type: '[CreatedCommitContribution]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - CreatedCommitContributionEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'CreatedCommitContribution' }, - }, - CreatedIssueContribution: { - __typename: { __type: 'String!' }, - isRestricted: { __type: 'Boolean!' }, - issue: { __type: 'Issue!' }, - occurredAt: { __type: 'DateTime!' }, - resourcePath: { __type: 'URI!' }, - url: { __type: 'URI!' }, - user: { __type: 'User!' }, - }, - CreatedIssueContributionConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[CreatedIssueContributionEdge]' }, - nodes: { __type: '[CreatedIssueContribution]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - CreatedIssueContributionEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'CreatedIssueContribution' }, - }, - CreatedIssueOrRestrictedContribution: { - __typename: { __type: 'String!' }, - $on: { __type: '$CreatedIssueOrRestrictedContribution!' }, - }, - CreatedPullRequestContribution: { - __typename: { __type: 'String!' }, - isRestricted: { __type: 'Boolean!' }, - occurredAt: { __type: 'DateTime!' }, - pullRequest: { __type: 'PullRequest!' }, - resourcePath: { __type: 'URI!' }, - url: { __type: 'URI!' }, - user: { __type: 'User!' }, - }, - CreatedPullRequestContributionConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[CreatedPullRequestContributionEdge]' }, - nodes: { __type: '[CreatedPullRequestContribution]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - CreatedPullRequestContributionEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'CreatedPullRequestContribution' }, - }, - CreatedPullRequestOrRestrictedContribution: { - __typename: { __type: 'String!' }, - $on: { __type: '$CreatedPullRequestOrRestrictedContribution!' }, - }, - CreatedPullRequestReviewContribution: { - __typename: { __type: 'String!' }, - isRestricted: { __type: 'Boolean!' }, - occurredAt: { __type: 'DateTime!' }, - pullRequest: { __type: 'PullRequest!' }, - pullRequestReview: { __type: 'PullRequestReview!' }, - repository: { __type: 'Repository!' }, - resourcePath: { __type: 'URI!' }, - url: { __type: 'URI!' }, - user: { __type: 'User!' }, - }, - CreatedPullRequestReviewContributionConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[CreatedPullRequestReviewContributionEdge]' }, - nodes: { __type: '[CreatedPullRequestReviewContribution]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - CreatedPullRequestReviewContributionEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'CreatedPullRequestReviewContribution' }, - }, - CreatedRepositoryContribution: { - __typename: { __type: 'String!' }, - isRestricted: { __type: 'Boolean!' }, - occurredAt: { __type: 'DateTime!' }, - repository: { __type: 'Repository!' }, - resourcePath: { __type: 'URI!' }, - url: { __type: 'URI!' }, - user: { __type: 'User!' }, - }, - CreatedRepositoryContributionConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[CreatedRepositoryContributionEdge]' }, - nodes: { __type: '[CreatedRepositoryContribution]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - CreatedRepositoryContributionEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'CreatedRepositoryContribution' }, - }, - CreatedRepositoryOrRestrictedContribution: { - __typename: { __type: 'String!' }, - $on: { __type: '$CreatedRepositoryOrRestrictedContribution!' }, - }, - CrossReferencedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - isCrossRepository: { __type: 'Boolean!' }, - referencedAt: { __type: 'DateTime!' }, - resourcePath: { __type: 'URI!' }, - source: { __type: 'ReferencedSubject!' }, - target: { __type: 'ReferencedSubject!' }, - url: { __type: 'URI!' }, - willCloseTarget: { __type: 'Boolean!' }, - }, - DeclineTopicSuggestionInput: { - clientMutationId: { __type: 'String' }, - name: { __type: 'String!' }, - reason: { __type: 'TopicSuggestionDeclineReason!' }, - repositoryId: { __type: 'ID!' }, - }, - DeclineTopicSuggestionPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - topic: { __type: 'Topic' }, - }, - Deletable: { - __typename: { __type: 'String!' }, - viewerCanDelete: { __type: 'Boolean!' }, - $on: { __type: '$Deletable!' }, - }, - DeleteBranchProtectionRuleInput: { - branchProtectionRuleId: { __type: 'ID!' }, - clientMutationId: { __type: 'String' }, - }, - DeleteBranchProtectionRulePayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - }, - DeleteDeploymentInput: { - clientMutationId: { __type: 'String' }, - id: { __type: 'ID!' }, - }, - DeleteDeploymentPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - }, - DeleteDiscussionCommentInput: { - clientMutationId: { __type: 'String' }, - id: { __type: 'ID!' }, - }, - DeleteDiscussionCommentPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - comment: { __type: 'DiscussionComment' }, - }, - DeleteDiscussionInput: { - clientMutationId: { __type: 'String' }, - id: { __type: 'ID!' }, - }, - DeleteDiscussionPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - discussion: { __type: 'Discussion' }, - }, - DeleteEnvironmentInput: { - clientMutationId: { __type: 'String' }, - id: { __type: 'ID!' }, - }, - DeleteEnvironmentPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - }, - DeleteIpAllowListEntryInput: { - clientMutationId: { __type: 'String' }, - ipAllowListEntryId: { __type: 'ID!' }, - }, - DeleteIpAllowListEntryPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - ipAllowListEntry: { __type: 'IpAllowListEntry' }, - }, - DeleteIssueCommentInput: { - clientMutationId: { __type: 'String' }, - id: { __type: 'ID!' }, - }, - DeleteIssueCommentPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - }, - DeleteIssueInput: { - clientMutationId: { __type: 'String' }, - issueId: { __type: 'ID!' }, - }, - DeleteIssuePayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - repository: { __type: 'Repository' }, - }, - DeleteProjectCardInput: { - cardId: { __type: 'ID!' }, - clientMutationId: { __type: 'String' }, - }, - DeleteProjectCardPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - column: { __type: 'ProjectColumn' }, - deletedCardId: { __type: 'ID' }, - }, - DeleteProjectColumnInput: { - clientMutationId: { __type: 'String' }, - columnId: { __type: 'ID!' }, - }, - DeleteProjectColumnPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - deletedColumnId: { __type: 'ID' }, - project: { __type: 'Project' }, - }, - DeleteProjectInput: { - clientMutationId: { __type: 'String' }, - projectId: { __type: 'ID!' }, - }, - DeleteProjectNextItemInput: { - clientMutationId: { __type: 'String' }, - itemId: { __type: 'ID!' }, - projectId: { __type: 'ID!' }, - }, - DeleteProjectNextItemPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - deletedItemId: { __type: 'ID' }, - }, - DeleteProjectPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - owner: { __type: 'ProjectOwner' }, - }, - DeletePullRequestReviewCommentInput: { - clientMutationId: { __type: 'String' }, - id: { __type: 'ID!' }, - }, - DeletePullRequestReviewCommentPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - pullRequestReview: { __type: 'PullRequestReview' }, - }, - DeletePullRequestReviewInput: { - clientMutationId: { __type: 'String' }, - pullRequestReviewId: { __type: 'ID!' }, - }, - DeletePullRequestReviewPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - pullRequestReview: { __type: 'PullRequestReview' }, - }, - DeleteRefInput: { - clientMutationId: { __type: 'String' }, - refId: { __type: 'ID!' }, - }, - DeleteRefPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - }, - DeleteTeamDiscussionCommentInput: { - clientMutationId: { __type: 'String' }, - id: { __type: 'ID!' }, - }, - DeleteTeamDiscussionCommentPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - }, - DeleteTeamDiscussionInput: { - clientMutationId: { __type: 'String' }, - id: { __type: 'ID!' }, - }, - DeleteTeamDiscussionPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - }, - DeleteVerifiableDomainInput: { - clientMutationId: { __type: 'String' }, - id: { __type: 'ID!' }, - }, - DeleteVerifiableDomainPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - owner: { __type: 'VerifiableDomainOwner' }, - }, - DemilestonedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - milestoneTitle: { __type: 'String!' }, - subject: { __type: 'MilestoneItem!' }, - }, - DeployKey: { - __typename: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - key: { __type: 'String!' }, - readOnly: { __type: 'Boolean!' }, - title: { __type: 'String!' }, - verified: { __type: 'Boolean!' }, - }, - DeployKeyConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[DeployKeyEdge]' }, - nodes: { __type: '[DeployKey]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - DeployKeyEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'DeployKey' }, - }, - DeployedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - deployment: { __type: 'Deployment!' }, - id: { __type: 'ID!' }, - pullRequest: { __type: 'PullRequest!' }, - ref: { __type: 'Ref' }, - }, - Deployment: { - __typename: { __type: 'String!' }, - commit: { __type: 'Commit' }, - commitOid: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - creator: { __type: 'Actor!' }, - databaseId: { __type: 'Int' }, - description: { __type: 'String' }, - environment: { __type: 'String' }, - id: { __type: 'ID!' }, - latestEnvironment: { __type: 'String' }, - latestStatus: { __type: 'DeploymentStatus' }, - originalEnvironment: { __type: 'String' }, - payload: { __type: 'String' }, - ref: { __type: 'Ref' }, - repository: { __type: 'Repository!' }, - state: { __type: 'DeploymentState' }, - statuses: { - __type: 'DeploymentStatusConnection', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - task: { __type: 'String' }, - updatedAt: { __type: 'DateTime!' }, - }, - DeploymentConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[DeploymentEdge]' }, - nodes: { __type: '[Deployment]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - DeploymentEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Deployment' }, - }, - DeploymentEnvironmentChangedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - deploymentStatus: { __type: 'DeploymentStatus!' }, - id: { __type: 'ID!' }, - pullRequest: { __type: 'PullRequest!' }, - }, - DeploymentOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'DeploymentOrderField!' }, - }, - DeploymentProtectionRule: { - __typename: { __type: 'String!' }, - databaseId: { __type: 'Int' }, - reviewers: { - __type: 'DeploymentReviewerConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - timeout: { __type: 'Int!' }, - type: { __type: 'DeploymentProtectionRuleType!' }, - }, - DeploymentProtectionRuleConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[DeploymentProtectionRuleEdge]' }, - nodes: { __type: '[DeploymentProtectionRule]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - DeploymentProtectionRuleEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'DeploymentProtectionRule' }, - }, - DeploymentRequest: { - __typename: { __type: 'String!' }, - currentUserCanApprove: { __type: 'Boolean!' }, - environment: { __type: 'Environment!' }, - reviewers: { - __type: 'DeploymentReviewerConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - waitTimer: { __type: 'Int!' }, - waitTimerStartedAt: { __type: 'DateTime' }, - }, - DeploymentRequestConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[DeploymentRequestEdge]' }, - nodes: { __type: '[DeploymentRequest]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - DeploymentRequestEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'DeploymentRequest' }, - }, - DeploymentReview: { - __typename: { __type: 'String!' }, - comment: { __type: 'String!' }, - databaseId: { __type: 'Int' }, - environments: { - __type: 'EnvironmentConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - id: { __type: 'ID!' }, - state: { __type: 'DeploymentReviewState!' }, - user: { __type: 'User!' }, - }, - DeploymentReviewConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[DeploymentReviewEdge]' }, - nodes: { __type: '[DeploymentReview]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - DeploymentReviewEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'DeploymentReview' }, - }, - DeploymentReviewer: { - __typename: { __type: 'String!' }, - $on: { __type: '$DeploymentReviewer!' }, - }, - DeploymentReviewerConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[DeploymentReviewerEdge]' }, - nodes: { __type: '[DeploymentReviewer]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - DeploymentReviewerEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'DeploymentReviewer' }, - }, - DeploymentStatus: { - __typename: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - creator: { __type: 'Actor!' }, - deployment: { __type: 'Deployment!' }, - description: { __type: 'String' }, - environmentUrl: { __type: 'URI' }, - id: { __type: 'ID!' }, - logUrl: { __type: 'URI' }, - state: { __type: 'DeploymentStatusState!' }, - updatedAt: { __type: 'DateTime!' }, - }, - DeploymentStatusConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[DeploymentStatusEdge]' }, - nodes: { __type: '[DeploymentStatus]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - DeploymentStatusEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'DeploymentStatus' }, - }, - DisablePullRequestAutoMergeInput: { - clientMutationId: { __type: 'String' }, - pullRequestId: { __type: 'ID!' }, - }, - DisablePullRequestAutoMergePayload: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - clientMutationId: { __type: 'String' }, - pullRequest: { __type: 'PullRequest' }, - }, - DisconnectedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - isCrossRepository: { __type: 'Boolean!' }, - source: { __type: 'ReferencedSubject!' }, - subject: { __type: 'ReferencedSubject!' }, - }, - Discussion: { - __typename: { __type: 'String!' }, - activeLockReason: { __type: 'LockReason' }, - answer: { __type: 'DiscussionComment' }, - answerChosenAt: { __type: 'DateTime' }, - answerChosenBy: { __type: 'Actor' }, - author: { __type: 'Actor' }, - authorAssociation: { __type: 'CommentAuthorAssociation!' }, - body: { __type: 'String!' }, - bodyHTML: { __type: 'HTML!' }, - bodyText: { __type: 'String!' }, - category: { __type: 'DiscussionCategory!' }, - comments: { - __type: 'DiscussionCommentConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - createdAt: { __type: 'DateTime!' }, - createdViaEmail: { __type: 'Boolean!' }, - databaseId: { __type: 'Int' }, - editor: { __type: 'Actor' }, - id: { __type: 'ID!' }, - includesCreatedEdit: { __type: 'Boolean!' }, - labels: { - __type: 'LabelConnection', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'LabelOrder', - }, - }, - lastEditedAt: { __type: 'DateTime' }, - locked: { __type: 'Boolean!' }, - number: { __type: 'Int!' }, - publishedAt: { __type: 'DateTime' }, - reactionGroups: { __type: '[ReactionGroup!]' }, - reactions: { - __type: 'ReactionConnection!', - __args: { - after: 'String', - before: 'String', - content: 'ReactionContent', - first: 'Int', - last: 'Int', - orderBy: 'ReactionOrder', - }, - }, - repository: { __type: 'Repository!' }, - resourcePath: { __type: 'URI!' }, - title: { __type: 'String!' }, - updatedAt: { __type: 'DateTime!' }, - upvoteCount: { __type: 'Int!' }, - url: { __type: 'URI!' }, - userContentEdits: { - __type: 'UserContentEditConnection', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - viewerCanDelete: { __type: 'Boolean!' }, - viewerCanReact: { __type: 'Boolean!' }, - viewerCanSubscribe: { __type: 'Boolean!' }, - viewerCanUpdate: { __type: 'Boolean!' }, - viewerCanUpvote: { __type: 'Boolean!' }, - viewerDidAuthor: { __type: 'Boolean!' }, - viewerHasUpvoted: { __type: 'Boolean!' }, - viewerSubscription: { __type: 'SubscriptionState' }, - }, - DiscussionCategory: { - __typename: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - description: { __type: 'String' }, - emoji: { __type: 'String!' }, - emojiHTML: { __type: 'HTML!' }, - id: { __type: 'ID!' }, - isAnswerable: { __type: 'Boolean!' }, - name: { __type: 'String!' }, - repository: { __type: 'Repository!' }, - updatedAt: { __type: 'DateTime!' }, - }, - DiscussionCategoryConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[DiscussionCategoryEdge]' }, - nodes: { __type: '[DiscussionCategory]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - DiscussionCategoryEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'DiscussionCategory' }, - }, - DiscussionComment: { - __typename: { __type: 'String!' }, - author: { __type: 'Actor' }, - authorAssociation: { __type: 'CommentAuthorAssociation!' }, - body: { __type: 'String!' }, - bodyHTML: { __type: 'HTML!' }, - bodyText: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - createdViaEmail: { __type: 'Boolean!' }, - databaseId: { __type: 'Int' }, - deletedAt: { __type: 'DateTime' }, - discussion: { __type: 'Discussion' }, - editor: { __type: 'Actor' }, - id: { __type: 'ID!' }, - includesCreatedEdit: { __type: 'Boolean!' }, - isAnswer: { __type: 'Boolean!' }, - isMinimized: { __type: 'Boolean!' }, - lastEditedAt: { __type: 'DateTime' }, - minimizedReason: { __type: 'String' }, - publishedAt: { __type: 'DateTime' }, - reactionGroups: { __type: '[ReactionGroup!]' }, - reactions: { - __type: 'ReactionConnection!', - __args: { - after: 'String', - before: 'String', - content: 'ReactionContent', - first: 'Int', - last: 'Int', - orderBy: 'ReactionOrder', - }, - }, - replies: { - __type: 'DiscussionCommentConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - replyTo: { __type: 'DiscussionComment' }, - resourcePath: { __type: 'URI!' }, - updatedAt: { __type: 'DateTime!' }, - upvoteCount: { __type: 'Int!' }, - url: { __type: 'URI!' }, - userContentEdits: { - __type: 'UserContentEditConnection', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - viewerCanDelete: { __type: 'Boolean!' }, - viewerCanMarkAsAnswer: { __type: 'Boolean!' }, - viewerCanMinimize: { __type: 'Boolean!' }, - viewerCanReact: { __type: 'Boolean!' }, - viewerCanUnmarkAsAnswer: { __type: 'Boolean!' }, - viewerCanUpdate: { __type: 'Boolean!' }, - viewerCanUpvote: { __type: 'Boolean!' }, - viewerCannotUpdateReasons: { __type: '[CommentCannotUpdateReason!]!' }, - viewerDidAuthor: { __type: 'Boolean!' }, - viewerHasUpvoted: { __type: 'Boolean!' }, - }, - DiscussionCommentConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[DiscussionCommentEdge]' }, - nodes: { __type: '[DiscussionComment]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - DiscussionCommentEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'DiscussionComment' }, - }, - DiscussionConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[DiscussionEdge]' }, - nodes: { __type: '[Discussion]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - DiscussionEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Discussion' }, - }, - DiscussionOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'DiscussionOrderField!' }, - }, - DismissPullRequestReviewInput: { - clientMutationId: { __type: 'String' }, - message: { __type: 'String!' }, - pullRequestReviewId: { __type: 'ID!' }, - }, - DismissPullRequestReviewPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - pullRequestReview: { __type: 'PullRequestReview' }, - }, - DismissRepositoryVulnerabilityAlertInput: { - clientMutationId: { __type: 'String' }, - dismissReason: { __type: 'DismissReason!' }, - repositoryVulnerabilityAlertId: { __type: 'ID!' }, - }, - DismissRepositoryVulnerabilityAlertPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - repositoryVulnerabilityAlert: { __type: 'RepositoryVulnerabilityAlert' }, - }, - DraftPullRequestReviewComment: { - body: { __type: 'String!' }, - path: { __type: 'String!' }, - position: { __type: 'Int!' }, - }, - DraftPullRequestReviewThread: { - body: { __type: 'String!' }, - line: { __type: 'Int!' }, - path: { __type: 'String!' }, - side: { __type: 'DiffSide' }, - startLine: { __type: 'Int' }, - startSide: { __type: 'DiffSide' }, - }, - EnablePullRequestAutoMergeInput: { - authorEmail: { __type: 'String' }, - clientMutationId: { __type: 'String' }, - commitBody: { __type: 'String' }, - commitHeadline: { __type: 'String' }, - mergeMethod: { __type: 'PullRequestMergeMethod' }, - pullRequestId: { __type: 'ID!' }, - }, - EnablePullRequestAutoMergePayload: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - clientMutationId: { __type: 'String' }, - pullRequest: { __type: 'PullRequest' }, - }, - Enterprise: { - __typename: { __type: 'String!' }, - avatarUrl: { __type: 'URI!', __args: { size: 'Int' } }, - billingInfo: { __type: 'EnterpriseBillingInfo' }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - description: { __type: 'String' }, - descriptionHTML: { __type: 'HTML!' }, - id: { __type: 'ID!' }, - location: { __type: 'String' }, - members: { - __type: 'EnterpriseMemberConnection!', - __args: { - after: 'String', - before: 'String', - deployment: 'EnterpriseUserDeployment', - first: 'Int', - last: 'Int', - orderBy: 'EnterpriseMemberOrder', - organizationLogins: '[String!]', - query: 'String', - role: 'EnterpriseUserAccountMembershipRole', - }, - }, - name: { __type: 'String!' }, - organizations: { - __type: 'OrganizationConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'OrganizationOrder', - query: 'String', - viewerOrganizationRole: 'RoleInOrganization', - }, - }, - ownerInfo: { __type: 'EnterpriseOwnerInfo' }, - resourcePath: { __type: 'URI!' }, - slug: { __type: 'String!' }, - url: { __type: 'URI!' }, - userAccounts: { - __type: 'EnterpriseUserAccountConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - viewerIsAdmin: { __type: 'Boolean!' }, - websiteUrl: { __type: 'URI' }, - }, - EnterpriseAdministratorConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[EnterpriseAdministratorEdge]' }, - nodes: { __type: '[User]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - EnterpriseAdministratorEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'User' }, - role: { __type: 'EnterpriseAdministratorRole!' }, - }, - EnterpriseAdministratorInvitation: { - __typename: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - email: { __type: 'String' }, - enterprise: { __type: 'Enterprise!' }, - id: { __type: 'ID!' }, - invitee: { __type: 'User' }, - inviter: { __type: 'User' }, - role: { __type: 'EnterpriseAdministratorRole!' }, - }, - EnterpriseAdministratorInvitationConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[EnterpriseAdministratorInvitationEdge]' }, - nodes: { __type: '[EnterpriseAdministratorInvitation]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - EnterpriseAdministratorInvitationEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'EnterpriseAdministratorInvitation' }, - }, - EnterpriseAdministratorInvitationOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'EnterpriseAdministratorInvitationOrderField!' }, - }, - EnterpriseAuditEntryData: { - __typename: { __type: 'String!' }, - enterpriseResourcePath: { __type: 'URI' }, - enterpriseSlug: { __type: 'String' }, - enterpriseUrl: { __type: 'URI' }, - $on: { __type: '$EnterpriseAuditEntryData!' }, - }, - EnterpriseBillingInfo: { - __typename: { __type: 'String!' }, - allLicensableUsersCount: { __type: 'Int!' }, - assetPacks: { __type: 'Int!' }, - availableSeats: { __type: 'Int!' }, - bandwidthQuota: { __type: 'Float!' }, - bandwidthUsage: { __type: 'Float!' }, - bandwidthUsagePercentage: { __type: 'Int!' }, - seats: { __type: 'Int!' }, - storageQuota: { __type: 'Float!' }, - storageUsage: { __type: 'Float!' }, - storageUsagePercentage: { __type: 'Int!' }, - totalAvailableLicenses: { __type: 'Int!' }, - totalLicenses: { __type: 'Int!' }, - }, - EnterpriseIdentityProvider: { - __typename: { __type: 'String!' }, - digestMethod: { __type: 'SamlDigestAlgorithm' }, - enterprise: { __type: 'Enterprise' }, - externalIdentities: { - __type: 'ExternalIdentityConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - membersOnly: 'Boolean', - }, - }, - id: { __type: 'ID!' }, - idpCertificate: { __type: 'X509Certificate' }, - issuer: { __type: 'String' }, - recoveryCodes: { __type: '[String!]' }, - signatureMethod: { __type: 'SamlSignatureAlgorithm' }, - ssoUrl: { __type: 'URI' }, - }, - EnterpriseMember: { - __typename: { __type: 'String!' }, - $on: { __type: '$EnterpriseMember!' }, - }, - EnterpriseMemberConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[EnterpriseMemberEdge]' }, - nodes: { __type: '[EnterpriseMember]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - EnterpriseMemberEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - isUnlicensed: { __type: 'Boolean!' }, - node: { __type: 'EnterpriseMember' }, - }, - EnterpriseMemberOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'EnterpriseMemberOrderField!' }, - }, - EnterpriseOrganizationMembershipConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[EnterpriseOrganizationMembershipEdge]' }, - nodes: { __type: '[Organization]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - EnterpriseOrganizationMembershipEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Organization' }, - role: { __type: 'EnterpriseUserAccountMembershipRole!' }, - }, - EnterpriseOutsideCollaboratorConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[EnterpriseOutsideCollaboratorEdge]' }, - nodes: { __type: '[User]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - EnterpriseOutsideCollaboratorEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - isUnlicensed: { __type: 'Boolean!' }, - node: { __type: 'User' }, - repositories: { - __type: 'EnterpriseRepositoryInfoConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'RepositoryOrder', - }, - }, - }, - EnterpriseOwnerInfo: { - __typename: { __type: 'String!' }, - admins: { - __type: 'EnterpriseAdministratorConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'EnterpriseMemberOrder', - query: 'String', - role: 'EnterpriseAdministratorRole', - }, - }, - affiliatedUsersWithTwoFactorDisabled: { - __type: 'UserConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - affiliatedUsersWithTwoFactorDisabledExist: { __type: 'Boolean!' }, - allowPrivateRepositoryForkingSetting: { - __type: 'EnterpriseEnabledDisabledSettingValue!', - }, - allowPrivateRepositoryForkingSettingOrganizations: { - __type: 'OrganizationConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'OrganizationOrder', - value: 'Boolean!', - }, - }, - defaultRepositoryPermissionSetting: { - __type: 'EnterpriseDefaultRepositoryPermissionSettingValue!', - }, - defaultRepositoryPermissionSettingOrganizations: { - __type: 'OrganizationConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'OrganizationOrder', - value: 'DefaultRepositoryPermissionField!', - }, - }, - domains: { - __type: 'VerifiableDomainConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - isApproved: 'Boolean', - isVerified: 'Boolean', - last: 'Int', - orderBy: 'VerifiableDomainOrder', - }, - }, - enterpriseServerInstallations: { - __type: 'EnterpriseServerInstallationConnection!', - __args: { - after: 'String', - before: 'String', - connectedOnly: 'Boolean', - first: 'Int', - last: 'Int', - orderBy: 'EnterpriseServerInstallationOrder', - }, - }, - ipAllowListEnabledSetting: { __type: 'IpAllowListEnabledSettingValue!' }, - ipAllowListEntries: { - __type: 'IpAllowListEntryConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'IpAllowListEntryOrder', - }, - }, - ipAllowListForInstalledAppsEnabledSetting: { - __type: 'IpAllowListForInstalledAppsEnabledSettingValue!', - }, - isUpdatingDefaultRepositoryPermission: { __type: 'Boolean!' }, - isUpdatingTwoFactorRequirement: { __type: 'Boolean!' }, - membersCanChangeRepositoryVisibilitySetting: { - __type: 'EnterpriseEnabledDisabledSettingValue!', - }, - membersCanChangeRepositoryVisibilitySettingOrganizations: { - __type: 'OrganizationConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'OrganizationOrder', - value: 'Boolean!', - }, - }, - membersCanCreateInternalRepositoriesSetting: { __type: 'Boolean' }, - membersCanCreatePrivateRepositoriesSetting: { __type: 'Boolean' }, - membersCanCreatePublicRepositoriesSetting: { __type: 'Boolean' }, - membersCanCreateRepositoriesSetting: { - __type: 'EnterpriseMembersCanCreateRepositoriesSettingValue', - }, - membersCanCreateRepositoriesSettingOrganizations: { - __type: 'OrganizationConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'OrganizationOrder', - value: 'OrganizationMembersCanCreateRepositoriesSettingValue!', - }, - }, - membersCanDeleteIssuesSetting: { - __type: 'EnterpriseEnabledDisabledSettingValue!', - }, - membersCanDeleteIssuesSettingOrganizations: { - __type: 'OrganizationConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'OrganizationOrder', - value: 'Boolean!', - }, - }, - membersCanDeleteRepositoriesSetting: { - __type: 'EnterpriseEnabledDisabledSettingValue!', - }, - membersCanDeleteRepositoriesSettingOrganizations: { - __type: 'OrganizationConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'OrganizationOrder', - value: 'Boolean!', - }, - }, - membersCanInviteCollaboratorsSetting: { - __type: 'EnterpriseEnabledDisabledSettingValue!', - }, - membersCanInviteCollaboratorsSettingOrganizations: { - __type: 'OrganizationConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'OrganizationOrder', - value: 'Boolean!', - }, - }, - membersCanMakePurchasesSetting: { - __type: 'EnterpriseMembersCanMakePurchasesSettingValue!', - }, - membersCanUpdateProtectedBranchesSetting: { - __type: 'EnterpriseEnabledDisabledSettingValue!', - }, - membersCanUpdateProtectedBranchesSettingOrganizations: { - __type: 'OrganizationConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'OrganizationOrder', - value: 'Boolean!', - }, - }, - membersCanViewDependencyInsightsSetting: { - __type: 'EnterpriseEnabledDisabledSettingValue!', - }, - membersCanViewDependencyInsightsSettingOrganizations: { - __type: 'OrganizationConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'OrganizationOrder', - value: 'Boolean!', - }, - }, - notificationDeliveryRestrictionEnabledSetting: { - __type: 'NotificationRestrictionSettingValue!', - }, - oidcProvider: { __type: 'OIDCProvider' }, - organizationProjectsSetting: { - __type: 'EnterpriseEnabledDisabledSettingValue!', - }, - organizationProjectsSettingOrganizations: { - __type: 'OrganizationConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'OrganizationOrder', - value: 'Boolean!', - }, - }, - outsideCollaborators: { - __type: 'EnterpriseOutsideCollaboratorConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - login: 'String', - orderBy: 'EnterpriseMemberOrder', - query: 'String', - visibility: 'RepositoryVisibility', - }, - }, - pendingAdminInvitations: { - __type: 'EnterpriseAdministratorInvitationConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'EnterpriseAdministratorInvitationOrder', - query: 'String', - role: 'EnterpriseAdministratorRole', - }, - }, - pendingCollaboratorInvitations: { - __type: 'RepositoryInvitationConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'RepositoryInvitationOrder', - query: 'String', - }, - }, - pendingCollaborators: { - __type: 'EnterprisePendingCollaboratorConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'RepositoryInvitationOrder', - query: 'String', - }, - }, - pendingMemberInvitations: { - __type: 'EnterprisePendingMemberInvitationConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - query: 'String', - }, - }, - repositoryProjectsSetting: { - __type: 'EnterpriseEnabledDisabledSettingValue!', - }, - repositoryProjectsSettingOrganizations: { - __type: 'OrganizationConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'OrganizationOrder', - value: 'Boolean!', - }, - }, - samlIdentityProvider: { __type: 'EnterpriseIdentityProvider' }, - samlIdentityProviderSettingOrganizations: { - __type: 'OrganizationConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'OrganizationOrder', - value: 'IdentityProviderConfigurationState!', - }, - }, - supportEntitlements: { - __type: 'EnterpriseMemberConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'EnterpriseMemberOrder', - }, - }, - teamDiscussionsSetting: { - __type: 'EnterpriseEnabledDisabledSettingValue!', - }, - teamDiscussionsSettingOrganizations: { - __type: 'OrganizationConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'OrganizationOrder', - value: 'Boolean!', - }, - }, - twoFactorRequiredSetting: { __type: 'EnterpriseEnabledSettingValue!' }, - twoFactorRequiredSettingOrganizations: { - __type: 'OrganizationConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'OrganizationOrder', - value: 'Boolean!', - }, - }, - }, - EnterprisePendingCollaboratorConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[EnterprisePendingCollaboratorEdge]' }, - nodes: { __type: '[User]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - EnterprisePendingCollaboratorEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - isUnlicensed: { __type: 'Boolean!' }, - node: { __type: 'User' }, - repositories: { - __type: 'EnterpriseRepositoryInfoConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'RepositoryOrder', - }, - }, - }, - EnterprisePendingMemberInvitationConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[EnterprisePendingMemberInvitationEdge]' }, - nodes: { __type: '[OrganizationInvitation]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - totalUniqueUserCount: { __type: 'Int!' }, - }, - EnterprisePendingMemberInvitationEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - isUnlicensed: { __type: 'Boolean!' }, - node: { __type: 'OrganizationInvitation' }, - }, - EnterpriseRepositoryInfo: { - __typename: { __type: 'String!' }, - id: { __type: 'ID!' }, - isPrivate: { __type: 'Boolean!' }, - name: { __type: 'String!' }, - nameWithOwner: { __type: 'String!' }, - }, - EnterpriseRepositoryInfoConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[EnterpriseRepositoryInfoEdge]' }, - nodes: { __type: '[EnterpriseRepositoryInfo]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - EnterpriseRepositoryInfoEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'EnterpriseRepositoryInfo' }, - }, - EnterpriseServerInstallation: { - __typename: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - customerName: { __type: 'String!' }, - hostName: { __type: 'String!' }, - id: { __type: 'ID!' }, - isConnected: { __type: 'Boolean!' }, - updatedAt: { __type: 'DateTime!' }, - userAccounts: { - __type: 'EnterpriseServerUserAccountConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'EnterpriseServerUserAccountOrder', - }, - }, - userAccountsUploads: { - __type: 'EnterpriseServerUserAccountsUploadConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'EnterpriseServerUserAccountsUploadOrder', - }, - }, - }, - EnterpriseServerInstallationConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[EnterpriseServerInstallationEdge]' }, - nodes: { __type: '[EnterpriseServerInstallation]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - EnterpriseServerInstallationEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'EnterpriseServerInstallation' }, - }, - EnterpriseServerInstallationOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'EnterpriseServerInstallationOrderField!' }, - }, - EnterpriseServerUserAccount: { - __typename: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - emails: { - __type: 'EnterpriseServerUserAccountEmailConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'EnterpriseServerUserAccountEmailOrder', - }, - }, - enterpriseServerInstallation: { __type: 'EnterpriseServerInstallation!' }, - id: { __type: 'ID!' }, - isSiteAdmin: { __type: 'Boolean!' }, - login: { __type: 'String!' }, - profileName: { __type: 'String' }, - remoteCreatedAt: { __type: 'DateTime!' }, - remoteUserId: { __type: 'Int!' }, - updatedAt: { __type: 'DateTime!' }, - }, - EnterpriseServerUserAccountConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[EnterpriseServerUserAccountEdge]' }, - nodes: { __type: '[EnterpriseServerUserAccount]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - EnterpriseServerUserAccountEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'EnterpriseServerUserAccount' }, - }, - EnterpriseServerUserAccountEmail: { - __typename: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - email: { __type: 'String!' }, - id: { __type: 'ID!' }, - isPrimary: { __type: 'Boolean!' }, - updatedAt: { __type: 'DateTime!' }, - userAccount: { __type: 'EnterpriseServerUserAccount!' }, - }, - EnterpriseServerUserAccountEmailConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[EnterpriseServerUserAccountEmailEdge]' }, - nodes: { __type: '[EnterpriseServerUserAccountEmail]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - EnterpriseServerUserAccountEmailEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'EnterpriseServerUserAccountEmail' }, - }, - EnterpriseServerUserAccountEmailOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'EnterpriseServerUserAccountEmailOrderField!' }, - }, - EnterpriseServerUserAccountOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'EnterpriseServerUserAccountOrderField!' }, - }, - EnterpriseServerUserAccountsUpload: { - __typename: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - enterprise: { __type: 'Enterprise!' }, - enterpriseServerInstallation: { __type: 'EnterpriseServerInstallation!' }, - id: { __type: 'ID!' }, - name: { __type: 'String!' }, - syncState: { __type: 'EnterpriseServerUserAccountsUploadSyncState!' }, - updatedAt: { __type: 'DateTime!' }, - }, - EnterpriseServerUserAccountsUploadConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[EnterpriseServerUserAccountsUploadEdge]' }, - nodes: { __type: '[EnterpriseServerUserAccountsUpload]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - EnterpriseServerUserAccountsUploadEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'EnterpriseServerUserAccountsUpload' }, - }, - EnterpriseServerUserAccountsUploadOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'EnterpriseServerUserAccountsUploadOrderField!' }, - }, - EnterpriseUserAccount: { - __typename: { __type: 'String!' }, - avatarUrl: { __type: 'URI!', __args: { size: 'Int' } }, - createdAt: { __type: 'DateTime!' }, - enterprise: { __type: 'Enterprise!' }, - id: { __type: 'ID!' }, - login: { __type: 'String!' }, - name: { __type: 'String' }, - organizations: { - __type: 'EnterpriseOrganizationMembershipConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'OrganizationOrder', - query: 'String', - role: 'EnterpriseUserAccountMembershipRole', - }, - }, - resourcePath: { __type: 'URI!' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - user: { __type: 'User' }, - }, - EnterpriseUserAccountConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[EnterpriseUserAccountEdge]' }, - nodes: { __type: '[EnterpriseUserAccount]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - EnterpriseUserAccountEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'EnterpriseUserAccount' }, - }, - Environment: { - __typename: { __type: 'String!' }, - databaseId: { __type: 'Int' }, - id: { __type: 'ID!' }, - name: { __type: 'String!' }, - protectionRules: { - __type: 'DeploymentProtectionRuleConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - }, - EnvironmentConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[EnvironmentEdge]' }, - nodes: { __type: '[Environment]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - EnvironmentEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Environment' }, - }, - ExternalIdentity: { - __typename: { __type: 'String!' }, - guid: { __type: 'String!' }, - id: { __type: 'ID!' }, - organizationInvitation: { __type: 'OrganizationInvitation' }, - samlIdentity: { __type: 'ExternalIdentitySamlAttributes' }, - scimIdentity: { __type: 'ExternalIdentityScimAttributes' }, - user: { __type: 'User' }, - }, - ExternalIdentityConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[ExternalIdentityEdge]' }, - nodes: { __type: '[ExternalIdentity]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - ExternalIdentityEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'ExternalIdentity' }, - }, - ExternalIdentitySamlAttributes: { - __typename: { __type: 'String!' }, - emails: { __type: '[UserEmailMetadata!]' }, - familyName: { __type: 'String' }, - givenName: { __type: 'String' }, - groups: { __type: '[String!]' }, - nameId: { __type: 'String' }, - username: { __type: 'String' }, - }, - ExternalIdentityScimAttributes: { - __typename: { __type: 'String!' }, - emails: { __type: '[UserEmailMetadata!]' }, - familyName: { __type: 'String' }, - givenName: { __type: 'String' }, - groups: { __type: '[String!]' }, - username: { __type: 'String' }, - }, - FileAddition: { - contents: { __type: 'Base64String!' }, - path: { __type: 'String!' }, - }, - FileChanges: { - additions: { __type: '[FileAddition!]' }, - deletions: { __type: '[FileDeletion!]' }, - }, - FileDeletion: { path: { __type: 'String!' } }, - FollowUserInput: { - clientMutationId: { __type: 'String' }, - userId: { __type: 'ID!' }, - }, - FollowUserPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - user: { __type: 'User' }, - }, - FollowerConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[UserEdge]' }, - nodes: { __type: '[User]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - FollowingConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[UserEdge]' }, - nodes: { __type: '[User]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - FundingLink: { - __typename: { __type: 'String!' }, - platform: { __type: 'FundingPlatform!' }, - url: { __type: 'URI!' }, - }, - GenericHovercardContext: { - __typename: { __type: 'String!' }, - message: { __type: 'String!' }, - octicon: { __type: 'String!' }, - }, - Gist: { - __typename: { __type: 'String!' }, - comments: { - __type: 'GistCommentConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - createdAt: { __type: 'DateTime!' }, - description: { __type: 'String' }, - files: { - __type: '[GistFile]', - __args: { limit: 'Int', oid: 'GitObjectID' }, - }, - forks: { - __type: 'GistConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'GistOrder', - }, - }, - id: { __type: 'ID!' }, - isFork: { __type: 'Boolean!' }, - isPublic: { __type: 'Boolean!' }, - name: { __type: 'String!' }, - owner: { __type: 'RepositoryOwner' }, - pushedAt: { __type: 'DateTime' }, - resourcePath: { __type: 'URI!' }, - stargazerCount: { __type: 'Int!' }, - stargazers: { - __type: 'StargazerConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'StarOrder', - }, - }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - viewerHasStarred: { __type: 'Boolean!' }, - }, - GistComment: { - __typename: { __type: 'String!' }, - author: { __type: 'Actor' }, - authorAssociation: { __type: 'CommentAuthorAssociation!' }, - body: { __type: 'String!' }, - bodyHTML: { __type: 'HTML!' }, - bodyText: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - createdViaEmail: { __type: 'Boolean!' }, - databaseId: { __type: 'Int' }, - editor: { __type: 'Actor' }, - gist: { __type: 'Gist!' }, - id: { __type: 'ID!' }, - includesCreatedEdit: { __type: 'Boolean!' }, - isMinimized: { __type: 'Boolean!' }, - lastEditedAt: { __type: 'DateTime' }, - minimizedReason: { __type: 'String' }, - publishedAt: { __type: 'DateTime' }, - updatedAt: { __type: 'DateTime!' }, - userContentEdits: { - __type: 'UserContentEditConnection', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - viewerCanDelete: { __type: 'Boolean!' }, - viewerCanMinimize: { __type: 'Boolean!' }, - viewerCanUpdate: { __type: 'Boolean!' }, - viewerCannotUpdateReasons: { __type: '[CommentCannotUpdateReason!]!' }, - viewerDidAuthor: { __type: 'Boolean!' }, - }, - GistCommentConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[GistCommentEdge]' }, - nodes: { __type: '[GistComment]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - GistCommentEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'GistComment' }, - }, - GistConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[GistEdge]' }, - nodes: { __type: '[Gist]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - GistEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Gist' }, - }, - GistFile: { - __typename: { __type: 'String!' }, - encodedName: { __type: 'String' }, - encoding: { __type: 'String' }, - extension: { __type: 'String' }, - isImage: { __type: 'Boolean!' }, - isTruncated: { __type: 'Boolean!' }, - language: { __type: 'Language' }, - name: { __type: 'String' }, - size: { __type: 'Int' }, - text: { __type: 'String', __args: { truncate: 'Int' } }, - }, - GistOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'GistOrderField!' }, - }, - GitActor: { - __typename: { __type: 'String!' }, - avatarUrl: { __type: 'URI!', __args: { size: 'Int' } }, - date: { __type: 'GitTimestamp' }, - email: { __type: 'String' }, - name: { __type: 'String' }, - user: { __type: 'User' }, - }, - GitActorConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[GitActorEdge]' }, - nodes: { __type: '[GitActor]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - GitActorEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'GitActor' }, - }, - GitHubMetadata: { - __typename: { __type: 'String!' }, - gitHubServicesSha: { __type: 'GitObjectID!' }, - gitIpAddresses: { __type: '[String!]' }, - hookIpAddresses: { __type: '[String!]' }, - importerIpAddresses: { __type: '[String!]' }, - isPasswordAuthenticationVerifiable: { __type: 'Boolean!' }, - pagesIpAddresses: { __type: '[String!]' }, - }, - GitObject: { - __typename: { __type: 'String!' }, - abbreviatedOid: { __type: 'String!' }, - commitResourcePath: { __type: 'URI!' }, - commitUrl: { __type: 'URI!' }, - id: { __type: 'ID!' }, - oid: { __type: 'GitObjectID!' }, - repository: { __type: 'Repository!' }, - $on: { __type: '$GitObject!' }, - }, - GitSignature: { - __typename: { __type: 'String!' }, - email: { __type: 'String!' }, - isValid: { __type: 'Boolean!' }, - payload: { __type: 'String!' }, - signature: { __type: 'String!' }, - signer: { __type: 'User' }, - state: { __type: 'GitSignatureState!' }, - wasSignedByGitHub: { __type: 'Boolean!' }, - $on: { __type: '$GitSignature!' }, - }, - GpgSignature: { - __typename: { __type: 'String!' }, - email: { __type: 'String!' }, - isValid: { __type: 'Boolean!' }, - keyId: { __type: 'String' }, - payload: { __type: 'String!' }, - signature: { __type: 'String!' }, - signer: { __type: 'User' }, - state: { __type: 'GitSignatureState!' }, - wasSignedByGitHub: { __type: 'Boolean!' }, - }, - HeadRefDeletedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - headRef: { __type: 'Ref' }, - headRefName: { __type: 'String!' }, - id: { __type: 'ID!' }, - pullRequest: { __type: 'PullRequest!' }, - }, - HeadRefForcePushedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - afterCommit: { __type: 'Commit' }, - beforeCommit: { __type: 'Commit' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - pullRequest: { __type: 'PullRequest!' }, - ref: { __type: 'Ref' }, - }, - HeadRefRestoredEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - pullRequest: { __type: 'PullRequest!' }, - }, - Hovercard: { - __typename: { __type: 'String!' }, - contexts: { __type: '[HovercardContext!]!' }, - }, - HovercardContext: { - __typename: { __type: 'String!' }, - message: { __type: 'String!' }, - octicon: { __type: 'String!' }, - $on: { __type: '$HovercardContext!' }, - }, - InviteEnterpriseAdminInput: { - clientMutationId: { __type: 'String' }, - email: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - invitee: { __type: 'String' }, - role: { __type: 'EnterpriseAdministratorRole' }, - }, - InviteEnterpriseAdminPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - invitation: { __type: 'EnterpriseAdministratorInvitation' }, - }, - IpAllowListEntry: { - __typename: { __type: 'String!' }, - allowListValue: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - isActive: { __type: 'Boolean!' }, - name: { __type: 'String' }, - owner: { __type: 'IpAllowListOwner!' }, - updatedAt: { __type: 'DateTime!' }, - }, - IpAllowListEntryConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[IpAllowListEntryEdge]' }, - nodes: { __type: '[IpAllowListEntry]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - IpAllowListEntryEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'IpAllowListEntry' }, - }, - IpAllowListEntryOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'IpAllowListEntryOrderField!' }, - }, - IpAllowListOwner: { - __typename: { __type: 'String!' }, - $on: { __type: '$IpAllowListOwner!' }, - }, - Issue: { - __typename: { __type: 'String!' }, - activeLockReason: { __type: 'LockReason' }, - assignees: { - __type: 'UserConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - author: { __type: 'Actor' }, - authorAssociation: { __type: 'CommentAuthorAssociation!' }, - body: { __type: 'String!' }, - bodyHTML: { __type: 'HTML!' }, - bodyResourcePath: { __type: 'URI!' }, - bodyText: { __type: 'String!' }, - bodyUrl: { __type: 'URI!' }, - closed: { __type: 'Boolean!' }, - closedAt: { __type: 'DateTime' }, - comments: { - __type: 'IssueCommentConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'IssueCommentOrder', - }, - }, - createdAt: { __type: 'DateTime!' }, - createdViaEmail: { __type: 'Boolean!' }, - databaseId: { __type: 'Int' }, - editor: { __type: 'Actor' }, - hovercard: { - __type: 'Hovercard!', - __args: { includeNotificationContexts: 'Boolean' }, - }, - id: { __type: 'ID!' }, - includesCreatedEdit: { __type: 'Boolean!' }, - isPinned: { __type: 'Boolean' }, - isReadByViewer: { __type: 'Boolean' }, - labels: { - __type: 'LabelConnection', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'LabelOrder', - }, - }, - lastEditedAt: { __type: 'DateTime' }, - locked: { __type: 'Boolean!' }, - milestone: { __type: 'Milestone' }, - number: { __type: 'Int!' }, - participants: { - __type: 'UserConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - projectCards: { - __type: 'ProjectCardConnection!', - __args: { - after: 'String', - archivedStates: '[ProjectCardArchivedState]', - before: 'String', - first: 'Int', - last: 'Int', - }, - }, - projectNext: { __type: 'ProjectNext', __args: { number: 'Int!' } }, - projectsNext: { - __type: 'ProjectNextConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - query: 'String', - sortBy: 'ProjectNextOrderField', - }, - }, - publishedAt: { __type: 'DateTime' }, - reactionGroups: { __type: '[ReactionGroup!]' }, - reactions: { - __type: 'ReactionConnection!', - __args: { - after: 'String', - before: 'String', - content: 'ReactionContent', - first: 'Int', - last: 'Int', - orderBy: 'ReactionOrder', - }, - }, - repository: { __type: 'Repository!' }, - resourcePath: { __type: 'URI!' }, - state: { __type: 'IssueState!' }, - timeline: { - __type: 'IssueTimelineConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - since: 'DateTime', - }, - }, - timelineItems: { - __type: 'IssueTimelineItemsConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - itemTypes: '[IssueTimelineItemsItemType!]', - last: 'Int', - since: 'DateTime', - skip: 'Int', - }, - }, - title: { __type: 'String!' }, - titleHTML: { __type: 'String!' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - userContentEdits: { - __type: 'UserContentEditConnection', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - viewerCanReact: { __type: 'Boolean!' }, - viewerCanSubscribe: { __type: 'Boolean!' }, - viewerCanUpdate: { __type: 'Boolean!' }, - viewerCannotUpdateReasons: { __type: '[CommentCannotUpdateReason!]!' }, - viewerDidAuthor: { __type: 'Boolean!' }, - viewerSubscription: { __type: 'SubscriptionState' }, - }, - IssueComment: { - __typename: { __type: 'String!' }, - author: { __type: 'Actor' }, - authorAssociation: { __type: 'CommentAuthorAssociation!' }, - body: { __type: 'String!' }, - bodyHTML: { __type: 'HTML!' }, - bodyText: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - createdViaEmail: { __type: 'Boolean!' }, - databaseId: { __type: 'Int' }, - editor: { __type: 'Actor' }, - id: { __type: 'ID!' }, - includesCreatedEdit: { __type: 'Boolean!' }, - isMinimized: { __type: 'Boolean!' }, - issue: { __type: 'Issue!' }, - lastEditedAt: { __type: 'DateTime' }, - minimizedReason: { __type: 'String' }, - publishedAt: { __type: 'DateTime' }, - pullRequest: { __type: 'PullRequest' }, - reactionGroups: { __type: '[ReactionGroup!]' }, - reactions: { - __type: 'ReactionConnection!', - __args: { - after: 'String', - before: 'String', - content: 'ReactionContent', - first: 'Int', - last: 'Int', - orderBy: 'ReactionOrder', - }, - }, - repository: { __type: 'Repository!' }, - resourcePath: { __type: 'URI!' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - userContentEdits: { - __type: 'UserContentEditConnection', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - viewerCanDelete: { __type: 'Boolean!' }, - viewerCanMinimize: { __type: 'Boolean!' }, - viewerCanReact: { __type: 'Boolean!' }, - viewerCanUpdate: { __type: 'Boolean!' }, - viewerCannotUpdateReasons: { __type: '[CommentCannotUpdateReason!]!' }, - viewerDidAuthor: { __type: 'Boolean!' }, - }, - IssueCommentConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[IssueCommentEdge]' }, - nodes: { __type: '[IssueComment]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - IssueCommentEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'IssueComment' }, - }, - IssueCommentOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'IssueCommentOrderField!' }, - }, - IssueConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[IssueEdge]' }, - nodes: { __type: '[Issue]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - IssueContributionsByRepository: { - __typename: { __type: 'String!' }, - contributions: { - __type: 'CreatedIssueContributionConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'ContributionOrder', - }, - }, - repository: { __type: 'Repository!' }, - }, - IssueEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Issue' }, - }, - IssueFilters: { - assignee: { __type: 'String' }, - createdBy: { __type: 'String' }, - labels: { __type: '[String!]' }, - mentioned: { __type: 'String' }, - milestone: { __type: 'String' }, - since: { __type: 'DateTime' }, - states: { __type: '[IssueState!]' }, - viewerSubscribed: { __type: 'Boolean' }, - }, - IssueOrPullRequest: { - __typename: { __type: 'String!' }, - $on: { __type: '$IssueOrPullRequest!' }, - }, - IssueOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'IssueOrderField!' }, - }, - IssueTemplate: { - __typename: { __type: 'String!' }, - about: { __type: 'String' }, - body: { __type: 'String' }, - name: { __type: 'String!' }, - title: { __type: 'String' }, - }, - IssueTimelineConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[IssueTimelineItemEdge]' }, - nodes: { __type: '[IssueTimelineItem]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - IssueTimelineItem: { - __typename: { __type: 'String!' }, - $on: { __type: '$IssueTimelineItem!' }, - }, - IssueTimelineItemEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'IssueTimelineItem' }, - }, - IssueTimelineItems: { - __typename: { __type: 'String!' }, - $on: { __type: '$IssueTimelineItems!' }, - }, - IssueTimelineItemsConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[IssueTimelineItemsEdge]' }, - filteredCount: { __type: 'Int!' }, - nodes: { __type: '[IssueTimelineItems]' }, - pageCount: { __type: 'Int!' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - updatedAt: { __type: 'DateTime!' }, - }, - IssueTimelineItemsEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'IssueTimelineItems' }, - }, - JoinedGitHubContribution: { - __typename: { __type: 'String!' }, - isRestricted: { __type: 'Boolean!' }, - occurredAt: { __type: 'DateTime!' }, - resourcePath: { __type: 'URI!' }, - url: { __type: 'URI!' }, - user: { __type: 'User!' }, - }, - Label: { - __typename: { __type: 'String!' }, - color: { __type: 'String!' }, - createdAt: { __type: 'DateTime' }, - description: { __type: 'String' }, - id: { __type: 'ID!' }, - isDefault: { __type: 'Boolean!' }, - issues: { - __type: 'IssueConnection!', - __args: { - after: 'String', - before: 'String', - filterBy: 'IssueFilters', - first: 'Int', - labels: '[String!]', - last: 'Int', - orderBy: 'IssueOrder', - states: '[IssueState!]', - }, - }, - name: { __type: 'String!' }, - pullRequests: { - __type: 'PullRequestConnection!', - __args: { - after: 'String', - baseRefName: 'String', - before: 'String', - first: 'Int', - headRefName: 'String', - labels: '[String!]', - last: 'Int', - orderBy: 'IssueOrder', - states: '[PullRequestState!]', - }, - }, - repository: { __type: 'Repository!' }, - resourcePath: { __type: 'URI!' }, - updatedAt: { __type: 'DateTime' }, - url: { __type: 'URI!' }, - }, - LabelConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[LabelEdge]' }, - nodes: { __type: '[Label]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - LabelEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Label' }, - }, - LabelOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'LabelOrderField!' }, - }, - Labelable: { - __typename: { __type: 'String!' }, - labels: { - __type: 'LabelConnection', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'LabelOrder', - }, - }, - $on: { __type: '$Labelable!' }, - }, - LabeledEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - label: { __type: 'Label!' }, - labelable: { __type: 'Labelable!' }, - }, - Language: { - __typename: { __type: 'String!' }, - color: { __type: 'String' }, - id: { __type: 'ID!' }, - name: { __type: 'String!' }, - }, - LanguageConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[LanguageEdge]' }, - nodes: { __type: '[Language]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - totalSize: { __type: 'Int!' }, - }, - LanguageEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Language!' }, - size: { __type: 'Int!' }, - }, - LanguageOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'LanguageOrderField!' }, - }, - License: { - __typename: { __type: 'String!' }, - body: { __type: 'String!' }, - conditions: { __type: '[LicenseRule]!' }, - description: { __type: 'String' }, - featured: { __type: 'Boolean!' }, - hidden: { __type: 'Boolean!' }, - id: { __type: 'ID!' }, - implementation: { __type: 'String' }, - key: { __type: 'String!' }, - limitations: { __type: '[LicenseRule]!' }, - name: { __type: 'String!' }, - nickname: { __type: 'String' }, - permissions: { __type: '[LicenseRule]!' }, - pseudoLicense: { __type: 'Boolean!' }, - spdxId: { __type: 'String' }, - url: { __type: 'URI' }, - }, - LicenseRule: { - __typename: { __type: 'String!' }, - description: { __type: 'String!' }, - key: { __type: 'String!' }, - label: { __type: 'String!' }, - }, - LinkRepositoryToProjectInput: { - clientMutationId: { __type: 'String' }, - projectId: { __type: 'ID!' }, - repositoryId: { __type: 'ID!' }, - }, - LinkRepositoryToProjectPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - project: { __type: 'Project' }, - repository: { __type: 'Repository' }, - }, - LockLockableInput: { - clientMutationId: { __type: 'String' }, - lockReason: { __type: 'LockReason' }, - lockableId: { __type: 'ID!' }, - }, - LockLockablePayload: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - clientMutationId: { __type: 'String' }, - lockedRecord: { __type: 'Lockable' }, - }, - Lockable: { - __typename: { __type: 'String!' }, - activeLockReason: { __type: 'LockReason' }, - locked: { __type: 'Boolean!' }, - $on: { __type: '$Lockable!' }, - }, - LockedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - lockReason: { __type: 'LockReason' }, - lockable: { __type: 'Lockable!' }, - }, - Mannequin: { - __typename: { __type: 'String!' }, - avatarUrl: { __type: 'URI!', __args: { size: 'Int' } }, - claimant: { __type: 'User' }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - email: { __type: 'String' }, - id: { __type: 'ID!' }, - login: { __type: 'String!' }, - resourcePath: { __type: 'URI!' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - }, - MarkDiscussionCommentAsAnswerInput: { - clientMutationId: { __type: 'String' }, - id: { __type: 'ID!' }, - }, - MarkDiscussionCommentAsAnswerPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - discussion: { __type: 'Discussion' }, - }, - MarkFileAsViewedInput: { - clientMutationId: { __type: 'String' }, - path: { __type: 'String!' }, - pullRequestId: { __type: 'ID!' }, - }, - MarkFileAsViewedPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - pullRequest: { __type: 'PullRequest' }, - }, - MarkPullRequestReadyForReviewInput: { - clientMutationId: { __type: 'String' }, - pullRequestId: { __type: 'ID!' }, - }, - MarkPullRequestReadyForReviewPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - pullRequest: { __type: 'PullRequest' }, - }, - MarkedAsDuplicateEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - canonical: { __type: 'IssueOrPullRequest' }, - createdAt: { __type: 'DateTime!' }, - duplicate: { __type: 'IssueOrPullRequest' }, - id: { __type: 'ID!' }, - isCrossRepository: { __type: 'Boolean!' }, - }, - MarketplaceCategory: { - __typename: { __type: 'String!' }, - description: { __type: 'String' }, - howItWorks: { __type: 'String' }, - id: { __type: 'ID!' }, - name: { __type: 'String!' }, - primaryListingCount: { __type: 'Int!' }, - resourcePath: { __type: 'URI!' }, - secondaryListingCount: { __type: 'Int!' }, - slug: { __type: 'String!' }, - url: { __type: 'URI!' }, - }, - MarketplaceListing: { - __typename: { __type: 'String!' }, - app: { __type: 'App' }, - companyUrl: { __type: 'URI' }, - configurationResourcePath: { __type: 'URI!' }, - configurationUrl: { __type: 'URI!' }, - documentationUrl: { __type: 'URI' }, - extendedDescription: { __type: 'String' }, - extendedDescriptionHTML: { __type: 'HTML!' }, - fullDescription: { __type: 'String!' }, - fullDescriptionHTML: { __type: 'HTML!' }, - hasPublishedFreeTrialPlans: { __type: 'Boolean!' }, - hasTermsOfService: { __type: 'Boolean!' }, - hasVerifiedOwner: { __type: 'Boolean!' }, - howItWorks: { __type: 'String' }, - howItWorksHTML: { __type: 'HTML!' }, - id: { __type: 'ID!' }, - installationUrl: { __type: 'URI' }, - installedForViewer: { __type: 'Boolean!' }, - isArchived: { __type: 'Boolean!' }, - isDraft: { __type: 'Boolean!' }, - isPaid: { __type: 'Boolean!' }, - isPublic: { __type: 'Boolean!' }, - isRejected: { __type: 'Boolean!' }, - isUnverified: { __type: 'Boolean!' }, - isUnverifiedPending: { __type: 'Boolean!' }, - isVerificationPendingFromDraft: { __type: 'Boolean!' }, - isVerificationPendingFromUnverified: { __type: 'Boolean!' }, - isVerified: { __type: 'Boolean!' }, - logoBackgroundColor: { __type: 'String!' }, - logoUrl: { __type: 'URI', __args: { size: 'Int' } }, - name: { __type: 'String!' }, - normalizedShortDescription: { __type: 'String!' }, - pricingUrl: { __type: 'URI' }, - primaryCategory: { __type: 'MarketplaceCategory!' }, - privacyPolicyUrl: { __type: 'URI!' }, - resourcePath: { __type: 'URI!' }, - screenshotUrls: { __type: '[String]!' }, - secondaryCategory: { __type: 'MarketplaceCategory' }, - shortDescription: { __type: 'String!' }, - slug: { __type: 'String!' }, - statusUrl: { __type: 'URI' }, - supportEmail: { __type: 'String' }, - supportUrl: { __type: 'URI!' }, - termsOfServiceUrl: { __type: 'URI' }, - url: { __type: 'URI!' }, - viewerCanAddPlans: { __type: 'Boolean!' }, - viewerCanApprove: { __type: 'Boolean!' }, - viewerCanDelist: { __type: 'Boolean!' }, - viewerCanEdit: { __type: 'Boolean!' }, - viewerCanEditCategories: { __type: 'Boolean!' }, - viewerCanEditPlans: { __type: 'Boolean!' }, - viewerCanRedraft: { __type: 'Boolean!' }, - viewerCanReject: { __type: 'Boolean!' }, - viewerCanRequestApproval: { __type: 'Boolean!' }, - viewerHasPurchased: { __type: 'Boolean!' }, - viewerHasPurchasedForAllOrganizations: { __type: 'Boolean!' }, - viewerIsListingAdmin: { __type: 'Boolean!' }, - }, - MarketplaceListingConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[MarketplaceListingEdge]' }, - nodes: { __type: '[MarketplaceListing]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - MarketplaceListingEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'MarketplaceListing' }, - }, - MemberStatusable: { - __typename: { __type: 'String!' }, - memberStatuses: { - __type: 'UserStatusConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'UserStatusOrder', - }, - }, - $on: { __type: '$MemberStatusable!' }, - }, - MembersCanDeleteReposClearAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - enterpriseResourcePath: { __type: 'URI' }, - enterpriseSlug: { __type: 'String' }, - enterpriseUrl: { __type: 'URI' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - MembersCanDeleteReposDisableAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - enterpriseResourcePath: { __type: 'URI' }, - enterpriseSlug: { __type: 'String' }, - enterpriseUrl: { __type: 'URI' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - MembersCanDeleteReposEnableAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - enterpriseResourcePath: { __type: 'URI' }, - enterpriseSlug: { __type: 'String' }, - enterpriseUrl: { __type: 'URI' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - MentionedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - id: { __type: 'ID!' }, - }, - MergeBranchInput: { - authorEmail: { __type: 'String' }, - base: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - commitMessage: { __type: 'String' }, - head: { __type: 'String!' }, - repositoryId: { __type: 'ID!' }, - }, - MergeBranchPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - mergeCommit: { __type: 'Commit' }, - }, - MergePullRequestInput: { - authorEmail: { __type: 'String' }, - clientMutationId: { __type: 'String' }, - commitBody: { __type: 'String' }, - commitHeadline: { __type: 'String' }, - expectedHeadOid: { __type: 'GitObjectID' }, - mergeMethod: { __type: 'PullRequestMergeMethod' }, - pullRequestId: { __type: 'ID!' }, - }, - MergePullRequestPayload: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - clientMutationId: { __type: 'String' }, - pullRequest: { __type: 'PullRequest' }, - }, - MergedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - commit: { __type: 'Commit' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - mergeRef: { __type: 'Ref' }, - mergeRefName: { __type: 'String!' }, - pullRequest: { __type: 'PullRequest!' }, - resourcePath: { __type: 'URI!' }, - url: { __type: 'URI!' }, - }, - Milestone: { - __typename: { __type: 'String!' }, - closed: { __type: 'Boolean!' }, - closedAt: { __type: 'DateTime' }, - createdAt: { __type: 'DateTime!' }, - creator: { __type: 'Actor' }, - description: { __type: 'String' }, - dueOn: { __type: 'DateTime' }, - id: { __type: 'ID!' }, - issues: { - __type: 'IssueConnection!', - __args: { - after: 'String', - before: 'String', - filterBy: 'IssueFilters', - first: 'Int', - labels: '[String!]', - last: 'Int', - orderBy: 'IssueOrder', - states: '[IssueState!]', - }, - }, - number: { __type: 'Int!' }, - progressPercentage: { __type: 'Float!' }, - pullRequests: { - __type: 'PullRequestConnection!', - __args: { - after: 'String', - baseRefName: 'String', - before: 'String', - first: 'Int', - headRefName: 'String', - labels: '[String!]', - last: 'Int', - orderBy: 'IssueOrder', - states: '[PullRequestState!]', - }, - }, - repository: { __type: 'Repository!' }, - resourcePath: { __type: 'URI!' }, - state: { __type: 'MilestoneState!' }, - title: { __type: 'String!' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - }, - MilestoneConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[MilestoneEdge]' }, - nodes: { __type: '[Milestone]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - MilestoneEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Milestone' }, - }, - MilestoneItem: { - __typename: { __type: 'String!' }, - $on: { __type: '$MilestoneItem!' }, - }, - MilestoneOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'MilestoneOrderField!' }, - }, - MilestonedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - milestoneTitle: { __type: 'String!' }, - subject: { __type: 'MilestoneItem!' }, - }, - Minimizable: { - __typename: { __type: 'String!' }, - isMinimized: { __type: 'Boolean!' }, - minimizedReason: { __type: 'String' }, - viewerCanMinimize: { __type: 'Boolean!' }, - $on: { __type: '$Minimizable!' }, - }, - MinimizeCommentInput: { - classifier: { __type: 'ReportedContentClassifiers!' }, - clientMutationId: { __type: 'String' }, - subjectId: { __type: 'ID!' }, - }, - MinimizeCommentPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - minimizedComment: { __type: 'Minimizable' }, - }, - MoveProjectCardInput: { - afterCardId: { __type: 'ID' }, - cardId: { __type: 'ID!' }, - clientMutationId: { __type: 'String' }, - columnId: { __type: 'ID!' }, - }, - MoveProjectCardPayload: { - __typename: { __type: 'String!' }, - cardEdge: { __type: 'ProjectCardEdge' }, - clientMutationId: { __type: 'String' }, - }, - MoveProjectColumnInput: { - afterColumnId: { __type: 'ID' }, - clientMutationId: { __type: 'String' }, - columnId: { __type: 'ID!' }, - }, - MoveProjectColumnPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - columnEdge: { __type: 'ProjectColumnEdge' }, - }, - MovedColumnsInProjectEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - id: { __type: 'ID!' }, - }, - Node: { - __typename: { __type: 'String!' }, - id: { __type: 'ID!' }, - $on: { __type: '$Node!' }, - }, - OIDCProvider: { - __typename: { __type: 'String!' }, - enterprise: { __type: 'Enterprise' }, - externalIdentities: { - __type: 'ExternalIdentityConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - membersOnly: 'Boolean', - }, - }, - id: { __type: 'ID!' }, - providerType: { __type: 'OIDCProviderType!' }, - tenantId: { __type: 'String!' }, - }, - OauthApplicationAuditEntryData: { - __typename: { __type: 'String!' }, - oauthApplicationName: { __type: 'String' }, - oauthApplicationResourcePath: { __type: 'URI' }, - oauthApplicationUrl: { __type: 'URI' }, - $on: { __type: '$OauthApplicationAuditEntryData!' }, - }, - OauthApplicationCreateAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - applicationUrl: { __type: 'URI' }, - callbackUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - oauthApplicationName: { __type: 'String' }, - oauthApplicationResourcePath: { __type: 'URI' }, - oauthApplicationUrl: { __type: 'URI' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - rateLimit: { __type: 'Int' }, - state: { __type: 'OauthApplicationCreateAuditEntryState' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgAddBillingManagerAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - invitationEmail: { __type: 'String' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgAddMemberAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - permission: { __type: 'OrgAddMemberAuditEntryPermission' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgBlockUserAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - blockedUser: { __type: 'User' }, - blockedUserName: { __type: 'String' }, - blockedUserResourcePath: { __type: 'URI' }, - blockedUserUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgConfigDisableCollaboratorsOnlyAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgConfigEnableCollaboratorsOnlyAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgCreateAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - billingPlan: { __type: 'OrgCreateAuditEntryBillingPlan' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgDisableOauthAppRestrictionsAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgDisableSamlAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - digestMethodUrl: { __type: 'URI' }, - id: { __type: 'ID!' }, - issuerUrl: { __type: 'URI' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - signatureMethodUrl: { __type: 'URI' }, - singleSignOnUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgDisableTwoFactorRequirementAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgEnableOauthAppRestrictionsAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgEnableSamlAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - digestMethodUrl: { __type: 'URI' }, - id: { __type: 'ID!' }, - issuerUrl: { __type: 'URI' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - signatureMethodUrl: { __type: 'URI' }, - singleSignOnUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgEnableTwoFactorRequirementAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgInviteMemberAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - email: { __type: 'String' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationInvitation: { __type: 'OrganizationInvitation' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgInviteToBusinessAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - enterpriseResourcePath: { __type: 'URI' }, - enterpriseSlug: { __type: 'String' }, - enterpriseUrl: { __type: 'URI' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgOauthAppAccessApprovedAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - oauthApplicationName: { __type: 'String' }, - oauthApplicationResourcePath: { __type: 'URI' }, - oauthApplicationUrl: { __type: 'URI' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgOauthAppAccessDeniedAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - oauthApplicationName: { __type: 'String' }, - oauthApplicationResourcePath: { __type: 'URI' }, - oauthApplicationUrl: { __type: 'URI' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgOauthAppAccessRequestedAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - oauthApplicationName: { __type: 'String' }, - oauthApplicationResourcePath: { __type: 'URI' }, - oauthApplicationUrl: { __type: 'URI' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgRemoveBillingManagerAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - reason: { __type: 'OrgRemoveBillingManagerAuditEntryReason' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgRemoveMemberAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - membershipTypes: { __type: '[OrgRemoveMemberAuditEntryMembershipType!]' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - reason: { __type: 'OrgRemoveMemberAuditEntryReason' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgRemoveOutsideCollaboratorAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - membershipTypes: { - __type: '[OrgRemoveOutsideCollaboratorAuditEntryMembershipType!]', - }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - reason: { __type: 'OrgRemoveOutsideCollaboratorAuditEntryReason' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgRestoreMemberAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - restoredCustomEmailRoutingsCount: { __type: 'Int' }, - restoredIssueAssignmentsCount: { __type: 'Int' }, - restoredMemberships: { __type: '[OrgRestoreMemberAuditEntryMembership!]' }, - restoredMembershipsCount: { __type: 'Int' }, - restoredRepositoriesCount: { __type: 'Int' }, - restoredRepositoryStarsCount: { __type: 'Int' }, - restoredRepositoryWatchesCount: { __type: 'Int' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgRestoreMemberAuditEntryMembership: { - __typename: { __type: 'String!' }, - $on: { __type: '$OrgRestoreMemberAuditEntryMembership!' }, - }, - OrgRestoreMemberMembershipOrganizationAuditEntryData: { - __typename: { __type: 'String!' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - }, - OrgRestoreMemberMembershipRepositoryAuditEntryData: { - __typename: { __type: 'String!' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - }, - OrgRestoreMemberMembershipTeamAuditEntryData: { - __typename: { __type: 'String!' }, - team: { __type: 'Team' }, - teamName: { __type: 'String' }, - teamResourcePath: { __type: 'URI' }, - teamUrl: { __type: 'URI' }, - }, - OrgUnblockUserAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - blockedUser: { __type: 'User' }, - blockedUserName: { __type: 'String' }, - blockedUserResourcePath: { __type: 'URI' }, - blockedUserUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgUpdateDefaultRepositoryPermissionAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - permission: { - __type: 'OrgUpdateDefaultRepositoryPermissionAuditEntryPermission', - }, - permissionWas: { - __type: 'OrgUpdateDefaultRepositoryPermissionAuditEntryPermission', - }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgUpdateMemberAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - permission: { __type: 'OrgUpdateMemberAuditEntryPermission' }, - permissionWas: { __type: 'OrgUpdateMemberAuditEntryPermission' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - OrgUpdateMemberRepositoryCreationPermissionAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - canCreateRepositories: { __type: 'Boolean' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - visibility: { - __type: 'OrgUpdateMemberRepositoryCreationPermissionAuditEntryVisibility', - }, - }, - OrgUpdateMemberRepositoryInvitationPermissionAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - canInviteOutsideCollaboratorsToRepositories: { __type: 'Boolean' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - Organization: { - __typename: { __type: 'String!' }, - anyPinnableItems: { - __type: 'Boolean!', - __args: { type: 'PinnableItemType' }, - }, - auditLog: { - __type: 'OrganizationAuditEntryConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'AuditLogOrder', - query: 'String', - }, - }, - avatarUrl: { __type: 'URI!', __args: { size: 'Int' } }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - description: { __type: 'String' }, - descriptionHTML: { __type: 'String' }, - domains: { - __type: 'VerifiableDomainConnection', - __args: { - after: 'String', - before: 'String', - first: 'Int', - isApproved: 'Boolean', - isVerified: 'Boolean', - last: 'Int', - orderBy: 'VerifiableDomainOrder', - }, - }, - email: { __type: 'String' }, - estimatedNextSponsorsPayoutInCents: { __type: 'Int!' }, - hasSponsorsListing: { __type: 'Boolean!' }, - id: { __type: 'ID!' }, - interactionAbility: { __type: 'RepositoryInteractionAbility' }, - ipAllowListEnabledSetting: { __type: 'IpAllowListEnabledSettingValue!' }, - ipAllowListEntries: { - __type: 'IpAllowListEntryConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'IpAllowListEntryOrder', - }, - }, - ipAllowListForInstalledAppsEnabledSetting: { - __type: 'IpAllowListForInstalledAppsEnabledSettingValue!', - }, - isSponsoredBy: { __type: 'Boolean!', __args: { accountLogin: 'String!' } }, - isSponsoringViewer: { __type: 'Boolean!' }, - isVerified: { __type: 'Boolean!' }, - itemShowcase: { __type: 'ProfileItemShowcase!' }, - location: { __type: 'String' }, - login: { __type: 'String!' }, - memberStatuses: { - __type: 'UserStatusConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'UserStatusOrder', - }, - }, - membersCanForkPrivateRepositories: { __type: 'Boolean!' }, - membersWithRole: { - __type: 'OrganizationMemberConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - monthlyEstimatedSponsorsIncomeInCents: { __type: 'Int!' }, - name: { __type: 'String' }, - newTeamResourcePath: { __type: 'URI!' }, - newTeamUrl: { __type: 'URI!' }, - notificationDeliveryRestrictionEnabledSetting: { - __type: 'NotificationRestrictionSettingValue!', - }, - organizationBillingEmail: { __type: 'String' }, - packages: { - __type: 'PackageConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - names: '[String]', - orderBy: 'PackageOrder', - packageType: 'PackageType', - repositoryId: 'ID', - }, - }, - pendingMembers: { - __type: 'UserConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - pinnableItems: { - __type: 'PinnableItemConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - types: '[PinnableItemType!]', - }, - }, - pinnedItems: { - __type: 'PinnableItemConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - types: '[PinnableItemType!]', - }, - }, - pinnedItemsRemaining: { __type: 'Int!' }, - project: { __type: 'Project', __args: { number: 'Int!' } }, - projectNext: { __type: 'ProjectNext', __args: { number: 'Int!' } }, - projects: { - __type: 'ProjectConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'ProjectOrder', - search: 'String', - states: '[ProjectState!]', - }, - }, - projectsNext: { - __type: 'ProjectNextConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - query: 'String', - sortBy: 'ProjectNextOrderField', - }, - }, - projectsResourcePath: { __type: 'URI!' }, - projectsUrl: { __type: 'URI!' }, - repositories: { - __type: 'RepositoryConnection!', - __args: { - affiliations: '[RepositoryAffiliation]', - after: 'String', - before: 'String', - first: 'Int', - isFork: 'Boolean', - isLocked: 'Boolean', - last: 'Int', - orderBy: 'RepositoryOrder', - ownerAffiliations: '[RepositoryAffiliation]', - privacy: 'RepositoryPrivacy', - }, - }, - repository: { - __type: 'Repository', - __args: { followRenames: 'Boolean', name: 'String!' }, - }, - repositoryDiscussionComments: { - __type: 'DiscussionCommentConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - onlyAnswers: 'Boolean', - repositoryId: 'ID', - }, - }, - repositoryDiscussions: { - __type: 'DiscussionConnection!', - __args: { - after: 'String', - answered: 'Boolean', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'DiscussionOrder', - repositoryId: 'ID', - }, - }, - requiresTwoFactorAuthentication: { __type: 'Boolean' }, - resourcePath: { __type: 'URI!' }, - samlIdentityProvider: { __type: 'OrganizationIdentityProvider' }, - sponsoring: { - __type: 'SponsorConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'SponsorOrder', - }, - }, - sponsors: { - __type: 'SponsorConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'SponsorOrder', - tierId: 'ID', - }, - }, - sponsorsActivities: { - __type: 'SponsorsActivityConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'SponsorsActivityOrder', - period: 'SponsorsActivityPeriod', - }, - }, - sponsorsListing: { __type: 'SponsorsListing' }, - sponsorshipForViewerAsSponsor: { __type: 'Sponsorship' }, - sponsorshipForViewerAsSponsorable: { __type: 'Sponsorship' }, - sponsorshipNewsletters: { - __type: 'SponsorshipNewsletterConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'SponsorshipNewsletterOrder', - }, - }, - sponsorshipsAsMaintainer: { - __type: 'SponsorshipConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - includePrivate: 'Boolean', - last: 'Int', - orderBy: 'SponsorshipOrder', - }, - }, - sponsorshipsAsSponsor: { - __type: 'SponsorshipConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'SponsorshipOrder', - }, - }, - team: { __type: 'Team', __args: { slug: 'String!' } }, - teams: { - __type: 'TeamConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - ldapMapped: 'Boolean', - orderBy: 'TeamOrder', - privacy: 'TeamPrivacy', - query: 'String', - role: 'TeamRole', - rootTeamsOnly: 'Boolean', - userLogins: '[String!]', - }, - }, - teamsResourcePath: { __type: 'URI!' }, - teamsUrl: { __type: 'URI!' }, - twitterUsername: { __type: 'String' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - viewerCanAdminister: { __type: 'Boolean!' }, - viewerCanChangePinnedItems: { __type: 'Boolean!' }, - viewerCanCreateProjects: { __type: 'Boolean!' }, - viewerCanCreateRepositories: { __type: 'Boolean!' }, - viewerCanCreateTeams: { __type: 'Boolean!' }, - viewerCanSponsor: { __type: 'Boolean!' }, - viewerIsAMember: { __type: 'Boolean!' }, - viewerIsSponsoring: { __type: 'Boolean!' }, - websiteUrl: { __type: 'URI' }, - }, - OrganizationAuditEntry: { - __typename: { __type: 'String!' }, - $on: { __type: '$OrganizationAuditEntry!' }, - }, - OrganizationAuditEntryConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[OrganizationAuditEntryEdge]' }, - nodes: { __type: '[OrganizationAuditEntry]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - OrganizationAuditEntryData: { - __typename: { __type: 'String!' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - $on: { __type: '$OrganizationAuditEntryData!' }, - }, - OrganizationAuditEntryEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'OrganizationAuditEntry' }, - }, - OrganizationConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[OrganizationEdge]' }, - nodes: { __type: '[Organization]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - OrganizationEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Organization' }, - }, - OrganizationIdentityProvider: { - __typename: { __type: 'String!' }, - digestMethod: { __type: 'URI' }, - externalIdentities: { - __type: 'ExternalIdentityConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - membersOnly: 'Boolean', - }, - }, - id: { __type: 'ID!' }, - idpCertificate: { __type: 'X509Certificate' }, - issuer: { __type: 'String' }, - organization: { __type: 'Organization' }, - signatureMethod: { __type: 'URI' }, - ssoUrl: { __type: 'URI' }, - }, - OrganizationInvitation: { - __typename: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - email: { __type: 'String' }, - id: { __type: 'ID!' }, - invitationType: { __type: 'OrganizationInvitationType!' }, - invitee: { __type: 'User' }, - inviter: { __type: 'User!' }, - organization: { __type: 'Organization!' }, - role: { __type: 'OrganizationInvitationRole!' }, - }, - OrganizationInvitationConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[OrganizationInvitationEdge]' }, - nodes: { __type: '[OrganizationInvitation]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - OrganizationInvitationEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'OrganizationInvitation' }, - }, - OrganizationMemberConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[OrganizationMemberEdge]' }, - nodes: { __type: '[User]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - OrganizationMemberEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - hasTwoFactorEnabled: { __type: 'Boolean' }, - node: { __type: 'User' }, - role: { __type: 'OrganizationMemberRole' }, - }, - OrganizationOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'OrganizationOrderField!' }, - }, - OrganizationTeamsHovercardContext: { - __typename: { __type: 'String!' }, - message: { __type: 'String!' }, - octicon: { __type: 'String!' }, - relevantTeams: { - __type: 'TeamConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - teamsResourcePath: { __type: 'URI!' }, - teamsUrl: { __type: 'URI!' }, - totalTeamCount: { __type: 'Int!' }, - }, - OrganizationsHovercardContext: { - __typename: { __type: 'String!' }, - message: { __type: 'String!' }, - octicon: { __type: 'String!' }, - relevantOrganizations: { - __type: 'OrganizationConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - totalOrganizationCount: { __type: 'Int!' }, - }, - Package: { - __typename: { __type: 'String!' }, - id: { __type: 'ID!' }, - latestVersion: { __type: 'PackageVersion' }, - name: { __type: 'String!' }, - packageType: { __type: 'PackageType!' }, - repository: { __type: 'Repository' }, - statistics: { __type: 'PackageStatistics' }, - version: { __type: 'PackageVersion', __args: { version: 'String!' } }, - versions: { - __type: 'PackageVersionConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'PackageVersionOrder', - }, - }, - }, - PackageConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[PackageEdge]' }, - nodes: { __type: '[Package]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - PackageEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Package' }, - }, - PackageFile: { - __typename: { __type: 'String!' }, - id: { __type: 'ID!' }, - md5: { __type: 'String' }, - name: { __type: 'String!' }, - packageVersion: { __type: 'PackageVersion' }, - sha1: { __type: 'String' }, - sha256: { __type: 'String' }, - size: { __type: 'Int' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI' }, - }, - PackageFileConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[PackageFileEdge]' }, - nodes: { __type: '[PackageFile]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - PackageFileEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'PackageFile' }, - }, - PackageFileOrder: { - direction: { __type: 'OrderDirection' }, - field: { __type: 'PackageFileOrderField' }, - }, - PackageOrder: { - direction: { __type: 'OrderDirection' }, - field: { __type: 'PackageOrderField' }, - }, - PackageOwner: { - __typename: { __type: 'String!' }, - id: { __type: 'ID!' }, - packages: { - __type: 'PackageConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - names: '[String]', - orderBy: 'PackageOrder', - packageType: 'PackageType', - repositoryId: 'ID', - }, - }, - $on: { __type: '$PackageOwner!' }, - }, - PackageStatistics: { - __typename: { __type: 'String!' }, - downloadsTotalCount: { __type: 'Int!' }, - }, - PackageTag: { - __typename: { __type: 'String!' }, - id: { __type: 'ID!' }, - name: { __type: 'String!' }, - version: { __type: 'PackageVersion' }, - }, - PackageVersion: { - __typename: { __type: 'String!' }, - files: { - __type: 'PackageFileConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'PackageFileOrder', - }, - }, - id: { __type: 'ID!' }, - package: { __type: 'Package' }, - platform: { __type: 'String' }, - preRelease: { __type: 'Boolean!' }, - readme: { __type: 'String' }, - release: { __type: 'Release' }, - statistics: { __type: 'PackageVersionStatistics' }, - summary: { __type: 'String' }, - version: { __type: 'String!' }, - }, - PackageVersionConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[PackageVersionEdge]' }, - nodes: { __type: '[PackageVersion]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - PackageVersionEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'PackageVersion' }, - }, - PackageVersionOrder: { - direction: { __type: 'OrderDirection' }, - field: { __type: 'PackageVersionOrderField' }, - }, - PackageVersionStatistics: { - __typename: { __type: 'String!' }, - downloadsTotalCount: { __type: 'Int!' }, - }, - PageInfo: { - __typename: { __type: 'String!' }, - endCursor: { __type: 'String' }, - hasNextPage: { __type: 'Boolean!' }, - hasPreviousPage: { __type: 'Boolean!' }, - startCursor: { __type: 'String' }, - }, - PermissionGranter: { - __typename: { __type: 'String!' }, - $on: { __type: '$PermissionGranter!' }, - }, - PermissionSource: { - __typename: { __type: 'String!' }, - organization: { __type: 'Organization!' }, - permission: { __type: 'DefaultRepositoryPermissionField!' }, - source: { __type: 'PermissionGranter!' }, - }, - PinIssueInput: { - clientMutationId: { __type: 'String' }, - issueId: { __type: 'ID!' }, - }, - PinIssuePayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - issue: { __type: 'Issue' }, - }, - PinnableItem: { - __typename: { __type: 'String!' }, - $on: { __type: '$PinnableItem!' }, - }, - PinnableItemConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[PinnableItemEdge]' }, - nodes: { __type: '[PinnableItem]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - PinnableItemEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'PinnableItem' }, - }, - PinnedDiscussion: { - __typename: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - discussion: { __type: 'Discussion!' }, - gradientStopColors: { __type: '[String!]!' }, - id: { __type: 'ID!' }, - pattern: { __type: 'PinnedDiscussionPattern!' }, - pinnedBy: { __type: 'Actor!' }, - preconfiguredGradient: { __type: 'PinnedDiscussionGradient' }, - repository: { __type: 'Repository!' }, - updatedAt: { __type: 'DateTime!' }, - }, - PinnedDiscussionConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[PinnedDiscussionEdge]' }, - nodes: { __type: '[PinnedDiscussion]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - PinnedDiscussionEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'PinnedDiscussion' }, - }, - PinnedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - issue: { __type: 'Issue!' }, - }, - PinnedIssue: { - __typename: { __type: 'String!' }, - databaseId: { __type: 'Int' }, - id: { __type: 'ID!' }, - issue: { __type: 'Issue!' }, - pinnedBy: { __type: 'Actor!' }, - repository: { __type: 'Repository!' }, - }, - PinnedIssueConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[PinnedIssueEdge]' }, - nodes: { __type: '[PinnedIssue]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - PinnedIssueEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'PinnedIssue' }, - }, - PrivateRepositoryForkingDisableAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - enterpriseResourcePath: { __type: 'URI' }, - enterpriseSlug: { __type: 'String' }, - enterpriseUrl: { __type: 'URI' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - PrivateRepositoryForkingEnableAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - enterpriseResourcePath: { __type: 'URI' }, - enterpriseSlug: { __type: 'String' }, - enterpriseUrl: { __type: 'URI' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - ProfileItemShowcase: { - __typename: { __type: 'String!' }, - hasPinnedItems: { __type: 'Boolean!' }, - items: { - __type: 'PinnableItemConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - }, - ProfileOwner: { - __typename: { __type: 'String!' }, - anyPinnableItems: { - __type: 'Boolean!', - __args: { type: 'PinnableItemType' }, - }, - email: { __type: 'String' }, - id: { __type: 'ID!' }, - itemShowcase: { __type: 'ProfileItemShowcase!' }, - location: { __type: 'String' }, - login: { __type: 'String!' }, - name: { __type: 'String' }, - pinnableItems: { - __type: 'PinnableItemConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - types: '[PinnableItemType!]', - }, - }, - pinnedItems: { - __type: 'PinnableItemConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - types: '[PinnableItemType!]', - }, - }, - pinnedItemsRemaining: { __type: 'Int!' }, - viewerCanChangePinnedItems: { __type: 'Boolean!' }, - websiteUrl: { __type: 'URI' }, - $on: { __type: '$ProfileOwner!' }, - }, - Project: { - __typename: { __type: 'String!' }, - body: { __type: 'String' }, - bodyHTML: { __type: 'HTML!' }, - closed: { __type: 'Boolean!' }, - closedAt: { __type: 'DateTime' }, - columns: { - __type: 'ProjectColumnConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - createdAt: { __type: 'DateTime!' }, - creator: { __type: 'Actor' }, - databaseId: { __type: 'Int' }, - id: { __type: 'ID!' }, - name: { __type: 'String!' }, - number: { __type: 'Int!' }, - owner: { __type: 'ProjectOwner!' }, - pendingCards: { - __type: 'ProjectCardConnection!', - __args: { - after: 'String', - archivedStates: '[ProjectCardArchivedState]', - before: 'String', - first: 'Int', - last: 'Int', - }, - }, - progress: { __type: 'ProjectProgress!' }, - resourcePath: { __type: 'URI!' }, - state: { __type: 'ProjectState!' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - viewerCanUpdate: { __type: 'Boolean!' }, - }, - ProjectCard: { - __typename: { __type: 'String!' }, - column: { __type: 'ProjectColumn' }, - content: { __type: 'ProjectCardItem' }, - createdAt: { __type: 'DateTime!' }, - creator: { __type: 'Actor' }, - databaseId: { __type: 'Int' }, - id: { __type: 'ID!' }, - isArchived: { __type: 'Boolean!' }, - note: { __type: 'String' }, - project: { __type: 'Project!' }, - resourcePath: { __type: 'URI!' }, - state: { __type: 'ProjectCardState' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - }, - ProjectCardConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[ProjectCardEdge]' }, - nodes: { __type: '[ProjectCard]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - ProjectCardEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'ProjectCard' }, - }, - ProjectCardItem: { - __typename: { __type: 'String!' }, - $on: { __type: '$ProjectCardItem!' }, - }, - ProjectColumn: { - __typename: { __type: 'String!' }, - cards: { - __type: 'ProjectCardConnection!', - __args: { - after: 'String', - archivedStates: '[ProjectCardArchivedState]', - before: 'String', - first: 'Int', - last: 'Int', - }, - }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - id: { __type: 'ID!' }, - name: { __type: 'String!' }, - project: { __type: 'Project!' }, - purpose: { __type: 'ProjectColumnPurpose' }, - resourcePath: { __type: 'URI!' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - }, - ProjectColumnConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[ProjectColumnEdge]' }, - nodes: { __type: '[ProjectColumn]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - ProjectColumnEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'ProjectColumn' }, - }, - ProjectConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[ProjectEdge]' }, - nodes: { __type: '[Project]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - ProjectEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Project' }, - }, - ProjectNext: { - __typename: { __type: 'String!' }, - closed: { __type: 'Boolean!' }, - closedAt: { __type: 'DateTime' }, - createdAt: { __type: 'DateTime!' }, - creator: { __type: 'Actor' }, - databaseId: { __type: 'Int' }, - description: { __type: 'String' }, - fields: { - __type: 'ProjectNextFieldConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - id: { __type: 'ID!' }, - items: { - __type: 'ProjectNextItemConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - number: { __type: 'Int!' }, - owner: { __type: 'ProjectNextOwner!' }, - resourcePath: { __type: 'URI!' }, - title: { __type: 'String' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - viewerCanUpdate: { __type: 'Boolean!' }, - }, - ProjectNextConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[ProjectNextEdge]' }, - nodes: { __type: '[ProjectNext]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - ProjectNextEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'ProjectNext' }, - }, - ProjectNextField: { - __typename: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - id: { __type: 'ID!' }, - name: { __type: 'String!' }, - project: { __type: 'ProjectNext!' }, - settings: { __type: 'String' }, - updatedAt: { __type: 'DateTime!' }, - }, - ProjectNextFieldConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[ProjectNextFieldEdge]' }, - nodes: { __type: '[ProjectNextField]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - ProjectNextFieldEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'ProjectNextField' }, - }, - ProjectNextItem: { - __typename: { __type: 'String!' }, - content: { __type: 'ProjectNextItemContent' }, - createdAt: { __type: 'DateTime!' }, - creator: { __type: 'Actor' }, - databaseId: { __type: 'Int' }, - fieldValues: { - __type: 'ProjectNextItemFieldValueConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - id: { __type: 'ID!' }, - project: { __type: 'ProjectNext!' }, - title: { __type: 'String' }, - updatedAt: { __type: 'DateTime!' }, - }, - ProjectNextItemConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[ProjectNextItemEdge]' }, - nodes: { __type: '[ProjectNextItem]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - ProjectNextItemContent: { - __typename: { __type: 'String!' }, - $on: { __type: '$ProjectNextItemContent!' }, - }, - ProjectNextItemEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'ProjectNextItem' }, - }, - ProjectNextItemFieldValue: { - __typename: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - creator: { __type: 'Actor' }, - databaseId: { __type: 'Int' }, - id: { __type: 'ID!' }, - projectField: { __type: 'ProjectNextField!' }, - projectItem: { __type: 'ProjectNextItem!' }, - updatedAt: { __type: 'DateTime!' }, - value: { __type: 'String' }, - }, - ProjectNextItemFieldValueConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[ProjectNextItemFieldValueEdge]' }, - nodes: { __type: '[ProjectNextItemFieldValue]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - ProjectNextItemFieldValueEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'ProjectNextItemFieldValue' }, - }, - ProjectNextOwner: { - __typename: { __type: 'String!' }, - id: { __type: 'ID!' }, - projectNext: { __type: 'ProjectNext', __args: { number: 'Int!' } }, - projectsNext: { - __type: 'ProjectNextConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - query: 'String', - sortBy: 'ProjectNextOrderField', - }, - }, - $on: { __type: '$ProjectNextOwner!' }, - }, - ProjectOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'ProjectOrderField!' }, - }, - ProjectOwner: { - __typename: { __type: 'String!' }, - id: { __type: 'ID!' }, - project: { __type: 'Project', __args: { number: 'Int!' } }, - projects: { - __type: 'ProjectConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'ProjectOrder', - search: 'String', - states: '[ProjectState!]', - }, - }, - projectsResourcePath: { __type: 'URI!' }, - projectsUrl: { __type: 'URI!' }, - viewerCanCreateProjects: { __type: 'Boolean!' }, - $on: { __type: '$ProjectOwner!' }, - }, - ProjectProgress: { - __typename: { __type: 'String!' }, - doneCount: { __type: 'Int!' }, - donePercentage: { __type: 'Float!' }, - enabled: { __type: 'Boolean!' }, - inProgressCount: { __type: 'Int!' }, - inProgressPercentage: { __type: 'Float!' }, - todoCount: { __type: 'Int!' }, - todoPercentage: { __type: 'Float!' }, - }, - PublicKey: { - __typename: { __type: 'String!' }, - accessedAt: { __type: 'DateTime' }, - createdAt: { __type: 'DateTime' }, - fingerprint: { __type: 'String!' }, - id: { __type: 'ID!' }, - isReadOnly: { __type: 'Boolean' }, - key: { __type: 'String!' }, - updatedAt: { __type: 'DateTime' }, - }, - PublicKeyConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[PublicKeyEdge]' }, - nodes: { __type: '[PublicKey]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - PublicKeyEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'PublicKey' }, - }, - PullRequest: { - __typename: { __type: 'String!' }, - activeLockReason: { __type: 'LockReason' }, - additions: { __type: 'Int!' }, - assignees: { - __type: 'UserConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - author: { __type: 'Actor' }, - authorAssociation: { __type: 'CommentAuthorAssociation!' }, - autoMergeRequest: { __type: 'AutoMergeRequest' }, - baseRef: { __type: 'Ref' }, - baseRefName: { __type: 'String!' }, - baseRefOid: { __type: 'GitObjectID!' }, - baseRepository: { __type: 'Repository' }, - body: { __type: 'String!' }, - bodyHTML: { __type: 'HTML!' }, - bodyText: { __type: 'String!' }, - changedFiles: { __type: 'Int!' }, - checksResourcePath: { __type: 'URI!' }, - checksUrl: { __type: 'URI!' }, - closed: { __type: 'Boolean!' }, - closedAt: { __type: 'DateTime' }, - closingIssuesReferences: { - __type: 'IssueConnection', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'IssueOrder', - }, - }, - comments: { - __type: 'IssueCommentConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'IssueCommentOrder', - }, - }, - commits: { - __type: 'PullRequestCommitConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - createdAt: { __type: 'DateTime!' }, - createdViaEmail: { __type: 'Boolean!' }, - databaseId: { __type: 'Int' }, - deletions: { __type: 'Int!' }, - editor: { __type: 'Actor' }, - files: { - __type: 'PullRequestChangedFileConnection', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - headRef: { __type: 'Ref' }, - headRefName: { __type: 'String!' }, - headRefOid: { __type: 'GitObjectID!' }, - headRepository: { __type: 'Repository' }, - headRepositoryOwner: { __type: 'RepositoryOwner' }, - hovercard: { - __type: 'Hovercard!', - __args: { includeNotificationContexts: 'Boolean' }, - }, - id: { __type: 'ID!' }, - includesCreatedEdit: { __type: 'Boolean!' }, - isCrossRepository: { __type: 'Boolean!' }, - isDraft: { __type: 'Boolean!' }, - isReadByViewer: { __type: 'Boolean' }, - labels: { - __type: 'LabelConnection', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'LabelOrder', - }, - }, - lastEditedAt: { __type: 'DateTime' }, - latestOpinionatedReviews: { - __type: 'PullRequestReviewConnection', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - writersOnly: 'Boolean', - }, - }, - latestReviews: { - __type: 'PullRequestReviewConnection', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - locked: { __type: 'Boolean!' }, - maintainerCanModify: { __type: 'Boolean!' }, - mergeCommit: { __type: 'Commit' }, - mergeable: { __type: 'MergeableState!' }, - merged: { __type: 'Boolean!' }, - mergedAt: { __type: 'DateTime' }, - mergedBy: { __type: 'Actor' }, - milestone: { __type: 'Milestone' }, - number: { __type: 'Int!' }, - participants: { - __type: 'UserConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - permalink: { __type: 'URI!' }, - potentialMergeCommit: { __type: 'Commit' }, - projectCards: { - __type: 'ProjectCardConnection!', - __args: { - after: 'String', - archivedStates: '[ProjectCardArchivedState]', - before: 'String', - first: 'Int', - last: 'Int', - }, - }, - projectNext: { __type: 'ProjectNext', __args: { number: 'Int!' } }, - projectsNext: { - __type: 'ProjectNextConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - query: 'String', - sortBy: 'ProjectNextOrderField', - }, - }, - publishedAt: { __type: 'DateTime' }, - reactionGroups: { __type: '[ReactionGroup!]' }, - reactions: { - __type: 'ReactionConnection!', - __args: { - after: 'String', - before: 'String', - content: 'ReactionContent', - first: 'Int', - last: 'Int', - orderBy: 'ReactionOrder', - }, - }, - repository: { __type: 'Repository!' }, - resourcePath: { __type: 'URI!' }, - revertResourcePath: { __type: 'URI!' }, - revertUrl: { __type: 'URI!' }, - reviewDecision: { __type: 'PullRequestReviewDecision' }, - reviewRequests: { - __type: 'ReviewRequestConnection', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - reviewThreads: { - __type: 'PullRequestReviewThreadConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - reviews: { - __type: 'PullRequestReviewConnection', - __args: { - after: 'String', - author: 'String', - before: 'String', - first: 'Int', - last: 'Int', - states: '[PullRequestReviewState!]', - }, - }, - state: { __type: 'PullRequestState!' }, - suggestedReviewers: { __type: '[SuggestedReviewer]!' }, - timeline: { - __type: 'PullRequestTimelineConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - since: 'DateTime', - }, - }, - timelineItems: { - __type: 'PullRequestTimelineItemsConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - itemTypes: '[PullRequestTimelineItemsItemType!]', - last: 'Int', - since: 'DateTime', - skip: 'Int', - }, - }, - title: { __type: 'String!' }, - titleHTML: { __type: 'HTML!' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - userContentEdits: { - __type: 'UserContentEditConnection', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - viewerCanApplySuggestion: { __type: 'Boolean!' }, - viewerCanDeleteHeadRef: { __type: 'Boolean!' }, - viewerCanDisableAutoMerge: { __type: 'Boolean!' }, - viewerCanEnableAutoMerge: { __type: 'Boolean!' }, - viewerCanReact: { __type: 'Boolean!' }, - viewerCanSubscribe: { __type: 'Boolean!' }, - viewerCanUpdate: { __type: 'Boolean!' }, - viewerCannotUpdateReasons: { __type: '[CommentCannotUpdateReason!]!' }, - viewerDidAuthor: { __type: 'Boolean!' }, - viewerLatestReview: { __type: 'PullRequestReview' }, - viewerLatestReviewRequest: { __type: 'ReviewRequest' }, - viewerMergeBodyText: { - __type: 'String!', - __args: { mergeType: 'PullRequestMergeMethod' }, - }, - viewerMergeHeadlineText: { - __type: 'String!', - __args: { mergeType: 'PullRequestMergeMethod' }, - }, - viewerSubscription: { __type: 'SubscriptionState' }, - }, - PullRequestChangedFile: { - __typename: { __type: 'String!' }, - additions: { __type: 'Int!' }, - deletions: { __type: 'Int!' }, - path: { __type: 'String!' }, - viewerViewedState: { __type: 'FileViewedState!' }, - }, - PullRequestChangedFileConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[PullRequestChangedFileEdge]' }, - nodes: { __type: '[PullRequestChangedFile]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - PullRequestChangedFileEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'PullRequestChangedFile' }, - }, - PullRequestCommit: { - __typename: { __type: 'String!' }, - commit: { __type: 'Commit!' }, - id: { __type: 'ID!' }, - pullRequest: { __type: 'PullRequest!' }, - resourcePath: { __type: 'URI!' }, - url: { __type: 'URI!' }, - }, - PullRequestCommitCommentThread: { - __typename: { __type: 'String!' }, - comments: { - __type: 'CommitCommentConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - commit: { __type: 'Commit!' }, - id: { __type: 'ID!' }, - path: { __type: 'String' }, - position: { __type: 'Int' }, - pullRequest: { __type: 'PullRequest!' }, - repository: { __type: 'Repository!' }, - }, - PullRequestCommitConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[PullRequestCommitEdge]' }, - nodes: { __type: '[PullRequestCommit]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - PullRequestCommitEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'PullRequestCommit' }, - }, - PullRequestConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[PullRequestEdge]' }, - nodes: { __type: '[PullRequest]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - PullRequestContributionsByRepository: { - __typename: { __type: 'String!' }, - contributions: { - __type: 'CreatedPullRequestContributionConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'ContributionOrder', - }, - }, - repository: { __type: 'Repository!' }, - }, - PullRequestEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'PullRequest' }, - }, - PullRequestOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'PullRequestOrderField!' }, - }, - PullRequestReview: { - __typename: { __type: 'String!' }, - author: { __type: 'Actor' }, - authorAssociation: { __type: 'CommentAuthorAssociation!' }, - authorCanPushToRepository: { __type: 'Boolean!' }, - body: { __type: 'String!' }, - bodyHTML: { __type: 'HTML!' }, - bodyText: { __type: 'String!' }, - comments: { - __type: 'PullRequestReviewCommentConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - commit: { __type: 'Commit' }, - createdAt: { __type: 'DateTime!' }, - createdViaEmail: { __type: 'Boolean!' }, - databaseId: { __type: 'Int' }, - editor: { __type: 'Actor' }, - id: { __type: 'ID!' }, - includesCreatedEdit: { __type: 'Boolean!' }, - lastEditedAt: { __type: 'DateTime' }, - onBehalfOf: { - __type: 'TeamConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - publishedAt: { __type: 'DateTime' }, - pullRequest: { __type: 'PullRequest!' }, - reactionGroups: { __type: '[ReactionGroup!]' }, - reactions: { - __type: 'ReactionConnection!', - __args: { - after: 'String', - before: 'String', - content: 'ReactionContent', - first: 'Int', - last: 'Int', - orderBy: 'ReactionOrder', - }, - }, - repository: { __type: 'Repository!' }, - resourcePath: { __type: 'URI!' }, - state: { __type: 'PullRequestReviewState!' }, - submittedAt: { __type: 'DateTime' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - userContentEdits: { - __type: 'UserContentEditConnection', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - viewerCanDelete: { __type: 'Boolean!' }, - viewerCanReact: { __type: 'Boolean!' }, - viewerCanUpdate: { __type: 'Boolean!' }, - viewerCannotUpdateReasons: { __type: '[CommentCannotUpdateReason!]!' }, - viewerDidAuthor: { __type: 'Boolean!' }, - }, - PullRequestReviewComment: { - __typename: { __type: 'String!' }, - author: { __type: 'Actor' }, - authorAssociation: { __type: 'CommentAuthorAssociation!' }, - body: { __type: 'String!' }, - bodyHTML: { __type: 'HTML!' }, - bodyText: { __type: 'String!' }, - commit: { __type: 'Commit' }, - createdAt: { __type: 'DateTime!' }, - createdViaEmail: { __type: 'Boolean!' }, - databaseId: { __type: 'Int' }, - diffHunk: { __type: 'String!' }, - draftedAt: { __type: 'DateTime!' }, - editor: { __type: 'Actor' }, - id: { __type: 'ID!' }, - includesCreatedEdit: { __type: 'Boolean!' }, - isMinimized: { __type: 'Boolean!' }, - lastEditedAt: { __type: 'DateTime' }, - minimizedReason: { __type: 'String' }, - originalCommit: { __type: 'Commit' }, - originalPosition: { __type: 'Int!' }, - outdated: { __type: 'Boolean!' }, - path: { __type: 'String!' }, - position: { __type: 'Int' }, - publishedAt: { __type: 'DateTime' }, - pullRequest: { __type: 'PullRequest!' }, - pullRequestReview: { __type: 'PullRequestReview' }, - reactionGroups: { __type: '[ReactionGroup!]' }, - reactions: { - __type: 'ReactionConnection!', - __args: { - after: 'String', - before: 'String', - content: 'ReactionContent', - first: 'Int', - last: 'Int', - orderBy: 'ReactionOrder', - }, - }, - replyTo: { __type: 'PullRequestReviewComment' }, - repository: { __type: 'Repository!' }, - resourcePath: { __type: 'URI!' }, - state: { __type: 'PullRequestReviewCommentState!' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - userContentEdits: { - __type: 'UserContentEditConnection', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - viewerCanDelete: { __type: 'Boolean!' }, - viewerCanMinimize: { __type: 'Boolean!' }, - viewerCanReact: { __type: 'Boolean!' }, - viewerCanUpdate: { __type: 'Boolean!' }, - viewerCannotUpdateReasons: { __type: '[CommentCannotUpdateReason!]!' }, - viewerDidAuthor: { __type: 'Boolean!' }, - }, - PullRequestReviewCommentConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[PullRequestReviewCommentEdge]' }, - nodes: { __type: '[PullRequestReviewComment]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - PullRequestReviewCommentEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'PullRequestReviewComment' }, - }, - PullRequestReviewConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[PullRequestReviewEdge]' }, - nodes: { __type: '[PullRequestReview]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - PullRequestReviewContributionsByRepository: { - __typename: { __type: 'String!' }, - contributions: { - __type: 'CreatedPullRequestReviewContributionConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'ContributionOrder', - }, - }, - repository: { __type: 'Repository!' }, - }, - PullRequestReviewEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'PullRequestReview' }, - }, - PullRequestReviewThread: { - __typename: { __type: 'String!' }, - comments: { - __type: 'PullRequestReviewCommentConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - skip: 'Int', - }, - }, - diffSide: { __type: 'DiffSide!' }, - id: { __type: 'ID!' }, - isCollapsed: { __type: 'Boolean!' }, - isOutdated: { __type: 'Boolean!' }, - isResolved: { __type: 'Boolean!' }, - line: { __type: 'Int' }, - originalLine: { __type: 'Int' }, - originalStartLine: { __type: 'Int' }, - path: { __type: 'String!' }, - pullRequest: { __type: 'PullRequest!' }, - repository: { __type: 'Repository!' }, - resolvedBy: { __type: 'User' }, - startDiffSide: { __type: 'DiffSide' }, - startLine: { __type: 'Int' }, - viewerCanReply: { __type: 'Boolean!' }, - viewerCanResolve: { __type: 'Boolean!' }, - viewerCanUnresolve: { __type: 'Boolean!' }, - }, - PullRequestReviewThreadConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[PullRequestReviewThreadEdge]' }, - nodes: { __type: '[PullRequestReviewThread]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - PullRequestReviewThreadEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'PullRequestReviewThread' }, - }, - PullRequestRevisionMarker: { - __typename: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - lastSeenCommit: { __type: 'Commit!' }, - pullRequest: { __type: 'PullRequest!' }, - }, - PullRequestTemplate: { - __typename: { __type: 'String!' }, - body: { __type: 'String' }, - filename: { __type: 'String' }, - repository: { __type: 'Repository!' }, - }, - PullRequestTimelineConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[PullRequestTimelineItemEdge]' }, - nodes: { __type: '[PullRequestTimelineItem]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - PullRequestTimelineItem: { - __typename: { __type: 'String!' }, - $on: { __type: '$PullRequestTimelineItem!' }, - }, - PullRequestTimelineItemEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'PullRequestTimelineItem' }, - }, - PullRequestTimelineItems: { - __typename: { __type: 'String!' }, - $on: { __type: '$PullRequestTimelineItems!' }, - }, - PullRequestTimelineItemsConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[PullRequestTimelineItemsEdge]' }, - filteredCount: { __type: 'Int!' }, - nodes: { __type: '[PullRequestTimelineItems]' }, - pageCount: { __type: 'Int!' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - updatedAt: { __type: 'DateTime!' }, - }, - PullRequestTimelineItemsEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'PullRequestTimelineItems' }, - }, - Push: { - __typename: { __type: 'String!' }, - id: { __type: 'ID!' }, - nextSha: { __type: 'GitObjectID' }, - permalink: { __type: 'URI!' }, - previousSha: { __type: 'GitObjectID' }, - pusher: { __type: 'Actor!' }, - repository: { __type: 'Repository!' }, - }, - PushAllowance: { - __typename: { __type: 'String!' }, - actor: { __type: 'PushAllowanceActor' }, - branchProtectionRule: { __type: 'BranchProtectionRule' }, - id: { __type: 'ID!' }, - }, - PushAllowanceActor: { - __typename: { __type: 'String!' }, - $on: { __type: '$PushAllowanceActor!' }, - }, - PushAllowanceConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[PushAllowanceEdge]' }, - nodes: { __type: '[PushAllowance]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - PushAllowanceEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'PushAllowance' }, - }, - RateLimit: { - __typename: { __type: 'String!' }, - cost: { __type: 'Int!' }, - limit: { __type: 'Int!' }, - nodeCount: { __type: 'Int!' }, - remaining: { __type: 'Int!' }, - resetAt: { __type: 'DateTime!' }, - used: { __type: 'Int!' }, - }, - Reactable: { - __typename: { __type: 'String!' }, - databaseId: { __type: 'Int' }, - id: { __type: 'ID!' }, - reactionGroups: { __type: '[ReactionGroup!]' }, - reactions: { - __type: 'ReactionConnection!', - __args: { - after: 'String', - before: 'String', - content: 'ReactionContent', - first: 'Int', - last: 'Int', - orderBy: 'ReactionOrder', - }, - }, - viewerCanReact: { __type: 'Boolean!' }, - $on: { __type: '$Reactable!' }, - }, - ReactingUserConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[ReactingUserEdge]' }, - nodes: { __type: '[User]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - ReactingUserEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'User!' }, - reactedAt: { __type: 'DateTime!' }, - }, - Reaction: { - __typename: { __type: 'String!' }, - content: { __type: 'ReactionContent!' }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - id: { __type: 'ID!' }, - reactable: { __type: 'Reactable!' }, - user: { __type: 'User' }, - }, - ReactionConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[ReactionEdge]' }, - nodes: { __type: '[Reaction]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - viewerHasReacted: { __type: 'Boolean!' }, - }, - ReactionEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Reaction' }, - }, - ReactionGroup: { - __typename: { __type: 'String!' }, - content: { __type: 'ReactionContent!' }, - createdAt: { __type: 'DateTime' }, - reactors: { - __type: 'ReactorConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - subject: { __type: 'Reactable!' }, - users: { - __type: 'ReactingUserConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - viewerHasReacted: { __type: 'Boolean!' }, - }, - ReactionOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'ReactionOrderField!' }, - }, - Reactor: { __typename: { __type: 'String!' }, $on: { __type: '$Reactor!' } }, - ReactorConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[ReactorEdge]' }, - nodes: { __type: '[Reactor]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - ReactorEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Reactor!' }, - reactedAt: { __type: 'DateTime!' }, - }, - ReadyForReviewEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - pullRequest: { __type: 'PullRequest!' }, - resourcePath: { __type: 'URI!' }, - url: { __type: 'URI!' }, - }, - Ref: { - __typename: { __type: 'String!' }, - associatedPullRequests: { - __type: 'PullRequestConnection!', - __args: { - after: 'String', - baseRefName: 'String', - before: 'String', - first: 'Int', - headRefName: 'String', - labels: '[String!]', - last: 'Int', - orderBy: 'IssueOrder', - states: '[PullRequestState!]', - }, - }, - branchProtectionRule: { __type: 'BranchProtectionRule' }, - id: { __type: 'ID!' }, - name: { __type: 'String!' }, - prefix: { __type: 'String!' }, - refUpdateRule: { __type: 'RefUpdateRule' }, - repository: { __type: 'Repository!' }, - target: { __type: 'GitObject' }, - }, - RefConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[RefEdge]' }, - nodes: { __type: '[Ref]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - RefEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Ref' }, - }, - RefOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'RefOrderField!' }, - }, - RefUpdateRule: { - __typename: { __type: 'String!' }, - allowsDeletions: { __type: 'Boolean!' }, - allowsForcePushes: { __type: 'Boolean!' }, - pattern: { __type: 'String!' }, - requiredApprovingReviewCount: { __type: 'Int' }, - requiredStatusCheckContexts: { __type: '[String]' }, - requiresCodeOwnerReviews: { __type: 'Boolean!' }, - requiresConversationResolution: { __type: 'Boolean!' }, - requiresLinearHistory: { __type: 'Boolean!' }, - requiresSignatures: { __type: 'Boolean!' }, - viewerAllowedToDismissReviews: { __type: 'Boolean!' }, - viewerCanPush: { __type: 'Boolean!' }, - }, - ReferencedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - commit: { __type: 'Commit' }, - commitRepository: { __type: 'Repository!' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - isCrossRepository: { __type: 'Boolean!' }, - isDirectReference: { __type: 'Boolean!' }, - subject: { __type: 'ReferencedSubject!' }, - }, - ReferencedSubject: { - __typename: { __type: 'String!' }, - $on: { __type: '$ReferencedSubject!' }, - }, - RegenerateEnterpriseIdentityProviderRecoveryCodesInput: { - clientMutationId: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - }, - RegenerateEnterpriseIdentityProviderRecoveryCodesPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - identityProvider: { __type: 'EnterpriseIdentityProvider' }, - }, - RegenerateVerifiableDomainTokenInput: { - clientMutationId: { __type: 'String' }, - id: { __type: 'ID!' }, - }, - RegenerateVerifiableDomainTokenPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - verificationToken: { __type: 'String' }, - }, - RejectDeploymentsInput: { - clientMutationId: { __type: 'String' }, - comment: { __type: 'String' }, - environmentIds: { __type: '[ID!]!' }, - workflowRunId: { __type: 'ID!' }, - }, - RejectDeploymentsPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - deployments: { __type: '[Deployment!]' }, - }, - Release: { - __typename: { __type: 'String!' }, - author: { __type: 'User' }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - description: { __type: 'String' }, - descriptionHTML: { __type: 'HTML' }, - id: { __type: 'ID!' }, - isDraft: { __type: 'Boolean!' }, - isLatest: { __type: 'Boolean!' }, - isPrerelease: { __type: 'Boolean!' }, - mentions: { - __type: 'UserConnection', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - name: { __type: 'String' }, - publishedAt: { __type: 'DateTime' }, - reactionGroups: { __type: '[ReactionGroup!]' }, - reactions: { - __type: 'ReactionConnection!', - __args: { - after: 'String', - before: 'String', - content: 'ReactionContent', - first: 'Int', - last: 'Int', - orderBy: 'ReactionOrder', - }, - }, - releaseAssets: { - __type: 'ReleaseAssetConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - name: 'String', - }, - }, - repository: { __type: 'Repository!' }, - resourcePath: { __type: 'URI!' }, - shortDescriptionHTML: { __type: 'HTML', __args: { limit: 'Int' } }, - tag: { __type: 'Ref' }, - tagCommit: { __type: 'Commit' }, - tagName: { __type: 'String!' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - viewerCanReact: { __type: 'Boolean!' }, - }, - ReleaseAsset: { - __typename: { __type: 'String!' }, - contentType: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - downloadCount: { __type: 'Int!' }, - downloadUrl: { __type: 'URI!' }, - id: { __type: 'ID!' }, - name: { __type: 'String!' }, - release: { __type: 'Release' }, - size: { __type: 'Int!' }, - updatedAt: { __type: 'DateTime!' }, - uploadedBy: { __type: 'User!' }, - url: { __type: 'URI!' }, - }, - ReleaseAssetConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[ReleaseAssetEdge]' }, - nodes: { __type: '[ReleaseAsset]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - ReleaseAssetEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'ReleaseAsset' }, - }, - ReleaseConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[ReleaseEdge]' }, - nodes: { __type: '[Release]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - ReleaseEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Release' }, - }, - ReleaseOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'ReleaseOrderField!' }, - }, - RemoveAssigneesFromAssignableInput: { - assignableId: { __type: 'ID!' }, - assigneeIds: { __type: '[ID!]!' }, - clientMutationId: { __type: 'String' }, - }, - RemoveAssigneesFromAssignablePayload: { - __typename: { __type: 'String!' }, - assignable: { __type: 'Assignable' }, - clientMutationId: { __type: 'String' }, - }, - RemoveEnterpriseAdminInput: { - clientMutationId: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - login: { __type: 'String!' }, - }, - RemoveEnterpriseAdminPayload: { - __typename: { __type: 'String!' }, - admin: { __type: 'User' }, - clientMutationId: { __type: 'String' }, - enterprise: { __type: 'Enterprise' }, - message: { __type: 'String' }, - viewer: { __type: 'User' }, - }, - RemoveEnterpriseIdentityProviderInput: { - clientMutationId: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - }, - RemoveEnterpriseIdentityProviderPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - identityProvider: { __type: 'EnterpriseIdentityProvider' }, - }, - RemoveEnterpriseOrganizationInput: { - clientMutationId: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - organizationId: { __type: 'ID!' }, - }, - RemoveEnterpriseOrganizationPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - enterprise: { __type: 'Enterprise' }, - organization: { __type: 'Organization' }, - viewer: { __type: 'User' }, - }, - RemoveEnterpriseSupportEntitlementInput: { - clientMutationId: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - login: { __type: 'String!' }, - }, - RemoveEnterpriseSupportEntitlementPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - message: { __type: 'String' }, - }, - RemoveLabelsFromLabelableInput: { - clientMutationId: { __type: 'String' }, - labelIds: { __type: '[ID!]!' }, - labelableId: { __type: 'ID!' }, - }, - RemoveLabelsFromLabelablePayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - labelable: { __type: 'Labelable' }, - }, - RemoveOutsideCollaboratorInput: { - clientMutationId: { __type: 'String' }, - organizationId: { __type: 'ID!' }, - userId: { __type: 'ID!' }, - }, - RemoveOutsideCollaboratorPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - removedUser: { __type: 'User' }, - }, - RemoveReactionInput: { - clientMutationId: { __type: 'String' }, - content: { __type: 'ReactionContent!' }, - subjectId: { __type: 'ID!' }, - }, - RemoveReactionPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - reaction: { __type: 'Reaction' }, - subject: { __type: 'Reactable' }, - }, - RemoveStarInput: { - clientMutationId: { __type: 'String' }, - starrableId: { __type: 'ID!' }, - }, - RemoveStarPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - starrable: { __type: 'Starrable' }, - }, - RemoveUpvoteInput: { - clientMutationId: { __type: 'String' }, - subjectId: { __type: 'ID!' }, - }, - RemoveUpvotePayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - subject: { __type: 'Votable' }, - }, - RemovedFromProjectEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - id: { __type: 'ID!' }, - }, - RenamedTitleEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - currentTitle: { __type: 'String!' }, - id: { __type: 'ID!' }, - previousTitle: { __type: 'String!' }, - subject: { __type: 'RenamedTitleSubject!' }, - }, - RenamedTitleSubject: { - __typename: { __type: 'String!' }, - $on: { __type: '$RenamedTitleSubject!' }, - }, - ReopenIssueInput: { - clientMutationId: { __type: 'String' }, - issueId: { __type: 'ID!' }, - }, - ReopenIssuePayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - issue: { __type: 'Issue' }, - }, - ReopenPullRequestInput: { - clientMutationId: { __type: 'String' }, - pullRequestId: { __type: 'ID!' }, - }, - ReopenPullRequestPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - pullRequest: { __type: 'PullRequest' }, - }, - ReopenedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - closable: { __type: 'Closable!' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - }, - RepoAccessAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - visibility: { __type: 'RepoAccessAuditEntryVisibility' }, - }, - RepoAddMemberAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - visibility: { __type: 'RepoAddMemberAuditEntryVisibility' }, - }, - RepoAddTopicAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - topic: { __type: 'Topic' }, - topicName: { __type: 'String' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - RepoArchivedAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - visibility: { __type: 'RepoArchivedAuditEntryVisibility' }, - }, - RepoChangeMergeSettingAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - isEnabled: { __type: 'Boolean' }, - mergeType: { __type: 'RepoChangeMergeSettingAuditEntryMergeType' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - RepoConfigDisableAnonymousGitAccessAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - RepoConfigDisableCollaboratorsOnlyAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - RepoConfigDisableContributorsOnlyAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - RepoConfigDisableSockpuppetDisallowedAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - RepoConfigEnableAnonymousGitAccessAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - RepoConfigEnableCollaboratorsOnlyAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - RepoConfigEnableContributorsOnlyAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - RepoConfigEnableSockpuppetDisallowedAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - RepoConfigLockAnonymousGitAccessAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - RepoConfigUnlockAnonymousGitAccessAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - RepoCreateAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - forkParentName: { __type: 'String' }, - forkSourceName: { __type: 'String' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - visibility: { __type: 'RepoCreateAuditEntryVisibility' }, - }, - RepoDestroyAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - visibility: { __type: 'RepoDestroyAuditEntryVisibility' }, - }, - RepoRemoveMemberAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - visibility: { __type: 'RepoRemoveMemberAuditEntryVisibility' }, - }, - RepoRemoveTopicAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - topic: { __type: 'Topic' }, - topicName: { __type: 'String' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - Repository: { - __typename: { __type: 'String!' }, - assignableUsers: { - __type: 'UserConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - query: 'String', - }, - }, - autoMergeAllowed: { __type: 'Boolean!' }, - branchProtectionRules: { - __type: 'BranchProtectionRuleConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - codeOfConduct: { __type: 'CodeOfConduct' }, - collaborators: { - __type: 'RepositoryCollaboratorConnection', - __args: { - affiliation: 'CollaboratorAffiliation', - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - query: 'String', - }, - }, - commitComments: { - __type: 'CommitCommentConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - contactLinks: { __type: '[RepositoryContactLink!]' }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - defaultBranchRef: { __type: 'Ref' }, - deleteBranchOnMerge: { __type: 'Boolean!' }, - deployKeys: { - __type: 'DeployKeyConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - deployments: { - __type: 'DeploymentConnection!', - __args: { - after: 'String', - before: 'String', - environments: '[String!]', - first: 'Int', - last: 'Int', - orderBy: 'DeploymentOrder', - }, - }, - description: { __type: 'String' }, - descriptionHTML: { __type: 'HTML!' }, - discussion: { __type: 'Discussion', __args: { number: 'Int!' } }, - discussionCategories: { - __type: 'DiscussionCategoryConnection!', - __args: { - after: 'String', - before: 'String', - filterByAssignable: 'Boolean', - first: 'Int', - last: 'Int', - }, - }, - discussions: { - __type: 'DiscussionConnection!', - __args: { - after: 'String', - before: 'String', - categoryId: 'ID', - first: 'Int', - last: 'Int', - orderBy: 'DiscussionOrder', - }, - }, - diskUsage: { __type: 'Int' }, - environment: { __type: 'Environment', __args: { name: 'String!' } }, - environments: { - __type: 'EnvironmentConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - forkCount: { __type: 'Int!' }, - forkingAllowed: { __type: 'Boolean!' }, - forks: { - __type: 'RepositoryConnection!', - __args: { - affiliations: '[RepositoryAffiliation]', - after: 'String', - before: 'String', - first: 'Int', - isLocked: 'Boolean', - last: 'Int', - orderBy: 'RepositoryOrder', - ownerAffiliations: '[RepositoryAffiliation]', - privacy: 'RepositoryPrivacy', - }, - }, - fundingLinks: { __type: '[FundingLink!]!' }, - hasIssuesEnabled: { __type: 'Boolean!' }, - hasProjectsEnabled: { __type: 'Boolean!' }, - hasWikiEnabled: { __type: 'Boolean!' }, - homepageUrl: { __type: 'URI' }, - id: { __type: 'ID!' }, - interactionAbility: { __type: 'RepositoryInteractionAbility' }, - isArchived: { __type: 'Boolean!' }, - isBlankIssuesEnabled: { __type: 'Boolean!' }, - isDisabled: { __type: 'Boolean!' }, - isEmpty: { __type: 'Boolean!' }, - isFork: { __type: 'Boolean!' }, - isInOrganization: { __type: 'Boolean!' }, - isLocked: { __type: 'Boolean!' }, - isMirror: { __type: 'Boolean!' }, - isPrivate: { __type: 'Boolean!' }, - isSecurityPolicyEnabled: { __type: 'Boolean' }, - isTemplate: { __type: 'Boolean!' }, - isUserConfigurationRepository: { __type: 'Boolean!' }, - issue: { __type: 'Issue', __args: { number: 'Int!' } }, - issueOrPullRequest: { - __type: 'IssueOrPullRequest', - __args: { number: 'Int!' }, - }, - issueTemplates: { __type: '[IssueTemplate!]' }, - issues: { - __type: 'IssueConnection!', - __args: { - after: 'String', - before: 'String', - filterBy: 'IssueFilters', - first: 'Int', - labels: '[String!]', - last: 'Int', - orderBy: 'IssueOrder', - states: '[IssueState!]', - }, - }, - label: { __type: 'Label', __args: { name: 'String!' } }, - labels: { - __type: 'LabelConnection', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'LabelOrder', - query: 'String', - }, - }, - languages: { - __type: 'LanguageConnection', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'LanguageOrder', - }, - }, - latestRelease: { __type: 'Release' }, - licenseInfo: { __type: 'License' }, - lockReason: { __type: 'RepositoryLockReason' }, - mentionableUsers: { - __type: 'UserConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - query: 'String', - }, - }, - mergeCommitAllowed: { __type: 'Boolean!' }, - milestone: { __type: 'Milestone', __args: { number: 'Int!' } }, - milestones: { - __type: 'MilestoneConnection', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'MilestoneOrder', - query: 'String', - states: '[MilestoneState!]', - }, - }, - mirrorUrl: { __type: 'URI' }, - name: { __type: 'String!' }, - nameWithOwner: { __type: 'String!' }, - object: { - __type: 'GitObject', - __args: { expression: 'String', oid: 'GitObjectID' }, - }, - openGraphImageUrl: { __type: 'URI!' }, - owner: { __type: 'RepositoryOwner!' }, - packages: { - __type: 'PackageConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - names: '[String]', - orderBy: 'PackageOrder', - packageType: 'PackageType', - repositoryId: 'ID', - }, - }, - parent: { __type: 'Repository' }, - pinnedDiscussions: { - __type: 'PinnedDiscussionConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - pinnedIssues: { - __type: 'PinnedIssueConnection', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - primaryLanguage: { __type: 'Language' }, - project: { __type: 'Project', __args: { number: 'Int!' } }, - projects: { - __type: 'ProjectConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'ProjectOrder', - search: 'String', - states: '[ProjectState!]', - }, - }, - projectsResourcePath: { __type: 'URI!' }, - projectsUrl: { __type: 'URI!' }, - pullRequest: { __type: 'PullRequest', __args: { number: 'Int!' } }, - pullRequestTemplates: { __type: '[PullRequestTemplate!]' }, - pullRequests: { - __type: 'PullRequestConnection!', - __args: { - after: 'String', - baseRefName: 'String', - before: 'String', - first: 'Int', - headRefName: 'String', - labels: '[String!]', - last: 'Int', - orderBy: 'IssueOrder', - states: '[PullRequestState!]', - }, - }, - pushedAt: { __type: 'DateTime' }, - rebaseMergeAllowed: { __type: 'Boolean!' }, - ref: { __type: 'Ref', __args: { qualifiedName: 'String!' } }, - refs: { - __type: 'RefConnection', - __args: { - after: 'String', - before: 'String', - direction: 'OrderDirection', - first: 'Int', - last: 'Int', - orderBy: 'RefOrder', - query: 'String', - refPrefix: 'String!', - }, - }, - release: { __type: 'Release', __args: { tagName: 'String!' } }, - releases: { - __type: 'ReleaseConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'ReleaseOrder', - }, - }, - repositoryTopics: { - __type: 'RepositoryTopicConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - resourcePath: { __type: 'URI!' }, - securityPolicyUrl: { __type: 'URI' }, - shortDescriptionHTML: { __type: 'HTML!', __args: { limit: 'Int' } }, - squashMergeAllowed: { __type: 'Boolean!' }, - sshUrl: { __type: 'GitSSHRemote!' }, - stargazerCount: { __type: 'Int!' }, - stargazers: { - __type: 'StargazerConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'StarOrder', - }, - }, - submodules: { - __type: 'SubmoduleConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - tempCloneToken: { __type: 'String' }, - templateRepository: { __type: 'Repository' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - usesCustomOpenGraphImage: { __type: 'Boolean!' }, - viewerCanAdminister: { __type: 'Boolean!' }, - viewerCanCreateProjects: { __type: 'Boolean!' }, - viewerCanSubscribe: { __type: 'Boolean!' }, - viewerCanUpdateTopics: { __type: 'Boolean!' }, - viewerDefaultCommitEmail: { __type: 'String' }, - viewerDefaultMergeMethod: { __type: 'PullRequestMergeMethod!' }, - viewerHasStarred: { __type: 'Boolean!' }, - viewerPermission: { __type: 'RepositoryPermission' }, - viewerPossibleCommitEmails: { __type: '[String!]' }, - viewerSubscription: { __type: 'SubscriptionState' }, - visibility: { __type: 'RepositoryVisibility!' }, - vulnerabilityAlerts: { - __type: 'RepositoryVulnerabilityAlertConnection', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - watchers: { - __type: 'UserConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - }, - RepositoryAuditEntryData: { - __typename: { __type: 'String!' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - $on: { __type: '$RepositoryAuditEntryData!' }, - }, - RepositoryCollaboratorConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[RepositoryCollaboratorEdge]' }, - nodes: { __type: '[User]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - RepositoryCollaboratorEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'User!' }, - permission: { __type: 'RepositoryPermission!' }, - permissionSources: { __type: '[PermissionSource!]' }, - }, - RepositoryConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[RepositoryEdge]' }, - nodes: { __type: '[Repository]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - totalDiskUsage: { __type: 'Int!' }, - }, - RepositoryContactLink: { - __typename: { __type: 'String!' }, - about: { __type: 'String!' }, - name: { __type: 'String!' }, - url: { __type: 'URI!' }, - }, - RepositoryDiscussionAuthor: { - __typename: { __type: 'String!' }, - repositoryDiscussions: { - __type: 'DiscussionConnection!', - __args: { - after: 'String', - answered: 'Boolean', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'DiscussionOrder', - repositoryId: 'ID', - }, - }, - $on: { __type: '$RepositoryDiscussionAuthor!' }, - }, - RepositoryDiscussionCommentAuthor: { - __typename: { __type: 'String!' }, - repositoryDiscussionComments: { - __type: 'DiscussionCommentConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - onlyAnswers: 'Boolean', - repositoryId: 'ID', - }, - }, - $on: { __type: '$RepositoryDiscussionCommentAuthor!' }, - }, - RepositoryEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Repository' }, - }, - RepositoryInfo: { - __typename: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - description: { __type: 'String' }, - descriptionHTML: { __type: 'HTML!' }, - forkCount: { __type: 'Int!' }, - hasIssuesEnabled: { __type: 'Boolean!' }, - hasProjectsEnabled: { __type: 'Boolean!' }, - hasWikiEnabled: { __type: 'Boolean!' }, - homepageUrl: { __type: 'URI' }, - isArchived: { __type: 'Boolean!' }, - isFork: { __type: 'Boolean!' }, - isInOrganization: { __type: 'Boolean!' }, - isLocked: { __type: 'Boolean!' }, - isMirror: { __type: 'Boolean!' }, - isPrivate: { __type: 'Boolean!' }, - isTemplate: { __type: 'Boolean!' }, - licenseInfo: { __type: 'License' }, - lockReason: { __type: 'RepositoryLockReason' }, - mirrorUrl: { __type: 'URI' }, - name: { __type: 'String!' }, - nameWithOwner: { __type: 'String!' }, - openGraphImageUrl: { __type: 'URI!' }, - owner: { __type: 'RepositoryOwner!' }, - pushedAt: { __type: 'DateTime' }, - resourcePath: { __type: 'URI!' }, - shortDescriptionHTML: { __type: 'HTML!', __args: { limit: 'Int' } }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - usesCustomOpenGraphImage: { __type: 'Boolean!' }, - visibility: { __type: 'RepositoryVisibility!' }, - $on: { __type: '$RepositoryInfo!' }, - }, - RepositoryInteractionAbility: { - __typename: { __type: 'String!' }, - expiresAt: { __type: 'DateTime' }, - limit: { __type: 'RepositoryInteractionLimit!' }, - origin: { __type: 'RepositoryInteractionLimitOrigin!' }, - }, - RepositoryInvitation: { - __typename: { __type: 'String!' }, - email: { __type: 'String' }, - id: { __type: 'ID!' }, - invitee: { __type: 'User' }, - inviter: { __type: 'User!' }, - permalink: { __type: 'URI!' }, - permission: { __type: 'RepositoryPermission!' }, - repository: { __type: 'RepositoryInfo' }, - }, - RepositoryInvitationConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[RepositoryInvitationEdge]' }, - nodes: { __type: '[RepositoryInvitation]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - RepositoryInvitationEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'RepositoryInvitation' }, - }, - RepositoryInvitationOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'RepositoryInvitationOrderField!' }, - }, - RepositoryNode: { - __typename: { __type: 'String!' }, - repository: { __type: 'Repository!' }, - $on: { __type: '$RepositoryNode!' }, - }, - RepositoryOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'RepositoryOrderField!' }, - }, - RepositoryOwner: { - __typename: { __type: 'String!' }, - avatarUrl: { __type: 'URI!', __args: { size: 'Int' } }, - id: { __type: 'ID!' }, - login: { __type: 'String!' }, - repositories: { - __type: 'RepositoryConnection!', - __args: { - affiliations: '[RepositoryAffiliation]', - after: 'String', - before: 'String', - first: 'Int', - isFork: 'Boolean', - isLocked: 'Boolean', - last: 'Int', - orderBy: 'RepositoryOrder', - ownerAffiliations: '[RepositoryAffiliation]', - privacy: 'RepositoryPrivacy', - }, - }, - repository: { - __type: 'Repository', - __args: { followRenames: 'Boolean', name: 'String!' }, - }, - resourcePath: { __type: 'URI!' }, - url: { __type: 'URI!' }, - $on: { __type: '$RepositoryOwner!' }, - }, - RepositoryTopic: { - __typename: { __type: 'String!' }, - id: { __type: 'ID!' }, - resourcePath: { __type: 'URI!' }, - topic: { __type: 'Topic!' }, - url: { __type: 'URI!' }, - }, - RepositoryTopicConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[RepositoryTopicEdge]' }, - nodes: { __type: '[RepositoryTopic]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - RepositoryTopicEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'RepositoryTopic' }, - }, - RepositoryVisibilityChangeDisableAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - enterpriseResourcePath: { __type: 'URI' }, - enterpriseSlug: { __type: 'String' }, - enterpriseUrl: { __type: 'URI' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - RepositoryVisibilityChangeEnableAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - enterpriseResourcePath: { __type: 'URI' }, - enterpriseSlug: { __type: 'String' }, - enterpriseUrl: { __type: 'URI' }, - id: { __type: 'ID!' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - RepositoryVulnerabilityAlert: { - __typename: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - dismissReason: { __type: 'String' }, - dismissedAt: { __type: 'DateTime' }, - dismisser: { __type: 'User' }, - id: { __type: 'ID!' }, - repository: { __type: 'Repository!' }, - securityAdvisory: { __type: 'SecurityAdvisory' }, - securityVulnerability: { __type: 'SecurityVulnerability' }, - vulnerableManifestFilename: { __type: 'String!' }, - vulnerableManifestPath: { __type: 'String!' }, - vulnerableRequirements: { __type: 'String' }, - }, - RepositoryVulnerabilityAlertConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[RepositoryVulnerabilityAlertEdge]' }, - nodes: { __type: '[RepositoryVulnerabilityAlert]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - RepositoryVulnerabilityAlertEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'RepositoryVulnerabilityAlert' }, - }, - RequestReviewsInput: { - clientMutationId: { __type: 'String' }, - pullRequestId: { __type: 'ID!' }, - teamIds: { __type: '[ID!]' }, - union: { __type: 'Boolean' }, - userIds: { __type: '[ID!]' }, - }, - RequestReviewsPayload: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - clientMutationId: { __type: 'String' }, - pullRequest: { __type: 'PullRequest' }, - requestedReviewersEdge: { __type: 'UserEdge' }, - }, - RequestedReviewer: { - __typename: { __type: 'String!' }, - $on: { __type: '$RequestedReviewer!' }, - }, - RequirableByPullRequest: { - __typename: { __type: 'String!' }, - isRequired: { - __type: 'Boolean!', - __args: { pullRequestId: 'ID', pullRequestNumber: 'Int' }, - }, - $on: { __type: '$RequirableByPullRequest!' }, - }, - RequiredStatusCheckDescription: { - __typename: { __type: 'String!' }, - app: { __type: 'App' }, - context: { __type: 'String!' }, - }, - RequiredStatusCheckInput: { - appId: { __type: 'ID' }, - context: { __type: 'String!' }, - }, - RerequestCheckSuiteInput: { - checkSuiteId: { __type: 'ID!' }, - clientMutationId: { __type: 'String' }, - repositoryId: { __type: 'ID!' }, - }, - RerequestCheckSuitePayload: { - __typename: { __type: 'String!' }, - checkSuite: { __type: 'CheckSuite' }, - clientMutationId: { __type: 'String' }, - }, - ResolveReviewThreadInput: { - clientMutationId: { __type: 'String' }, - threadId: { __type: 'ID!' }, - }, - ResolveReviewThreadPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - thread: { __type: 'PullRequestReviewThread' }, - }, - RestrictedContribution: { - __typename: { __type: 'String!' }, - isRestricted: { __type: 'Boolean!' }, - occurredAt: { __type: 'DateTime!' }, - resourcePath: { __type: 'URI!' }, - url: { __type: 'URI!' }, - user: { __type: 'User!' }, - }, - ReviewDismissalAllowance: { - __typename: { __type: 'String!' }, - actor: { __type: 'ReviewDismissalAllowanceActor' }, - branchProtectionRule: { __type: 'BranchProtectionRule' }, - id: { __type: 'ID!' }, - }, - ReviewDismissalAllowanceActor: { - __typename: { __type: 'String!' }, - $on: { __type: '$ReviewDismissalAllowanceActor!' }, - }, - ReviewDismissalAllowanceConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[ReviewDismissalAllowanceEdge]' }, - nodes: { __type: '[ReviewDismissalAllowance]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - ReviewDismissalAllowanceEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'ReviewDismissalAllowance' }, - }, - ReviewDismissedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - dismissalMessage: { __type: 'String' }, - dismissalMessageHTML: { __type: 'String' }, - id: { __type: 'ID!' }, - previousReviewState: { __type: 'PullRequestReviewState!' }, - pullRequest: { __type: 'PullRequest!' }, - pullRequestCommit: { __type: 'PullRequestCommit' }, - resourcePath: { __type: 'URI!' }, - review: { __type: 'PullRequestReview' }, - url: { __type: 'URI!' }, - }, - ReviewRequest: { - __typename: { __type: 'String!' }, - asCodeOwner: { __type: 'Boolean!' }, - databaseId: { __type: 'Int' }, - id: { __type: 'ID!' }, - pullRequest: { __type: 'PullRequest!' }, - requestedReviewer: { __type: 'RequestedReviewer' }, - }, - ReviewRequestConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[ReviewRequestEdge]' }, - nodes: { __type: '[ReviewRequest]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - ReviewRequestEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'ReviewRequest' }, - }, - ReviewRequestRemovedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - pullRequest: { __type: 'PullRequest!' }, - requestedReviewer: { __type: 'RequestedReviewer' }, - }, - ReviewRequestedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - pullRequest: { __type: 'PullRequest!' }, - requestedReviewer: { __type: 'RequestedReviewer' }, - }, - ReviewStatusHovercardContext: { - __typename: { __type: 'String!' }, - message: { __type: 'String!' }, - octicon: { __type: 'String!' }, - reviewDecision: { __type: 'PullRequestReviewDecision' }, - }, - SavedReply: { - __typename: { __type: 'String!' }, - body: { __type: 'String!' }, - bodyHTML: { __type: 'HTML!' }, - databaseId: { __type: 'Int' }, - id: { __type: 'ID!' }, - title: { __type: 'String!' }, - user: { __type: 'Actor' }, - }, - SavedReplyConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[SavedReplyEdge]' }, - nodes: { __type: '[SavedReply]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - SavedReplyEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'SavedReply' }, - }, - SavedReplyOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'SavedReplyOrderField!' }, - }, - SearchResultItem: { - __typename: { __type: 'String!' }, - $on: { __type: '$SearchResultItem!' }, - }, - SearchResultItemConnection: { - __typename: { __type: 'String!' }, - codeCount: { __type: 'Int!' }, - discussionCount: { __type: 'Int!' }, - edges: { __type: '[SearchResultItemEdge]' }, - issueCount: { __type: 'Int!' }, - nodes: { __type: '[SearchResultItem]' }, - pageInfo: { __type: 'PageInfo!' }, - repositoryCount: { __type: 'Int!' }, - userCount: { __type: 'Int!' }, - wikiCount: { __type: 'Int!' }, - }, - SearchResultItemEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'SearchResultItem' }, - textMatches: { __type: '[TextMatch]' }, - }, - SecurityAdvisory: { - __typename: { __type: 'String!' }, - cvss: { __type: 'CVSS!' }, - cwes: { - __type: 'CWEConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - databaseId: { __type: 'Int' }, - description: { __type: 'String!' }, - ghsaId: { __type: 'String!' }, - id: { __type: 'ID!' }, - identifiers: { __type: '[SecurityAdvisoryIdentifier!]!' }, - notificationsPermalink: { __type: 'URI' }, - origin: { __type: 'String!' }, - permalink: { __type: 'URI' }, - publishedAt: { __type: 'DateTime!' }, - references: { __type: '[SecurityAdvisoryReference!]!' }, - severity: { __type: 'SecurityAdvisorySeverity!' }, - summary: { __type: 'String!' }, - updatedAt: { __type: 'DateTime!' }, - vulnerabilities: { - __type: 'SecurityVulnerabilityConnection!', - __args: { - after: 'String', - before: 'String', - ecosystem: 'SecurityAdvisoryEcosystem', - first: 'Int', - last: 'Int', - orderBy: 'SecurityVulnerabilityOrder', - package: 'String', - severities: '[SecurityAdvisorySeverity!]', - }, - }, - withdrawnAt: { __type: 'DateTime' }, - }, - SecurityAdvisoryConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[SecurityAdvisoryEdge]' }, - nodes: { __type: '[SecurityAdvisory]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - SecurityAdvisoryEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'SecurityAdvisory' }, - }, - SecurityAdvisoryIdentifier: { - __typename: { __type: 'String!' }, - type: { __type: 'String!' }, - value: { __type: 'String!' }, - }, - SecurityAdvisoryIdentifierFilter: { - type: { __type: 'SecurityAdvisoryIdentifierType!' }, - value: { __type: 'String!' }, - }, - SecurityAdvisoryOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'SecurityAdvisoryOrderField!' }, - }, - SecurityAdvisoryPackage: { - __typename: { __type: 'String!' }, - ecosystem: { __type: 'SecurityAdvisoryEcosystem!' }, - name: { __type: 'String!' }, - }, - SecurityAdvisoryPackageVersion: { - __typename: { __type: 'String!' }, - identifier: { __type: 'String!' }, - }, - SecurityAdvisoryReference: { - __typename: { __type: 'String!' }, - url: { __type: 'URI!' }, - }, - SecurityVulnerability: { - __typename: { __type: 'String!' }, - advisory: { __type: 'SecurityAdvisory!' }, - firstPatchedVersion: { __type: 'SecurityAdvisoryPackageVersion' }, - package: { __type: 'SecurityAdvisoryPackage!' }, - severity: { __type: 'SecurityAdvisorySeverity!' }, - updatedAt: { __type: 'DateTime!' }, - vulnerableVersionRange: { __type: 'String!' }, - }, - SecurityVulnerabilityConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[SecurityVulnerabilityEdge]' }, - nodes: { __type: '[SecurityVulnerability]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - SecurityVulnerabilityEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'SecurityVulnerability' }, - }, - SecurityVulnerabilityOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'SecurityVulnerabilityOrderField!' }, - }, - SetEnterpriseIdentityProviderInput: { - clientMutationId: { __type: 'String' }, - digestMethod: { __type: 'SamlDigestAlgorithm!' }, - enterpriseId: { __type: 'ID!' }, - idpCertificate: { __type: 'String!' }, - issuer: { __type: 'String' }, - signatureMethod: { __type: 'SamlSignatureAlgorithm!' }, - ssoUrl: { __type: 'URI!' }, - }, - SetEnterpriseIdentityProviderPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - identityProvider: { __type: 'EnterpriseIdentityProvider' }, - }, - SetOrganizationInteractionLimitInput: { - clientMutationId: { __type: 'String' }, - expiry: { __type: 'RepositoryInteractionLimitExpiry' }, - limit: { __type: 'RepositoryInteractionLimit!' }, - organizationId: { __type: 'ID!' }, - }, - SetOrganizationInteractionLimitPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - organization: { __type: 'Organization' }, - }, - SetRepositoryInteractionLimitInput: { - clientMutationId: { __type: 'String' }, - expiry: { __type: 'RepositoryInteractionLimitExpiry' }, - limit: { __type: 'RepositoryInteractionLimit!' }, - repositoryId: { __type: 'ID!' }, - }, - SetRepositoryInteractionLimitPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - repository: { __type: 'Repository' }, - }, - SetUserInteractionLimitInput: { - clientMutationId: { __type: 'String' }, - expiry: { __type: 'RepositoryInteractionLimitExpiry' }, - limit: { __type: 'RepositoryInteractionLimit!' }, - userId: { __type: 'ID!' }, - }, - SetUserInteractionLimitPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - user: { __type: 'User' }, - }, - SmimeSignature: { - __typename: { __type: 'String!' }, - email: { __type: 'String!' }, - isValid: { __type: 'Boolean!' }, - payload: { __type: 'String!' }, - signature: { __type: 'String!' }, - signer: { __type: 'User' }, - state: { __type: 'GitSignatureState!' }, - wasSignedByGitHub: { __type: 'Boolean!' }, - }, - Sponsor: { __typename: { __type: 'String!' }, $on: { __type: '$Sponsor!' } }, - SponsorConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[SponsorEdge]' }, - nodes: { __type: '[Sponsor]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - SponsorEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Sponsor' }, - }, - SponsorOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'SponsorOrderField!' }, - }, - Sponsorable: { - __typename: { __type: 'String!' }, - estimatedNextSponsorsPayoutInCents: { __type: 'Int!' }, - hasSponsorsListing: { __type: 'Boolean!' }, - isSponsoredBy: { __type: 'Boolean!', __args: { accountLogin: 'String!' } }, - isSponsoringViewer: { __type: 'Boolean!' }, - monthlyEstimatedSponsorsIncomeInCents: { __type: 'Int!' }, - sponsoring: { - __type: 'SponsorConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'SponsorOrder', - }, - }, - sponsors: { - __type: 'SponsorConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'SponsorOrder', - tierId: 'ID', - }, - }, - sponsorsActivities: { - __type: 'SponsorsActivityConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'SponsorsActivityOrder', - period: 'SponsorsActivityPeriod', - }, - }, - sponsorsListing: { __type: 'SponsorsListing' }, - sponsorshipForViewerAsSponsor: { __type: 'Sponsorship' }, - sponsorshipForViewerAsSponsorable: { __type: 'Sponsorship' }, - sponsorshipNewsletters: { - __type: 'SponsorshipNewsletterConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'SponsorshipNewsletterOrder', - }, - }, - sponsorshipsAsMaintainer: { - __type: 'SponsorshipConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - includePrivate: 'Boolean', - last: 'Int', - orderBy: 'SponsorshipOrder', - }, - }, - sponsorshipsAsSponsor: { - __type: 'SponsorshipConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'SponsorshipOrder', - }, - }, - viewerCanSponsor: { __type: 'Boolean!' }, - viewerIsSponsoring: { __type: 'Boolean!' }, - $on: { __type: '$Sponsorable!' }, - }, - SponsorableItem: { - __typename: { __type: 'String!' }, - $on: { __type: '$SponsorableItem!' }, - }, - SponsorableItemConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[SponsorableItemEdge]' }, - nodes: { __type: '[SponsorableItem]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - SponsorableItemEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'SponsorableItem' }, - }, - SponsorableOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'SponsorableOrderField!' }, - }, - SponsorsActivity: { - __typename: { __type: 'String!' }, - action: { __type: 'SponsorsActivityAction!' }, - id: { __type: 'ID!' }, - previousSponsorsTier: { __type: 'SponsorsTier' }, - sponsor: { __type: 'Sponsor' }, - sponsorable: { __type: 'Sponsorable!' }, - sponsorsTier: { __type: 'SponsorsTier' }, - timestamp: { __type: 'DateTime' }, - }, - SponsorsActivityConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[SponsorsActivityEdge]' }, - nodes: { __type: '[SponsorsActivity]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - SponsorsActivityEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'SponsorsActivity' }, - }, - SponsorsActivityOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'SponsorsActivityOrderField!' }, - }, - SponsorsGoal: { - __typename: { __type: 'String!' }, - description: { __type: 'String' }, - kind: { __type: 'SponsorsGoalKind!' }, - percentComplete: { __type: 'Int!' }, - targetValue: { __type: 'Int!' }, - title: { __type: 'String!' }, - }, - SponsorsListing: { - __typename: { __type: 'String!' }, - activeGoal: { __type: 'SponsorsGoal' }, - createdAt: { __type: 'DateTime!' }, - fullDescription: { __type: 'String!' }, - fullDescriptionHTML: { __type: 'HTML!' }, - id: { __type: 'ID!' }, - isPublic: { __type: 'Boolean!' }, - name: { __type: 'String!' }, - nextPayoutDate: { __type: 'Date' }, - shortDescription: { __type: 'String!' }, - slug: { __type: 'String!' }, - sponsorable: { __type: 'Sponsorable!' }, - tiers: { - __type: 'SponsorsTierConnection', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'SponsorsTierOrder', - }, - }, - }, - SponsorsTier: { - __typename: { __type: 'String!' }, - adminInfo: { __type: 'SponsorsTierAdminInfo' }, - closestLesserValueTier: { __type: 'SponsorsTier' }, - createdAt: { __type: 'DateTime!' }, - description: { __type: 'String!' }, - descriptionHTML: { __type: 'HTML!' }, - id: { __type: 'ID!' }, - isCustomAmount: { __type: 'Boolean!' }, - isOneTime: { __type: 'Boolean!' }, - monthlyPriceInCents: { __type: 'Int!' }, - monthlyPriceInDollars: { __type: 'Int!' }, - name: { __type: 'String!' }, - sponsorsListing: { __type: 'SponsorsListing!' }, - updatedAt: { __type: 'DateTime!' }, - }, - SponsorsTierAdminInfo: { - __typename: { __type: 'String!' }, - sponsorships: { - __type: 'SponsorshipConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - includePrivate: 'Boolean', - last: 'Int', - orderBy: 'SponsorshipOrder', - }, - }, - }, - SponsorsTierConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[SponsorsTierEdge]' }, - nodes: { __type: '[SponsorsTier]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - SponsorsTierEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'SponsorsTier' }, - }, - SponsorsTierOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'SponsorsTierOrderField!' }, - }, - Sponsorship: { - __typename: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - isOneTimePayment: { __type: 'Boolean!' }, - isSponsorOptedIntoEmail: { __type: 'Boolean' }, - maintainer: { __type: 'User!' }, - privacyLevel: { __type: 'SponsorshipPrivacy!' }, - sponsor: { __type: 'User' }, - sponsorEntity: { __type: 'Sponsor' }, - sponsorable: { __type: 'Sponsorable!' }, - tier: { __type: 'SponsorsTier' }, - tierSelectedAt: { __type: 'DateTime' }, - }, - SponsorshipConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[SponsorshipEdge]' }, - nodes: { __type: '[Sponsorship]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - totalRecurringMonthlyPriceInCents: { __type: 'Int!' }, - totalRecurringMonthlyPriceInDollars: { __type: 'Int!' }, - }, - SponsorshipEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Sponsorship' }, - }, - SponsorshipNewsletter: { - __typename: { __type: 'String!' }, - body: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - isPublished: { __type: 'Boolean!' }, - sponsorable: { __type: 'Sponsorable!' }, - subject: { __type: 'String!' }, - updatedAt: { __type: 'DateTime!' }, - }, - SponsorshipNewsletterConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[SponsorshipNewsletterEdge]' }, - nodes: { __type: '[SponsorshipNewsletter]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - SponsorshipNewsletterEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'SponsorshipNewsletter' }, - }, - SponsorshipNewsletterOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'SponsorshipNewsletterOrderField!' }, - }, - SponsorshipOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'SponsorshipOrderField!' }, - }, - StarOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'StarOrderField!' }, - }, - StargazerConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[StargazerEdge]' }, - nodes: { __type: '[User]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - StargazerEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'User!' }, - starredAt: { __type: 'DateTime!' }, - }, - Starrable: { - __typename: { __type: 'String!' }, - id: { __type: 'ID!' }, - stargazerCount: { __type: 'Int!' }, - stargazers: { - __type: 'StargazerConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'StarOrder', - }, - }, - viewerHasStarred: { __type: 'Boolean!' }, - $on: { __type: '$Starrable!' }, - }, - StarredRepositoryConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[StarredRepositoryEdge]' }, - isOverLimit: { __type: 'Boolean!' }, - nodes: { __type: '[Repository]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - StarredRepositoryEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Repository!' }, - starredAt: { __type: 'DateTime!' }, - }, - Status: { - __typename: { __type: 'String!' }, - combinedContexts: { - __type: 'StatusCheckRollupContextConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - commit: { __type: 'Commit' }, - context: { __type: 'StatusContext', __args: { name: 'String!' } }, - contexts: { __type: '[StatusContext!]!' }, - id: { __type: 'ID!' }, - state: { __type: 'StatusState!' }, - }, - StatusCheckRollup: { - __typename: { __type: 'String!' }, - commit: { __type: 'Commit' }, - contexts: { - __type: 'StatusCheckRollupContextConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - id: { __type: 'ID!' }, - state: { __type: 'StatusState!' }, - }, - StatusCheckRollupContext: { - __typename: { __type: 'String!' }, - $on: { __type: '$StatusCheckRollupContext!' }, - }, - StatusCheckRollupContextConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[StatusCheckRollupContextEdge]' }, - nodes: { __type: '[StatusCheckRollupContext]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - StatusCheckRollupContextEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'StatusCheckRollupContext' }, - }, - StatusContext: { - __typename: { __type: 'String!' }, - avatarUrl: { __type: 'URI', __args: { size: 'Int' } }, - commit: { __type: 'Commit' }, - context: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - creator: { __type: 'Actor' }, - description: { __type: 'String' }, - id: { __type: 'ID!' }, - isRequired: { - __type: 'Boolean!', - __args: { pullRequestId: 'ID', pullRequestNumber: 'Int' }, - }, - state: { __type: 'StatusState!' }, - targetUrl: { __type: 'URI' }, - }, - SubmitPullRequestReviewInput: { - body: { __type: 'String' }, - clientMutationId: { __type: 'String' }, - event: { __type: 'PullRequestReviewEvent!' }, - pullRequestId: { __type: 'ID' }, - pullRequestReviewId: { __type: 'ID' }, - }, - SubmitPullRequestReviewPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - pullRequestReview: { __type: 'PullRequestReview' }, - }, - Submodule: { - __typename: { __type: 'String!' }, - branch: { __type: 'String' }, - gitUrl: { __type: 'URI!' }, - name: { __type: 'String!' }, - path: { __type: 'String!' }, - subprojectCommitOid: { __type: 'GitObjectID' }, - }, - SubmoduleConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[SubmoduleEdge]' }, - nodes: { __type: '[Submodule]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - SubmoduleEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Submodule' }, - }, - Subscribable: { - __typename: { __type: 'String!' }, - id: { __type: 'ID!' }, - viewerCanSubscribe: { __type: 'Boolean!' }, - viewerSubscription: { __type: 'SubscriptionState' }, - $on: { __type: '$Subscribable!' }, - }, - SubscribedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - subscribable: { __type: 'Subscribable!' }, - }, - SuggestedReviewer: { - __typename: { __type: 'String!' }, - isAuthor: { __type: 'Boolean!' }, - isCommenter: { __type: 'Boolean!' }, - reviewer: { __type: 'User!' }, - }, - Tag: { - __typename: { __type: 'String!' }, - abbreviatedOid: { __type: 'String!' }, - commitResourcePath: { __type: 'URI!' }, - commitUrl: { __type: 'URI!' }, - id: { __type: 'ID!' }, - message: { __type: 'String' }, - name: { __type: 'String!' }, - oid: { __type: 'GitObjectID!' }, - repository: { __type: 'Repository!' }, - tagger: { __type: 'GitActor' }, - target: { __type: 'GitObject!' }, - }, - Team: { - __typename: { __type: 'String!' }, - ancestors: { - __type: 'TeamConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - avatarUrl: { __type: 'URI', __args: { size: 'Int' } }, - childTeams: { - __type: 'TeamConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - immediateOnly: 'Boolean', - last: 'Int', - orderBy: 'TeamOrder', - userLogins: '[String!]', - }, - }, - combinedSlug: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - description: { __type: 'String' }, - discussion: { __type: 'TeamDiscussion', __args: { number: 'Int!' } }, - discussions: { - __type: 'TeamDiscussionConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - isPinned: 'Boolean', - last: 'Int', - orderBy: 'TeamDiscussionOrder', - }, - }, - discussionsResourcePath: { __type: 'URI!' }, - discussionsUrl: { __type: 'URI!' }, - editTeamResourcePath: { __type: 'URI!' }, - editTeamUrl: { __type: 'URI!' }, - id: { __type: 'ID!' }, - invitations: { - __type: 'OrganizationInvitationConnection', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - memberStatuses: { - __type: 'UserStatusConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'UserStatusOrder', - }, - }, - members: { - __type: 'TeamMemberConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - membership: 'TeamMembershipType', - orderBy: 'TeamMemberOrder', - query: 'String', - role: 'TeamMemberRole', - }, - }, - membersResourcePath: { __type: 'URI!' }, - membersUrl: { __type: 'URI!' }, - name: { __type: 'String!' }, - newTeamResourcePath: { __type: 'URI!' }, - newTeamUrl: { __type: 'URI!' }, - organization: { __type: 'Organization!' }, - parentTeam: { __type: 'Team' }, - privacy: { __type: 'TeamPrivacy!' }, - repositories: { - __type: 'TeamRepositoryConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'TeamRepositoryOrder', - query: 'String', - }, - }, - repositoriesResourcePath: { __type: 'URI!' }, - repositoriesUrl: { __type: 'URI!' }, - resourcePath: { __type: 'URI!' }, - slug: { __type: 'String!' }, - teamsResourcePath: { __type: 'URI!' }, - teamsUrl: { __type: 'URI!' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - viewerCanAdminister: { __type: 'Boolean!' }, - viewerCanSubscribe: { __type: 'Boolean!' }, - viewerSubscription: { __type: 'SubscriptionState' }, - }, - TeamAddMemberAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - isLdapMapped: { __type: 'Boolean' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - team: { __type: 'Team' }, - teamName: { __type: 'String' }, - teamResourcePath: { __type: 'URI' }, - teamUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - TeamAddRepositoryAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - isLdapMapped: { __type: 'Boolean' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - team: { __type: 'Team' }, - teamName: { __type: 'String' }, - teamResourcePath: { __type: 'URI' }, - teamUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - TeamAuditEntryData: { - __typename: { __type: 'String!' }, - team: { __type: 'Team' }, - teamName: { __type: 'String' }, - teamResourcePath: { __type: 'URI' }, - teamUrl: { __type: 'URI' }, - $on: { __type: '$TeamAuditEntryData!' }, - }, - TeamChangeParentTeamAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - isLdapMapped: { __type: 'Boolean' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - parentTeam: { __type: 'Team' }, - parentTeamName: { __type: 'String' }, - parentTeamNameWas: { __type: 'String' }, - parentTeamResourcePath: { __type: 'URI' }, - parentTeamUrl: { __type: 'URI' }, - parentTeamWas: { __type: 'Team' }, - parentTeamWasResourcePath: { __type: 'URI' }, - parentTeamWasUrl: { __type: 'URI' }, - team: { __type: 'Team' }, - teamName: { __type: 'String' }, - teamResourcePath: { __type: 'URI' }, - teamUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - TeamConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[TeamEdge]' }, - nodes: { __type: '[Team]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - TeamDiscussion: { - __typename: { __type: 'String!' }, - author: { __type: 'Actor' }, - authorAssociation: { __type: 'CommentAuthorAssociation!' }, - body: { __type: 'String!' }, - bodyHTML: { __type: 'HTML!' }, - bodyText: { __type: 'String!' }, - bodyVersion: { __type: 'String!' }, - comments: { - __type: 'TeamDiscussionCommentConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - fromComment: 'Int', - last: 'Int', - orderBy: 'TeamDiscussionCommentOrder', - }, - }, - commentsResourcePath: { __type: 'URI!' }, - commentsUrl: { __type: 'URI!' }, - createdAt: { __type: 'DateTime!' }, - createdViaEmail: { __type: 'Boolean!' }, - databaseId: { __type: 'Int' }, - editor: { __type: 'Actor' }, - id: { __type: 'ID!' }, - includesCreatedEdit: { __type: 'Boolean!' }, - isPinned: { __type: 'Boolean!' }, - isPrivate: { __type: 'Boolean!' }, - lastEditedAt: { __type: 'DateTime' }, - number: { __type: 'Int!' }, - publishedAt: { __type: 'DateTime' }, - reactionGroups: { __type: '[ReactionGroup!]' }, - reactions: { - __type: 'ReactionConnection!', - __args: { - after: 'String', - before: 'String', - content: 'ReactionContent', - first: 'Int', - last: 'Int', - orderBy: 'ReactionOrder', - }, - }, - resourcePath: { __type: 'URI!' }, - team: { __type: 'Team!' }, - title: { __type: 'String!' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - userContentEdits: { - __type: 'UserContentEditConnection', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - viewerCanDelete: { __type: 'Boolean!' }, - viewerCanPin: { __type: 'Boolean!' }, - viewerCanReact: { __type: 'Boolean!' }, - viewerCanSubscribe: { __type: 'Boolean!' }, - viewerCanUpdate: { __type: 'Boolean!' }, - viewerCannotUpdateReasons: { __type: '[CommentCannotUpdateReason!]!' }, - viewerDidAuthor: { __type: 'Boolean!' }, - viewerSubscription: { __type: 'SubscriptionState' }, - }, - TeamDiscussionComment: { - __typename: { __type: 'String!' }, - author: { __type: 'Actor' }, - authorAssociation: { __type: 'CommentAuthorAssociation!' }, - body: { __type: 'String!' }, - bodyHTML: { __type: 'HTML!' }, - bodyText: { __type: 'String!' }, - bodyVersion: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - createdViaEmail: { __type: 'Boolean!' }, - databaseId: { __type: 'Int' }, - discussion: { __type: 'TeamDiscussion!' }, - editor: { __type: 'Actor' }, - id: { __type: 'ID!' }, - includesCreatedEdit: { __type: 'Boolean!' }, - lastEditedAt: { __type: 'DateTime' }, - number: { __type: 'Int!' }, - publishedAt: { __type: 'DateTime' }, - reactionGroups: { __type: '[ReactionGroup!]' }, - reactions: { - __type: 'ReactionConnection!', - __args: { - after: 'String', - before: 'String', - content: 'ReactionContent', - first: 'Int', - last: 'Int', - orderBy: 'ReactionOrder', - }, - }, - resourcePath: { __type: 'URI!' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - userContentEdits: { - __type: 'UserContentEditConnection', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - viewerCanDelete: { __type: 'Boolean!' }, - viewerCanReact: { __type: 'Boolean!' }, - viewerCanUpdate: { __type: 'Boolean!' }, - viewerCannotUpdateReasons: { __type: '[CommentCannotUpdateReason!]!' }, - viewerDidAuthor: { __type: 'Boolean!' }, - }, - TeamDiscussionCommentConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[TeamDiscussionCommentEdge]' }, - nodes: { __type: '[TeamDiscussionComment]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - TeamDiscussionCommentEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'TeamDiscussionComment' }, - }, - TeamDiscussionCommentOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'TeamDiscussionCommentOrderField!' }, - }, - TeamDiscussionConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[TeamDiscussionEdge]' }, - nodes: { __type: '[TeamDiscussion]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - TeamDiscussionEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'TeamDiscussion' }, - }, - TeamDiscussionOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'TeamDiscussionOrderField!' }, - }, - TeamEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Team' }, - }, - TeamMemberConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[TeamMemberEdge]' }, - nodes: { __type: '[User]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - TeamMemberEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - memberAccessResourcePath: { __type: 'URI!' }, - memberAccessUrl: { __type: 'URI!' }, - node: { __type: 'User!' }, - role: { __type: 'TeamMemberRole!' }, - }, - TeamMemberOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'TeamMemberOrderField!' }, - }, - TeamOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'TeamOrderField!' }, - }, - TeamRemoveMemberAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - isLdapMapped: { __type: 'Boolean' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - team: { __type: 'Team' }, - teamName: { __type: 'String' }, - teamResourcePath: { __type: 'URI' }, - teamUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - TeamRemoveRepositoryAuditEntry: { - __typename: { __type: 'String!' }, - action: { __type: 'String!' }, - actor: { __type: 'AuditEntryActor' }, - actorIp: { __type: 'String' }, - actorLocation: { __type: 'ActorLocation' }, - actorLogin: { __type: 'String' }, - actorResourcePath: { __type: 'URI' }, - actorUrl: { __type: 'URI' }, - createdAt: { __type: 'PreciseDateTime!' }, - id: { __type: 'ID!' }, - isLdapMapped: { __type: 'Boolean' }, - operationType: { __type: 'OperationType' }, - organization: { __type: 'Organization' }, - organizationName: { __type: 'String' }, - organizationResourcePath: { __type: 'URI' }, - organizationUrl: { __type: 'URI' }, - repository: { __type: 'Repository' }, - repositoryName: { __type: 'String' }, - repositoryResourcePath: { __type: 'URI' }, - repositoryUrl: { __type: 'URI' }, - team: { __type: 'Team' }, - teamName: { __type: 'String' }, - teamResourcePath: { __type: 'URI' }, - teamUrl: { __type: 'URI' }, - user: { __type: 'User' }, - userLogin: { __type: 'String' }, - userResourcePath: { __type: 'URI' }, - userUrl: { __type: 'URI' }, - }, - TeamRepositoryConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[TeamRepositoryEdge]' }, - nodes: { __type: '[Repository]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - TeamRepositoryEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'Repository!' }, - permission: { __type: 'RepositoryPermission!' }, - }, - TeamRepositoryOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'TeamRepositoryOrderField!' }, - }, - TextMatch: { - __typename: { __type: 'String!' }, - fragment: { __type: 'String!' }, - highlights: { __type: '[TextMatchHighlight!]!' }, - property: { __type: 'String!' }, - }, - TextMatchHighlight: { - __typename: { __type: 'String!' }, - beginIndice: { __type: 'Int!' }, - endIndice: { __type: 'Int!' }, - text: { __type: 'String!' }, - }, - Topic: { - __typename: { __type: 'String!' }, - id: { __type: 'ID!' }, - name: { __type: 'String!' }, - relatedTopics: { __type: '[Topic!]!', __args: { first: 'Int' } }, - repositories: { - __type: 'RepositoryConnection!', - __args: { - affiliations: '[RepositoryAffiliation]', - after: 'String', - before: 'String', - first: 'Int', - isLocked: 'Boolean', - last: 'Int', - orderBy: 'RepositoryOrder', - ownerAffiliations: '[RepositoryAffiliation]', - privacy: 'RepositoryPrivacy', - sponsorableOnly: 'Boolean', - }, - }, - stargazerCount: { __type: 'Int!' }, - stargazers: { - __type: 'StargazerConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'StarOrder', - }, - }, - viewerHasStarred: { __type: 'Boolean!' }, - }, - TopicAuditEntryData: { - __typename: { __type: 'String!' }, - topic: { __type: 'Topic' }, - topicName: { __type: 'String' }, - $on: { __type: '$TopicAuditEntryData!' }, - }, - TransferIssueInput: { - clientMutationId: { __type: 'String' }, - issueId: { __type: 'ID!' }, - repositoryId: { __type: 'ID!' }, - }, - TransferIssuePayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - issue: { __type: 'Issue' }, - }, - TransferredEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - fromRepository: { __type: 'Repository' }, - id: { __type: 'ID!' }, - issue: { __type: 'Issue!' }, - }, - Tree: { - __typename: { __type: 'String!' }, - abbreviatedOid: { __type: 'String!' }, - commitResourcePath: { __type: 'URI!' }, - commitUrl: { __type: 'URI!' }, - entries: { __type: '[TreeEntry!]' }, - id: { __type: 'ID!' }, - oid: { __type: 'GitObjectID!' }, - repository: { __type: 'Repository!' }, - }, - TreeEntry: { - __typename: { __type: 'String!' }, - extension: { __type: 'String' }, - isGenerated: { __type: 'Boolean!' }, - mode: { __type: 'Int!' }, - name: { __type: 'String!' }, - object: { __type: 'GitObject' }, - oid: { __type: 'GitObjectID!' }, - path: { __type: 'String' }, - repository: { __type: 'Repository!' }, - submodule: { __type: 'Submodule' }, - type: { __type: 'String!' }, - }, - UnarchiveRepositoryInput: { - clientMutationId: { __type: 'String' }, - repositoryId: { __type: 'ID!' }, - }, - UnarchiveRepositoryPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - repository: { __type: 'Repository' }, - }, - UnassignedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - assignable: { __type: 'Assignable!' }, - assignee: { __type: 'Assignee' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - user: { __type: 'User' }, - }, - UnfollowUserInput: { - clientMutationId: { __type: 'String' }, - userId: { __type: 'ID!' }, - }, - UnfollowUserPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - user: { __type: 'User' }, - }, - UniformResourceLocatable: { - __typename: { __type: 'String!' }, - resourcePath: { __type: 'URI!' }, - url: { __type: 'URI!' }, - $on: { __type: '$UniformResourceLocatable!' }, - }, - UnknownSignature: { - __typename: { __type: 'String!' }, - email: { __type: 'String!' }, - isValid: { __type: 'Boolean!' }, - payload: { __type: 'String!' }, - signature: { __type: 'String!' }, - signer: { __type: 'User' }, - state: { __type: 'GitSignatureState!' }, - wasSignedByGitHub: { __type: 'Boolean!' }, - }, - UnlabeledEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - label: { __type: 'Label!' }, - labelable: { __type: 'Labelable!' }, - }, - UnlinkRepositoryFromProjectInput: { - clientMutationId: { __type: 'String' }, - projectId: { __type: 'ID!' }, - repositoryId: { __type: 'ID!' }, - }, - UnlinkRepositoryFromProjectPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - project: { __type: 'Project' }, - repository: { __type: 'Repository' }, - }, - UnlockLockableInput: { - clientMutationId: { __type: 'String' }, - lockableId: { __type: 'ID!' }, - }, - UnlockLockablePayload: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - clientMutationId: { __type: 'String' }, - unlockedRecord: { __type: 'Lockable' }, - }, - UnlockedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - lockable: { __type: 'Lockable!' }, - }, - UnmarkDiscussionCommentAsAnswerInput: { - clientMutationId: { __type: 'String' }, - id: { __type: 'ID!' }, - }, - UnmarkDiscussionCommentAsAnswerPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - discussion: { __type: 'Discussion' }, - }, - UnmarkFileAsViewedInput: { - clientMutationId: { __type: 'String' }, - path: { __type: 'String!' }, - pullRequestId: { __type: 'ID!' }, - }, - UnmarkFileAsViewedPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - pullRequest: { __type: 'PullRequest' }, - }, - UnmarkIssueAsDuplicateInput: { - canonicalId: { __type: 'ID!' }, - clientMutationId: { __type: 'String' }, - duplicateId: { __type: 'ID!' }, - }, - UnmarkIssueAsDuplicatePayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - duplicate: { __type: 'IssueOrPullRequest' }, - }, - UnmarkedAsDuplicateEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - canonical: { __type: 'IssueOrPullRequest' }, - createdAt: { __type: 'DateTime!' }, - duplicate: { __type: 'IssueOrPullRequest' }, - id: { __type: 'ID!' }, - isCrossRepository: { __type: 'Boolean!' }, - }, - UnminimizeCommentInput: { - clientMutationId: { __type: 'String' }, - subjectId: { __type: 'ID!' }, - }, - UnminimizeCommentPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - unminimizedComment: { __type: 'Minimizable' }, - }, - UnpinIssueInput: { - clientMutationId: { __type: 'String' }, - issueId: { __type: 'ID!' }, - }, - UnpinIssuePayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - issue: { __type: 'Issue' }, - }, - UnpinnedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - issue: { __type: 'Issue!' }, - }, - UnresolveReviewThreadInput: { - clientMutationId: { __type: 'String' }, - threadId: { __type: 'ID!' }, - }, - UnresolveReviewThreadPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - thread: { __type: 'PullRequestReviewThread' }, - }, - UnsubscribedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - subscribable: { __type: 'Subscribable!' }, - }, - Updatable: { - __typename: { __type: 'String!' }, - viewerCanUpdate: { __type: 'Boolean!' }, - $on: { __type: '$Updatable!' }, - }, - UpdatableComment: { - __typename: { __type: 'String!' }, - viewerCannotUpdateReasons: { __type: '[CommentCannotUpdateReason!]!' }, - $on: { __type: '$UpdatableComment!' }, - }, - UpdateBranchProtectionRuleInput: { - allowsDeletions: { __type: 'Boolean' }, - allowsForcePushes: { __type: 'Boolean' }, - branchProtectionRuleId: { __type: 'ID!' }, - bypassForcePushActorIds: { __type: '[ID!]' }, - bypassPullRequestActorIds: { __type: '[ID!]' }, - clientMutationId: { __type: 'String' }, - dismissesStaleReviews: { __type: 'Boolean' }, - isAdminEnforced: { __type: 'Boolean' }, - pattern: { __type: 'String' }, - pushActorIds: { __type: '[ID!]' }, - requiredApprovingReviewCount: { __type: 'Int' }, - requiredStatusCheckContexts: { __type: '[String!]' }, - requiredStatusChecks: { __type: '[RequiredStatusCheckInput!]' }, - requiresApprovingReviews: { __type: 'Boolean' }, - requiresCodeOwnerReviews: { __type: 'Boolean' }, - requiresCommitSignatures: { __type: 'Boolean' }, - requiresConversationResolution: { __type: 'Boolean' }, - requiresLinearHistory: { __type: 'Boolean' }, - requiresStatusChecks: { __type: 'Boolean' }, - requiresStrictStatusChecks: { __type: 'Boolean' }, - restrictsPushes: { __type: 'Boolean' }, - restrictsReviewDismissals: { __type: 'Boolean' }, - reviewDismissalActorIds: { __type: '[ID!]' }, - }, - UpdateBranchProtectionRulePayload: { - __typename: { __type: 'String!' }, - branchProtectionRule: { __type: 'BranchProtectionRule' }, - clientMutationId: { __type: 'String' }, - }, - UpdateCheckRunInput: { - actions: { __type: '[CheckRunAction!]' }, - checkRunId: { __type: 'ID!' }, - clientMutationId: { __type: 'String' }, - completedAt: { __type: 'DateTime' }, - conclusion: { __type: 'CheckConclusionState' }, - detailsUrl: { __type: 'URI' }, - externalId: { __type: 'String' }, - name: { __type: 'String' }, - output: { __type: 'CheckRunOutput' }, - repositoryId: { __type: 'ID!' }, - startedAt: { __type: 'DateTime' }, - status: { __type: 'RequestableCheckStatusState' }, - }, - UpdateCheckRunPayload: { - __typename: { __type: 'String!' }, - checkRun: { __type: 'CheckRun' }, - clientMutationId: { __type: 'String' }, - }, - UpdateCheckSuitePreferencesInput: { - autoTriggerPreferences: { __type: '[CheckSuiteAutoTriggerPreference!]!' }, - clientMutationId: { __type: 'String' }, - repositoryId: { __type: 'ID!' }, - }, - UpdateCheckSuitePreferencesPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - repository: { __type: 'Repository' }, - }, - UpdateDiscussionCommentInput: { - body: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - commentId: { __type: 'ID!' }, - }, - UpdateDiscussionCommentPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - comment: { __type: 'DiscussionComment' }, - }, - UpdateDiscussionInput: { - body: { __type: 'String' }, - categoryId: { __type: 'ID' }, - clientMutationId: { __type: 'String' }, - discussionId: { __type: 'ID!' }, - title: { __type: 'String' }, - }, - UpdateDiscussionPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - discussion: { __type: 'Discussion' }, - }, - UpdateEnterpriseAdministratorRoleInput: { - clientMutationId: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - login: { __type: 'String!' }, - role: { __type: 'EnterpriseAdministratorRole!' }, - }, - UpdateEnterpriseAdministratorRolePayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - message: { __type: 'String' }, - }, - UpdateEnterpriseAllowPrivateRepositoryForkingSettingInput: { - clientMutationId: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - settingValue: { __type: 'EnterpriseEnabledDisabledSettingValue!' }, - }, - UpdateEnterpriseAllowPrivateRepositoryForkingSettingPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - enterprise: { __type: 'Enterprise' }, - message: { __type: 'String' }, - }, - UpdateEnterpriseDefaultRepositoryPermissionSettingInput: { - clientMutationId: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - settingValue: { - __type: 'EnterpriseDefaultRepositoryPermissionSettingValue!', - }, - }, - UpdateEnterpriseDefaultRepositoryPermissionSettingPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - enterprise: { __type: 'Enterprise' }, - message: { __type: 'String' }, - }, - UpdateEnterpriseMembersCanChangeRepositoryVisibilitySettingInput: { - clientMutationId: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - settingValue: { __type: 'EnterpriseEnabledDisabledSettingValue!' }, - }, - UpdateEnterpriseMembersCanChangeRepositoryVisibilitySettingPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - enterprise: { __type: 'Enterprise' }, - message: { __type: 'String' }, - }, - UpdateEnterpriseMembersCanCreateRepositoriesSettingInput: { - clientMutationId: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - membersCanCreateInternalRepositories: { __type: 'Boolean' }, - membersCanCreatePrivateRepositories: { __type: 'Boolean' }, - membersCanCreatePublicRepositories: { __type: 'Boolean' }, - membersCanCreateRepositoriesPolicyEnabled: { __type: 'Boolean' }, - settingValue: { - __type: 'EnterpriseMembersCanCreateRepositoriesSettingValue', - }, - }, - UpdateEnterpriseMembersCanCreateRepositoriesSettingPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - enterprise: { __type: 'Enterprise' }, - message: { __type: 'String' }, - }, - UpdateEnterpriseMembersCanDeleteIssuesSettingInput: { - clientMutationId: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - settingValue: { __type: 'EnterpriseEnabledDisabledSettingValue!' }, - }, - UpdateEnterpriseMembersCanDeleteIssuesSettingPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - enterprise: { __type: 'Enterprise' }, - message: { __type: 'String' }, - }, - UpdateEnterpriseMembersCanDeleteRepositoriesSettingInput: { - clientMutationId: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - settingValue: { __type: 'EnterpriseEnabledDisabledSettingValue!' }, - }, - UpdateEnterpriseMembersCanDeleteRepositoriesSettingPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - enterprise: { __type: 'Enterprise' }, - message: { __type: 'String' }, - }, - UpdateEnterpriseMembersCanInviteCollaboratorsSettingInput: { - clientMutationId: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - settingValue: { __type: 'EnterpriseEnabledDisabledSettingValue!' }, - }, - UpdateEnterpriseMembersCanInviteCollaboratorsSettingPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - enterprise: { __type: 'Enterprise' }, - message: { __type: 'String' }, - }, - UpdateEnterpriseMembersCanMakePurchasesSettingInput: { - clientMutationId: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - settingValue: { __type: 'EnterpriseMembersCanMakePurchasesSettingValue!' }, - }, - UpdateEnterpriseMembersCanMakePurchasesSettingPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - enterprise: { __type: 'Enterprise' }, - message: { __type: 'String' }, - }, - UpdateEnterpriseMembersCanUpdateProtectedBranchesSettingInput: { - clientMutationId: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - settingValue: { __type: 'EnterpriseEnabledDisabledSettingValue!' }, - }, - UpdateEnterpriseMembersCanUpdateProtectedBranchesSettingPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - enterprise: { __type: 'Enterprise' }, - message: { __type: 'String' }, - }, - UpdateEnterpriseMembersCanViewDependencyInsightsSettingInput: { - clientMutationId: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - settingValue: { __type: 'EnterpriseEnabledDisabledSettingValue!' }, - }, - UpdateEnterpriseMembersCanViewDependencyInsightsSettingPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - enterprise: { __type: 'Enterprise' }, - message: { __type: 'String' }, - }, - UpdateEnterpriseOrganizationProjectsSettingInput: { - clientMutationId: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - settingValue: { __type: 'EnterpriseEnabledDisabledSettingValue!' }, - }, - UpdateEnterpriseOrganizationProjectsSettingPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - enterprise: { __type: 'Enterprise' }, - message: { __type: 'String' }, - }, - UpdateEnterpriseProfileInput: { - clientMutationId: { __type: 'String' }, - description: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - location: { __type: 'String' }, - name: { __type: 'String' }, - websiteUrl: { __type: 'String' }, - }, - UpdateEnterpriseProfilePayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - enterprise: { __type: 'Enterprise' }, - }, - UpdateEnterpriseRepositoryProjectsSettingInput: { - clientMutationId: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - settingValue: { __type: 'EnterpriseEnabledDisabledSettingValue!' }, - }, - UpdateEnterpriseRepositoryProjectsSettingPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - enterprise: { __type: 'Enterprise' }, - message: { __type: 'String' }, - }, - UpdateEnterpriseTeamDiscussionsSettingInput: { - clientMutationId: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - settingValue: { __type: 'EnterpriseEnabledDisabledSettingValue!' }, - }, - UpdateEnterpriseTeamDiscussionsSettingPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - enterprise: { __type: 'Enterprise' }, - message: { __type: 'String' }, - }, - UpdateEnterpriseTwoFactorAuthenticationRequiredSettingInput: { - clientMutationId: { __type: 'String' }, - enterpriseId: { __type: 'ID!' }, - settingValue: { __type: 'EnterpriseEnabledSettingValue!' }, - }, - UpdateEnterpriseTwoFactorAuthenticationRequiredSettingPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - enterprise: { __type: 'Enterprise' }, - message: { __type: 'String' }, - }, - UpdateEnvironmentInput: { - clientMutationId: { __type: 'String' }, - environmentId: { __type: 'ID!' }, - reviewers: { __type: '[ID!]' }, - waitTimer: { __type: 'Int' }, - }, - UpdateEnvironmentPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - environment: { __type: 'Environment' }, - }, - UpdateIpAllowListEnabledSettingInput: { - clientMutationId: { __type: 'String' }, - ownerId: { __type: 'ID!' }, - settingValue: { __type: 'IpAllowListEnabledSettingValue!' }, - }, - UpdateIpAllowListEnabledSettingPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - owner: { __type: 'IpAllowListOwner' }, - }, - UpdateIpAllowListEntryInput: { - allowListValue: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - ipAllowListEntryId: { __type: 'ID!' }, - isActive: { __type: 'Boolean!' }, - name: { __type: 'String' }, - }, - UpdateIpAllowListEntryPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - ipAllowListEntry: { __type: 'IpAllowListEntry' }, - }, - UpdateIpAllowListForInstalledAppsEnabledSettingInput: { - clientMutationId: { __type: 'String' }, - ownerId: { __type: 'ID!' }, - settingValue: { __type: 'IpAllowListForInstalledAppsEnabledSettingValue!' }, - }, - UpdateIpAllowListForInstalledAppsEnabledSettingPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - owner: { __type: 'IpAllowListOwner' }, - }, - UpdateIssueCommentInput: { - body: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - id: { __type: 'ID!' }, - }, - UpdateIssueCommentPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - issueComment: { __type: 'IssueComment' }, - }, - UpdateIssueInput: { - assigneeIds: { __type: '[ID!]' }, - body: { __type: 'String' }, - clientMutationId: { __type: 'String' }, - id: { __type: 'ID!' }, - labelIds: { __type: '[ID!]' }, - milestoneId: { __type: 'ID' }, - projectIds: { __type: '[ID!]' }, - state: { __type: 'IssueState' }, - title: { __type: 'String' }, - }, - UpdateIssuePayload: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - clientMutationId: { __type: 'String' }, - issue: { __type: 'Issue' }, - }, - UpdateNotificationRestrictionSettingInput: { - clientMutationId: { __type: 'String' }, - ownerId: { __type: 'ID!' }, - settingValue: { __type: 'NotificationRestrictionSettingValue!' }, - }, - UpdateNotificationRestrictionSettingPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - owner: { __type: 'VerifiableDomainOwner' }, - }, - UpdateOrganizationAllowPrivateRepositoryForkingSettingInput: { - clientMutationId: { __type: 'String' }, - forkingEnabled: { __type: 'Boolean!' }, - organizationId: { __type: 'ID!' }, - }, - UpdateOrganizationAllowPrivateRepositoryForkingSettingPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - message: { __type: 'String' }, - organization: { __type: 'Organization' }, - }, - UpdateProjectCardInput: { - clientMutationId: { __type: 'String' }, - isArchived: { __type: 'Boolean' }, - note: { __type: 'String' }, - projectCardId: { __type: 'ID!' }, - }, - UpdateProjectCardPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - projectCard: { __type: 'ProjectCard' }, - }, - UpdateProjectColumnInput: { - clientMutationId: { __type: 'String' }, - name: { __type: 'String!' }, - projectColumnId: { __type: 'ID!' }, - }, - UpdateProjectColumnPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - projectColumn: { __type: 'ProjectColumn' }, - }, - UpdateProjectInput: { - body: { __type: 'String' }, - clientMutationId: { __type: 'String' }, - name: { __type: 'String' }, - projectId: { __type: 'ID!' }, - public: { __type: 'Boolean' }, - state: { __type: 'ProjectState' }, - }, - UpdateProjectNextItemFieldInput: { - clientMutationId: { __type: 'String' }, - fieldId: { __type: 'ID!' }, - itemId: { __type: 'ID!' }, - projectId: { __type: 'ID!' }, - value: { __type: 'String!' }, - }, - UpdateProjectNextItemFieldPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - projectNextItem: { __type: 'ProjectNextItem' }, - }, - UpdateProjectPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - project: { __type: 'Project' }, - }, - UpdatePullRequestBranchInput: { - clientMutationId: { __type: 'String' }, - expectedHeadOid: { __type: 'GitObjectID' }, - pullRequestId: { __type: 'ID!' }, - }, - UpdatePullRequestBranchPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - pullRequest: { __type: 'PullRequest' }, - }, - UpdatePullRequestInput: { - assigneeIds: { __type: '[ID!]' }, - baseRefName: { __type: 'String' }, - body: { __type: 'String' }, - clientMutationId: { __type: 'String' }, - labelIds: { __type: '[ID!]' }, - maintainerCanModify: { __type: 'Boolean' }, - milestoneId: { __type: 'ID' }, - projectIds: { __type: '[ID!]' }, - pullRequestId: { __type: 'ID!' }, - state: { __type: 'PullRequestUpdateState' }, - title: { __type: 'String' }, - }, - UpdatePullRequestPayload: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - clientMutationId: { __type: 'String' }, - pullRequest: { __type: 'PullRequest' }, - }, - UpdatePullRequestReviewCommentInput: { - body: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - pullRequestReviewCommentId: { __type: 'ID!' }, - }, - UpdatePullRequestReviewCommentPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - pullRequestReviewComment: { __type: 'PullRequestReviewComment' }, - }, - UpdatePullRequestReviewInput: { - body: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - pullRequestReviewId: { __type: 'ID!' }, - }, - UpdatePullRequestReviewPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - pullRequestReview: { __type: 'PullRequestReview' }, - }, - UpdateRefInput: { - clientMutationId: { __type: 'String' }, - force: { __type: 'Boolean' }, - oid: { __type: 'GitObjectID!' }, - refId: { __type: 'ID!' }, - }, - UpdateRefPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - ref: { __type: 'Ref' }, - }, - UpdateRepositoryInput: { - clientMutationId: { __type: 'String' }, - description: { __type: 'String' }, - hasIssuesEnabled: { __type: 'Boolean' }, - hasProjectsEnabled: { __type: 'Boolean' }, - hasWikiEnabled: { __type: 'Boolean' }, - homepageUrl: { __type: 'URI' }, - name: { __type: 'String' }, - repositoryId: { __type: 'ID!' }, - template: { __type: 'Boolean' }, - }, - UpdateRepositoryPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - repository: { __type: 'Repository' }, - }, - UpdateSponsorshipPreferencesInput: { - clientMutationId: { __type: 'String' }, - privacyLevel: { __type: 'SponsorshipPrivacy' }, - receiveEmails: { __type: 'Boolean' }, - sponsorId: { __type: 'ID' }, - sponsorLogin: { __type: 'String' }, - sponsorableId: { __type: 'ID' }, - sponsorableLogin: { __type: 'String' }, - }, - UpdateSponsorshipPreferencesPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - sponsorship: { __type: 'Sponsorship' }, - }, - UpdateSubscriptionInput: { - clientMutationId: { __type: 'String' }, - state: { __type: 'SubscriptionState!' }, - subscribableId: { __type: 'ID!' }, - }, - UpdateSubscriptionPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - subscribable: { __type: 'Subscribable' }, - }, - UpdateTeamDiscussionCommentInput: { - body: { __type: 'String!' }, - bodyVersion: { __type: 'String' }, - clientMutationId: { __type: 'String' }, - id: { __type: 'ID!' }, - }, - UpdateTeamDiscussionCommentPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - teamDiscussionComment: { __type: 'TeamDiscussionComment' }, - }, - UpdateTeamDiscussionInput: { - body: { __type: 'String' }, - bodyVersion: { __type: 'String' }, - clientMutationId: { __type: 'String' }, - id: { __type: 'ID!' }, - pinned: { __type: 'Boolean' }, - title: { __type: 'String' }, - }, - UpdateTeamDiscussionPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - teamDiscussion: { __type: 'TeamDiscussion' }, - }, - UpdateTopicsInput: { - clientMutationId: { __type: 'String' }, - repositoryId: { __type: 'ID!' }, - topicNames: { __type: '[String!]!' }, - }, - UpdateTopicsPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - invalidTopicNames: { __type: '[String!]' }, - repository: { __type: 'Repository' }, - }, - User: { - __typename: { __type: 'String!' }, - anyPinnableItems: { - __type: 'Boolean!', - __args: { type: 'PinnableItemType' }, - }, - avatarUrl: { __type: 'URI!', __args: { size: 'Int' } }, - bio: { __type: 'String' }, - bioHTML: { __type: 'HTML!' }, - canReceiveOrganizationEmailsWhenNotificationsRestricted: { - __type: 'Boolean!', - __args: { login: 'String!' }, - }, - commitComments: { - __type: 'CommitCommentConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - company: { __type: 'String' }, - companyHTML: { __type: 'HTML!' }, - contributionsCollection: { - __type: 'ContributionsCollection!', - __args: { from: 'DateTime', organizationID: 'ID', to: 'DateTime' }, - }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - email: { __type: 'String!' }, - estimatedNextSponsorsPayoutInCents: { __type: 'Int!' }, - followers: { - __type: 'FollowerConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - following: { - __type: 'FollowingConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - gist: { __type: 'Gist', __args: { name: 'String!' } }, - gistComments: { - __type: 'GistCommentConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - gists: { - __type: 'GistConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'GistOrder', - privacy: 'GistPrivacy', - }, - }, - hasSponsorsListing: { __type: 'Boolean!' }, - hovercard: { __type: 'Hovercard!', __args: { primarySubjectId: 'ID' } }, - id: { __type: 'ID!' }, - interactionAbility: { __type: 'RepositoryInteractionAbility' }, - isBountyHunter: { __type: 'Boolean!' }, - isCampusExpert: { __type: 'Boolean!' }, - isDeveloperProgramMember: { __type: 'Boolean!' }, - isEmployee: { __type: 'Boolean!' }, - isFollowingViewer: { __type: 'Boolean!' }, - isGitHubStar: { __type: 'Boolean!' }, - isHireable: { __type: 'Boolean!' }, - isSiteAdmin: { __type: 'Boolean!' }, - isSponsoredBy: { __type: 'Boolean!', __args: { accountLogin: 'String!' } }, - isSponsoringViewer: { __type: 'Boolean!' }, - isViewer: { __type: 'Boolean!' }, - issueComments: { - __type: 'IssueCommentConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'IssueCommentOrder', - }, - }, - issues: { - __type: 'IssueConnection!', - __args: { - after: 'String', - before: 'String', - filterBy: 'IssueFilters', - first: 'Int', - labels: '[String!]', - last: 'Int', - orderBy: 'IssueOrder', - states: '[IssueState!]', - }, - }, - itemShowcase: { __type: 'ProfileItemShowcase!' }, - location: { __type: 'String' }, - login: { __type: 'String!' }, - monthlyEstimatedSponsorsIncomeInCents: { __type: 'Int!' }, - name: { __type: 'String' }, - organization: { __type: 'Organization', __args: { login: 'String!' } }, - organizationVerifiedDomainEmails: { - __type: '[String!]!', - __args: { login: 'String!' }, - }, - organizations: { - __type: 'OrganizationConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - packages: { - __type: 'PackageConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - names: '[String]', - orderBy: 'PackageOrder', - packageType: 'PackageType', - repositoryId: 'ID', - }, - }, - pinnableItems: { - __type: 'PinnableItemConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - types: '[PinnableItemType!]', - }, - }, - pinnedItems: { - __type: 'PinnableItemConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - types: '[PinnableItemType!]', - }, - }, - pinnedItemsRemaining: { __type: 'Int!' }, - project: { __type: 'Project', __args: { number: 'Int!' } }, - projectNext: { __type: 'ProjectNext', __args: { number: 'Int!' } }, - projects: { - __type: 'ProjectConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'ProjectOrder', - search: 'String', - states: '[ProjectState!]', - }, - }, - projectsNext: { - __type: 'ProjectNextConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - query: 'String', - sortBy: 'ProjectNextOrderField', - }, - }, - projectsResourcePath: { __type: 'URI!' }, - projectsUrl: { __type: 'URI!' }, - publicKeys: { - __type: 'PublicKeyConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - pullRequests: { - __type: 'PullRequestConnection!', - __args: { - after: 'String', - baseRefName: 'String', - before: 'String', - first: 'Int', - headRefName: 'String', - labels: '[String!]', - last: 'Int', - orderBy: 'IssueOrder', - states: '[PullRequestState!]', - }, - }, - repositories: { - __type: 'RepositoryConnection!', - __args: { - affiliations: '[RepositoryAffiliation]', - after: 'String', - before: 'String', - first: 'Int', - isFork: 'Boolean', - isLocked: 'Boolean', - last: 'Int', - orderBy: 'RepositoryOrder', - ownerAffiliations: '[RepositoryAffiliation]', - privacy: 'RepositoryPrivacy', - }, - }, - repositoriesContributedTo: { - __type: 'RepositoryConnection!', - __args: { - after: 'String', - before: 'String', - contributionTypes: '[RepositoryContributionType]', - first: 'Int', - includeUserRepositories: 'Boolean', - isLocked: 'Boolean', - last: 'Int', - orderBy: 'RepositoryOrder', - privacy: 'RepositoryPrivacy', - }, - }, - repository: { - __type: 'Repository', - __args: { followRenames: 'Boolean', name: 'String!' }, - }, - repositoryDiscussionComments: { - __type: 'DiscussionCommentConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - onlyAnswers: 'Boolean', - repositoryId: 'ID', - }, - }, - repositoryDiscussions: { - __type: 'DiscussionConnection!', - __args: { - after: 'String', - answered: 'Boolean', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'DiscussionOrder', - repositoryId: 'ID', - }, - }, - resourcePath: { __type: 'URI!' }, - savedReplies: { - __type: 'SavedReplyConnection', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'SavedReplyOrder', - }, - }, - sponsoring: { - __type: 'SponsorConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'SponsorOrder', - }, - }, - sponsors: { - __type: 'SponsorConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'SponsorOrder', - tierId: 'ID', - }, - }, - sponsorsActivities: { - __type: 'SponsorsActivityConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'SponsorsActivityOrder', - period: 'SponsorsActivityPeriod', - }, - }, - sponsorsListing: { __type: 'SponsorsListing' }, - sponsorshipForViewerAsSponsor: { __type: 'Sponsorship' }, - sponsorshipForViewerAsSponsorable: { __type: 'Sponsorship' }, - sponsorshipNewsletters: { - __type: 'SponsorshipNewsletterConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'SponsorshipNewsletterOrder', - }, - }, - sponsorshipsAsMaintainer: { - __type: 'SponsorshipConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - includePrivate: 'Boolean', - last: 'Int', - orderBy: 'SponsorshipOrder', - }, - }, - sponsorshipsAsSponsor: { - __type: 'SponsorshipConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'SponsorshipOrder', - }, - }, - starredRepositories: { - __type: 'StarredRepositoryConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'StarOrder', - ownedByViewer: 'Boolean', - }, - }, - status: { __type: 'UserStatus' }, - topRepositories: { - __type: 'RepositoryConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - orderBy: 'RepositoryOrder!', - since: 'DateTime', - }, - }, - twitterUsername: { __type: 'String' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - viewerCanChangePinnedItems: { __type: 'Boolean!' }, - viewerCanCreateProjects: { __type: 'Boolean!' }, - viewerCanFollow: { __type: 'Boolean!' }, - viewerCanSponsor: { __type: 'Boolean!' }, - viewerIsFollowing: { __type: 'Boolean!' }, - viewerIsSponsoring: { __type: 'Boolean!' }, - watching: { - __type: 'RepositoryConnection!', - __args: { - affiliations: '[RepositoryAffiliation]', - after: 'String', - before: 'String', - first: 'Int', - isLocked: 'Boolean', - last: 'Int', - orderBy: 'RepositoryOrder', - ownerAffiliations: '[RepositoryAffiliation]', - privacy: 'RepositoryPrivacy', - }, - }, - websiteUrl: { __type: 'URI' }, - }, - UserBlockedEvent: { - __typename: { __type: 'String!' }, - actor: { __type: 'Actor' }, - blockDuration: { __type: 'UserBlockDuration!' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - subject: { __type: 'User' }, - }, - UserConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[UserEdge]' }, - nodes: { __type: '[User]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - UserContentEdit: { - __typename: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - deletedAt: { __type: 'DateTime' }, - deletedBy: { __type: 'Actor' }, - diff: { __type: 'String' }, - editedAt: { __type: 'DateTime!' }, - editor: { __type: 'Actor' }, - id: { __type: 'ID!' }, - updatedAt: { __type: 'DateTime!' }, - }, - UserContentEditConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[UserContentEditEdge]' }, - nodes: { __type: '[UserContentEdit]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - UserContentEditEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'UserContentEdit' }, - }, - UserEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'User' }, - }, - UserEmailMetadata: { - __typename: { __type: 'String!' }, - primary: { __type: 'Boolean' }, - type: { __type: 'String' }, - value: { __type: 'String!' }, - }, - UserStatus: { - __typename: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - emoji: { __type: 'String' }, - emojiHTML: { __type: 'HTML' }, - expiresAt: { __type: 'DateTime' }, - id: { __type: 'ID!' }, - indicatesLimitedAvailability: { __type: 'Boolean!' }, - message: { __type: 'String' }, - organization: { __type: 'Organization' }, - updatedAt: { __type: 'DateTime!' }, - user: { __type: 'User!' }, - }, - UserStatusConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[UserStatusEdge]' }, - nodes: { __type: '[UserStatus]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - UserStatusEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'UserStatus' }, - }, - UserStatusOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'UserStatusOrderField!' }, - }, - VerifiableDomain: { - __typename: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - dnsHostName: { __type: 'URI' }, - domain: { __type: 'URI!' }, - hasFoundHostName: { __type: 'Boolean!' }, - hasFoundVerificationToken: { __type: 'Boolean!' }, - id: { __type: 'ID!' }, - isApproved: { __type: 'Boolean!' }, - isRequiredForPolicyEnforcement: { __type: 'Boolean!' }, - isVerified: { __type: 'Boolean!' }, - owner: { __type: 'VerifiableDomainOwner!' }, - punycodeEncodedDomain: { __type: 'URI!' }, - tokenExpirationTime: { __type: 'DateTime' }, - updatedAt: { __type: 'DateTime!' }, - verificationToken: { __type: 'String' }, - }, - VerifiableDomainConnection: { - __typename: { __type: 'String!' }, - edges: { __type: '[VerifiableDomainEdge]' }, - nodes: { __type: '[VerifiableDomain]' }, - pageInfo: { __type: 'PageInfo!' }, - totalCount: { __type: 'Int!' }, - }, - VerifiableDomainEdge: { - __typename: { __type: 'String!' }, - cursor: { __type: 'String!' }, - node: { __type: 'VerifiableDomain' }, - }, - VerifiableDomainOrder: { - direction: { __type: 'OrderDirection!' }, - field: { __type: 'VerifiableDomainOrderField!' }, - }, - VerifiableDomainOwner: { - __typename: { __type: 'String!' }, - $on: { __type: '$VerifiableDomainOwner!' }, - }, - VerifyVerifiableDomainInput: { - clientMutationId: { __type: 'String' }, - id: { __type: 'ID!' }, - }, - VerifyVerifiableDomainPayload: { - __typename: { __type: 'String!' }, - clientMutationId: { __type: 'String' }, - domain: { __type: 'VerifiableDomain' }, - }, - ViewerHovercardContext: { - __typename: { __type: 'String!' }, - message: { __type: 'String!' }, - octicon: { __type: 'String!' }, - viewer: { __type: 'User!' }, - }, - Votable: { - __typename: { __type: 'String!' }, - upvoteCount: { __type: 'Int!' }, - viewerCanUpvote: { __type: 'Boolean!' }, - viewerHasUpvoted: { __type: 'Boolean!' }, - $on: { __type: '$Votable!' }, - }, - Workflow: { - __typename: { __type: 'String!' }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - id: { __type: 'ID!' }, - name: { __type: 'String!' }, - updatedAt: { __type: 'DateTime!' }, - }, - WorkflowRun: { - __typename: { __type: 'String!' }, - checkSuite: { __type: 'CheckSuite!' }, - createdAt: { __type: 'DateTime!' }, - databaseId: { __type: 'Int' }, - deploymentReviews: { - __type: 'DeploymentReviewConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - id: { __type: 'ID!' }, - pendingDeploymentRequests: { - __type: 'DeploymentRequestConnection!', - __args: { after: 'String', before: 'String', first: 'Int', last: 'Int' }, - }, - resourcePath: { __type: 'URI!' }, - runNumber: { __type: 'Int!' }, - updatedAt: { __type: 'DateTime!' }, - url: { __type: 'URI!' }, - workflow: { __type: 'Workflow!' }, - }, - mutation: { - __typename: { __type: 'String!' }, - acceptEnterpriseAdministratorInvitation: { - __type: 'AcceptEnterpriseAdministratorInvitationPayload', - __args: { input: 'AcceptEnterpriseAdministratorInvitationInput!' }, - }, - acceptTopicSuggestion: { - __type: 'AcceptTopicSuggestionPayload', - __args: { input: 'AcceptTopicSuggestionInput!' }, - }, - addAssigneesToAssignable: { - __type: 'AddAssigneesToAssignablePayload', - __args: { input: 'AddAssigneesToAssignableInput!' }, - }, - addComment: { - __type: 'AddCommentPayload', - __args: { input: 'AddCommentInput!' }, - }, - addDiscussionComment: { - __type: 'AddDiscussionCommentPayload', - __args: { input: 'AddDiscussionCommentInput!' }, - }, - addEnterpriseSupportEntitlement: { - __type: 'AddEnterpriseSupportEntitlementPayload', - __args: { input: 'AddEnterpriseSupportEntitlementInput!' }, - }, - addLabelsToLabelable: { - __type: 'AddLabelsToLabelablePayload', - __args: { input: 'AddLabelsToLabelableInput!' }, - }, - addProjectCard: { - __type: 'AddProjectCardPayload', - __args: { input: 'AddProjectCardInput!' }, - }, - addProjectColumn: { - __type: 'AddProjectColumnPayload', - __args: { input: 'AddProjectColumnInput!' }, - }, - addProjectNextItem: { - __type: 'AddProjectNextItemPayload', - __args: { input: 'AddProjectNextItemInput!' }, - }, - addPullRequestReview: { - __type: 'AddPullRequestReviewPayload', - __args: { input: 'AddPullRequestReviewInput!' }, - }, - addPullRequestReviewComment: { - __type: 'AddPullRequestReviewCommentPayload', - __args: { input: 'AddPullRequestReviewCommentInput!' }, - }, - addPullRequestReviewThread: { - __type: 'AddPullRequestReviewThreadPayload', - __args: { input: 'AddPullRequestReviewThreadInput!' }, - }, - addReaction: { - __type: 'AddReactionPayload', - __args: { input: 'AddReactionInput!' }, - }, - addStar: { __type: 'AddStarPayload', __args: { input: 'AddStarInput!' } }, - addUpvote: { - __type: 'AddUpvotePayload', - __args: { input: 'AddUpvoteInput!' }, - }, - addVerifiableDomain: { - __type: 'AddVerifiableDomainPayload', - __args: { input: 'AddVerifiableDomainInput!' }, - }, - approveDeployments: { - __type: 'ApproveDeploymentsPayload', - __args: { input: 'ApproveDeploymentsInput!' }, - }, - approveVerifiableDomain: { - __type: 'ApproveVerifiableDomainPayload', - __args: { input: 'ApproveVerifiableDomainInput!' }, - }, - archiveRepository: { - __type: 'ArchiveRepositoryPayload', - __args: { input: 'ArchiveRepositoryInput!' }, - }, - cancelEnterpriseAdminInvitation: { - __type: 'CancelEnterpriseAdminInvitationPayload', - __args: { input: 'CancelEnterpriseAdminInvitationInput!' }, - }, - cancelSponsorship: { - __type: 'CancelSponsorshipPayload', - __args: { input: 'CancelSponsorshipInput!' }, - }, - changeUserStatus: { - __type: 'ChangeUserStatusPayload', - __args: { input: 'ChangeUserStatusInput!' }, - }, - clearLabelsFromLabelable: { - __type: 'ClearLabelsFromLabelablePayload', - __args: { input: 'ClearLabelsFromLabelableInput!' }, - }, - cloneProject: { - __type: 'CloneProjectPayload', - __args: { input: 'CloneProjectInput!' }, - }, - cloneTemplateRepository: { - __type: 'CloneTemplateRepositoryPayload', - __args: { input: 'CloneTemplateRepositoryInput!' }, - }, - closeIssue: { - __type: 'CloseIssuePayload', - __args: { input: 'CloseIssueInput!' }, - }, - closePullRequest: { - __type: 'ClosePullRequestPayload', - __args: { input: 'ClosePullRequestInput!' }, - }, - convertProjectCardNoteToIssue: { - __type: 'ConvertProjectCardNoteToIssuePayload', - __args: { input: 'ConvertProjectCardNoteToIssueInput!' }, - }, - convertPullRequestToDraft: { - __type: 'ConvertPullRequestToDraftPayload', - __args: { input: 'ConvertPullRequestToDraftInput!' }, - }, - createBranchProtectionRule: { - __type: 'CreateBranchProtectionRulePayload', - __args: { input: 'CreateBranchProtectionRuleInput!' }, - }, - createCheckRun: { - __type: 'CreateCheckRunPayload', - __args: { input: 'CreateCheckRunInput!' }, - }, - createCheckSuite: { - __type: 'CreateCheckSuitePayload', - __args: { input: 'CreateCheckSuiteInput!' }, - }, - createCommitOnBranch: { - __type: 'CreateCommitOnBranchPayload', - __args: { input: 'CreateCommitOnBranchInput!' }, - }, - createDiscussion: { - __type: 'CreateDiscussionPayload', - __args: { input: 'CreateDiscussionInput!' }, - }, - createEnterpriseOrganization: { - __type: 'CreateEnterpriseOrganizationPayload', - __args: { input: 'CreateEnterpriseOrganizationInput!' }, - }, - createEnvironment: { - __type: 'CreateEnvironmentPayload', - __args: { input: 'CreateEnvironmentInput!' }, - }, - createIpAllowListEntry: { - __type: 'CreateIpAllowListEntryPayload', - __args: { input: 'CreateIpAllowListEntryInput!' }, - }, - createIssue: { - __type: 'CreateIssuePayload', - __args: { input: 'CreateIssueInput!' }, - }, - createProject: { - __type: 'CreateProjectPayload', - __args: { input: 'CreateProjectInput!' }, - }, - createPullRequest: { - __type: 'CreatePullRequestPayload', - __args: { input: 'CreatePullRequestInput!' }, - }, - createRef: { - __type: 'CreateRefPayload', - __args: { input: 'CreateRefInput!' }, - }, - createRepository: { - __type: 'CreateRepositoryPayload', - __args: { input: 'CreateRepositoryInput!' }, - }, - createSponsorship: { - __type: 'CreateSponsorshipPayload', - __args: { input: 'CreateSponsorshipInput!' }, - }, - createTeamDiscussion: { - __type: 'CreateTeamDiscussionPayload', - __args: { input: 'CreateTeamDiscussionInput!' }, - }, - createTeamDiscussionComment: { - __type: 'CreateTeamDiscussionCommentPayload', - __args: { input: 'CreateTeamDiscussionCommentInput!' }, - }, - declineTopicSuggestion: { - __type: 'DeclineTopicSuggestionPayload', - __args: { input: 'DeclineTopicSuggestionInput!' }, - }, - deleteBranchProtectionRule: { - __type: 'DeleteBranchProtectionRulePayload', - __args: { input: 'DeleteBranchProtectionRuleInput!' }, - }, - deleteDeployment: { - __type: 'DeleteDeploymentPayload', - __args: { input: 'DeleteDeploymentInput!' }, - }, - deleteDiscussion: { - __type: 'DeleteDiscussionPayload', - __args: { input: 'DeleteDiscussionInput!' }, - }, - deleteDiscussionComment: { - __type: 'DeleteDiscussionCommentPayload', - __args: { input: 'DeleteDiscussionCommentInput!' }, - }, - deleteEnvironment: { - __type: 'DeleteEnvironmentPayload', - __args: { input: 'DeleteEnvironmentInput!' }, - }, - deleteIpAllowListEntry: { - __type: 'DeleteIpAllowListEntryPayload', - __args: { input: 'DeleteIpAllowListEntryInput!' }, - }, - deleteIssue: { - __type: 'DeleteIssuePayload', - __args: { input: 'DeleteIssueInput!' }, - }, - deleteIssueComment: { - __type: 'DeleteIssueCommentPayload', - __args: { input: 'DeleteIssueCommentInput!' }, - }, - deleteProject: { - __type: 'DeleteProjectPayload', - __args: { input: 'DeleteProjectInput!' }, - }, - deleteProjectCard: { - __type: 'DeleteProjectCardPayload', - __args: { input: 'DeleteProjectCardInput!' }, - }, - deleteProjectColumn: { - __type: 'DeleteProjectColumnPayload', - __args: { input: 'DeleteProjectColumnInput!' }, - }, - deleteProjectNextItem: { - __type: 'DeleteProjectNextItemPayload', - __args: { input: 'DeleteProjectNextItemInput!' }, - }, - deletePullRequestReview: { - __type: 'DeletePullRequestReviewPayload', - __args: { input: 'DeletePullRequestReviewInput!' }, - }, - deletePullRequestReviewComment: { - __type: 'DeletePullRequestReviewCommentPayload', - __args: { input: 'DeletePullRequestReviewCommentInput!' }, - }, - deleteRef: { - __type: 'DeleteRefPayload', - __args: { input: 'DeleteRefInput!' }, - }, - deleteTeamDiscussion: { - __type: 'DeleteTeamDiscussionPayload', - __args: { input: 'DeleteTeamDiscussionInput!' }, - }, - deleteTeamDiscussionComment: { - __type: 'DeleteTeamDiscussionCommentPayload', - __args: { input: 'DeleteTeamDiscussionCommentInput!' }, - }, - deleteVerifiableDomain: { - __type: 'DeleteVerifiableDomainPayload', - __args: { input: 'DeleteVerifiableDomainInput!' }, - }, - disablePullRequestAutoMerge: { - __type: 'DisablePullRequestAutoMergePayload', - __args: { input: 'DisablePullRequestAutoMergeInput!' }, - }, - dismissPullRequestReview: { - __type: 'DismissPullRequestReviewPayload', - __args: { input: 'DismissPullRequestReviewInput!' }, - }, - dismissRepositoryVulnerabilityAlert: { - __type: 'DismissRepositoryVulnerabilityAlertPayload', - __args: { input: 'DismissRepositoryVulnerabilityAlertInput!' }, - }, - enablePullRequestAutoMerge: { - __type: 'EnablePullRequestAutoMergePayload', - __args: { input: 'EnablePullRequestAutoMergeInput!' }, - }, - followUser: { - __type: 'FollowUserPayload', - __args: { input: 'FollowUserInput!' }, - }, - inviteEnterpriseAdmin: { - __type: 'InviteEnterpriseAdminPayload', - __args: { input: 'InviteEnterpriseAdminInput!' }, - }, - linkRepositoryToProject: { - __type: 'LinkRepositoryToProjectPayload', - __args: { input: 'LinkRepositoryToProjectInput!' }, - }, - lockLockable: { - __type: 'LockLockablePayload', - __args: { input: 'LockLockableInput!' }, - }, - markDiscussionCommentAsAnswer: { - __type: 'MarkDiscussionCommentAsAnswerPayload', - __args: { input: 'MarkDiscussionCommentAsAnswerInput!' }, - }, - markFileAsViewed: { - __type: 'MarkFileAsViewedPayload', - __args: { input: 'MarkFileAsViewedInput!' }, - }, - markPullRequestReadyForReview: { - __type: 'MarkPullRequestReadyForReviewPayload', - __args: { input: 'MarkPullRequestReadyForReviewInput!' }, - }, - mergeBranch: { - __type: 'MergeBranchPayload', - __args: { input: 'MergeBranchInput!' }, - }, - mergePullRequest: { - __type: 'MergePullRequestPayload', - __args: { input: 'MergePullRequestInput!' }, - }, - minimizeComment: { - __type: 'MinimizeCommentPayload', - __args: { input: 'MinimizeCommentInput!' }, - }, - moveProjectCard: { - __type: 'MoveProjectCardPayload', - __args: { input: 'MoveProjectCardInput!' }, - }, - moveProjectColumn: { - __type: 'MoveProjectColumnPayload', - __args: { input: 'MoveProjectColumnInput!' }, - }, - pinIssue: { - __type: 'PinIssuePayload', - __args: { input: 'PinIssueInput!' }, - }, - regenerateEnterpriseIdentityProviderRecoveryCodes: { - __type: 'RegenerateEnterpriseIdentityProviderRecoveryCodesPayload', - __args: { - input: 'RegenerateEnterpriseIdentityProviderRecoveryCodesInput!', - }, - }, - regenerateVerifiableDomainToken: { - __type: 'RegenerateVerifiableDomainTokenPayload', - __args: { input: 'RegenerateVerifiableDomainTokenInput!' }, - }, - rejectDeployments: { - __type: 'RejectDeploymentsPayload', - __args: { input: 'RejectDeploymentsInput!' }, - }, - removeAssigneesFromAssignable: { - __type: 'RemoveAssigneesFromAssignablePayload', - __args: { input: 'RemoveAssigneesFromAssignableInput!' }, - }, - removeEnterpriseAdmin: { - __type: 'RemoveEnterpriseAdminPayload', - __args: { input: 'RemoveEnterpriseAdminInput!' }, - }, - removeEnterpriseIdentityProvider: { - __type: 'RemoveEnterpriseIdentityProviderPayload', - __args: { input: 'RemoveEnterpriseIdentityProviderInput!' }, - }, - removeEnterpriseOrganization: { - __type: 'RemoveEnterpriseOrganizationPayload', - __args: { input: 'RemoveEnterpriseOrganizationInput!' }, - }, - removeEnterpriseSupportEntitlement: { - __type: 'RemoveEnterpriseSupportEntitlementPayload', - __args: { input: 'RemoveEnterpriseSupportEntitlementInput!' }, - }, - removeLabelsFromLabelable: { - __type: 'RemoveLabelsFromLabelablePayload', - __args: { input: 'RemoveLabelsFromLabelableInput!' }, - }, - removeOutsideCollaborator: { - __type: 'RemoveOutsideCollaboratorPayload', - __args: { input: 'RemoveOutsideCollaboratorInput!' }, - }, - removeReaction: { - __type: 'RemoveReactionPayload', - __args: { input: 'RemoveReactionInput!' }, - }, - removeStar: { - __type: 'RemoveStarPayload', - __args: { input: 'RemoveStarInput!' }, - }, - removeUpvote: { - __type: 'RemoveUpvotePayload', - __args: { input: 'RemoveUpvoteInput!' }, - }, - reopenIssue: { - __type: 'ReopenIssuePayload', - __args: { input: 'ReopenIssueInput!' }, - }, - reopenPullRequest: { - __type: 'ReopenPullRequestPayload', - __args: { input: 'ReopenPullRequestInput!' }, - }, - requestReviews: { - __type: 'RequestReviewsPayload', - __args: { input: 'RequestReviewsInput!' }, - }, - rerequestCheckSuite: { - __type: 'RerequestCheckSuitePayload', - __args: { input: 'RerequestCheckSuiteInput!' }, - }, - resolveReviewThread: { - __type: 'ResolveReviewThreadPayload', - __args: { input: 'ResolveReviewThreadInput!' }, - }, - setEnterpriseIdentityProvider: { - __type: 'SetEnterpriseIdentityProviderPayload', - __args: { input: 'SetEnterpriseIdentityProviderInput!' }, - }, - setOrganizationInteractionLimit: { - __type: 'SetOrganizationInteractionLimitPayload', - __args: { input: 'SetOrganizationInteractionLimitInput!' }, - }, - setRepositoryInteractionLimit: { - __type: 'SetRepositoryInteractionLimitPayload', - __args: { input: 'SetRepositoryInteractionLimitInput!' }, - }, - setUserInteractionLimit: { - __type: 'SetUserInteractionLimitPayload', - __args: { input: 'SetUserInteractionLimitInput!' }, - }, - submitPullRequestReview: { - __type: 'SubmitPullRequestReviewPayload', - __args: { input: 'SubmitPullRequestReviewInput!' }, - }, - transferIssue: { - __type: 'TransferIssuePayload', - __args: { input: 'TransferIssueInput!' }, - }, - unarchiveRepository: { - __type: 'UnarchiveRepositoryPayload', - __args: { input: 'UnarchiveRepositoryInput!' }, - }, - unfollowUser: { - __type: 'UnfollowUserPayload', - __args: { input: 'UnfollowUserInput!' }, - }, - unlinkRepositoryFromProject: { - __type: 'UnlinkRepositoryFromProjectPayload', - __args: { input: 'UnlinkRepositoryFromProjectInput!' }, - }, - unlockLockable: { - __type: 'UnlockLockablePayload', - __args: { input: 'UnlockLockableInput!' }, - }, - unmarkDiscussionCommentAsAnswer: { - __type: 'UnmarkDiscussionCommentAsAnswerPayload', - __args: { input: 'UnmarkDiscussionCommentAsAnswerInput!' }, - }, - unmarkFileAsViewed: { - __type: 'UnmarkFileAsViewedPayload', - __args: { input: 'UnmarkFileAsViewedInput!' }, - }, - unmarkIssueAsDuplicate: { - __type: 'UnmarkIssueAsDuplicatePayload', - __args: { input: 'UnmarkIssueAsDuplicateInput!' }, - }, - unminimizeComment: { - __type: 'UnminimizeCommentPayload', - __args: { input: 'UnminimizeCommentInput!' }, - }, - unpinIssue: { - __type: 'UnpinIssuePayload', - __args: { input: 'UnpinIssueInput!' }, - }, - unresolveReviewThread: { - __type: 'UnresolveReviewThreadPayload', - __args: { input: 'UnresolveReviewThreadInput!' }, - }, - updateBranchProtectionRule: { - __type: 'UpdateBranchProtectionRulePayload', - __args: { input: 'UpdateBranchProtectionRuleInput!' }, - }, - updateCheckRun: { - __type: 'UpdateCheckRunPayload', - __args: { input: 'UpdateCheckRunInput!' }, - }, - updateCheckSuitePreferences: { - __type: 'UpdateCheckSuitePreferencesPayload', - __args: { input: 'UpdateCheckSuitePreferencesInput!' }, - }, - updateDiscussion: { - __type: 'UpdateDiscussionPayload', - __args: { input: 'UpdateDiscussionInput!' }, - }, - updateDiscussionComment: { - __type: 'UpdateDiscussionCommentPayload', - __args: { input: 'UpdateDiscussionCommentInput!' }, - }, - updateEnterpriseAdministratorRole: { - __type: 'UpdateEnterpriseAdministratorRolePayload', - __args: { input: 'UpdateEnterpriseAdministratorRoleInput!' }, - }, - updateEnterpriseAllowPrivateRepositoryForkingSetting: { - __type: 'UpdateEnterpriseAllowPrivateRepositoryForkingSettingPayload', - __args: { - input: 'UpdateEnterpriseAllowPrivateRepositoryForkingSettingInput!', - }, - }, - updateEnterpriseDefaultRepositoryPermissionSetting: { - __type: 'UpdateEnterpriseDefaultRepositoryPermissionSettingPayload', - __args: { - input: 'UpdateEnterpriseDefaultRepositoryPermissionSettingInput!', - }, - }, - updateEnterpriseMembersCanChangeRepositoryVisibilitySetting: { - __type: - 'UpdateEnterpriseMembersCanChangeRepositoryVisibilitySettingPayload', - __args: { - input: - 'UpdateEnterpriseMembersCanChangeRepositoryVisibilitySettingInput!', - }, - }, - updateEnterpriseMembersCanCreateRepositoriesSetting: { - __type: 'UpdateEnterpriseMembersCanCreateRepositoriesSettingPayload', - __args: { - input: 'UpdateEnterpriseMembersCanCreateRepositoriesSettingInput!', - }, - }, - updateEnterpriseMembersCanDeleteIssuesSetting: { - __type: 'UpdateEnterpriseMembersCanDeleteIssuesSettingPayload', - __args: { input: 'UpdateEnterpriseMembersCanDeleteIssuesSettingInput!' }, - }, - updateEnterpriseMembersCanDeleteRepositoriesSetting: { - __type: 'UpdateEnterpriseMembersCanDeleteRepositoriesSettingPayload', - __args: { - input: 'UpdateEnterpriseMembersCanDeleteRepositoriesSettingInput!', - }, - }, - updateEnterpriseMembersCanInviteCollaboratorsSetting: { - __type: 'UpdateEnterpriseMembersCanInviteCollaboratorsSettingPayload', - __args: { - input: 'UpdateEnterpriseMembersCanInviteCollaboratorsSettingInput!', - }, - }, - updateEnterpriseMembersCanMakePurchasesSetting: { - __type: 'UpdateEnterpriseMembersCanMakePurchasesSettingPayload', - __args: { input: 'UpdateEnterpriseMembersCanMakePurchasesSettingInput!' }, - }, - updateEnterpriseMembersCanUpdateProtectedBranchesSetting: { - __type: 'UpdateEnterpriseMembersCanUpdateProtectedBranchesSettingPayload', - __args: { - input: 'UpdateEnterpriseMembersCanUpdateProtectedBranchesSettingInput!', - }, - }, - updateEnterpriseMembersCanViewDependencyInsightsSetting: { - __type: 'UpdateEnterpriseMembersCanViewDependencyInsightsSettingPayload', - __args: { - input: 'UpdateEnterpriseMembersCanViewDependencyInsightsSettingInput!', - }, - }, - updateEnterpriseOrganizationProjectsSetting: { - __type: 'UpdateEnterpriseOrganizationProjectsSettingPayload', - __args: { input: 'UpdateEnterpriseOrganizationProjectsSettingInput!' }, - }, - updateEnterpriseProfile: { - __type: 'UpdateEnterpriseProfilePayload', - __args: { input: 'UpdateEnterpriseProfileInput!' }, - }, - updateEnterpriseRepositoryProjectsSetting: { - __type: 'UpdateEnterpriseRepositoryProjectsSettingPayload', - __args: { input: 'UpdateEnterpriseRepositoryProjectsSettingInput!' }, - }, - updateEnterpriseTeamDiscussionsSetting: { - __type: 'UpdateEnterpriseTeamDiscussionsSettingPayload', - __args: { input: 'UpdateEnterpriseTeamDiscussionsSettingInput!' }, - }, - updateEnterpriseTwoFactorAuthenticationRequiredSetting: { - __type: 'UpdateEnterpriseTwoFactorAuthenticationRequiredSettingPayload', - __args: { - input: 'UpdateEnterpriseTwoFactorAuthenticationRequiredSettingInput!', - }, - }, - updateEnvironment: { - __type: 'UpdateEnvironmentPayload', - __args: { input: 'UpdateEnvironmentInput!' }, - }, - updateIpAllowListEnabledSetting: { - __type: 'UpdateIpAllowListEnabledSettingPayload', - __args: { input: 'UpdateIpAllowListEnabledSettingInput!' }, - }, - updateIpAllowListEntry: { - __type: 'UpdateIpAllowListEntryPayload', - __args: { input: 'UpdateIpAllowListEntryInput!' }, - }, - updateIpAllowListForInstalledAppsEnabledSetting: { - __type: 'UpdateIpAllowListForInstalledAppsEnabledSettingPayload', - __args: { - input: 'UpdateIpAllowListForInstalledAppsEnabledSettingInput!', - }, - }, - updateIssue: { - __type: 'UpdateIssuePayload', - __args: { input: 'UpdateIssueInput!' }, - }, - updateIssueComment: { - __type: 'UpdateIssueCommentPayload', - __args: { input: 'UpdateIssueCommentInput!' }, - }, - updateNotificationRestrictionSetting: { - __type: 'UpdateNotificationRestrictionSettingPayload', - __args: { input: 'UpdateNotificationRestrictionSettingInput!' }, - }, - updateOrganizationAllowPrivateRepositoryForkingSetting: { - __type: 'UpdateOrganizationAllowPrivateRepositoryForkingSettingPayload', - __args: { - input: 'UpdateOrganizationAllowPrivateRepositoryForkingSettingInput!', - }, - }, - updateProject: { - __type: 'UpdateProjectPayload', - __args: { input: 'UpdateProjectInput!' }, - }, - updateProjectCard: { - __type: 'UpdateProjectCardPayload', - __args: { input: 'UpdateProjectCardInput!' }, - }, - updateProjectColumn: { - __type: 'UpdateProjectColumnPayload', - __args: { input: 'UpdateProjectColumnInput!' }, - }, - updateProjectNextItemField: { - __type: 'UpdateProjectNextItemFieldPayload', - __args: { input: 'UpdateProjectNextItemFieldInput!' }, - }, - updatePullRequest: { - __type: 'UpdatePullRequestPayload', - __args: { input: 'UpdatePullRequestInput!' }, - }, - updatePullRequestBranch: { - __type: 'UpdatePullRequestBranchPayload', - __args: { input: 'UpdatePullRequestBranchInput!' }, - }, - updatePullRequestReview: { - __type: 'UpdatePullRequestReviewPayload', - __args: { input: 'UpdatePullRequestReviewInput!' }, - }, - updatePullRequestReviewComment: { - __type: 'UpdatePullRequestReviewCommentPayload', - __args: { input: 'UpdatePullRequestReviewCommentInput!' }, - }, - updateRef: { - __type: 'UpdateRefPayload', - __args: { input: 'UpdateRefInput!' }, - }, - updateRepository: { - __type: 'UpdateRepositoryPayload', - __args: { input: 'UpdateRepositoryInput!' }, - }, - updateSponsorshipPreferences: { - __type: 'UpdateSponsorshipPreferencesPayload', - __args: { input: 'UpdateSponsorshipPreferencesInput!' }, - }, - updateSubscription: { - __type: 'UpdateSubscriptionPayload', - __args: { input: 'UpdateSubscriptionInput!' }, - }, - updateTeamDiscussion: { - __type: 'UpdateTeamDiscussionPayload', - __args: { input: 'UpdateTeamDiscussionInput!' }, - }, - updateTeamDiscussionComment: { - __type: 'UpdateTeamDiscussionCommentPayload', - __args: { input: 'UpdateTeamDiscussionCommentInput!' }, - }, - updateTopics: { - __type: 'UpdateTopicsPayload', - __args: { input: 'UpdateTopicsInput!' }, - }, - verifyVerifiableDomain: { - __type: 'VerifyVerifiableDomainPayload', - __args: { input: 'VerifyVerifiableDomainInput!' }, - }, - }, - query: { - __typename: { __type: 'String!' }, - codeOfConduct: { __type: 'CodeOfConduct', __args: { key: 'String!' } }, - codesOfConduct: { __type: '[CodeOfConduct]' }, - enterprise: { - __type: 'Enterprise', - __args: { invitationToken: 'String', slug: 'String!' }, - }, - enterpriseAdministratorInvitation: { - __type: 'EnterpriseAdministratorInvitation', - __args: { - enterpriseSlug: 'String!', - role: 'EnterpriseAdministratorRole!', - userLogin: 'String!', - }, - }, - enterpriseAdministratorInvitationByToken: { - __type: 'EnterpriseAdministratorInvitation', - __args: { invitationToken: 'String!' }, - }, - license: { __type: 'License', __args: { key: 'String!' } }, - licenses: { __type: '[License]!' }, - marketplaceCategories: { - __type: '[MarketplaceCategory!]!', - __args: { - excludeEmpty: 'Boolean', - excludeSubcategories: 'Boolean', - includeCategories: '[String!]', - }, - }, - marketplaceCategory: { - __type: 'MarketplaceCategory', - __args: { slug: 'String!', useTopicAliases: 'Boolean' }, - }, - marketplaceListing: { - __type: 'MarketplaceListing', - __args: { slug: 'String!' }, - }, - marketplaceListings: { - __type: 'MarketplaceListingConnection!', - __args: { - adminId: 'ID', - after: 'String', - allStates: 'Boolean', - before: 'String', - categorySlug: 'String', - first: 'Int', - last: 'Int', - organizationId: 'ID', - primaryCategoryOnly: 'Boolean', - slugs: '[String]', - useTopicAliases: 'Boolean', - viewerCanAdmin: 'Boolean', - withFreeTrialsOnly: 'Boolean', - }, - }, - meta: { __type: 'GitHubMetadata!' }, - node: { __type: 'Node', __args: { id: 'ID!' } }, - nodes: { __type: '[Node]!', __args: { ids: '[ID!]!' } }, - organization: { __type: 'Organization', __args: { login: 'String!' } }, - rateLimit: { __type: 'RateLimit', __args: { dryRun: 'Boolean' } }, - relay: { __type: 'Query!' }, - repository: { - __type: 'Repository', - __args: { followRenames: 'Boolean', name: 'String!', owner: 'String!' }, - }, - repositoryOwner: { - __type: 'RepositoryOwner', - __args: { login: 'String!' }, - }, - resource: { __type: 'UniformResourceLocatable', __args: { url: 'URI!' } }, - search: { - __type: 'SearchResultItemConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - last: 'Int', - query: 'String!', - type: 'SearchType!', - }, - }, - securityAdvisories: { - __type: 'SecurityAdvisoryConnection!', - __args: { - after: 'String', - before: 'String', - first: 'Int', - identifier: 'SecurityAdvisoryIdentifierFilter', - last: 'Int', - orderBy: 'SecurityAdvisoryOrder', - publishedSince: 'DateTime', - updatedSince: 'DateTime', - }, - }, - securityAdvisory: { - __type: 'SecurityAdvisory', - __args: { ghsaId: 'String!' }, - }, - securityVulnerabilities: { - __type: 'SecurityVulnerabilityConnection!', - __args: { - after: 'String', - before: 'String', - ecosystem: 'SecurityAdvisoryEcosystem', - first: 'Int', - last: 'Int', - orderBy: 'SecurityVulnerabilityOrder', - package: 'String', - severities: '[SecurityAdvisorySeverity!]', - }, - }, - sponsorables: { - __type: 'SponsorableItemConnection!', - __args: { - after: 'String', - before: 'String', - dependencyEcosystem: 'SecurityAdvisoryEcosystem', - first: 'Int', - last: 'Int', - onlyDependencies: 'Boolean', - orderBy: 'SponsorableOrder', - orgLoginForDependencies: 'String', - }, - }, - topic: { __type: 'Topic', __args: { name: 'String!' } }, - user: { __type: 'User', __args: { login: 'String!' } }, - viewer: { __type: 'User!' }, - }, - subscription: {}, - [SchemaUnionsKey]: { - Node: [ - 'AddedToProjectEvent', - 'App', - 'AssignedEvent', - 'AutoMergeDisabledEvent', - 'AutoMergeEnabledEvent', - 'AutoRebaseEnabledEvent', - 'AutoSquashEnabledEvent', - 'AutomaticBaseChangeFailedEvent', - 'AutomaticBaseChangeSucceededEvent', - 'BaseRefChangedEvent', - 'BaseRefDeletedEvent', - 'BaseRefForcePushedEvent', - 'Blob', - 'Bot', - 'BranchProtectionRule', - 'BypassForcePushAllowance', - 'BypassPullRequestAllowance', - 'CWE', - 'CheckRun', - 'CheckSuite', - 'ClosedEvent', - 'CodeOfConduct', - 'CommentDeletedEvent', - 'Commit', - 'CommitComment', - 'CommitCommentThread', - 'ConnectedEvent', - 'ConvertToDraftEvent', - 'ConvertedNoteToIssueEvent', - 'ConvertedToDiscussionEvent', - 'CrossReferencedEvent', - 'DemilestonedEvent', - 'DeployKey', - 'DeployedEvent', - 'Deployment', - 'DeploymentEnvironmentChangedEvent', - 'DeploymentReview', - 'DeploymentStatus', - 'DisconnectedEvent', - 'Discussion', - 'DiscussionCategory', - 'DiscussionComment', - 'Enterprise', - 'EnterpriseAdministratorInvitation', - 'EnterpriseIdentityProvider', - 'EnterpriseRepositoryInfo', - 'EnterpriseServerInstallation', - 'EnterpriseServerUserAccount', - 'EnterpriseServerUserAccountEmail', - 'EnterpriseServerUserAccountsUpload', - 'EnterpriseUserAccount', - 'Environment', - 'ExternalIdentity', - 'Gist', - 'GistComment', - 'HeadRefDeletedEvent', - 'HeadRefForcePushedEvent', - 'HeadRefRestoredEvent', - 'IpAllowListEntry', - 'Issue', - 'IssueComment', - 'Label', - 'LabeledEvent', - 'Language', - 'License', - 'LockedEvent', - 'Mannequin', - 'MarkedAsDuplicateEvent', - 'MarketplaceCategory', - 'MarketplaceListing', - 'MembersCanDeleteReposClearAuditEntry', - 'MembersCanDeleteReposDisableAuditEntry', - 'MembersCanDeleteReposEnableAuditEntry', - 'MentionedEvent', - 'MergedEvent', - 'Milestone', - 'MilestonedEvent', - 'MovedColumnsInProjectEvent', - 'OIDCProvider', - 'OauthApplicationCreateAuditEntry', - 'OrgAddBillingManagerAuditEntry', - 'OrgAddMemberAuditEntry', - 'OrgBlockUserAuditEntry', - 'OrgConfigDisableCollaboratorsOnlyAuditEntry', - 'OrgConfigEnableCollaboratorsOnlyAuditEntry', - 'OrgCreateAuditEntry', - 'OrgDisableOauthAppRestrictionsAuditEntry', - 'OrgDisableSamlAuditEntry', - 'OrgDisableTwoFactorRequirementAuditEntry', - 'OrgEnableOauthAppRestrictionsAuditEntry', - 'OrgEnableSamlAuditEntry', - 'OrgEnableTwoFactorRequirementAuditEntry', - 'OrgInviteMemberAuditEntry', - 'OrgInviteToBusinessAuditEntry', - 'OrgOauthAppAccessApprovedAuditEntry', - 'OrgOauthAppAccessDeniedAuditEntry', - 'OrgOauthAppAccessRequestedAuditEntry', - 'OrgRemoveBillingManagerAuditEntry', - 'OrgRemoveMemberAuditEntry', - 'OrgRemoveOutsideCollaboratorAuditEntry', - 'OrgRestoreMemberAuditEntry', - 'OrgUnblockUserAuditEntry', - 'OrgUpdateDefaultRepositoryPermissionAuditEntry', - 'OrgUpdateMemberAuditEntry', - 'OrgUpdateMemberRepositoryCreationPermissionAuditEntry', - 'OrgUpdateMemberRepositoryInvitationPermissionAuditEntry', - 'Organization', - 'OrganizationIdentityProvider', - 'OrganizationInvitation', - 'Package', - 'PackageFile', - 'PackageTag', - 'PackageVersion', - 'PinnedDiscussion', - 'PinnedEvent', - 'PinnedIssue', - 'PrivateRepositoryForkingDisableAuditEntry', - 'PrivateRepositoryForkingEnableAuditEntry', - 'Project', - 'ProjectCard', - 'ProjectColumn', - 'ProjectNext', - 'ProjectNextItem', - 'ProjectNextItemFieldValue', - 'PublicKey', - 'PullRequest', - 'PullRequestCommit', - 'PullRequestCommitCommentThread', - 'PullRequestReview', - 'PullRequestReviewComment', - 'PullRequestReviewThread', - 'Push', - 'PushAllowance', - 'Reaction', - 'ReadyForReviewEvent', - 'Ref', - 'ReferencedEvent', - 'Release', - 'ReleaseAsset', - 'RemovedFromProjectEvent', - 'RenamedTitleEvent', - 'ReopenedEvent', - 'RepoAccessAuditEntry', - 'RepoAddMemberAuditEntry', - 'RepoAddTopicAuditEntry', - 'RepoArchivedAuditEntry', - 'RepoChangeMergeSettingAuditEntry', - 'RepoConfigDisableAnonymousGitAccessAuditEntry', - 'RepoConfigDisableCollaboratorsOnlyAuditEntry', - 'RepoConfigDisableContributorsOnlyAuditEntry', - 'RepoConfigDisableSockpuppetDisallowedAuditEntry', - 'RepoConfigEnableAnonymousGitAccessAuditEntry', - 'RepoConfigEnableCollaboratorsOnlyAuditEntry', - 'RepoConfigEnableContributorsOnlyAuditEntry', - 'RepoConfigEnableSockpuppetDisallowedAuditEntry', - 'RepoConfigLockAnonymousGitAccessAuditEntry', - 'RepoConfigUnlockAnonymousGitAccessAuditEntry', - 'RepoCreateAuditEntry', - 'RepoDestroyAuditEntry', - 'RepoRemoveMemberAuditEntry', - 'RepoRemoveTopicAuditEntry', - 'Repository', - 'RepositoryInvitation', - 'RepositoryTopic', - 'RepositoryVisibilityChangeDisableAuditEntry', - 'RepositoryVisibilityChangeEnableAuditEntry', - 'RepositoryVulnerabilityAlert', - 'ReviewDismissalAllowance', - 'ReviewDismissedEvent', - 'ReviewRequest', - 'ReviewRequestRemovedEvent', - 'ReviewRequestedEvent', - 'SavedReply', - 'SecurityAdvisory', - 'SponsorsActivity', - 'SponsorsListing', - 'SponsorsTier', - 'Sponsorship', - 'SponsorshipNewsletter', - 'Status', - 'StatusCheckRollup', - 'StatusContext', - 'SubscribedEvent', - 'Tag', - 'Team', - 'TeamAddMemberAuditEntry', - 'TeamAddRepositoryAuditEntry', - 'TeamChangeParentTeamAuditEntry', - 'TeamDiscussion', - 'TeamDiscussionComment', - 'TeamRemoveMemberAuditEntry', - 'TeamRemoveRepositoryAuditEntry', - 'Topic', - 'TransferredEvent', - 'Tree', - 'UnassignedEvent', - 'UnlabeledEvent', - 'UnlockedEvent', - 'UnmarkedAsDuplicateEvent', - 'UnpinnedEvent', - 'UnsubscribedEvent', - 'User', - 'UserBlockedEvent', - 'UserContentEdit', - 'UserStatus', - 'VerifiableDomain', - 'Workflow', - 'WorkflowRun', - ], - Assignee: ['Bot', 'Mannequin', 'Organization', 'User'], - AuditEntryActor: ['Bot', 'Organization', 'User'], - GitObject: ['Blob', 'Commit', 'Tag', 'Tree'], - Actor: [ - 'Bot', - 'EnterpriseUserAccount', - 'Mannequin', - 'Organization', - 'User', - ], - UniformResourceLocatable: [ - 'Bot', - 'CheckRun', - 'ClosedEvent', - 'Commit', - 'ConvertToDraftEvent', - 'CrossReferencedEvent', - 'Gist', - 'Issue', - 'Mannequin', - 'MergedEvent', - 'Milestone', - 'Organization', - 'PullRequest', - 'PullRequestCommit', - 'ReadyForReviewEvent', - 'Release', - 'Repository', - 'RepositoryTopic', - 'ReviewDismissedEvent', - 'TeamDiscussion', - 'TeamDiscussionComment', - 'User', - ], - BranchActorAllowanceActor: ['Team', 'User'], - RequirableByPullRequest: ['CheckRun', 'StatusContext'], - Closer: ['Commit', 'PullRequest'], - Subscribable: [ - 'Commit', - 'Discussion', - 'Issue', - 'PullRequest', - 'Repository', - 'Team', - 'TeamDiscussion', - ], - Comment: [ - 'CommitComment', - 'Discussion', - 'DiscussionComment', - 'GistComment', - 'Issue', - 'IssueComment', - 'PullRequest', - 'PullRequestReview', - 'PullRequestReviewComment', - 'TeamDiscussion', - 'TeamDiscussionComment', - ], - Deletable: [ - 'CommitComment', - 'Discussion', - 'DiscussionComment', - 'GistComment', - 'IssueComment', - 'PullRequestReview', - 'PullRequestReviewComment', - 'TeamDiscussion', - 'TeamDiscussionComment', - ], - Minimizable: [ - 'CommitComment', - 'DiscussionComment', - 'GistComment', - 'IssueComment', - 'PullRequestReviewComment', - ], - Reactable: [ - 'CommitComment', - 'Discussion', - 'DiscussionComment', - 'Issue', - 'IssueComment', - 'PullRequest', - 'PullRequestReview', - 'PullRequestReviewComment', - 'Release', - 'TeamDiscussion', - 'TeamDiscussionComment', - ], - RepositoryNode: [ - 'CommitComment', - 'CommitCommentThread', - 'Discussion', - 'DiscussionCategory', - 'Issue', - 'IssueComment', - 'PinnedDiscussion', - 'PullRequest', - 'PullRequestCommitCommentThread', - 'PullRequestReview', - 'PullRequestReviewComment', - 'RepositoryVulnerabilityAlert', - ], - Updatable: [ - 'CommitComment', - 'Discussion', - 'DiscussionComment', - 'GistComment', - 'Issue', - 'IssueComment', - 'Project', - 'ProjectNext', - 'PullRequest', - 'PullRequestReview', - 'PullRequestReviewComment', - 'TeamDiscussion', - 'TeamDiscussionComment', - ], - UpdatableComment: [ - 'CommitComment', - 'DiscussionComment', - 'GistComment', - 'Issue', - 'IssueComment', - 'PullRequest', - 'PullRequestReview', - 'PullRequestReviewComment', - 'TeamDiscussion', - 'TeamDiscussionComment', - ], - Contribution: [ - 'CreatedCommitContribution', - 'CreatedIssueContribution', - 'CreatedPullRequestContribution', - 'CreatedPullRequestReviewContribution', - 'CreatedRepositoryContribution', - 'JoinedGitHubContribution', - 'RestrictedContribution', - ], - CreatedIssueOrRestrictedContribution: [ - 'CreatedIssueContribution', - 'RestrictedContribution', - ], - CreatedPullRequestOrRestrictedContribution: [ - 'CreatedPullRequestContribution', - 'RestrictedContribution', - ], - CreatedRepositoryOrRestrictedContribution: [ - 'CreatedRepositoryContribution', - 'RestrictedContribution', - ], - DeploymentReviewer: ['Team', 'User'], - Labelable: ['Discussion', 'Issue', 'PullRequest'], - Lockable: ['Discussion', 'Issue', 'PullRequest'], - Votable: ['Discussion', 'DiscussionComment'], - EnterpriseMember: ['EnterpriseUserAccount', 'User'], - HovercardContext: [ - 'GenericHovercardContext', - 'OrganizationTeamsHovercardContext', - 'OrganizationsHovercardContext', - 'ReviewStatusHovercardContext', - 'ViewerHovercardContext', - ], - Starrable: ['Gist', 'Repository', 'Topic'], - GitSignature: ['GpgSignature', 'SmimeSignature', 'UnknownSignature'], - IpAllowListOwner: ['App', 'Enterprise', 'Organization'], - Assignable: ['Issue', 'PullRequest'], - Closable: ['Issue', 'Milestone', 'Project', 'ProjectNext', 'PullRequest'], - ProjectNextOwner: ['Issue', 'Organization', 'PullRequest', 'User'], - IssueOrPullRequest: ['Issue', 'PullRequest'], - IssueTimelineItem: [ - 'AssignedEvent', - 'ClosedEvent', - 'Commit', - 'CrossReferencedEvent', - 'DemilestonedEvent', - 'IssueComment', - 'LabeledEvent', - 'LockedEvent', - 'MilestonedEvent', - 'ReferencedEvent', - 'RenamedTitleEvent', - 'ReopenedEvent', - 'SubscribedEvent', - 'TransferredEvent', - 'UnassignedEvent', - 'UnlabeledEvent', - 'UnlockedEvent', - 'UnsubscribedEvent', - 'UserBlockedEvent', - ], - IssueTimelineItems: [ - 'AddedToProjectEvent', - 'AssignedEvent', - 'ClosedEvent', - 'CommentDeletedEvent', - 'ConnectedEvent', - 'ConvertedNoteToIssueEvent', - 'ConvertedToDiscussionEvent', - 'CrossReferencedEvent', - 'DemilestonedEvent', - 'DisconnectedEvent', - 'IssueComment', - 'LabeledEvent', - 'LockedEvent', - 'MarkedAsDuplicateEvent', - 'MentionedEvent', - 'MilestonedEvent', - 'MovedColumnsInProjectEvent', - 'PinnedEvent', - 'ReferencedEvent', - 'RemovedFromProjectEvent', - 'RenamedTitleEvent', - 'ReopenedEvent', - 'SubscribedEvent', - 'TransferredEvent', - 'UnassignedEvent', - 'UnlabeledEvent', - 'UnlockedEvent', - 'UnmarkedAsDuplicateEvent', - 'UnpinnedEvent', - 'UnsubscribedEvent', - 'UserBlockedEvent', - ], - AuditEntry: [ - 'MembersCanDeleteReposClearAuditEntry', - 'MembersCanDeleteReposDisableAuditEntry', - 'MembersCanDeleteReposEnableAuditEntry', - 'OauthApplicationCreateAuditEntry', - 'OrgAddBillingManagerAuditEntry', - 'OrgAddMemberAuditEntry', - 'OrgBlockUserAuditEntry', - 'OrgConfigDisableCollaboratorsOnlyAuditEntry', - 'OrgConfigEnableCollaboratorsOnlyAuditEntry', - 'OrgCreateAuditEntry', - 'OrgDisableOauthAppRestrictionsAuditEntry', - 'OrgDisableSamlAuditEntry', - 'OrgDisableTwoFactorRequirementAuditEntry', - 'OrgEnableOauthAppRestrictionsAuditEntry', - 'OrgEnableSamlAuditEntry', - 'OrgEnableTwoFactorRequirementAuditEntry', - 'OrgInviteMemberAuditEntry', - 'OrgInviteToBusinessAuditEntry', - 'OrgOauthAppAccessApprovedAuditEntry', - 'OrgOauthAppAccessDeniedAuditEntry', - 'OrgOauthAppAccessRequestedAuditEntry', - 'OrgRemoveBillingManagerAuditEntry', - 'OrgRemoveMemberAuditEntry', - 'OrgRemoveOutsideCollaboratorAuditEntry', - 'OrgRestoreMemberAuditEntry', - 'OrgUnblockUserAuditEntry', - 'OrgUpdateDefaultRepositoryPermissionAuditEntry', - 'OrgUpdateMemberAuditEntry', - 'OrgUpdateMemberRepositoryCreationPermissionAuditEntry', - 'OrgUpdateMemberRepositoryInvitationPermissionAuditEntry', - 'PrivateRepositoryForkingDisableAuditEntry', - 'PrivateRepositoryForkingEnableAuditEntry', - 'RepoAccessAuditEntry', - 'RepoAddMemberAuditEntry', - 'RepoAddTopicAuditEntry', - 'RepoArchivedAuditEntry', - 'RepoChangeMergeSettingAuditEntry', - 'RepoConfigDisableAnonymousGitAccessAuditEntry', - 'RepoConfigDisableCollaboratorsOnlyAuditEntry', - 'RepoConfigDisableContributorsOnlyAuditEntry', - 'RepoConfigDisableSockpuppetDisallowedAuditEntry', - 'RepoConfigEnableAnonymousGitAccessAuditEntry', - 'RepoConfigEnableCollaboratorsOnlyAuditEntry', - 'RepoConfigEnableContributorsOnlyAuditEntry', - 'RepoConfigEnableSockpuppetDisallowedAuditEntry', - 'RepoConfigLockAnonymousGitAccessAuditEntry', - 'RepoConfigUnlockAnonymousGitAccessAuditEntry', - 'RepoCreateAuditEntry', - 'RepoDestroyAuditEntry', - 'RepoRemoveMemberAuditEntry', - 'RepoRemoveTopicAuditEntry', - 'RepositoryVisibilityChangeDisableAuditEntry', - 'RepositoryVisibilityChangeEnableAuditEntry', - 'TeamAddMemberAuditEntry', - 'TeamAddRepositoryAuditEntry', - 'TeamChangeParentTeamAuditEntry', - 'TeamRemoveMemberAuditEntry', - 'TeamRemoveRepositoryAuditEntry', - ], - EnterpriseAuditEntryData: [ - 'MembersCanDeleteReposClearAuditEntry', - 'MembersCanDeleteReposDisableAuditEntry', - 'MembersCanDeleteReposEnableAuditEntry', - 'OrgInviteToBusinessAuditEntry', - 'PrivateRepositoryForkingDisableAuditEntry', - 'PrivateRepositoryForkingEnableAuditEntry', - 'RepositoryVisibilityChangeDisableAuditEntry', - 'RepositoryVisibilityChangeEnableAuditEntry', - ], - OrganizationAuditEntryData: [ - 'MembersCanDeleteReposClearAuditEntry', - 'MembersCanDeleteReposDisableAuditEntry', - 'MembersCanDeleteReposEnableAuditEntry', - 'OauthApplicationCreateAuditEntry', - 'OrgAddBillingManagerAuditEntry', - 'OrgAddMemberAuditEntry', - 'OrgBlockUserAuditEntry', - 'OrgConfigDisableCollaboratorsOnlyAuditEntry', - 'OrgConfigEnableCollaboratorsOnlyAuditEntry', - 'OrgCreateAuditEntry', - 'OrgDisableOauthAppRestrictionsAuditEntry', - 'OrgDisableSamlAuditEntry', - 'OrgDisableTwoFactorRequirementAuditEntry', - 'OrgEnableOauthAppRestrictionsAuditEntry', - 'OrgEnableSamlAuditEntry', - 'OrgEnableTwoFactorRequirementAuditEntry', - 'OrgInviteMemberAuditEntry', - 'OrgInviteToBusinessAuditEntry', - 'OrgOauthAppAccessApprovedAuditEntry', - 'OrgOauthAppAccessDeniedAuditEntry', - 'OrgOauthAppAccessRequestedAuditEntry', - 'OrgRemoveBillingManagerAuditEntry', - 'OrgRemoveMemberAuditEntry', - 'OrgRemoveOutsideCollaboratorAuditEntry', - 'OrgRestoreMemberAuditEntry', - 'OrgRestoreMemberMembershipOrganizationAuditEntryData', - 'OrgUnblockUserAuditEntry', - 'OrgUpdateDefaultRepositoryPermissionAuditEntry', - 'OrgUpdateMemberAuditEntry', - 'OrgUpdateMemberRepositoryCreationPermissionAuditEntry', - 'OrgUpdateMemberRepositoryInvitationPermissionAuditEntry', - 'PrivateRepositoryForkingDisableAuditEntry', - 'PrivateRepositoryForkingEnableAuditEntry', - 'RepoAccessAuditEntry', - 'RepoAddMemberAuditEntry', - 'RepoAddTopicAuditEntry', - 'RepoArchivedAuditEntry', - 'RepoChangeMergeSettingAuditEntry', - 'RepoConfigDisableAnonymousGitAccessAuditEntry', - 'RepoConfigDisableCollaboratorsOnlyAuditEntry', - 'RepoConfigDisableContributorsOnlyAuditEntry', - 'RepoConfigDisableSockpuppetDisallowedAuditEntry', - 'RepoConfigEnableAnonymousGitAccessAuditEntry', - 'RepoConfigEnableCollaboratorsOnlyAuditEntry', - 'RepoConfigEnableContributorsOnlyAuditEntry', - 'RepoConfigEnableSockpuppetDisallowedAuditEntry', - 'RepoConfigLockAnonymousGitAccessAuditEntry', - 'RepoConfigUnlockAnonymousGitAccessAuditEntry', - 'RepoCreateAuditEntry', - 'RepoDestroyAuditEntry', - 'RepoRemoveMemberAuditEntry', - 'RepoRemoveTopicAuditEntry', - 'RepositoryVisibilityChangeDisableAuditEntry', - 'RepositoryVisibilityChangeEnableAuditEntry', - 'TeamAddMemberAuditEntry', - 'TeamAddRepositoryAuditEntry', - 'TeamChangeParentTeamAuditEntry', - 'TeamRemoveMemberAuditEntry', - 'TeamRemoveRepositoryAuditEntry', - ], - MilestoneItem: ['Issue', 'PullRequest'], - OauthApplicationAuditEntryData: [ - 'OauthApplicationCreateAuditEntry', - 'OrgOauthAppAccessApprovedAuditEntry', - 'OrgOauthAppAccessDeniedAuditEntry', - 'OrgOauthAppAccessRequestedAuditEntry', - ], - OrgRestoreMemberAuditEntryMembership: [ - 'OrgRestoreMemberMembershipOrganizationAuditEntryData', - 'OrgRestoreMemberMembershipRepositoryAuditEntryData', - 'OrgRestoreMemberMembershipTeamAuditEntryData', - ], - RepositoryAuditEntryData: [ - 'OrgRestoreMemberMembershipRepositoryAuditEntryData', - 'PrivateRepositoryForkingDisableAuditEntry', - 'PrivateRepositoryForkingEnableAuditEntry', - 'RepoAccessAuditEntry', - 'RepoAddMemberAuditEntry', - 'RepoAddTopicAuditEntry', - 'RepoArchivedAuditEntry', - 'RepoChangeMergeSettingAuditEntry', - 'RepoConfigDisableAnonymousGitAccessAuditEntry', - 'RepoConfigDisableCollaboratorsOnlyAuditEntry', - 'RepoConfigDisableContributorsOnlyAuditEntry', - 'RepoConfigDisableSockpuppetDisallowedAuditEntry', - 'RepoConfigEnableAnonymousGitAccessAuditEntry', - 'RepoConfigEnableCollaboratorsOnlyAuditEntry', - 'RepoConfigEnableContributorsOnlyAuditEntry', - 'RepoConfigEnableSockpuppetDisallowedAuditEntry', - 'RepoConfigLockAnonymousGitAccessAuditEntry', - 'RepoConfigUnlockAnonymousGitAccessAuditEntry', - 'RepoCreateAuditEntry', - 'RepoDestroyAuditEntry', - 'RepoRemoveMemberAuditEntry', - 'RepoRemoveTopicAuditEntry', - 'TeamAddRepositoryAuditEntry', - 'TeamRemoveRepositoryAuditEntry', - ], - TeamAuditEntryData: [ - 'OrgRestoreMemberMembershipTeamAuditEntryData', - 'TeamAddMemberAuditEntry', - 'TeamAddRepositoryAuditEntry', - 'TeamChangeParentTeamAuditEntry', - 'TeamRemoveMemberAuditEntry', - 'TeamRemoveRepositoryAuditEntry', - ], - MemberStatusable: ['Organization', 'Team'], - PackageOwner: ['Organization', 'Repository', 'User'], - ProfileOwner: ['Organization', 'User'], - ProjectOwner: ['Organization', 'Repository', 'User'], - RepositoryDiscussionAuthor: ['Organization', 'User'], - RepositoryDiscussionCommentAuthor: ['Organization', 'User'], - RepositoryOwner: ['Organization', 'User'], - Sponsorable: ['Organization', 'User'], - OrganizationAuditEntry: [ - 'MembersCanDeleteReposClearAuditEntry', - 'MembersCanDeleteReposDisableAuditEntry', - 'MembersCanDeleteReposEnableAuditEntry', - 'OauthApplicationCreateAuditEntry', - 'OrgAddBillingManagerAuditEntry', - 'OrgAddMemberAuditEntry', - 'OrgBlockUserAuditEntry', - 'OrgConfigDisableCollaboratorsOnlyAuditEntry', - 'OrgConfigEnableCollaboratorsOnlyAuditEntry', - 'OrgCreateAuditEntry', - 'OrgDisableOauthAppRestrictionsAuditEntry', - 'OrgDisableSamlAuditEntry', - 'OrgDisableTwoFactorRequirementAuditEntry', - 'OrgEnableOauthAppRestrictionsAuditEntry', - 'OrgEnableSamlAuditEntry', - 'OrgEnableTwoFactorRequirementAuditEntry', - 'OrgInviteMemberAuditEntry', - 'OrgInviteToBusinessAuditEntry', - 'OrgOauthAppAccessApprovedAuditEntry', - 'OrgOauthAppAccessDeniedAuditEntry', - 'OrgOauthAppAccessRequestedAuditEntry', - 'OrgRemoveBillingManagerAuditEntry', - 'OrgRemoveMemberAuditEntry', - 'OrgRemoveOutsideCollaboratorAuditEntry', - 'OrgRestoreMemberAuditEntry', - 'OrgUnblockUserAuditEntry', - 'OrgUpdateDefaultRepositoryPermissionAuditEntry', - 'OrgUpdateMemberAuditEntry', - 'OrgUpdateMemberRepositoryCreationPermissionAuditEntry', - 'OrgUpdateMemberRepositoryInvitationPermissionAuditEntry', - 'PrivateRepositoryForkingDisableAuditEntry', - 'PrivateRepositoryForkingEnableAuditEntry', - 'RepoAccessAuditEntry', - 'RepoAddMemberAuditEntry', - 'RepoAddTopicAuditEntry', - 'RepoArchivedAuditEntry', - 'RepoChangeMergeSettingAuditEntry', - 'RepoConfigDisableAnonymousGitAccessAuditEntry', - 'RepoConfigDisableCollaboratorsOnlyAuditEntry', - 'RepoConfigDisableContributorsOnlyAuditEntry', - 'RepoConfigDisableSockpuppetDisallowedAuditEntry', - 'RepoConfigEnableAnonymousGitAccessAuditEntry', - 'RepoConfigEnableCollaboratorsOnlyAuditEntry', - 'RepoConfigEnableContributorsOnlyAuditEntry', - 'RepoConfigEnableSockpuppetDisallowedAuditEntry', - 'RepoConfigLockAnonymousGitAccessAuditEntry', - 'RepoConfigUnlockAnonymousGitAccessAuditEntry', - 'RepoCreateAuditEntry', - 'RepoDestroyAuditEntry', - 'RepoRemoveMemberAuditEntry', - 'RepoRemoveTopicAuditEntry', - 'RepositoryVisibilityChangeDisableAuditEntry', - 'RepositoryVisibilityChangeEnableAuditEntry', - 'TeamAddMemberAuditEntry', - 'TeamAddRepositoryAuditEntry', - 'TeamChangeParentTeamAuditEntry', - 'TeamRemoveMemberAuditEntry', - 'TeamRemoveRepositoryAuditEntry', - ], - PermissionGranter: ['Organization', 'Repository', 'Team'], - PinnableItem: ['Gist', 'Repository'], - ProjectCardItem: ['Issue', 'PullRequest'], - ProjectNextItemContent: ['Issue', 'PullRequest'], - PullRequestTimelineItem: [ - 'AssignedEvent', - 'BaseRefDeletedEvent', - 'BaseRefForcePushedEvent', - 'ClosedEvent', - 'Commit', - 'CommitCommentThread', - 'CrossReferencedEvent', - 'DemilestonedEvent', - 'DeployedEvent', - 'DeploymentEnvironmentChangedEvent', - 'HeadRefDeletedEvent', - 'HeadRefForcePushedEvent', - 'HeadRefRestoredEvent', - 'IssueComment', - 'LabeledEvent', - 'LockedEvent', - 'MergedEvent', - 'MilestonedEvent', - 'PullRequestReview', - 'PullRequestReviewComment', - 'PullRequestReviewThread', - 'ReferencedEvent', - 'RenamedTitleEvent', - 'ReopenedEvent', - 'ReviewDismissedEvent', - 'ReviewRequestRemovedEvent', - 'ReviewRequestedEvent', - 'SubscribedEvent', - 'UnassignedEvent', - 'UnlabeledEvent', - 'UnlockedEvent', - 'UnsubscribedEvent', - 'UserBlockedEvent', - ], - PullRequestTimelineItems: [ - 'AddedToProjectEvent', - 'AssignedEvent', - 'AutoMergeDisabledEvent', - 'AutoMergeEnabledEvent', - 'AutoRebaseEnabledEvent', - 'AutoSquashEnabledEvent', - 'AutomaticBaseChangeFailedEvent', - 'AutomaticBaseChangeSucceededEvent', - 'BaseRefChangedEvent', - 'BaseRefDeletedEvent', - 'BaseRefForcePushedEvent', - 'ClosedEvent', - 'CommentDeletedEvent', - 'ConnectedEvent', - 'ConvertToDraftEvent', - 'ConvertedNoteToIssueEvent', - 'ConvertedToDiscussionEvent', - 'CrossReferencedEvent', - 'DemilestonedEvent', - 'DeployedEvent', - 'DeploymentEnvironmentChangedEvent', - 'DisconnectedEvent', - 'HeadRefDeletedEvent', - 'HeadRefForcePushedEvent', - 'HeadRefRestoredEvent', - 'IssueComment', - 'LabeledEvent', - 'LockedEvent', - 'MarkedAsDuplicateEvent', - 'MentionedEvent', - 'MergedEvent', - 'MilestonedEvent', - 'MovedColumnsInProjectEvent', - 'PinnedEvent', - 'PullRequestCommit', - 'PullRequestCommitCommentThread', - 'PullRequestReview', - 'PullRequestReviewThread', - 'PullRequestRevisionMarker', - 'ReadyForReviewEvent', - 'ReferencedEvent', - 'RemovedFromProjectEvent', - 'RenamedTitleEvent', - 'ReopenedEvent', - 'ReviewDismissedEvent', - 'ReviewRequestRemovedEvent', - 'ReviewRequestedEvent', - 'SubscribedEvent', - 'TransferredEvent', - 'UnassignedEvent', - 'UnlabeledEvent', - 'UnlockedEvent', - 'UnmarkedAsDuplicateEvent', - 'UnpinnedEvent', - 'UnsubscribedEvent', - 'UserBlockedEvent', - ], - PushAllowanceActor: ['App', 'Team', 'User'], - Reactor: ['Bot', 'Mannequin', 'Organization', 'User'], - ReferencedSubject: ['Issue', 'PullRequest'], - RenamedTitleSubject: ['Issue', 'PullRequest'], - TopicAuditEntryData: [ - 'RepoAddTopicAuditEntry', - 'RepoRemoveTopicAuditEntry', - ], - RepositoryInfo: ['Repository'], - RequestedReviewer: ['Mannequin', 'Team', 'User'], - ReviewDismissalAllowanceActor: ['Team', 'User'], - SearchResultItem: [ - 'App', - 'Discussion', - 'Issue', - 'MarketplaceListing', - 'Organization', - 'PullRequest', - 'Repository', - 'User', - ], - Sponsor: ['Organization', 'User'], - SponsorableItem: ['Organization', 'User'], - StatusCheckRollupContext: ['CheckRun', 'StatusContext'], - VerifiableDomainOwner: ['Enterprise', 'Organization'], - }, -} as const; - -/** - * Autogenerated return type of AcceptEnterpriseAdministratorInvitation - */ -export interface AcceptEnterpriseAdministratorInvitationPayload { - __typename?: 'AcceptEnterpriseAdministratorInvitationPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The invitation that was accepted. - */ - invitation?: Maybe; - /** - * A message confirming the result of accepting an administrator invitation. - */ - message?: Maybe; -} - -/** - * Autogenerated return type of AcceptTopicSuggestion - */ -export interface AcceptTopicSuggestionPayload { - __typename?: 'AcceptTopicSuggestionPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The accepted topic. - */ - topic?: Maybe; -} - -/** - * Represents an object which can take actions on GitHub. Typically a User or Bot. - */ -export interface Actor { - __typename?: - | 'Bot' - | 'EnterpriseUserAccount' - | 'Mannequin' - | 'Organization' - | 'User'; - /** - * A URL pointing to the actor's public avatar. - */ - avatarUrl: (args?: { - /** - * The size of the resulting square image. - */ - size?: Maybe; - }) => ScalarsEnums['URI']; - /** - * The username of the actor. - */ - login: ScalarsEnums['String']; - /** - * The HTTP path for this actor. - */ - resourcePath: ScalarsEnums['URI']; - /** - * The HTTP URL for this actor. - */ - url: ScalarsEnums['URI']; - $on: $Actor; -} - -/** - * Location information for an actor - */ -export interface ActorLocation { - __typename?: 'ActorLocation'; - /** - * City - */ - city?: Maybe; - /** - * Country name - */ - country?: Maybe; - /** - * Country code - */ - countryCode?: Maybe; - /** - * Region name - */ - region?: Maybe; - /** - * Region or state code - */ - regionCode?: Maybe; -} - -/** - * Autogenerated return type of AddAssigneesToAssignable - */ -export interface AddAssigneesToAssignablePayload { - __typename?: 'AddAssigneesToAssignablePayload'; - /** - * The item that was assigned. - */ - assignable?: Maybe; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; -} - -/** - * Autogenerated return type of AddComment - */ -export interface AddCommentPayload { - __typename?: 'AddCommentPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The edge from the subject's comment connection. - */ - commentEdge?: Maybe; - /** - * The subject - */ - subject?: Maybe; - /** - * The edge from the subject's timeline connection. - */ - timelineEdge?: Maybe; -} - -/** - * Autogenerated return type of AddDiscussionComment - */ -export interface AddDiscussionCommentPayload { - __typename?: 'AddDiscussionCommentPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The newly created discussion comment. - */ - comment?: Maybe; -} - -/** - * Autogenerated return type of AddEnterpriseSupportEntitlement - */ -export interface AddEnterpriseSupportEntitlementPayload { - __typename?: 'AddEnterpriseSupportEntitlementPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * A message confirming the result of adding the support entitlement. - */ - message?: Maybe; -} - -/** - * Autogenerated return type of AddLabelsToLabelable - */ -export interface AddLabelsToLabelablePayload { - __typename?: 'AddLabelsToLabelablePayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The item that was labeled. - */ - labelable?: Maybe; -} - -/** - * Autogenerated return type of AddProjectCard - */ -export interface AddProjectCardPayload { - __typename?: 'AddProjectCardPayload'; - /** - * The edge from the ProjectColumn's card connection. - */ - cardEdge?: Maybe; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The ProjectColumn - */ - projectColumn?: Maybe; -} - -/** - * Autogenerated return type of AddProjectColumn - */ -export interface AddProjectColumnPayload { - __typename?: 'AddProjectColumnPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The edge from the project's column connection. - */ - columnEdge?: Maybe; - /** - * The project - */ - project?: Maybe; -} - -/** - * Autogenerated return type of AddProjectNextItem - */ -export interface AddProjectNextItemPayload { - __typename?: 'AddProjectNextItemPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The item added to the project. - */ - projectNextItem?: Maybe; -} - -/** - * Autogenerated return type of AddPullRequestReviewComment - */ -export interface AddPullRequestReviewCommentPayload { - __typename?: 'AddPullRequestReviewCommentPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The newly created comment. - */ - comment?: Maybe; - /** - * The edge from the review's comment connection. - */ - commentEdge?: Maybe; -} - -/** - * Autogenerated return type of AddPullRequestReview - */ -export interface AddPullRequestReviewPayload { - __typename?: 'AddPullRequestReviewPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The newly created pull request review. - */ - pullRequestReview?: Maybe; - /** - * The edge from the pull request's review connection. - */ - reviewEdge?: Maybe; -} - -/** - * Autogenerated return type of AddPullRequestReviewThread - */ -export interface AddPullRequestReviewThreadPayload { - __typename?: 'AddPullRequestReviewThreadPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The newly created thread. - */ - thread?: Maybe; -} - -/** - * Autogenerated return type of AddReaction - */ -export interface AddReactionPayload { - __typename?: 'AddReactionPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The reaction object. - */ - reaction?: Maybe; - /** - * The reactable subject. - */ - subject?: Maybe; -} - -/** - * Autogenerated return type of AddStar - */ -export interface AddStarPayload { - __typename?: 'AddStarPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The starrable. - */ - starrable?: Maybe; -} - -/** - * Autogenerated return type of AddUpvote - */ -export interface AddUpvotePayload { - __typename?: 'AddUpvotePayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The votable subject. - */ - subject?: Maybe; -} - -/** - * Autogenerated return type of AddVerifiableDomain - */ -export interface AddVerifiableDomainPayload { - __typename?: 'AddVerifiableDomainPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The verifiable domain that was added. - */ - domain?: Maybe; -} - -/** - * Represents a 'added_to_project' event on a given issue or pull request. - */ -export interface AddedToProjectEvent { - __typename?: 'AddedToProjectEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * Identifies the primary key from the database. - */ - databaseId?: Maybe; - id: ScalarsEnums['ID']; -} - -/** - * A GitHub App. - */ -export interface App { - __typename?: 'App'; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * Identifies the primary key from the database. - */ - databaseId?: Maybe; - /** - * The description of the app. - */ - description?: Maybe; - id: ScalarsEnums['ID']; - /** - * The IP addresses of the app. - */ - ipAllowListEntries: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for IP allow list entries returned. - * @defaultValue `{"field":"ALLOW_LIST_VALUE","direction":"ASC"}` - */ - orderBy?: Maybe; - }) => IpAllowListEntryConnection; - /** - * The hex color code, without the leading '#', for the logo background. - */ - logoBackgroundColor: ScalarsEnums['String']; - /** - * A URL pointing to the app's logo. - */ - logoUrl: (args?: { - /** - * The size of the resulting image. - */ - size?: Maybe; - }) => ScalarsEnums['URI']; - /** - * The name of the app. - */ - name: ScalarsEnums['String']; - /** - * A slug based on the name of the app for use in URLs. - */ - slug: ScalarsEnums['String']; - /** - * Identifies the date and time when the object was last updated. - */ - updatedAt: ScalarsEnums['DateTime']; - /** - * The URL to the app's homepage. - */ - url: ScalarsEnums['URI']; -} - -/** - * Autogenerated return type of ApproveDeployments - */ -export interface ApproveDeploymentsPayload { - __typename?: 'ApproveDeploymentsPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The affected deployments. - */ - deployments?: Maybe>; -} - -/** - * Autogenerated return type of ApproveVerifiableDomain - */ -export interface ApproveVerifiableDomainPayload { - __typename?: 'ApproveVerifiableDomainPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The verifiable domain that was approved. - */ - domain?: Maybe; -} - -/** - * Autogenerated return type of ArchiveRepository - */ -export interface ArchiveRepositoryPayload { - __typename?: 'ArchiveRepositoryPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The repository that was marked as archived. - */ - repository?: Maybe; -} - -/** - * An object that can have users assigned to it. - */ -export interface Assignable { - __typename?: 'Issue' | 'PullRequest'; - /** - * A list of Users assigned to this object. - */ - assignees: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => UserConnection; - $on: $Assignable; -} - -/** - * Represents an 'assigned' event on any assignable object. - */ -export interface AssignedEvent { - __typename?: 'AssignedEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the assignable associated with the event. - */ - assignable: Assignable; - /** - * Identifies the user or mannequin that was assigned. - */ - assignee?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - id: ScalarsEnums['ID']; - /** - * Identifies the user who was assigned. - * @deprecated Assignees can now be mannequins. Use the `assignee` field instead. Removal on 2020-01-01 UTC. - */ - user?: Maybe; -} - -/** - * Types that can be assigned to issues. - */ -export interface Assignee { - __typename?: 'Bot' | 'Mannequin' | 'Organization' | 'User'; - $on: $Assignee; -} - -/** - * An entry in the audit log. - */ -export interface AuditEntry { - __typename?: - | 'MembersCanDeleteReposClearAuditEntry' - | 'MembersCanDeleteReposDisableAuditEntry' - | 'MembersCanDeleteReposEnableAuditEntry' - | 'OauthApplicationCreateAuditEntry' - | 'OrgAddBillingManagerAuditEntry' - | 'OrgAddMemberAuditEntry' - | 'OrgBlockUserAuditEntry' - | 'OrgConfigDisableCollaboratorsOnlyAuditEntry' - | 'OrgConfigEnableCollaboratorsOnlyAuditEntry' - | 'OrgCreateAuditEntry' - | 'OrgDisableOauthAppRestrictionsAuditEntry' - | 'OrgDisableSamlAuditEntry' - | 'OrgDisableTwoFactorRequirementAuditEntry' - | 'OrgEnableOauthAppRestrictionsAuditEntry' - | 'OrgEnableSamlAuditEntry' - | 'OrgEnableTwoFactorRequirementAuditEntry' - | 'OrgInviteMemberAuditEntry' - | 'OrgInviteToBusinessAuditEntry' - | 'OrgOauthAppAccessApprovedAuditEntry' - | 'OrgOauthAppAccessDeniedAuditEntry' - | 'OrgOauthAppAccessRequestedAuditEntry' - | 'OrgRemoveBillingManagerAuditEntry' - | 'OrgRemoveMemberAuditEntry' - | 'OrgRemoveOutsideCollaboratorAuditEntry' - | 'OrgRestoreMemberAuditEntry' - | 'OrgUnblockUserAuditEntry' - | 'OrgUpdateDefaultRepositoryPermissionAuditEntry' - | 'OrgUpdateMemberAuditEntry' - | 'OrgUpdateMemberRepositoryCreationPermissionAuditEntry' - | 'OrgUpdateMemberRepositoryInvitationPermissionAuditEntry' - | 'PrivateRepositoryForkingDisableAuditEntry' - | 'PrivateRepositoryForkingEnableAuditEntry' - | 'RepoAccessAuditEntry' - | 'RepoAddMemberAuditEntry' - | 'RepoAddTopicAuditEntry' - | 'RepoArchivedAuditEntry' - | 'RepoChangeMergeSettingAuditEntry' - | 'RepoConfigDisableAnonymousGitAccessAuditEntry' - | 'RepoConfigDisableCollaboratorsOnlyAuditEntry' - | 'RepoConfigDisableContributorsOnlyAuditEntry' - | 'RepoConfigDisableSockpuppetDisallowedAuditEntry' - | 'RepoConfigEnableAnonymousGitAccessAuditEntry' - | 'RepoConfigEnableCollaboratorsOnlyAuditEntry' - | 'RepoConfigEnableContributorsOnlyAuditEntry' - | 'RepoConfigEnableSockpuppetDisallowedAuditEntry' - | 'RepoConfigLockAnonymousGitAccessAuditEntry' - | 'RepoConfigUnlockAnonymousGitAccessAuditEntry' - | 'RepoCreateAuditEntry' - | 'RepoDestroyAuditEntry' - | 'RepoRemoveMemberAuditEntry' - | 'RepoRemoveTopicAuditEntry' - | 'RepositoryVisibilityChangeDisableAuditEntry' - | 'RepositoryVisibilityChangeEnableAuditEntry' - | 'TeamAddMemberAuditEntry' - | 'TeamAddRepositoryAuditEntry' - | 'TeamChangeParentTeamAuditEntry' - | 'TeamRemoveMemberAuditEntry' - | 'TeamRemoveRepositoryAuditEntry'; - /** - * The action name - */ - action: ScalarsEnums['String']; - /** - * The user who initiated the action - */ - actor?: Maybe; - /** - * The IP address of the actor - */ - actorIp?: Maybe; - /** - * A readable representation of the actor's location - */ - actorLocation?: Maybe; - /** - * The username of the user who initiated the action - */ - actorLogin?: Maybe; - /** - * The HTTP path for the actor. - */ - actorResourcePath?: Maybe; - /** - * The HTTP URL for the actor. - */ - actorUrl?: Maybe; - /** - * The time the action was initiated - */ - createdAt: ScalarsEnums['PreciseDateTime']; - /** - * The corresponding operation type for the action - */ - operationType?: Maybe; - /** - * The user affected by the action - */ - user?: Maybe; - /** - * For actions involving two users, the actor is the initiator and the user is the affected user. - */ - userLogin?: Maybe; - /** - * The HTTP path for the user. - */ - userResourcePath?: Maybe; - /** - * The HTTP URL for the user. - */ - userUrl?: Maybe; - $on: $AuditEntry; -} - -/** - * Types that can initiate an audit log event. - */ -export interface AuditEntryActor { - __typename?: 'Bot' | 'Organization' | 'User'; - $on: $AuditEntryActor; -} - -/** - * Represents a 'auto_merge_disabled' event on a given pull request. - */ -export interface AutoMergeDisabledEvent { - __typename?: 'AutoMergeDisabledEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * The user who disabled auto-merge for this Pull Request - */ - disabler?: Maybe; - id: ScalarsEnums['ID']; - /** - * PullRequest referenced by event - */ - pullRequest?: Maybe; - /** - * The reason auto-merge was disabled - */ - reason?: Maybe; - /** - * The reason_code relating to why auto-merge was disabled - */ - reasonCode?: Maybe; -} - -/** - * Represents a 'auto_merge_enabled' event on a given pull request. - */ -export interface AutoMergeEnabledEvent { - __typename?: 'AutoMergeEnabledEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * The user who enabled auto-merge for this Pull Request - */ - enabler?: Maybe; - id: ScalarsEnums['ID']; - /** - * PullRequest referenced by event. - */ - pullRequest?: Maybe; -} - -/** - * Represents an auto-merge request for a pull request - */ -export interface AutoMergeRequest { - __typename?: 'AutoMergeRequest'; - /** - * The email address of the author of this auto-merge request. - */ - authorEmail?: Maybe; - /** - * The commit message of the auto-merge request. - */ - commitBody?: Maybe; - /** - * The commit title of the auto-merge request. - */ - commitHeadline?: Maybe; - /** - * When was this auto-merge request was enabled. - */ - enabledAt?: Maybe; - /** - * The actor who created the auto-merge request. - */ - enabledBy?: Maybe; - /** - * The merge method of the auto-merge request. - */ - mergeMethod: ScalarsEnums['PullRequestMergeMethod']; - /** - * The pull request that this auto-merge request is set against. - */ - pullRequest: PullRequest; -} - -/** - * Represents a 'auto_rebase_enabled' event on a given pull request. - */ -export interface AutoRebaseEnabledEvent { - __typename?: 'AutoRebaseEnabledEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * The user who enabled auto-merge (rebase) for this Pull Request - */ - enabler?: Maybe; - id: ScalarsEnums['ID']; - /** - * PullRequest referenced by event. - */ - pullRequest?: Maybe; -} - -/** - * Represents a 'auto_squash_enabled' event on a given pull request. - */ -export interface AutoSquashEnabledEvent { - __typename?: 'AutoSquashEnabledEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * The user who enabled auto-merge (squash) for this Pull Request - */ - enabler?: Maybe; - id: ScalarsEnums['ID']; - /** - * PullRequest referenced by event. - */ - pullRequest?: Maybe; -} - -/** - * Represents a 'automatic_base_change_failed' event on a given pull request. - */ -export interface AutomaticBaseChangeFailedEvent { - __typename?: 'AutomaticBaseChangeFailedEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - id: ScalarsEnums['ID']; - /** - * The new base for this PR - */ - newBase: ScalarsEnums['String']; - /** - * The old base for this PR - */ - oldBase: ScalarsEnums['String']; - /** - * PullRequest referenced by event. - */ - pullRequest: PullRequest; -} - -/** - * Represents a 'automatic_base_change_succeeded' event on a given pull request. - */ -export interface AutomaticBaseChangeSucceededEvent { - __typename?: 'AutomaticBaseChangeSucceededEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - id: ScalarsEnums['ID']; - /** - * The new base for this PR - */ - newBase: ScalarsEnums['String']; - /** - * The old base for this PR - */ - oldBase: ScalarsEnums['String']; - /** - * PullRequest referenced by event. - */ - pullRequest: PullRequest; -} - -/** - * Represents a 'base_ref_changed' event on a given issue or pull request. - */ -export interface BaseRefChangedEvent { - __typename?: 'BaseRefChangedEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * Identifies the name of the base ref for the pull request after it was changed. - */ - currentRefName: ScalarsEnums['String']; - /** - * Identifies the primary key from the database. - */ - databaseId?: Maybe; - id: ScalarsEnums['ID']; - /** - * Identifies the name of the base ref for the pull request before it was changed. - */ - previousRefName: ScalarsEnums['String']; - /** - * PullRequest referenced by event. - */ - pullRequest: PullRequest; -} - -/** - * Represents a 'base_ref_deleted' event on a given pull request. - */ -export interface BaseRefDeletedEvent { - __typename?: 'BaseRefDeletedEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the name of the Ref associated with the `base_ref_deleted` event. - */ - baseRefName?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - id: ScalarsEnums['ID']; - /** - * PullRequest referenced by event. - */ - pullRequest?: Maybe; -} - -/** - * Represents a 'base_ref_force_pushed' event on a given pull request. - */ -export interface BaseRefForcePushedEvent { - __typename?: 'BaseRefForcePushedEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the after commit SHA for the 'base_ref_force_pushed' event. - */ - afterCommit?: Maybe; - /** - * Identifies the before commit SHA for the 'base_ref_force_pushed' event. - */ - beforeCommit?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - id: ScalarsEnums['ID']; - /** - * PullRequest referenced by event. - */ - pullRequest: PullRequest; - /** - * Identifies the fully qualified ref name for the 'base_ref_force_pushed' event. - */ - ref?: Maybe; -} - -/** - * Represents a Git blame. - */ -export interface Blame { - __typename?: 'Blame'; - /** - * The list of ranges from a Git blame. - */ - ranges: Array; -} - -/** - * Represents a range of information from a Git blame. - */ -export interface BlameRange { - __typename?: 'BlameRange'; - /** - * Identifies the recency of the change, from 1 (new) to 10 (old). This is calculated as a 2-quantile and determines the length of distance between the median age of all the changes in the file and the recency of the current range's change. - */ - age: ScalarsEnums['Int']; - /** - * Identifies the line author - */ - commit: Commit; - /** - * The ending line for the range - */ - endingLine: ScalarsEnums['Int']; - /** - * The starting line for the range - */ - startingLine: ScalarsEnums['Int']; -} - -/** - * Represents a Git blob. - */ -export interface Blob { - __typename?: 'Blob'; - /** - * An abbreviated version of the Git object ID - */ - abbreviatedOid: ScalarsEnums['String']; - /** - * Byte size of Blob object - */ - byteSize: ScalarsEnums['Int']; - /** - * The HTTP path for this Git object - */ - commitResourcePath: ScalarsEnums['URI']; - /** - * The HTTP URL for this Git object - */ - commitUrl: ScalarsEnums['URI']; - id: ScalarsEnums['ID']; - /** - * Indicates whether the Blob is binary or text. Returns null if unable to determine the encoding. - */ - isBinary?: Maybe; - /** - * Indicates whether the contents is truncated - */ - isTruncated: ScalarsEnums['Boolean']; - /** - * The Git object ID - */ - oid: ScalarsEnums['GitObjectID']; - /** - * The Repository the Git object belongs to - */ - repository: Repository; - /** - * UTF8 text data or null if the Blob is binary - */ - text?: Maybe; -} - -/** - * A special type of user which takes actions on behalf of GitHub Apps. - */ -export interface Bot { - __typename?: 'Bot'; - /** - * A URL pointing to the GitHub App's public avatar. - */ - avatarUrl: (args?: { - /** - * The size of the resulting square image. - */ - size?: Maybe; - }) => ScalarsEnums['URI']; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * Identifies the primary key from the database. - */ - databaseId?: Maybe; - id: ScalarsEnums['ID']; - /** - * The username of the actor. - */ - login: ScalarsEnums['String']; - /** - * The HTTP path for this bot - */ - resourcePath: ScalarsEnums['URI']; - /** - * Identifies the date and time when the object was last updated. - */ - updatedAt: ScalarsEnums['DateTime']; - /** - * The HTTP URL for this bot - */ - url: ScalarsEnums['URI']; -} - -/** - * Types which can be actors for `BranchActorAllowance` objects. - */ -export interface BranchActorAllowanceActor { - __typename?: 'Team' | 'User'; - $on: $BranchActorAllowanceActor; -} - -/** - * A branch protection rule. - */ -export interface BranchProtectionRule { - __typename?: 'BranchProtectionRule'; - /** - * Can this branch be deleted. - */ - allowsDeletions: ScalarsEnums['Boolean']; - /** - * Are force pushes allowed on this branch. - */ - allowsForcePushes: ScalarsEnums['Boolean']; - /** - * A list of conflicts matching branches protection rule and other branch protection rules - */ - branchProtectionRuleConflicts: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => BranchProtectionRuleConflictConnection; - /** - * A list of actors able to force push for this branch protection rule. - */ - bypassForcePushAllowances: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => BypassForcePushAllowanceConnection; - /** - * A list of actors able to bypass PRs for this branch protection rule. - */ - bypassPullRequestAllowances: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => BypassPullRequestAllowanceConnection; - /** - * The actor who created this branch protection rule. - */ - creator?: Maybe; - /** - * Identifies the primary key from the database. - */ - databaseId?: Maybe; - /** - * Will new commits pushed to matching branches dismiss pull request review approvals. - */ - dismissesStaleReviews: ScalarsEnums['Boolean']; - id: ScalarsEnums['ID']; - /** - * Can admins overwrite branch protection. - */ - isAdminEnforced: ScalarsEnums['Boolean']; - /** - * Repository refs that are protected by this rule - */ - matchingRefs: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Filters refs with query on name - */ - query?: Maybe; - }) => RefConnection; - /** - * Identifies the protection rule pattern. - */ - pattern: ScalarsEnums['String']; - /** - * A list push allowances for this branch protection rule. - */ - pushAllowances: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => PushAllowanceConnection; - /** - * The repository associated with this branch protection rule. - */ - repository?: Maybe; - /** - * Number of approving reviews required to update matching branches. - */ - requiredApprovingReviewCount?: Maybe; - /** - * List of required status check contexts that must pass for commits to be accepted to matching branches. - */ - requiredStatusCheckContexts?: Maybe>>; - /** - * List of required status checks that must pass for commits to be accepted to matching branches. - */ - requiredStatusChecks?: Maybe>; - /** - * Are approving reviews required to update matching branches. - */ - requiresApprovingReviews: ScalarsEnums['Boolean']; - /** - * Are reviews from code owners required to update matching branches. - */ - requiresCodeOwnerReviews: ScalarsEnums['Boolean']; - /** - * Are commits required to be signed. - */ - requiresCommitSignatures: ScalarsEnums['Boolean']; - /** - * Are conversations required to be resolved before merging. - */ - requiresConversationResolution: ScalarsEnums['Boolean']; - /** - * Are merge commits prohibited from being pushed to this branch. - */ - requiresLinearHistory: ScalarsEnums['Boolean']; - /** - * Are status checks required to update matching branches. - */ - requiresStatusChecks: ScalarsEnums['Boolean']; - /** - * Are branches required to be up to date before merging. - */ - requiresStrictStatusChecks: ScalarsEnums['Boolean']; - /** - * Is pushing to matching branches restricted. - */ - restrictsPushes: ScalarsEnums['Boolean']; - /** - * Is dismissal of pull request reviews restricted. - */ - restrictsReviewDismissals: ScalarsEnums['Boolean']; - /** - * A list review dismissal allowances for this branch protection rule. - */ - reviewDismissalAllowances: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => ReviewDismissalAllowanceConnection; -} - -/** - * A conflict between two branch protection rules. - */ -export interface BranchProtectionRuleConflict { - __typename?: 'BranchProtectionRuleConflict'; - /** - * Identifies the branch protection rule. - */ - branchProtectionRule?: Maybe; - /** - * Identifies the conflicting branch protection rule. - */ - conflictingBranchProtectionRule?: Maybe; - /** - * Identifies the branch ref that has conflicting rules - */ - ref?: Maybe; -} - -/** - * The connection type for BranchProtectionRuleConflict. - */ -export interface BranchProtectionRuleConflictConnection { - __typename?: 'BranchProtectionRuleConflictConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface BranchProtectionRuleConflictEdge { - __typename?: 'BranchProtectionRuleConflictEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * The connection type for BranchProtectionRule. - */ -export interface BranchProtectionRuleConnection { - __typename?: 'BranchProtectionRuleConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface BranchProtectionRuleEdge { - __typename?: 'BranchProtectionRuleEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * A team or user who has the ability to bypass a force push requirement on a protected branch. - */ -export interface BypassForcePushAllowance { - __typename?: 'BypassForcePushAllowance'; - /** - * The actor that can dismiss. - */ - actor?: Maybe; - /** - * Identifies the branch protection rule associated with the allowed user or team. - */ - branchProtectionRule?: Maybe; - id: ScalarsEnums['ID']; -} - -/** - * The connection type for BypassForcePushAllowance. - */ -export interface BypassForcePushAllowanceConnection { - __typename?: 'BypassForcePushAllowanceConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface BypassForcePushAllowanceEdge { - __typename?: 'BypassForcePushAllowanceEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * A team or user who has the ability to bypass a pull request requirement on a protected branch. - */ -export interface BypassPullRequestAllowance { - __typename?: 'BypassPullRequestAllowance'; - /** - * The actor that can dismiss. - */ - actor?: Maybe; - /** - * Identifies the branch protection rule associated with the allowed user or team. - */ - branchProtectionRule?: Maybe; - id: ScalarsEnums['ID']; -} - -/** - * The connection type for BypassPullRequestAllowance. - */ -export interface BypassPullRequestAllowanceConnection { - __typename?: 'BypassPullRequestAllowanceConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface BypassPullRequestAllowanceEdge { - __typename?: 'BypassPullRequestAllowanceEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * The Common Vulnerability Scoring System - */ -export interface CVSS { - __typename?: 'CVSS'; - /** - * The CVSS score associated with this advisory - */ - score: ScalarsEnums['Float']; - /** - * The CVSS vector string associated with this advisory - */ - vectorString?: Maybe; -} - -/** - * A common weakness enumeration - */ -export interface CWE { - __typename?: 'CWE'; - /** - * The id of the CWE - */ - cweId: ScalarsEnums['String']; - /** - * A detailed description of this CWE - */ - description: ScalarsEnums['String']; - id: ScalarsEnums['ID']; - /** - * The name of this CWE - */ - name: ScalarsEnums['String']; -} - -/** - * The connection type for CWE. - */ -export interface CWEConnection { - __typename?: 'CWEConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface CWEEdge { - __typename?: 'CWEEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * Autogenerated return type of CancelEnterpriseAdminInvitation - */ -export interface CancelEnterpriseAdminInvitationPayload { - __typename?: 'CancelEnterpriseAdminInvitationPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The invitation that was canceled. - */ - invitation?: Maybe; - /** - * A message confirming the result of canceling an administrator invitation. - */ - message?: Maybe; -} - -/** - * Autogenerated return type of CancelSponsorship - */ -export interface CancelSponsorshipPayload { - __typename?: 'CancelSponsorshipPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The tier that was being used at the time of cancellation. - */ - sponsorsTier?: Maybe; -} - -/** - * Autogenerated return type of ChangeUserStatus - */ -export interface ChangeUserStatusPayload { - __typename?: 'ChangeUserStatusPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * Your updated status. - */ - status?: Maybe; -} - -/** - * A single check annotation. - */ -export interface CheckAnnotation { - __typename?: 'CheckAnnotation'; - /** - * The annotation's severity level. - */ - annotationLevel?: Maybe; - /** - * The path to the file that this annotation was made on. - */ - blobUrl: ScalarsEnums['URI']; - /** - * Identifies the primary key from the database. - */ - databaseId?: Maybe; - /** - * The position of this annotation. - */ - location: CheckAnnotationSpan; - /** - * The annotation's message. - */ - message: ScalarsEnums['String']; - /** - * The path that this annotation was made on. - */ - path: ScalarsEnums['String']; - /** - * Additional information about the annotation. - */ - rawDetails?: Maybe; - /** - * The annotation's title - */ - title?: Maybe; -} - -/** - * The connection type for CheckAnnotation. - */ -export interface CheckAnnotationConnection { - __typename?: 'CheckAnnotationConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface CheckAnnotationEdge { - __typename?: 'CheckAnnotationEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * A character position in a check annotation. - */ -export interface CheckAnnotationPosition { - __typename?: 'CheckAnnotationPosition'; - /** - * Column number (1 indexed). - */ - column?: Maybe; - /** - * Line number (1 indexed). - */ - line: ScalarsEnums['Int']; -} - -/** - * An inclusive pair of positions for a check annotation. - */ -export interface CheckAnnotationSpan { - __typename?: 'CheckAnnotationSpan'; - /** - * End position (inclusive). - */ - end: CheckAnnotationPosition; - /** - * Start position (inclusive). - */ - start: CheckAnnotationPosition; -} - -/** - * A check run. - */ -export interface CheckRun { - __typename?: 'CheckRun'; - /** - * The check run's annotations - */ - annotations: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => Maybe; - /** - * The check suite that this run is a part of. - */ - checkSuite: CheckSuite; - /** - * Identifies the date and time when the check run was completed. - */ - completedAt?: Maybe; - /** - * The conclusion of the check run. - */ - conclusion?: Maybe; - /** - * Identifies the primary key from the database. - */ - databaseId?: Maybe; - /** - * The corresponding deployment for this job, if any - */ - deployment?: Maybe; - /** - * The URL from which to find full details of the check run on the integrator's site. - */ - detailsUrl?: Maybe; - /** - * A reference for the check run on the integrator's system. - */ - externalId?: Maybe; - id: ScalarsEnums['ID']; - /** - * Whether this is required to pass before merging for a specific pull request. - */ - isRequired: (args?: { - /** - * The id of the pull request this is required for - */ - pullRequestId?: Maybe; - /** - * The number of the pull request this is required for - */ - pullRequestNumber?: Maybe; - }) => ScalarsEnums['Boolean']; - /** - * The name of the check for this check run. - */ - name: ScalarsEnums['String']; - /** - * Information about a pending deployment, if any, in this check run - */ - pendingDeploymentRequest?: Maybe; - /** - * The permalink to the check run summary. - */ - permalink: ScalarsEnums['URI']; - /** - * The repository associated with this check run. - */ - repository: Repository; - /** - * The HTTP path for this check run. - */ - resourcePath: ScalarsEnums['URI']; - /** - * Identifies the date and time when the check run was started. - */ - startedAt?: Maybe; - /** - * The current status of the check run. - */ - status: ScalarsEnums['CheckStatusState']; - /** - * The check run's steps - */ - steps: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Step number - */ - number?: Maybe; - }) => Maybe; - /** - * A string representing the check run's summary - */ - summary?: Maybe; - /** - * A string representing the check run's text - */ - text?: Maybe; - /** - * A string representing the check run - */ - title?: Maybe; - /** - * The HTTP URL for this check run. - */ - url: ScalarsEnums['URI']; -} - -/** - * The connection type for CheckRun. - */ -export interface CheckRunConnection { - __typename?: 'CheckRunConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface CheckRunEdge { - __typename?: 'CheckRunEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * A single check step. - */ -export interface CheckStep { - __typename?: 'CheckStep'; - /** - * Identifies the date and time when the check step was completed. - */ - completedAt?: Maybe; - /** - * The conclusion of the check step. - */ - conclusion?: Maybe; - /** - * A reference for the check step on the integrator's system. - */ - externalId?: Maybe; - /** - * The step's name. - */ - name: ScalarsEnums['String']; - /** - * The index of the step in the list of steps of the parent check run. - */ - number: ScalarsEnums['Int']; - /** - * Number of seconds to completion. - */ - secondsToCompletion?: Maybe; - /** - * Identifies the date and time when the check step was started. - */ - startedAt?: Maybe; - /** - * The current status of the check step. - */ - status: ScalarsEnums['CheckStatusState']; -} - -/** - * The connection type for CheckStep. - */ -export interface CheckStepConnection { - __typename?: 'CheckStepConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface CheckStepEdge { - __typename?: 'CheckStepEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * A check suite. - */ -export interface CheckSuite { - __typename?: 'CheckSuite'; - /** - * The GitHub App which created this check suite. - */ - app?: Maybe; - /** - * The name of the branch for this check suite. - */ - branch?: Maybe; - /** - * The check runs associated with a check suite. - */ - checkRuns: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Filters the check runs by this type. - */ - filterBy?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => Maybe; - /** - * The commit for this check suite - */ - commit: Commit; - /** - * The conclusion of this check suite. - */ - conclusion?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * The user who triggered the check suite. - */ - creator?: Maybe; - /** - * Identifies the primary key from the database. - */ - databaseId?: Maybe; - id: ScalarsEnums['ID']; - /** - * A list of open pull requests matching the check suite. - */ - matchingPullRequests: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * The base ref name to filter the pull requests by. - */ - baseRefName?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * The head ref name to filter the pull requests by. - */ - headRefName?: Maybe; - /** - * A list of label names to filter the pull requests by. - */ - labels?: Maybe>; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for pull requests returned from the connection. - */ - orderBy?: Maybe; - /** - * A list of states to filter the pull requests by. - */ - states?: Maybe>; - }) => Maybe; - /** - * The push that triggered this check suite. - */ - push?: Maybe; - /** - * The repository associated with this check suite. - */ - repository: Repository; - /** - * The HTTP path for this check suite - */ - resourcePath: ScalarsEnums['URI']; - /** - * The status of this check suite. - */ - status: ScalarsEnums['CheckStatusState']; - /** - * Identifies the date and time when the object was last updated. - */ - updatedAt: ScalarsEnums['DateTime']; - /** - * The HTTP URL for this check suite - */ - url: ScalarsEnums['URI']; - /** - * The workflow run associated with this check suite. - */ - workflowRun?: Maybe; -} - -/** - * The connection type for CheckSuite. - */ -export interface CheckSuiteConnection { - __typename?: 'CheckSuiteConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface CheckSuiteEdge { - __typename?: 'CheckSuiteEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * Autogenerated return type of ClearLabelsFromLabelable - */ -export interface ClearLabelsFromLabelablePayload { - __typename?: 'ClearLabelsFromLabelablePayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The item that was unlabeled. - */ - labelable?: Maybe; -} - -/** - * Autogenerated return type of CloneProject - */ -export interface CloneProjectPayload { - __typename?: 'CloneProjectPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The id of the JobStatus for populating cloned fields. - */ - jobStatusId?: Maybe; - /** - * The new cloned project. - */ - project?: Maybe; -} - -/** - * Autogenerated return type of CloneTemplateRepository - */ -export interface CloneTemplateRepositoryPayload { - __typename?: 'CloneTemplateRepositoryPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The new repository. - */ - repository?: Maybe; -} - -/** - * An object that can be closed - */ -export interface Closable { - __typename?: - | 'Issue' - | 'Milestone' - | 'Project' - | 'ProjectNext' - | 'PullRequest'; - /** - * `true` if the object is closed (definition of closed may depend on type) - */ - closed: ScalarsEnums['Boolean']; - /** - * Identifies the date and time when the object was closed. - */ - closedAt?: Maybe; - $on: $Closable; -} - -/** - * Autogenerated return type of CloseIssue - */ -export interface CloseIssuePayload { - __typename?: 'CloseIssuePayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The issue that was closed. - */ - issue?: Maybe; -} - -/** - * Autogenerated return type of ClosePullRequest - */ -export interface ClosePullRequestPayload { - __typename?: 'ClosePullRequestPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The pull request that was closed. - */ - pullRequest?: Maybe; -} - -/** - * Represents a 'closed' event on any `Closable`. - */ -export interface ClosedEvent { - __typename?: 'ClosedEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Object that was closed. - */ - closable: Closable; - /** - * Object which triggered the creation of this event. - */ - closer?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - id: ScalarsEnums['ID']; - /** - * The HTTP path for this closed event. - */ - resourcePath: ScalarsEnums['URI']; - /** - * The HTTP URL for this closed event. - */ - url: ScalarsEnums['URI']; -} - -/** - * The object which triggered a `ClosedEvent`. - */ -export interface Closer { - __typename?: 'Commit' | 'PullRequest'; - $on: $Closer; -} - -/** - * The Code of Conduct for a repository - */ -export interface CodeOfConduct { - __typename?: 'CodeOfConduct'; - /** - * The body of the Code of Conduct - */ - body?: Maybe; - id: ScalarsEnums['ID']; - /** - * The key for the Code of Conduct - */ - key: ScalarsEnums['String']; - /** - * The formal name of the Code of Conduct - */ - name: ScalarsEnums['String']; - /** - * The HTTP path for this Code of Conduct - */ - resourcePath?: Maybe; - /** - * The HTTP URL for this Code of Conduct - */ - url?: Maybe; -} - -/** - * Represents a comment. - */ -export interface Comment { - __typename?: - | 'CommitComment' - | 'Discussion' - | 'DiscussionComment' - | 'GistComment' - | 'Issue' - | 'IssueComment' - | 'PullRequest' - | 'PullRequestReview' - | 'PullRequestReviewComment' - | 'TeamDiscussion' - | 'TeamDiscussionComment'; - /** - * The actor who authored the comment. - */ - author?: Maybe; - /** - * Author's association with the subject of the comment. - */ - authorAssociation: ScalarsEnums['CommentAuthorAssociation']; - /** - * The body as Markdown. - */ - body: ScalarsEnums['String']; - /** - * The body rendered to HTML. - */ - bodyHTML: ScalarsEnums['HTML']; - /** - * The body rendered to text. - */ - bodyText: ScalarsEnums['String']; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * Check if this comment was created via an email reply. - */ - createdViaEmail: ScalarsEnums['Boolean']; - /** - * The actor who edited the comment. - */ - editor?: Maybe; - id: ScalarsEnums['ID']; - /** - * Check if this comment was edited and includes an edit with the creation data - */ - includesCreatedEdit: ScalarsEnums['Boolean']; - /** - * The moment the editor made the last edit - */ - lastEditedAt?: Maybe; - /** - * Identifies when the comment was published at. - */ - publishedAt?: Maybe; - /** - * Identifies the date and time when the object was last updated. - */ - updatedAt: ScalarsEnums['DateTime']; - /** - * A list of edits to this content. - */ - userContentEdits: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => Maybe; - /** - * Did the viewer author this comment. - */ - viewerDidAuthor: ScalarsEnums['Boolean']; - $on: $Comment; -} - -/** - * Represents a 'comment_deleted' event on a given issue or pull request. - */ -export interface CommentDeletedEvent { - __typename?: 'CommentDeletedEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * Identifies the primary key from the database. - */ - databaseId?: Maybe; - /** - * The user who authored the deleted comment. - */ - deletedCommentAuthor?: Maybe; - id: ScalarsEnums['ID']; -} - -/** - * Represents a Git commit. - */ -export interface Commit { - __typename?: 'Commit'; - /** - * An abbreviated version of the Git object ID - */ - abbreviatedOid: ScalarsEnums['String']; - /** - * The number of additions in this commit. - */ - additions: ScalarsEnums['Int']; - /** - * The merged Pull Request that introduced the commit to the repository. If the commit is not present in the default branch, additionally returns open Pull Requests associated with the commit - */ - associatedPullRequests: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for pull requests. - * @defaultValue `{"field":"CREATED_AT","direction":"ASC"}` - */ - orderBy?: Maybe; - }) => Maybe; - /** - * Authorship details of the commit. - */ - author?: Maybe; - /** - * Check if the committer and the author match. - */ - authoredByCommitter: ScalarsEnums['Boolean']; - /** - * The datetime when this commit was authored. - */ - authoredDate: ScalarsEnums['DateTime']; - /** - * The list of authors for this commit based on the git author and the Co-authored-by - * message trailer. The git author will always be first. - */ - authors: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => GitActorConnection; - /** - * Fetches `git blame` information. - */ - blame: (args: { - /** - * The file whose Git blame information you want. - */ - path: Scalars['String']; - }) => Blame; - /** - * The number of changed files in this commit. - */ - changedFiles: ScalarsEnums['Int']; - /** - * The check suites associated with a commit. - */ - checkSuites: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Filters the check suites by this type. - */ - filterBy?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => Maybe; - /** - * Comments made on the commit. - */ - comments: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => CommitCommentConnection; - /** - * The HTTP path for this Git object - */ - commitResourcePath: ScalarsEnums['URI']; - /** - * The HTTP URL for this Git object - */ - commitUrl: ScalarsEnums['URI']; - /** - * The datetime when this commit was committed. - */ - committedDate: ScalarsEnums['DateTime']; - /** - * Check if committed via GitHub web UI. - */ - committedViaWeb: ScalarsEnums['Boolean']; - /** - * Committer details of the commit. - */ - committer?: Maybe; - /** - * The number of deletions in this commit. - */ - deletions: ScalarsEnums['Int']; - /** - * The deployments associated with a commit. - */ - deployments: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Environments to list deployments for - */ - environments?: Maybe>; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for deployments returned from the connection. - * @defaultValue `{"field":"CREATED_AT","direction":"ASC"}` - */ - orderBy?: Maybe; - }) => Maybe; - /** - * The tree entry representing the file located at the given path. - */ - file: (args: { - /** - * The path for the file - */ - path: Scalars['String']; - }) => Maybe; - /** - * The linear commit history starting from (and including) this commit, in the same order as `git log`. - */ - history: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * If non-null, filters history to only show commits with matching authorship. - */ - author?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * If non-null, filters history to only show commits touching files under this path. - */ - path?: Maybe; - /** - * Allows specifying a beginning time or date for fetching commits. - */ - since?: Maybe; - /** - * Allows specifying an ending time or date for fetching commits. - */ - until?: Maybe; - }) => CommitHistoryConnection; - id: ScalarsEnums['ID']; - /** - * The Git commit message - */ - message: ScalarsEnums['String']; - /** - * The Git commit message body - */ - messageBody: ScalarsEnums['String']; - /** - * The commit message body rendered to HTML. - */ - messageBodyHTML: ScalarsEnums['HTML']; - /** - * The Git commit message headline - */ - messageHeadline: ScalarsEnums['String']; - /** - * The commit message headline rendered to HTML. - */ - messageHeadlineHTML: ScalarsEnums['HTML']; - /** - * The Git object ID - */ - oid: ScalarsEnums['GitObjectID']; - /** - * The organization this commit was made on behalf of. - */ - onBehalfOf?: Maybe; - /** - * The parents of a commit. - */ - parents: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => CommitConnection; - /** - * The datetime when this commit was pushed. - */ - pushedDate?: Maybe; - /** - * The Repository this commit belongs to - */ - repository: Repository; - /** - * The HTTP path for this commit - */ - resourcePath: ScalarsEnums['URI']; - /** - * Commit signing information, if present. - */ - signature?: Maybe; - /** - * Status information for this commit - */ - status?: Maybe; - /** - * Check and Status rollup information for this commit. - */ - statusCheckRollup?: Maybe; - /** - * Returns a list of all submodules in this repository as of this Commit parsed from the .gitmodules file. - */ - submodules: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => SubmoduleConnection; - /** - * Returns a URL to download a tarball archive for a repository. - * Note: For private repositories, these links are temporary and expire after five minutes. - */ - tarballUrl: ScalarsEnums['URI']; - /** - * Commit's root Tree - */ - tree: Tree; - /** - * The HTTP path for the tree of this commit - */ - treeResourcePath: ScalarsEnums['URI']; - /** - * The HTTP URL for the tree of this commit - */ - treeUrl: ScalarsEnums['URI']; - /** - * The HTTP URL for this commit - */ - url: ScalarsEnums['URI']; - /** - * Check if the viewer is able to change their subscription status for the repository. - */ - viewerCanSubscribe: ScalarsEnums['Boolean']; - /** - * Identifies if the viewer is watching, not watching, or ignoring the subscribable entity. - */ - viewerSubscription?: Maybe; - /** - * Returns a URL to download a zipball archive for a repository. - * Note: For private repositories, these links are temporary and expire after five minutes. - */ - zipballUrl: ScalarsEnums['URI']; -} - -/** - * Represents a comment on a given Commit. - */ -export interface CommitComment { - __typename?: 'CommitComment'; - /** - * The actor who authored the comment. - */ - author?: Maybe; - /** - * Author's association with the subject of the comment. - */ - authorAssociation: ScalarsEnums['CommentAuthorAssociation']; - /** - * Identifies the comment body. - */ - body: ScalarsEnums['String']; - /** - * The body rendered to HTML. - */ - bodyHTML: ScalarsEnums['HTML']; - /** - * The body rendered to text. - */ - bodyText: ScalarsEnums['String']; - /** - * Identifies the commit associated with the comment, if the commit exists. - */ - commit?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * Check if this comment was created via an email reply. - */ - createdViaEmail: ScalarsEnums['Boolean']; - /** - * Identifies the primary key from the database. - */ - databaseId?: Maybe; - /** - * The actor who edited the comment. - */ - editor?: Maybe; - id: ScalarsEnums['ID']; - /** - * Check if this comment was edited and includes an edit with the creation data - */ - includesCreatedEdit: ScalarsEnums['Boolean']; - /** - * Returns whether or not a comment has been minimized. - */ - isMinimized: ScalarsEnums['Boolean']; - /** - * The moment the editor made the last edit - */ - lastEditedAt?: Maybe; - /** - * Returns why the comment was minimized. - */ - minimizedReason?: Maybe; - /** - * Identifies the file path associated with the comment. - */ - path?: Maybe; - /** - * Identifies the line position associated with the comment. - */ - position?: Maybe; - /** - * Identifies when the comment was published at. - */ - publishedAt?: Maybe; - /** - * A list of reactions grouped by content left on the subject. - */ - reactionGroups?: Maybe>; - /** - * A list of Reactions left on the Issue. - */ - reactions: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Allows filtering Reactions by emoji. - */ - content?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Allows specifying the order in which reactions are returned. - */ - orderBy?: Maybe; - }) => ReactionConnection; - /** - * The repository associated with this node. - */ - repository: Repository; - /** - * The HTTP path permalink for this commit comment. - */ - resourcePath: ScalarsEnums['URI']; - /** - * Identifies the date and time when the object was last updated. - */ - updatedAt: ScalarsEnums['DateTime']; - /** - * The HTTP URL permalink for this commit comment. - */ - url: ScalarsEnums['URI']; - /** - * A list of edits to this content. - */ - userContentEdits: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => Maybe; - /** - * Check if the current viewer can delete this object. - */ - viewerCanDelete: ScalarsEnums['Boolean']; - /** - * Check if the current viewer can minimize this object. - */ - viewerCanMinimize: ScalarsEnums['Boolean']; - /** - * Can user react to this subject - */ - viewerCanReact: ScalarsEnums['Boolean']; - /** - * Check if the current viewer can update this object. - */ - viewerCanUpdate: ScalarsEnums['Boolean']; - /** - * Reasons why the current viewer can not update this comment. - */ - viewerCannotUpdateReasons: Array; - /** - * Did the viewer author this comment. - */ - viewerDidAuthor: ScalarsEnums['Boolean']; -} - -/** - * The connection type for CommitComment. - */ -export interface CommitCommentConnection { - __typename?: 'CommitCommentConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface CommitCommentEdge { - __typename?: 'CommitCommentEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * A thread of comments on a commit. - */ -export interface CommitCommentThread { - __typename?: 'CommitCommentThread'; - /** - * The comments that exist in this thread. - */ - comments: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => CommitCommentConnection; - /** - * The commit the comments were made on. - */ - commit?: Maybe; - id: ScalarsEnums['ID']; - /** - * The file the comments were made on. - */ - path?: Maybe; - /** - * The position in the diff for the commit that the comment was made on. - */ - position?: Maybe; - /** - * The repository associated with this node. - */ - repository: Repository; -} - -/** - * The connection type for Commit. - */ -export interface CommitConnection { - __typename?: 'CommitConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * This aggregates commits made by a user within one repository. - */ -export interface CommitContributionsByRepository { - __typename?: 'CommitContributionsByRepository'; - /** - * The commit contributions, each representing a day. - */ - contributions: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for commit contributions returned from the connection. - * @defaultValue `{"field":"OCCURRED_AT","direction":"DESC"}` - */ - orderBy?: Maybe; - }) => CreatedCommitContributionConnection; - /** - * The repository in which the commits were made. - */ - repository: Repository; - /** - * The HTTP path for the user's commits to the repository in this time range. - */ - resourcePath: ScalarsEnums['URI']; - /** - * The HTTP URL for the user's commits to the repository in this time range. - */ - url: ScalarsEnums['URI']; -} - -/** - * An edge in a connection. - */ -export interface CommitEdge { - __typename?: 'CommitEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * The connection type for Commit. - */ -export interface CommitHistoryConnection { - __typename?: 'CommitHistoryConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * Represents a 'connected' event on a given issue or pull request. - */ -export interface ConnectedEvent { - __typename?: 'ConnectedEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - id: ScalarsEnums['ID']; - /** - * Reference originated in a different repository. - */ - isCrossRepository: ScalarsEnums['Boolean']; - /** - * Issue or pull request that made the reference. - */ - source: ReferencedSubject; - /** - * Issue or pull request which was connected. - */ - subject: ReferencedSubject; -} - -/** - * Represents a contribution a user made on GitHub, such as opening an issue. - */ -export interface Contribution { - __typename?: - | 'CreatedCommitContribution' - | 'CreatedIssueContribution' - | 'CreatedPullRequestContribution' - | 'CreatedPullRequestReviewContribution' - | 'CreatedRepositoryContribution' - | 'JoinedGitHubContribution' - | 'RestrictedContribution'; - /** - * Whether this contribution is associated with a record you do not have access to. For - * example, your own 'first issue' contribution may have been made on a repository you can no - * longer access. - */ - isRestricted: ScalarsEnums['Boolean']; - /** - * When this contribution was made. - */ - occurredAt: ScalarsEnums['DateTime']; - /** - * The HTTP path for this contribution. - */ - resourcePath: ScalarsEnums['URI']; - /** - * The HTTP URL for this contribution. - */ - url: ScalarsEnums['URI']; - /** - * The user who made this contribution. - */ - user: User; - $on: $Contribution; -} - -/** - * A calendar of contributions made on GitHub by a user. - */ -export interface ContributionCalendar { - __typename?: 'ContributionCalendar'; - /** - * A list of hex color codes used in this calendar. The darker the color, the more contributions it represents. - */ - colors: Array; - /** - * Determine if the color set was chosen because it's currently Halloween. - */ - isHalloween: ScalarsEnums['Boolean']; - /** - * A list of the months of contributions in this calendar. - */ - months: Array; - /** - * The count of total contributions in the calendar. - */ - totalContributions: ScalarsEnums['Int']; - /** - * A list of the weeks of contributions in this calendar. - */ - weeks: Array; -} - -/** - * Represents a single day of contributions on GitHub by a user. - */ -export interface ContributionCalendarDay { - __typename?: 'ContributionCalendarDay'; - /** - * The hex color code that represents how many contributions were made on this day compared to others in the calendar. - */ - color: ScalarsEnums['String']; - /** - * How many contributions were made by the user on this day. - */ - contributionCount: ScalarsEnums['Int']; - /** - * Indication of contributions, relative to other days. Can be used to indicate which color to represent this day on a calendar. - */ - contributionLevel: ScalarsEnums['ContributionLevel']; - /** - * The day this square represents. - */ - date: ScalarsEnums['Date']; - /** - * A number representing which day of the week this square represents, e.g., 1 is Monday. - */ - weekday: ScalarsEnums['Int']; -} - -/** - * A month of contributions in a user's contribution graph. - */ -export interface ContributionCalendarMonth { - __typename?: 'ContributionCalendarMonth'; - /** - * The date of the first day of this month. - */ - firstDay: ScalarsEnums['Date']; - /** - * The name of the month. - */ - name: ScalarsEnums['String']; - /** - * How many weeks started in this month. - */ - totalWeeks: ScalarsEnums['Int']; - /** - * The year the month occurred in. - */ - year: ScalarsEnums['Int']; -} - -/** - * A week of contributions in a user's contribution graph. - */ -export interface ContributionCalendarWeek { - __typename?: 'ContributionCalendarWeek'; - /** - * The days of contributions in this week. - */ - contributionDays: Array; - /** - * The date of the earliest square in this week. - */ - firstDay: ScalarsEnums['Date']; -} - -/** - * A contributions collection aggregates contributions such as opened issues and commits created by a user. - */ -export interface ContributionsCollection { - __typename?: 'ContributionsCollection'; - /** - * Commit contributions made by the user, grouped by repository. - */ - commitContributionsByRepository: (args?: { - /** - * How many repositories should be included. - * @defaultValue `25` - */ - maxRepositories?: Maybe; - }) => Array; - /** - * A calendar of this user's contributions on GitHub. - */ - contributionCalendar: ContributionCalendar; - /** - * The years the user has been making contributions with the most recent year first. - */ - contributionYears: Array; - /** - * Determine if this collection's time span ends in the current month. - */ - doesEndInCurrentMonth: ScalarsEnums['Boolean']; - /** - * The date of the first restricted contribution the user made in this time period. Can only be non-null when the user has enabled private contribution counts. - */ - earliestRestrictedContributionDate?: Maybe; - /** - * The ending date and time of this collection. - */ - endedAt: ScalarsEnums['DateTime']; - /** - * The first issue the user opened on GitHub. This will be null if that issue was opened outside the collection's time range and ignoreTimeRange is false. If the issue is not visible but the user has opted to show private contributions, a RestrictedContribution will be returned. - */ - firstIssueContribution?: Maybe; - /** - * The first pull request the user opened on GitHub. This will be null if that pull request was opened outside the collection's time range and ignoreTimeRange is not true. If the pull request is not visible but the user has opted to show private contributions, a RestrictedContribution will be returned. - */ - firstPullRequestContribution?: Maybe; - /** - * The first repository the user created on GitHub. This will be null if that first repository was created outside the collection's time range and ignoreTimeRange is false. If the repository is not visible, then a RestrictedContribution is returned. - */ - firstRepositoryContribution?: Maybe; - /** - * Does the user have any more activity in the timeline that occurred prior to the collection's time range? - */ - hasActivityInThePast: ScalarsEnums['Boolean']; - /** - * Determine if there are any contributions in this collection. - */ - hasAnyContributions: ScalarsEnums['Boolean']; - /** - * Determine if the user made any contributions in this time frame whose details are not visible because they were made in a private repository. Can only be true if the user enabled private contribution counts. - */ - hasAnyRestrictedContributions: ScalarsEnums['Boolean']; - /** - * Whether or not the collector's time span is all within the same day. - */ - isSingleDay: ScalarsEnums['Boolean']; - /** - * A list of issues the user opened. - */ - issueContributions: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Should the user's first issue ever be excluded from the result. - * @defaultValue `false` - */ - excludeFirst?: Maybe; - /** - * Should the user's most commented issue be excluded from the result. - * @defaultValue `false` - */ - excludePopular?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for contributions returned from the connection. - * @defaultValue `{"direction":"DESC"}` - */ - orderBy?: Maybe; - }) => CreatedIssueContributionConnection; - /** - * Issue contributions made by the user, grouped by repository. - */ - issueContributionsByRepository: (args?: { - /** - * Should the user's first issue ever be excluded from the result. - * @defaultValue `false` - */ - excludeFirst?: Maybe; - /** - * Should the user's most commented issue be excluded from the result. - * @defaultValue `false` - */ - excludePopular?: Maybe; - /** - * How many repositories should be included. - * @defaultValue `25` - */ - maxRepositories?: Maybe; - }) => Array; - /** - * When the user signed up for GitHub. This will be null if that sign up date falls outside the collection's time range and ignoreTimeRange is false. - */ - joinedGitHubContribution?: Maybe; - /** - * The date of the most recent restricted contribution the user made in this time period. Can only be non-null when the user has enabled private contribution counts. - */ - latestRestrictedContributionDate?: Maybe; - /** - * When this collection's time range does not include any activity from the user, use this - * to get a different collection from an earlier time range that does have activity. - */ - mostRecentCollectionWithActivity?: Maybe; - /** - * Returns a different contributions collection from an earlier time range than this one - * that does not have any contributions. - */ - mostRecentCollectionWithoutActivity?: Maybe; - /** - * The issue the user opened on GitHub that received the most comments in the specified - * time frame. - */ - popularIssueContribution?: Maybe; - /** - * The pull request the user opened on GitHub that received the most comments in the - * specified time frame. - */ - popularPullRequestContribution?: Maybe; - /** - * Pull request contributions made by the user. - */ - pullRequestContributions: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Should the user's first pull request ever be excluded from the result. - * @defaultValue `false` - */ - excludeFirst?: Maybe; - /** - * Should the user's most commented pull request be excluded from the result. - * @defaultValue `false` - */ - excludePopular?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for contributions returned from the connection. - * @defaultValue `{"direction":"DESC"}` - */ - orderBy?: Maybe; - }) => CreatedPullRequestContributionConnection; - /** - * Pull request contributions made by the user, grouped by repository. - */ - pullRequestContributionsByRepository: (args?: { - /** - * Should the user's first pull request ever be excluded from the result. - * @defaultValue `false` - */ - excludeFirst?: Maybe; - /** - * Should the user's most commented pull request be excluded from the result. - * @defaultValue `false` - */ - excludePopular?: Maybe; - /** - * How many repositories should be included. - * @defaultValue `25` - */ - maxRepositories?: Maybe; - }) => Array; - /** - * Pull request review contributions made by the user. - */ - pullRequestReviewContributions: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for contributions returned from the connection. - * @defaultValue `{"direction":"DESC"}` - */ - orderBy?: Maybe; - }) => CreatedPullRequestReviewContributionConnection; - /** - * Pull request review contributions made by the user, grouped by repository. - */ - pullRequestReviewContributionsByRepository: (args?: { - /** - * How many repositories should be included. - * @defaultValue `25` - */ - maxRepositories?: Maybe; - }) => Array; - /** - * A list of repositories owned by the user that the user created in this time range. - */ - repositoryContributions: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Should the user's first repository ever be excluded from the result. - * @defaultValue `false` - */ - excludeFirst?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for contributions returned from the connection. - * @defaultValue `{"direction":"DESC"}` - */ - orderBy?: Maybe; - }) => CreatedRepositoryContributionConnection; - /** - * A count of contributions made by the user that the viewer cannot access. Only non-zero when the user has chosen to share their private contribution counts. - */ - restrictedContributionsCount: ScalarsEnums['Int']; - /** - * The beginning date and time of this collection. - */ - startedAt: ScalarsEnums['DateTime']; - /** - * How many commits were made by the user in this time span. - */ - totalCommitContributions: ScalarsEnums['Int']; - /** - * How many issues the user opened. - */ - totalIssueContributions: (args?: { - /** - * Should the user's first issue ever be excluded from this count. - * @defaultValue `false` - */ - excludeFirst?: Maybe; - /** - * Should the user's most commented issue be excluded from this count. - * @defaultValue `false` - */ - excludePopular?: Maybe; - }) => ScalarsEnums['Int']; - /** - * How many pull requests the user opened. - */ - totalPullRequestContributions: (args?: { - /** - * Should the user's first pull request ever be excluded from this count. - * @defaultValue `false` - */ - excludeFirst?: Maybe; - /** - * Should the user's most commented pull request be excluded from this count. - * @defaultValue `false` - */ - excludePopular?: Maybe; - }) => ScalarsEnums['Int']; - /** - * How many pull request reviews the user left. - */ - totalPullRequestReviewContributions: ScalarsEnums['Int']; - /** - * How many different repositories the user committed to. - */ - totalRepositoriesWithContributedCommits: ScalarsEnums['Int']; - /** - * How many different repositories the user opened issues in. - */ - totalRepositoriesWithContributedIssues: (args?: { - /** - * Should the user's first issue ever be excluded from this count. - * @defaultValue `false` - */ - excludeFirst?: Maybe; - /** - * Should the user's most commented issue be excluded from this count. - * @defaultValue `false` - */ - excludePopular?: Maybe; - }) => ScalarsEnums['Int']; - /** - * How many different repositories the user left pull request reviews in. - */ - totalRepositoriesWithContributedPullRequestReviews: ScalarsEnums['Int']; - /** - * How many different repositories the user opened pull requests in. - */ - totalRepositoriesWithContributedPullRequests: (args?: { - /** - * Should the user's first pull request ever be excluded from this count. - * @defaultValue `false` - */ - excludeFirst?: Maybe; - /** - * Should the user's most commented pull request be excluded from this count. - * @defaultValue `false` - */ - excludePopular?: Maybe; - }) => ScalarsEnums['Int']; - /** - * How many repositories the user created. - */ - totalRepositoryContributions: (args?: { - /** - * Should the user's first repository ever be excluded from this count. - * @defaultValue `false` - */ - excludeFirst?: Maybe; - }) => ScalarsEnums['Int']; - /** - * The user who made the contributions in this collection. - */ - user: User; -} - -/** - * Autogenerated return type of ConvertProjectCardNoteToIssue - */ -export interface ConvertProjectCardNoteToIssuePayload { - __typename?: 'ConvertProjectCardNoteToIssuePayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The updated ProjectCard. - */ - projectCard?: Maybe; -} - -/** - * Autogenerated return type of ConvertPullRequestToDraft - */ -export interface ConvertPullRequestToDraftPayload { - __typename?: 'ConvertPullRequestToDraftPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The pull request that is now a draft. - */ - pullRequest?: Maybe; -} - -/** - * Represents a 'convert_to_draft' event on a given pull request. - */ -export interface ConvertToDraftEvent { - __typename?: 'ConvertToDraftEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - id: ScalarsEnums['ID']; - /** - * PullRequest referenced by event. - */ - pullRequest: PullRequest; - /** - * The HTTP path for this convert to draft event. - */ - resourcePath: ScalarsEnums['URI']; - /** - * The HTTP URL for this convert to draft event. - */ - url: ScalarsEnums['URI']; -} - -/** - * Represents a 'converted_note_to_issue' event on a given issue or pull request. - */ -export interface ConvertedNoteToIssueEvent { - __typename?: 'ConvertedNoteToIssueEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * Identifies the primary key from the database. - */ - databaseId?: Maybe; - id: ScalarsEnums['ID']; -} - -/** - * Represents a 'converted_to_discussion' event on a given issue. - */ -export interface ConvertedToDiscussionEvent { - __typename?: 'ConvertedToDiscussionEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * The discussion that the issue was converted into. - */ - discussion?: Maybe; - id: ScalarsEnums['ID']; -} - -/** - * Autogenerated return type of CreateBranchProtectionRule - */ -export interface CreateBranchProtectionRulePayload { - __typename?: 'CreateBranchProtectionRulePayload'; - /** - * The newly created BranchProtectionRule. - */ - branchProtectionRule?: Maybe; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; -} - -/** - * Autogenerated return type of CreateCheckRun - */ -export interface CreateCheckRunPayload { - __typename?: 'CreateCheckRunPayload'; - /** - * The newly created check run. - */ - checkRun?: Maybe; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; -} - -/** - * Autogenerated return type of CreateCheckSuite - */ -export interface CreateCheckSuitePayload { - __typename?: 'CreateCheckSuitePayload'; - /** - * The newly created check suite. - */ - checkSuite?: Maybe; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; -} - -/** - * Autogenerated return type of CreateCommitOnBranch - */ -export interface CreateCommitOnBranchPayload { - __typename?: 'CreateCommitOnBranchPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The new commit. - */ - commit?: Maybe; - /** - * The ref which has been updated to point to the new commit. - */ - ref?: Maybe; -} - -/** - * Autogenerated return type of CreateDiscussion - */ -export interface CreateDiscussionPayload { - __typename?: 'CreateDiscussionPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The discussion that was just created. - */ - discussion?: Maybe; -} - -/** - * Autogenerated return type of CreateEnterpriseOrganization - */ -export interface CreateEnterpriseOrganizationPayload { - __typename?: 'CreateEnterpriseOrganizationPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The enterprise that owns the created organization. - */ - enterprise?: Maybe; - /** - * The organization that was created. - */ - organization?: Maybe; -} - -/** - * Autogenerated return type of CreateEnvironment - */ -export interface CreateEnvironmentPayload { - __typename?: 'CreateEnvironmentPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The new or existing environment. - */ - environment?: Maybe; -} - -/** - * Autogenerated return type of CreateIpAllowListEntry - */ -export interface CreateIpAllowListEntryPayload { - __typename?: 'CreateIpAllowListEntryPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The IP allow list entry that was created. - */ - ipAllowListEntry?: Maybe; -} - -/** - * Autogenerated return type of CreateIssue - */ -export interface CreateIssuePayload { - __typename?: 'CreateIssuePayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The new issue. - */ - issue?: Maybe; -} - -/** - * Autogenerated return type of CreateProject - */ -export interface CreateProjectPayload { - __typename?: 'CreateProjectPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The new project. - */ - project?: Maybe; -} - -/** - * Autogenerated return type of CreatePullRequest - */ -export interface CreatePullRequestPayload { - __typename?: 'CreatePullRequestPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The new pull request. - */ - pullRequest?: Maybe; -} - -/** - * Autogenerated return type of CreateRef - */ -export interface CreateRefPayload { - __typename?: 'CreateRefPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The newly created ref. - */ - ref?: Maybe; -} - -/** - * Autogenerated return type of CreateRepository - */ -export interface CreateRepositoryPayload { - __typename?: 'CreateRepositoryPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The new repository. - */ - repository?: Maybe; -} - -/** - * Autogenerated return type of CreateSponsorship - */ -export interface CreateSponsorshipPayload { - __typename?: 'CreateSponsorshipPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The sponsorship that was started. - */ - sponsorship?: Maybe; -} - -/** - * Autogenerated return type of CreateTeamDiscussionComment - */ -export interface CreateTeamDiscussionCommentPayload { - __typename?: 'CreateTeamDiscussionCommentPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The new comment. - */ - teamDiscussionComment?: Maybe; -} - -/** - * Autogenerated return type of CreateTeamDiscussion - */ -export interface CreateTeamDiscussionPayload { - __typename?: 'CreateTeamDiscussionPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The new discussion. - */ - teamDiscussion?: Maybe; -} - -/** - * Represents the contribution a user made by committing to a repository. - */ -export interface CreatedCommitContribution { - __typename?: 'CreatedCommitContribution'; - /** - * How many commits were made on this day to this repository by the user. - */ - commitCount: ScalarsEnums['Int']; - /** - * Whether this contribution is associated with a record you do not have access to. For - * example, your own 'first issue' contribution may have been made on a repository you can no - * longer access. - */ - isRestricted: ScalarsEnums['Boolean']; - /** - * When this contribution was made. - */ - occurredAt: ScalarsEnums['DateTime']; - /** - * The repository the user made a commit in. - */ - repository: Repository; - /** - * The HTTP path for this contribution. - */ - resourcePath: ScalarsEnums['URI']; - /** - * The HTTP URL for this contribution. - */ - url: ScalarsEnums['URI']; - /** - * The user who made this contribution. - */ - user: User; -} - -/** - * The connection type for CreatedCommitContribution. - */ -export interface CreatedCommitContributionConnection { - __typename?: 'CreatedCommitContributionConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of commits across days and repositories in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface CreatedCommitContributionEdge { - __typename?: 'CreatedCommitContributionEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * Represents the contribution a user made on GitHub by opening an issue. - */ -export interface CreatedIssueContribution { - __typename?: 'CreatedIssueContribution'; - /** - * Whether this contribution is associated with a record you do not have access to. For - * example, your own 'first issue' contribution may have been made on a repository you can no - * longer access. - */ - isRestricted: ScalarsEnums['Boolean']; - /** - * The issue that was opened. - */ - issue: Issue; - /** - * When this contribution was made. - */ - occurredAt: ScalarsEnums['DateTime']; - /** - * The HTTP path for this contribution. - */ - resourcePath: ScalarsEnums['URI']; - /** - * The HTTP URL for this contribution. - */ - url: ScalarsEnums['URI']; - /** - * The user who made this contribution. - */ - user: User; -} - -/** - * The connection type for CreatedIssueContribution. - */ -export interface CreatedIssueContributionConnection { - __typename?: 'CreatedIssueContributionConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface CreatedIssueContributionEdge { - __typename?: 'CreatedIssueContributionEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * Represents either a issue the viewer can access or a restricted contribution. - */ -export interface CreatedIssueOrRestrictedContribution { - __typename?: 'CreatedIssueContribution' | 'RestrictedContribution'; - $on: $CreatedIssueOrRestrictedContribution; -} - -/** - * Represents the contribution a user made on GitHub by opening a pull request. - */ -export interface CreatedPullRequestContribution { - __typename?: 'CreatedPullRequestContribution'; - /** - * Whether this contribution is associated with a record you do not have access to. For - * example, your own 'first issue' contribution may have been made on a repository you can no - * longer access. - */ - isRestricted: ScalarsEnums['Boolean']; - /** - * When this contribution was made. - */ - occurredAt: ScalarsEnums['DateTime']; - /** - * The pull request that was opened. - */ - pullRequest: PullRequest; - /** - * The HTTP path for this contribution. - */ - resourcePath: ScalarsEnums['URI']; - /** - * The HTTP URL for this contribution. - */ - url: ScalarsEnums['URI']; - /** - * The user who made this contribution. - */ - user: User; -} - -/** - * The connection type for CreatedPullRequestContribution. - */ -export interface CreatedPullRequestContributionConnection { - __typename?: 'CreatedPullRequestContributionConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface CreatedPullRequestContributionEdge { - __typename?: 'CreatedPullRequestContributionEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * Represents either a pull request the viewer can access or a restricted contribution. - */ -export interface CreatedPullRequestOrRestrictedContribution { - __typename?: 'CreatedPullRequestContribution' | 'RestrictedContribution'; - $on: $CreatedPullRequestOrRestrictedContribution; -} - -/** - * Represents the contribution a user made by leaving a review on a pull request. - */ -export interface CreatedPullRequestReviewContribution { - __typename?: 'CreatedPullRequestReviewContribution'; - /** - * Whether this contribution is associated with a record you do not have access to. For - * example, your own 'first issue' contribution may have been made on a repository you can no - * longer access. - */ - isRestricted: ScalarsEnums['Boolean']; - /** - * When this contribution was made. - */ - occurredAt: ScalarsEnums['DateTime']; - /** - * The pull request the user reviewed. - */ - pullRequest: PullRequest; - /** - * The review the user left on the pull request. - */ - pullRequestReview: PullRequestReview; - /** - * The repository containing the pull request that the user reviewed. - */ - repository: Repository; - /** - * The HTTP path for this contribution. - */ - resourcePath: ScalarsEnums['URI']; - /** - * The HTTP URL for this contribution. - */ - url: ScalarsEnums['URI']; - /** - * The user who made this contribution. - */ - user: User; -} - -/** - * The connection type for CreatedPullRequestReviewContribution. - */ -export interface CreatedPullRequestReviewContributionConnection { - __typename?: 'CreatedPullRequestReviewContributionConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface CreatedPullRequestReviewContributionEdge { - __typename?: 'CreatedPullRequestReviewContributionEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * Represents the contribution a user made on GitHub by creating a repository. - */ -export interface CreatedRepositoryContribution { - __typename?: 'CreatedRepositoryContribution'; - /** - * Whether this contribution is associated with a record you do not have access to. For - * example, your own 'first issue' contribution may have been made on a repository you can no - * longer access. - */ - isRestricted: ScalarsEnums['Boolean']; - /** - * When this contribution was made. - */ - occurredAt: ScalarsEnums['DateTime']; - /** - * The repository that was created. - */ - repository: Repository; - /** - * The HTTP path for this contribution. - */ - resourcePath: ScalarsEnums['URI']; - /** - * The HTTP URL for this contribution. - */ - url: ScalarsEnums['URI']; - /** - * The user who made this contribution. - */ - user: User; -} - -/** - * The connection type for CreatedRepositoryContribution. - */ -export interface CreatedRepositoryContributionConnection { - __typename?: 'CreatedRepositoryContributionConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface CreatedRepositoryContributionEdge { - __typename?: 'CreatedRepositoryContributionEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * Represents either a repository the viewer can access or a restricted contribution. - */ -export interface CreatedRepositoryOrRestrictedContribution { - __typename?: 'CreatedRepositoryContribution' | 'RestrictedContribution'; - $on: $CreatedRepositoryOrRestrictedContribution; -} - -/** - * Represents a mention made by one issue or pull request to another. - */ -export interface CrossReferencedEvent { - __typename?: 'CrossReferencedEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - id: ScalarsEnums['ID']; - /** - * Reference originated in a different repository. - */ - isCrossRepository: ScalarsEnums['Boolean']; - /** - * Identifies when the reference was made. - */ - referencedAt: ScalarsEnums['DateTime']; - /** - * The HTTP path for this pull request. - */ - resourcePath: ScalarsEnums['URI']; - /** - * Issue or pull request that made the reference. - */ - source: ReferencedSubject; - /** - * Issue or pull request to which the reference was made. - */ - target: ReferencedSubject; - /** - * The HTTP URL for this pull request. - */ - url: ScalarsEnums['URI']; - /** - * Checks if the target will be closed when the source is merged. - */ - willCloseTarget: ScalarsEnums['Boolean']; -} - -/** - * Autogenerated return type of DeclineTopicSuggestion - */ -export interface DeclineTopicSuggestionPayload { - __typename?: 'DeclineTopicSuggestionPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The declined topic. - */ - topic?: Maybe; -} - -/** - * Entities that can be deleted. - */ -export interface Deletable { - __typename?: - | 'CommitComment' - | 'Discussion' - | 'DiscussionComment' - | 'GistComment' - | 'IssueComment' - | 'PullRequestReview' - | 'PullRequestReviewComment' - | 'TeamDiscussion' - | 'TeamDiscussionComment'; - /** - * Check if the current viewer can delete this object. - */ - viewerCanDelete: ScalarsEnums['Boolean']; - $on: $Deletable; -} - -/** - * Autogenerated return type of DeleteBranchProtectionRule - */ -export interface DeleteBranchProtectionRulePayload { - __typename?: 'DeleteBranchProtectionRulePayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; -} - -/** - * Autogenerated return type of DeleteDeployment - */ -export interface DeleteDeploymentPayload { - __typename?: 'DeleteDeploymentPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; -} - -/** - * Autogenerated return type of DeleteDiscussionComment - */ -export interface DeleteDiscussionCommentPayload { - __typename?: 'DeleteDiscussionCommentPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The discussion comment that was just deleted. - */ - comment?: Maybe; -} - -/** - * Autogenerated return type of DeleteDiscussion - */ -export interface DeleteDiscussionPayload { - __typename?: 'DeleteDiscussionPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The discussion that was just deleted. - */ - discussion?: Maybe; -} - -/** - * Autogenerated return type of DeleteEnvironment - */ -export interface DeleteEnvironmentPayload { - __typename?: 'DeleteEnvironmentPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; -} - -/** - * Autogenerated return type of DeleteIpAllowListEntry - */ -export interface DeleteIpAllowListEntryPayload { - __typename?: 'DeleteIpAllowListEntryPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The IP allow list entry that was deleted. - */ - ipAllowListEntry?: Maybe; -} - -/** - * Autogenerated return type of DeleteIssueComment - */ -export interface DeleteIssueCommentPayload { - __typename?: 'DeleteIssueCommentPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; -} - -/** - * Autogenerated return type of DeleteIssue - */ -export interface DeleteIssuePayload { - __typename?: 'DeleteIssuePayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The repository the issue belonged to - */ - repository?: Maybe; -} - -/** - * Autogenerated return type of DeleteProjectCard - */ -export interface DeleteProjectCardPayload { - __typename?: 'DeleteProjectCardPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The column the deleted card was in. - */ - column?: Maybe; - /** - * The deleted card ID. - */ - deletedCardId?: Maybe; -} - -/** - * Autogenerated return type of DeleteProjectColumn - */ -export interface DeleteProjectColumnPayload { - __typename?: 'DeleteProjectColumnPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The deleted column ID. - */ - deletedColumnId?: Maybe; - /** - * The project the deleted column was in. - */ - project?: Maybe; -} - -/** - * Autogenerated return type of DeleteProjectNextItem - */ -export interface DeleteProjectNextItemPayload { - __typename?: 'DeleteProjectNextItemPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The ID of the deleted item. - */ - deletedItemId?: Maybe; -} - -/** - * Autogenerated return type of DeleteProject - */ -export interface DeleteProjectPayload { - __typename?: 'DeleteProjectPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The repository or organization the project was removed from. - */ - owner?: Maybe; -} - -/** - * Autogenerated return type of DeletePullRequestReviewComment - */ -export interface DeletePullRequestReviewCommentPayload { - __typename?: 'DeletePullRequestReviewCommentPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The pull request review the deleted comment belonged to. - */ - pullRequestReview?: Maybe; -} - -/** - * Autogenerated return type of DeletePullRequestReview - */ -export interface DeletePullRequestReviewPayload { - __typename?: 'DeletePullRequestReviewPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The deleted pull request review. - */ - pullRequestReview?: Maybe; -} - -/** - * Autogenerated return type of DeleteRef - */ -export interface DeleteRefPayload { - __typename?: 'DeleteRefPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; -} - -/** - * Autogenerated return type of DeleteTeamDiscussionComment - */ -export interface DeleteTeamDiscussionCommentPayload { - __typename?: 'DeleteTeamDiscussionCommentPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; -} - -/** - * Autogenerated return type of DeleteTeamDiscussion - */ -export interface DeleteTeamDiscussionPayload { - __typename?: 'DeleteTeamDiscussionPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; -} - -/** - * Autogenerated return type of DeleteVerifiableDomain - */ -export interface DeleteVerifiableDomainPayload { - __typename?: 'DeleteVerifiableDomainPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The owning account from which the domain was deleted. - */ - owner?: Maybe; -} - -/** - * Represents a 'demilestoned' event on a given issue or pull request. - */ -export interface DemilestonedEvent { - __typename?: 'DemilestonedEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - id: ScalarsEnums['ID']; - /** - * Identifies the milestone title associated with the 'demilestoned' event. - */ - milestoneTitle: ScalarsEnums['String']; - /** - * Object referenced by event. - */ - subject: MilestoneItem; -} - -/** - * A repository deploy key. - */ -export interface DeployKey { - __typename?: 'DeployKey'; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - id: ScalarsEnums['ID']; - /** - * The deploy key. - */ - key: ScalarsEnums['String']; - /** - * Whether or not the deploy key is read only. - */ - readOnly: ScalarsEnums['Boolean']; - /** - * The deploy key title. - */ - title: ScalarsEnums['String']; - /** - * Whether or not the deploy key has been verified. - */ - verified: ScalarsEnums['Boolean']; -} - -/** - * The connection type for DeployKey. - */ -export interface DeployKeyConnection { - __typename?: 'DeployKeyConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface DeployKeyEdge { - __typename?: 'DeployKeyEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * Represents a 'deployed' event on a given pull request. - */ -export interface DeployedEvent { - __typename?: 'DeployedEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * Identifies the primary key from the database. - */ - databaseId?: Maybe; - /** - * The deployment associated with the 'deployed' event. - */ - deployment: Deployment; - id: ScalarsEnums['ID']; - /** - * PullRequest referenced by event. - */ - pullRequest: PullRequest; - /** - * The ref associated with the 'deployed' event. - */ - ref?: Maybe; -} - -/** - * Represents triggered deployment instance. - */ -export interface Deployment { - __typename?: 'Deployment'; - /** - * Identifies the commit sha of the deployment. - */ - commit?: Maybe; - /** - * Identifies the oid of the deployment commit, even if the commit has been deleted. - */ - commitOid: ScalarsEnums['String']; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * Identifies the actor who triggered the deployment. - */ - creator: Actor; - /** - * Identifies the primary key from the database. - */ - databaseId?: Maybe; - /** - * The deployment description. - */ - description?: Maybe; - /** - * The latest environment to which this deployment was made. - */ - environment?: Maybe; - id: ScalarsEnums['ID']; - /** - * The latest environment to which this deployment was made. - */ - latestEnvironment?: Maybe; - /** - * The latest status of this deployment. - */ - latestStatus?: Maybe; - /** - * The original environment to which this deployment was made. - */ - originalEnvironment?: Maybe; - /** - * Extra information that a deployment system might need. - */ - payload?: Maybe; - /** - * Identifies the Ref of the deployment, if the deployment was created by ref. - */ - ref?: Maybe; - /** - * Identifies the repository associated with the deployment. - */ - repository: Repository; - /** - * The current state of the deployment. - */ - state?: Maybe; - /** - * A list of statuses associated with the deployment. - */ - statuses: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => Maybe; - /** - * The deployment task. - */ - task?: Maybe; - /** - * Identifies the date and time when the object was last updated. - */ - updatedAt: ScalarsEnums['DateTime']; -} - -/** - * The connection type for Deployment. - */ -export interface DeploymentConnection { - __typename?: 'DeploymentConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface DeploymentEdge { - __typename?: 'DeploymentEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * Represents a 'deployment_environment_changed' event on a given pull request. - */ -export interface DeploymentEnvironmentChangedEvent { - __typename?: 'DeploymentEnvironmentChangedEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * The deployment status that updated the deployment environment. - */ - deploymentStatus: DeploymentStatus; - id: ScalarsEnums['ID']; - /** - * PullRequest referenced by event. - */ - pullRequest: PullRequest; -} - -/** - * A protection rule. - */ -export interface DeploymentProtectionRule { - __typename?: 'DeploymentProtectionRule'; - /** - * Identifies the primary key from the database. - */ - databaseId?: Maybe; - /** - * The teams or users that can review the deployment - */ - reviewers: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => DeploymentReviewerConnection; - /** - * The timeout in minutes for this protection rule. - */ - timeout: ScalarsEnums['Int']; - /** - * The type of protection rule. - */ - type: ScalarsEnums['DeploymentProtectionRuleType']; -} - -/** - * The connection type for DeploymentProtectionRule. - */ -export interface DeploymentProtectionRuleConnection { - __typename?: 'DeploymentProtectionRuleConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface DeploymentProtectionRuleEdge { - __typename?: 'DeploymentProtectionRuleEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * A request to deploy a workflow run to an environment. - */ -export interface DeploymentRequest { - __typename?: 'DeploymentRequest'; - /** - * Whether or not the current user can approve the deployment - */ - currentUserCanApprove: ScalarsEnums['Boolean']; - /** - * The target environment of the deployment - */ - environment: Environment; - /** - * The teams or users that can review the deployment - */ - reviewers: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => DeploymentReviewerConnection; - /** - * The wait timer in minutes configured in the environment - */ - waitTimer: ScalarsEnums['Int']; - /** - * The wait timer in minutes configured in the environment - */ - waitTimerStartedAt?: Maybe; -} - -/** - * The connection type for DeploymentRequest. - */ -export interface DeploymentRequestConnection { - __typename?: 'DeploymentRequestConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface DeploymentRequestEdge { - __typename?: 'DeploymentRequestEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * A deployment review. - */ -export interface DeploymentReview { - __typename?: 'DeploymentReview'; - /** - * The comment the user left. - */ - comment: ScalarsEnums['String']; - /** - * Identifies the primary key from the database. - */ - databaseId?: Maybe; - /** - * The environments approved or rejected - */ - environments: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => EnvironmentConnection; - id: ScalarsEnums['ID']; - /** - * The decision of the user. - */ - state: ScalarsEnums['DeploymentReviewState']; - /** - * The user that reviewed the deployment. - */ - user: User; -} - -/** - * The connection type for DeploymentReview. - */ -export interface DeploymentReviewConnection { - __typename?: 'DeploymentReviewConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface DeploymentReviewEdge { - __typename?: 'DeploymentReviewEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * Users and teams. - */ -export interface DeploymentReviewer { - __typename?: 'Team' | 'User'; - $on: $DeploymentReviewer; -} - -/** - * The connection type for DeploymentReviewer. - */ -export interface DeploymentReviewerConnection { - __typename?: 'DeploymentReviewerConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface DeploymentReviewerEdge { - __typename?: 'DeploymentReviewerEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * Describes the status of a given deployment attempt. - */ -export interface DeploymentStatus { - __typename?: 'DeploymentStatus'; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * Identifies the actor who triggered the deployment. - */ - creator: Actor; - /** - * Identifies the deployment associated with status. - */ - deployment: Deployment; - /** - * Identifies the description of the deployment. - */ - description?: Maybe; - /** - * Identifies the environment URL of the deployment. - */ - environmentUrl?: Maybe; - id: ScalarsEnums['ID']; - /** - * Identifies the log URL of the deployment. - */ - logUrl?: Maybe; - /** - * Identifies the current state of the deployment. - */ - state: ScalarsEnums['DeploymentStatusState']; - /** - * Identifies the date and time when the object was last updated. - */ - updatedAt: ScalarsEnums['DateTime']; -} - -/** - * The connection type for DeploymentStatus. - */ -export interface DeploymentStatusConnection { - __typename?: 'DeploymentStatusConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface DeploymentStatusEdge { - __typename?: 'DeploymentStatusEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * Autogenerated return type of DisablePullRequestAutoMerge - */ -export interface DisablePullRequestAutoMergePayload { - __typename?: 'DisablePullRequestAutoMergePayload'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The pull request auto merge was disabled on. - */ - pullRequest?: Maybe; -} - -/** - * Represents a 'disconnected' event on a given issue or pull request. - */ -export interface DisconnectedEvent { - __typename?: 'DisconnectedEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - id: ScalarsEnums['ID']; - /** - * Reference originated in a different repository. - */ - isCrossRepository: ScalarsEnums['Boolean']; - /** - * Issue or pull request from which the issue was disconnected. - */ - source: ReferencedSubject; - /** - * Issue or pull request which was disconnected. - */ - subject: ReferencedSubject; -} - -/** - * A discussion in a repository. - */ -export interface Discussion { - __typename?: 'Discussion'; - /** - * Reason that the conversation was locked. - */ - activeLockReason?: Maybe; - /** - * The comment chosen as this discussion's answer, if any. - */ - answer?: Maybe; - /** - * The time when a user chose this discussion's answer, if answered. - */ - answerChosenAt?: Maybe; - /** - * The user who chose this discussion's answer, if answered. - */ - answerChosenBy?: Maybe; - /** - * The actor who authored the comment. - */ - author?: Maybe; - /** - * Author's association with the subject of the comment. - */ - authorAssociation: ScalarsEnums['CommentAuthorAssociation']; - /** - * The main text of the discussion post. - */ - body: ScalarsEnums['String']; - /** - * The body rendered to HTML. - */ - bodyHTML: ScalarsEnums['HTML']; - /** - * The body rendered to text. - */ - bodyText: ScalarsEnums['String']; - /** - * The category for this discussion. - */ - category: DiscussionCategory; - /** - * The replies to the discussion. - */ - comments: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => DiscussionCommentConnection; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * Check if this comment was created via an email reply. - */ - createdViaEmail: ScalarsEnums['Boolean']; - /** - * Identifies the primary key from the database. - */ - databaseId?: Maybe; - /** - * The actor who edited the comment. - */ - editor?: Maybe; - id: ScalarsEnums['ID']; - /** - * Check if this comment was edited and includes an edit with the creation data - */ - includesCreatedEdit: ScalarsEnums['Boolean']; - /** - * A list of labels associated with the object. - */ - labels: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for labels returned from the connection. - * @defaultValue `{"field":"CREATED_AT","direction":"ASC"}` - */ - orderBy?: Maybe; - }) => Maybe; - /** - * The moment the editor made the last edit - */ - lastEditedAt?: Maybe; - /** - * `true` if the object is locked - */ - locked: ScalarsEnums['Boolean']; - /** - * The number identifying this discussion within the repository. - */ - number: ScalarsEnums['Int']; - /** - * Identifies when the comment was published at. - */ - publishedAt?: Maybe; - /** - * A list of reactions grouped by content left on the subject. - */ - reactionGroups?: Maybe>; - /** - * A list of Reactions left on the Issue. - */ - reactions: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Allows filtering Reactions by emoji. - */ - content?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Allows specifying the order in which reactions are returned. - */ - orderBy?: Maybe; - }) => ReactionConnection; - /** - * The repository associated with this node. - */ - repository: Repository; - /** - * The path for this discussion. - */ - resourcePath: ScalarsEnums['URI']; - /** - * The title of this discussion. - */ - title: ScalarsEnums['String']; - /** - * Identifies the date and time when the object was last updated. - */ - updatedAt: ScalarsEnums['DateTime']; - /** - * Number of upvotes that this subject has received. - */ - upvoteCount: ScalarsEnums['Int']; - /** - * The URL for this discussion. - */ - url: ScalarsEnums['URI']; - /** - * A list of edits to this content. - */ - userContentEdits: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => Maybe; - /** - * Check if the current viewer can delete this object. - */ - viewerCanDelete: ScalarsEnums['Boolean']; - /** - * Can user react to this subject - */ - viewerCanReact: ScalarsEnums['Boolean']; - /** - * Check if the viewer is able to change their subscription status for the repository. - */ - viewerCanSubscribe: ScalarsEnums['Boolean']; - /** - * Check if the current viewer can update this object. - */ - viewerCanUpdate: ScalarsEnums['Boolean']; - /** - * Whether or not the current user can add or remove an upvote on this subject. - */ - viewerCanUpvote: ScalarsEnums['Boolean']; - /** - * Did the viewer author this comment. - */ - viewerDidAuthor: ScalarsEnums['Boolean']; - /** - * Whether or not the current user has already upvoted this subject. - */ - viewerHasUpvoted: ScalarsEnums['Boolean']; - /** - * Identifies if the viewer is watching, not watching, or ignoring the subscribable entity. - */ - viewerSubscription?: Maybe; -} - -/** - * A category for discussions in a repository. - */ -export interface DiscussionCategory { - __typename?: 'DiscussionCategory'; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * A description of this category. - */ - description?: Maybe; - /** - * An emoji representing this category. - */ - emoji: ScalarsEnums['String']; - /** - * This category's emoji rendered as HTML. - */ - emojiHTML: ScalarsEnums['HTML']; - id: ScalarsEnums['ID']; - /** - * Whether or not discussions in this category support choosing an answer with the markDiscussionCommentAsAnswer mutation. - */ - isAnswerable: ScalarsEnums['Boolean']; - /** - * The name of this category. - */ - name: ScalarsEnums['String']; - /** - * The repository associated with this node. - */ - repository: Repository; - /** - * Identifies the date and time when the object was last updated. - */ - updatedAt: ScalarsEnums['DateTime']; -} - -/** - * The connection type for DiscussionCategory. - */ -export interface DiscussionCategoryConnection { - __typename?: 'DiscussionCategoryConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface DiscussionCategoryEdge { - __typename?: 'DiscussionCategoryEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * A comment on a discussion. - */ -export interface DiscussionComment { - __typename?: 'DiscussionComment'; - /** - * The actor who authored the comment. - */ - author?: Maybe; - /** - * Author's association with the subject of the comment. - */ - authorAssociation: ScalarsEnums['CommentAuthorAssociation']; - /** - * The body as Markdown. - */ - body: ScalarsEnums['String']; - /** - * The body rendered to HTML. - */ - bodyHTML: ScalarsEnums['HTML']; - /** - * The body rendered to text. - */ - bodyText: ScalarsEnums['String']; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * Check if this comment was created via an email reply. - */ - createdViaEmail: ScalarsEnums['Boolean']; - /** - * Identifies the primary key from the database. - */ - databaseId?: Maybe; - /** - * The time when this replied-to comment was deleted - */ - deletedAt?: Maybe; - /** - * The discussion this comment was created in - */ - discussion?: Maybe; - /** - * The actor who edited the comment. - */ - editor?: Maybe; - id: ScalarsEnums['ID']; - /** - * Check if this comment was edited and includes an edit with the creation data - */ - includesCreatedEdit: ScalarsEnums['Boolean']; - /** - * Has this comment been chosen as the answer of its discussion? - */ - isAnswer: ScalarsEnums['Boolean']; - /** - * Returns whether or not a comment has been minimized. - */ - isMinimized: ScalarsEnums['Boolean']; - /** - * The moment the editor made the last edit - */ - lastEditedAt?: Maybe; - /** - * Returns why the comment was minimized. - */ - minimizedReason?: Maybe; - /** - * Identifies when the comment was published at. - */ - publishedAt?: Maybe; - /** - * A list of reactions grouped by content left on the subject. - */ - reactionGroups?: Maybe>; - /** - * A list of Reactions left on the Issue. - */ - reactions: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Allows filtering Reactions by emoji. - */ - content?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Allows specifying the order in which reactions are returned. - */ - orderBy?: Maybe; - }) => ReactionConnection; - /** - * The threaded replies to this comment. - */ - replies: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => DiscussionCommentConnection; - /** - * The discussion comment this comment is a reply to - */ - replyTo?: Maybe; - /** - * The path for this discussion comment. - */ - resourcePath: ScalarsEnums['URI']; - /** - * Identifies the date and time when the object was last updated. - */ - updatedAt: ScalarsEnums['DateTime']; - /** - * Number of upvotes that this subject has received. - */ - upvoteCount: ScalarsEnums['Int']; - /** - * The URL for this discussion comment. - */ - url: ScalarsEnums['URI']; - /** - * A list of edits to this content. - */ - userContentEdits: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => Maybe; - /** - * Check if the current viewer can delete this object. - */ - viewerCanDelete: ScalarsEnums['Boolean']; - /** - * Can the current user mark this comment as an answer? - */ - viewerCanMarkAsAnswer: ScalarsEnums['Boolean']; - /** - * Check if the current viewer can minimize this object. - */ - viewerCanMinimize: ScalarsEnums['Boolean']; - /** - * Can user react to this subject - */ - viewerCanReact: ScalarsEnums['Boolean']; - /** - * Can the current user unmark this comment as an answer? - */ - viewerCanUnmarkAsAnswer: ScalarsEnums['Boolean']; - /** - * Check if the current viewer can update this object. - */ - viewerCanUpdate: ScalarsEnums['Boolean']; - /** - * Whether or not the current user can add or remove an upvote on this subject. - */ - viewerCanUpvote: ScalarsEnums['Boolean']; - /** - * Reasons why the current viewer can not update this comment. - */ - viewerCannotUpdateReasons: Array; - /** - * Did the viewer author this comment. - */ - viewerDidAuthor: ScalarsEnums['Boolean']; - /** - * Whether or not the current user has already upvoted this subject. - */ - viewerHasUpvoted: ScalarsEnums['Boolean']; -} - -/** - * The connection type for DiscussionComment. - */ -export interface DiscussionCommentConnection { - __typename?: 'DiscussionCommentConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface DiscussionCommentEdge { - __typename?: 'DiscussionCommentEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * The connection type for Discussion. - */ -export interface DiscussionConnection { - __typename?: 'DiscussionConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface DiscussionEdge { - __typename?: 'DiscussionEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * Autogenerated return type of DismissPullRequestReview - */ -export interface DismissPullRequestReviewPayload { - __typename?: 'DismissPullRequestReviewPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The dismissed pull request review. - */ - pullRequestReview?: Maybe; -} - -/** - * Autogenerated return type of DismissRepositoryVulnerabilityAlert - */ -export interface DismissRepositoryVulnerabilityAlertPayload { - __typename?: 'DismissRepositoryVulnerabilityAlertPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The Dependabot alert that was dismissed - */ - repositoryVulnerabilityAlert?: Maybe; -} - -/** - * Autogenerated return type of EnablePullRequestAutoMerge - */ -export interface EnablePullRequestAutoMergePayload { - __typename?: 'EnablePullRequestAutoMergePayload'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The pull request auto-merge was enabled on. - */ - pullRequest?: Maybe; -} - -/** - * An account to manage multiple organizations with consolidated policy and billing. - */ -export interface Enterprise { - __typename?: 'Enterprise'; - /** - * A URL pointing to the enterprise's public avatar. - */ - avatarUrl: (args?: { - /** - * The size of the resulting square image. - */ - size?: Maybe; - }) => ScalarsEnums['URI']; - /** - * Enterprise billing information visible to enterprise billing managers. - */ - billingInfo?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * Identifies the primary key from the database. - */ - databaseId?: Maybe; - /** - * The description of the enterprise. - */ - description?: Maybe; - /** - * The description of the enterprise as HTML. - */ - descriptionHTML: ScalarsEnums['HTML']; - id: ScalarsEnums['ID']; - /** - * The location of the enterprise. - */ - location?: Maybe; - /** - * A list of users who are members of this enterprise. - */ - members: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Only return members within the selected GitHub Enterprise deployment - */ - deployment?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for members returned from the connection. - * @defaultValue `{"field":"LOGIN","direction":"ASC"}` - */ - orderBy?: Maybe; - /** - * Only return members within the organizations with these logins - */ - organizationLogins?: Maybe>; - /** - * The search string to look for. - */ - query?: Maybe; - /** - * The role of the user in the enterprise organization or server. - */ - role?: Maybe; - }) => EnterpriseMemberConnection; - /** - * The name of the enterprise. - */ - name: ScalarsEnums['String']; - /** - * A list of organizations that belong to this enterprise. - */ - organizations: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for organizations returned from the connection. - * @defaultValue `{"field":"LOGIN","direction":"ASC"}` - */ - orderBy?: Maybe; - /** - * The search string to look for. - */ - query?: Maybe; - /** - * The viewer's role in an organization. - */ - viewerOrganizationRole?: Maybe; - }) => OrganizationConnection; - /** - * Enterprise information only visible to enterprise owners. - */ - ownerInfo?: Maybe; - /** - * The HTTP path for this enterprise. - */ - resourcePath: ScalarsEnums['URI']; - /** - * The URL-friendly identifier for the enterprise. - */ - slug: ScalarsEnums['String']; - /** - * The HTTP URL for this enterprise. - */ - url: ScalarsEnums['URI']; - /** - * A list of user accounts on this enterprise. - */ - userAccounts: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => EnterpriseUserAccountConnection; - /** - * Is the current viewer an admin of this enterprise? - */ - viewerIsAdmin: ScalarsEnums['Boolean']; - /** - * The URL of the enterprise website. - */ - websiteUrl?: Maybe; -} - -/** - * The connection type for User. - */ -export interface EnterpriseAdministratorConnection { - __typename?: 'EnterpriseAdministratorConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * A User who is an administrator of an enterprise. - */ -export interface EnterpriseAdministratorEdge { - __typename?: 'EnterpriseAdministratorEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; - /** - * The role of the administrator. - */ - role: ScalarsEnums['EnterpriseAdministratorRole']; -} - -/** - * An invitation for a user to become an owner or billing manager of an enterprise. - */ -export interface EnterpriseAdministratorInvitation { - __typename?: 'EnterpriseAdministratorInvitation'; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * The email of the person who was invited to the enterprise. - */ - email?: Maybe; - /** - * The enterprise the invitation is for. - */ - enterprise: Enterprise; - id: ScalarsEnums['ID']; - /** - * The user who was invited to the enterprise. - */ - invitee?: Maybe; - /** - * The user who created the invitation. - */ - inviter?: Maybe; - /** - * The invitee's pending role in the enterprise (owner or billing_manager). - */ - role: ScalarsEnums['EnterpriseAdministratorRole']; -} - -/** - * The connection type for EnterpriseAdministratorInvitation. - */ -export interface EnterpriseAdministratorInvitationConnection { - __typename?: 'EnterpriseAdministratorInvitationConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface EnterpriseAdministratorInvitationEdge { - __typename?: 'EnterpriseAdministratorInvitationEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * Metadata for an audit entry containing enterprise account information. - */ -export interface EnterpriseAuditEntryData { - __typename?: - | 'MembersCanDeleteReposClearAuditEntry' - | 'MembersCanDeleteReposDisableAuditEntry' - | 'MembersCanDeleteReposEnableAuditEntry' - | 'OrgInviteToBusinessAuditEntry' - | 'PrivateRepositoryForkingDisableAuditEntry' - | 'PrivateRepositoryForkingEnableAuditEntry' - | 'RepositoryVisibilityChangeDisableAuditEntry' - | 'RepositoryVisibilityChangeEnableAuditEntry'; - /** - * The HTTP path for this enterprise. - */ - enterpriseResourcePath?: Maybe; - /** - * The slug of the enterprise. - */ - enterpriseSlug?: Maybe; - /** - * The HTTP URL for this enterprise. - */ - enterpriseUrl?: Maybe; - $on: $EnterpriseAuditEntryData; -} - -/** - * Enterprise billing information visible to enterprise billing managers and owners. - */ -export interface EnterpriseBillingInfo { - __typename?: 'EnterpriseBillingInfo'; - /** - * The number of licenseable users/emails across the enterprise. - */ - allLicensableUsersCount: ScalarsEnums['Int']; - /** - * The number of data packs used by all organizations owned by the enterprise. - */ - assetPacks: ScalarsEnums['Int']; - /** - * The number of available seats across all owned organizations based on the unique number of billable users. - * @deprecated `availableSeats` will be replaced with `totalAvailableLicenses` to provide more clarity on the value being returned Use EnterpriseBillingInfo.totalAvailableLicenses instead. Removal on 2020-01-01 UTC. - */ - availableSeats: ScalarsEnums['Int']; - /** - * The bandwidth quota in GB for all organizations owned by the enterprise. - */ - bandwidthQuota: ScalarsEnums['Float']; - /** - * The bandwidth usage in GB for all organizations owned by the enterprise. - */ - bandwidthUsage: ScalarsEnums['Float']; - /** - * The bandwidth usage as a percentage of the bandwidth quota. - */ - bandwidthUsagePercentage: ScalarsEnums['Int']; - /** - * The total seats across all organizations owned by the enterprise. - * @deprecated `seats` will be replaced with `totalLicenses` to provide more clarity on the value being returned Use EnterpriseBillingInfo.totalLicenses instead. Removal on 2020-01-01 UTC. - */ - seats: ScalarsEnums['Int']; - /** - * The storage quota in GB for all organizations owned by the enterprise. - */ - storageQuota: ScalarsEnums['Float']; - /** - * The storage usage in GB for all organizations owned by the enterprise. - */ - storageUsage: ScalarsEnums['Float']; - /** - * The storage usage as a percentage of the storage quota. - */ - storageUsagePercentage: ScalarsEnums['Int']; - /** - * The number of available licenses across all owned organizations based on the unique number of billable users. - */ - totalAvailableLicenses: ScalarsEnums['Int']; - /** - * The total number of licenses allocated. - */ - totalLicenses: ScalarsEnums['Int']; -} - -/** - * An identity provider configured to provision identities for an enterprise. - */ -export interface EnterpriseIdentityProvider { - __typename?: 'EnterpriseIdentityProvider'; - /** - * The digest algorithm used to sign SAML requests for the identity provider. - */ - digestMethod?: Maybe; - /** - * The enterprise this identity provider belongs to. - */ - enterprise?: Maybe; - /** - * ExternalIdentities provisioned by this identity provider. - */ - externalIdentities: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Filter to external identities with valid org membership only - */ - membersOnly?: Maybe; - }) => ExternalIdentityConnection; - id: ScalarsEnums['ID']; - /** - * The x509 certificate used by the identity provider to sign assertions and responses. - */ - idpCertificate?: Maybe; - /** - * The Issuer Entity ID for the SAML identity provider. - */ - issuer?: Maybe; - /** - * Recovery codes that can be used by admins to access the enterprise if the identity provider is unavailable. - */ - recoveryCodes?: Maybe>; - /** - * The signature algorithm used to sign SAML requests for the identity provider. - */ - signatureMethod?: Maybe; - /** - * The URL endpoint for the identity provider's SAML SSO. - */ - ssoUrl?: Maybe; -} - -/** - * An object that is a member of an enterprise. - */ -export interface EnterpriseMember { - __typename?: 'EnterpriseUserAccount' | 'User'; - $on: $EnterpriseMember; -} - -/** - * The connection type for EnterpriseMember. - */ -export interface EnterpriseMemberConnection { - __typename?: 'EnterpriseMemberConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * A User who is a member of an enterprise through one or more organizations. - */ -export interface EnterpriseMemberEdge { - __typename?: 'EnterpriseMemberEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * Whether the user does not have a license for the enterprise. - * @deprecated All members consume a license Removal on 2021-01-01 UTC. - */ - isUnlicensed: ScalarsEnums['Boolean']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * The connection type for Organization. - */ -export interface EnterpriseOrganizationMembershipConnection { - __typename?: 'EnterpriseOrganizationMembershipConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An enterprise organization that a user is a member of. - */ -export interface EnterpriseOrganizationMembershipEdge { - __typename?: 'EnterpriseOrganizationMembershipEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; - /** - * The role of the user in the enterprise membership. - */ - role: ScalarsEnums['EnterpriseUserAccountMembershipRole']; -} - -/** - * The connection type for User. - */ -export interface EnterpriseOutsideCollaboratorConnection { - __typename?: 'EnterpriseOutsideCollaboratorConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * A User who is an outside collaborator of an enterprise through one or more organizations. - */ -export interface EnterpriseOutsideCollaboratorEdge { - __typename?: 'EnterpriseOutsideCollaboratorEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * Whether the outside collaborator does not have a license for the enterprise. - * @deprecated All outside collaborators consume a license Removal on 2021-01-01 UTC. - */ - isUnlicensed: ScalarsEnums['Boolean']; - /** - * The item at the end of the edge. - */ - node?: Maybe; - /** - * The enterprise organization repositories this user is a member of. - */ - repositories: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for repositories. - * @defaultValue `{"field":"NAME","direction":"ASC"}` - */ - orderBy?: Maybe; - }) => EnterpriseRepositoryInfoConnection; -} - -/** - * Enterprise information only visible to enterprise owners. - */ -export interface EnterpriseOwnerInfo { - __typename?: 'EnterpriseOwnerInfo'; - /** - * A list of all of the administrators for this enterprise. - */ - admins: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for administrators returned from the connection. - * @defaultValue `{"field":"LOGIN","direction":"ASC"}` - */ - orderBy?: Maybe; - /** - * The search string to look for. - */ - query?: Maybe; - /** - * The role to filter by. - */ - role?: Maybe; - }) => EnterpriseAdministratorConnection; - /** - * A list of users in the enterprise who currently have two-factor authentication disabled. - */ - affiliatedUsersWithTwoFactorDisabled: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => UserConnection; - /** - * Whether or not affiliated users with two-factor authentication disabled exist in the enterprise. - */ - affiliatedUsersWithTwoFactorDisabledExist: ScalarsEnums['Boolean']; - /** - * The setting value for whether private repository forking is enabled for repositories in organizations in this enterprise. - */ - allowPrivateRepositoryForkingSetting: ScalarsEnums['EnterpriseEnabledDisabledSettingValue']; - /** - * A list of enterprise organizations configured with the provided private repository forking setting value. - */ - allowPrivateRepositoryForkingSettingOrganizations: (args: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for organizations with this setting. - * @defaultValue `{"field":"LOGIN","direction":"ASC"}` - */ - orderBy?: Maybe; - /** - * The setting value to find organizations for. - */ - value: Scalars['Boolean']; - }) => OrganizationConnection; - /** - * The setting value for base repository permissions for organizations in this enterprise. - */ - defaultRepositoryPermissionSetting: ScalarsEnums['EnterpriseDefaultRepositoryPermissionSettingValue']; - /** - * A list of enterprise organizations configured with the provided base repository permission. - */ - defaultRepositoryPermissionSettingOrganizations: (args: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for organizations with this setting. - * @defaultValue `{"field":"LOGIN","direction":"ASC"}` - */ - orderBy?: Maybe; - /** - * The permission to find organizations for. - */ - value: DefaultRepositoryPermissionField; - }) => OrganizationConnection; - /** - * A list of domains owned by the enterprise. - */ - domains: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Filter whether or not the domain is approved. - */ - isApproved?: Maybe; - /** - * Filter whether or not the domain is verified. - */ - isVerified?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for verifiable domains returned. - * @defaultValue `{"field":"DOMAIN","direction":"ASC"}` - */ - orderBy?: Maybe; - }) => VerifiableDomainConnection; - /** - * Enterprise Server installations owned by the enterprise. - */ - enterpriseServerInstallations: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Whether or not to only return installations discovered via GitHub Connect. - * @defaultValue `false` - */ - connectedOnly?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for Enterprise Server installations returned. - * @defaultValue `{"field":"HOST_NAME","direction":"ASC"}` - */ - orderBy?: Maybe; - }) => EnterpriseServerInstallationConnection; - /** - * The setting value for whether the enterprise has an IP allow list enabled. - */ - ipAllowListEnabledSetting: ScalarsEnums['IpAllowListEnabledSettingValue']; - /** - * The IP addresses that are allowed to access resources owned by the enterprise. - */ - ipAllowListEntries: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for IP allow list entries returned. - * @defaultValue `{"field":"ALLOW_LIST_VALUE","direction":"ASC"}` - */ - orderBy?: Maybe; - }) => IpAllowListEntryConnection; - /** - * The setting value for whether the enterprise has IP allow list configuration for installed GitHub Apps enabled. - */ - ipAllowListForInstalledAppsEnabledSetting: ScalarsEnums['IpAllowListForInstalledAppsEnabledSettingValue']; - /** - * Whether or not the base repository permission is currently being updated. - */ - isUpdatingDefaultRepositoryPermission: ScalarsEnums['Boolean']; - /** - * Whether the two-factor authentication requirement is currently being enforced. - */ - isUpdatingTwoFactorRequirement: ScalarsEnums['Boolean']; - /** - * The setting value for whether organization members with admin permissions on a repository can change repository visibility. - */ - membersCanChangeRepositoryVisibilitySetting: ScalarsEnums['EnterpriseEnabledDisabledSettingValue']; - /** - * A list of enterprise organizations configured with the provided can change repository visibility setting value. - */ - membersCanChangeRepositoryVisibilitySettingOrganizations: (args: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for organizations with this setting. - * @defaultValue `{"field":"LOGIN","direction":"ASC"}` - */ - orderBy?: Maybe; - /** - * The setting value to find organizations for. - */ - value: Scalars['Boolean']; - }) => OrganizationConnection; - /** - * The setting value for whether members of organizations in the enterprise can create internal repositories. - */ - membersCanCreateInternalRepositoriesSetting?: Maybe; - /** - * The setting value for whether members of organizations in the enterprise can create private repositories. - */ - membersCanCreatePrivateRepositoriesSetting?: Maybe; - /** - * The setting value for whether members of organizations in the enterprise can create public repositories. - */ - membersCanCreatePublicRepositoriesSetting?: Maybe; - /** - * The setting value for whether members of organizations in the enterprise can create repositories. - */ - membersCanCreateRepositoriesSetting?: Maybe< - ScalarsEnums['EnterpriseMembersCanCreateRepositoriesSettingValue'] - >; - /** - * A list of enterprise organizations configured with the provided repository creation setting value. - */ - membersCanCreateRepositoriesSettingOrganizations: (args: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for organizations with this setting. - * @defaultValue `{"field":"LOGIN","direction":"ASC"}` - */ - orderBy?: Maybe; - /** - * The setting to find organizations for. - */ - value: OrganizationMembersCanCreateRepositoriesSettingValue; - }) => OrganizationConnection; - /** - * The setting value for whether members with admin permissions for repositories can delete issues. - */ - membersCanDeleteIssuesSetting: ScalarsEnums['EnterpriseEnabledDisabledSettingValue']; - /** - * A list of enterprise organizations configured with the provided members can delete issues setting value. - */ - membersCanDeleteIssuesSettingOrganizations: (args: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for organizations with this setting. - * @defaultValue `{"field":"LOGIN","direction":"ASC"}` - */ - orderBy?: Maybe; - /** - * The setting value to find organizations for. - */ - value: Scalars['Boolean']; - }) => OrganizationConnection; - /** - * The setting value for whether members with admin permissions for repositories can delete or transfer repositories. - */ - membersCanDeleteRepositoriesSetting: ScalarsEnums['EnterpriseEnabledDisabledSettingValue']; - /** - * A list of enterprise organizations configured with the provided members can delete repositories setting value. - */ - membersCanDeleteRepositoriesSettingOrganizations: (args: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for organizations with this setting. - * @defaultValue `{"field":"LOGIN","direction":"ASC"}` - */ - orderBy?: Maybe; - /** - * The setting value to find organizations for. - */ - value: Scalars['Boolean']; - }) => OrganizationConnection; - /** - * The setting value for whether members of organizations in the enterprise can invite outside collaborators. - */ - membersCanInviteCollaboratorsSetting: ScalarsEnums['EnterpriseEnabledDisabledSettingValue']; - /** - * A list of enterprise organizations configured with the provided members can invite collaborators setting value. - */ - membersCanInviteCollaboratorsSettingOrganizations: (args: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for organizations with this setting. - * @defaultValue `{"field":"LOGIN","direction":"ASC"}` - */ - orderBy?: Maybe; - /** - * The setting value to find organizations for. - */ - value: Scalars['Boolean']; - }) => OrganizationConnection; - /** - * Indicates whether members of this enterprise's organizations can purchase additional services for those organizations. - */ - membersCanMakePurchasesSetting: ScalarsEnums['EnterpriseMembersCanMakePurchasesSettingValue']; - /** - * The setting value for whether members with admin permissions for repositories can update protected branches. - */ - membersCanUpdateProtectedBranchesSetting: ScalarsEnums['EnterpriseEnabledDisabledSettingValue']; - /** - * A list of enterprise organizations configured with the provided members can update protected branches setting value. - */ - membersCanUpdateProtectedBranchesSettingOrganizations: (args: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for organizations with this setting. - * @defaultValue `{"field":"LOGIN","direction":"ASC"}` - */ - orderBy?: Maybe; - /** - * The setting value to find organizations for. - */ - value: Scalars['Boolean']; - }) => OrganizationConnection; - /** - * The setting value for whether members can view dependency insights. - */ - membersCanViewDependencyInsightsSetting: ScalarsEnums['EnterpriseEnabledDisabledSettingValue']; - /** - * A list of enterprise organizations configured with the provided members can view dependency insights setting value. - */ - membersCanViewDependencyInsightsSettingOrganizations: (args: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for organizations with this setting. - * @defaultValue `{"field":"LOGIN","direction":"ASC"}` - */ - orderBy?: Maybe; - /** - * The setting value to find organizations for. - */ - value: Scalars['Boolean']; - }) => OrganizationConnection; - /** - * Indicates if email notification delivery for this enterprise is restricted to verified or approved domains. - */ - notificationDeliveryRestrictionEnabledSetting: ScalarsEnums['NotificationRestrictionSettingValue']; - /** - * The OIDC Identity Provider for the enterprise. - */ - oidcProvider?: Maybe; - /** - * The setting value for whether organization projects are enabled for organizations in this enterprise. - */ - organizationProjectsSetting: ScalarsEnums['EnterpriseEnabledDisabledSettingValue']; - /** - * A list of enterprise organizations configured with the provided organization projects setting value. - */ - organizationProjectsSettingOrganizations: (args: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for organizations with this setting. - * @defaultValue `{"field":"LOGIN","direction":"ASC"}` - */ - orderBy?: Maybe; - /** - * The setting value to find organizations for. - */ - value: Scalars['Boolean']; - }) => OrganizationConnection; - /** - * A list of outside collaborators across the repositories in the enterprise. - */ - outsideCollaborators: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * The login of one specific outside collaborator. - */ - login?: Maybe; - /** - * Ordering options for outside collaborators returned from the connection. - * @defaultValue `{"field":"LOGIN","direction":"ASC"}` - */ - orderBy?: Maybe; - /** - * The search string to look for. - */ - query?: Maybe; - /** - * Only return outside collaborators on repositories with this visibility. - */ - visibility?: Maybe; - }) => EnterpriseOutsideCollaboratorConnection; - /** - * A list of pending administrator invitations for the enterprise. - */ - pendingAdminInvitations: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for pending enterprise administrator invitations returned from the connection. - * @defaultValue `{"field":"CREATED_AT","direction":"DESC"}` - */ - orderBy?: Maybe; - /** - * The search string to look for. - */ - query?: Maybe; - /** - * The role to filter by. - */ - role?: Maybe; - }) => EnterpriseAdministratorInvitationConnection; - /** - * A list of pending collaborator invitations across the repositories in the enterprise. - */ - pendingCollaboratorInvitations: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for pending repository collaborator invitations returned from the connection. - * @defaultValue `{"field":"CREATED_AT","direction":"DESC"}` - */ - orderBy?: Maybe; - /** - * The search string to look for. - */ - query?: Maybe; - }) => RepositoryInvitationConnection; - /** - * A list of pending collaborators across the repositories in the enterprise. - * @deprecated Repository invitations can now be associated with an email, not only an invitee. Use the `pendingCollaboratorInvitations` field instead. Removal on 2020-10-01 UTC. - */ - pendingCollaborators: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for pending repository collaborator invitations returned from the connection. - * @defaultValue `{"field":"CREATED_AT","direction":"DESC"}` - */ - orderBy?: Maybe; - /** - * The search string to look for. - */ - query?: Maybe; - }) => EnterprisePendingCollaboratorConnection; - /** - * A list of pending member invitations for organizations in the enterprise. - */ - pendingMemberInvitations: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * The search string to look for. - */ - query?: Maybe; - }) => EnterprisePendingMemberInvitationConnection; - /** - * The setting value for whether repository projects are enabled in this enterprise. - */ - repositoryProjectsSetting: ScalarsEnums['EnterpriseEnabledDisabledSettingValue']; - /** - * A list of enterprise organizations configured with the provided repository projects setting value. - */ - repositoryProjectsSettingOrganizations: (args: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for organizations with this setting. - * @defaultValue `{"field":"LOGIN","direction":"ASC"}` - */ - orderBy?: Maybe; - /** - * The setting value to find organizations for. - */ - value: Scalars['Boolean']; - }) => OrganizationConnection; - /** - * The SAML Identity Provider for the enterprise. - */ - samlIdentityProvider?: Maybe; - /** - * A list of enterprise organizations configured with the SAML single sign-on setting value. - */ - samlIdentityProviderSettingOrganizations: (args: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for organizations with this setting. - * @defaultValue `{"field":"LOGIN","direction":"ASC"}` - */ - orderBy?: Maybe; - /** - * The setting value to find organizations for. - */ - value: IdentityProviderConfigurationState; - }) => OrganizationConnection; - /** - * A list of members with a support entitlement. - */ - supportEntitlements: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for support entitlement users returned from the connection. - * @defaultValue `{"field":"LOGIN","direction":"ASC"}` - */ - orderBy?: Maybe; - }) => EnterpriseMemberConnection; - /** - * The setting value for whether team discussions are enabled for organizations in this enterprise. - */ - teamDiscussionsSetting: ScalarsEnums['EnterpriseEnabledDisabledSettingValue']; - /** - * A list of enterprise organizations configured with the provided team discussions setting value. - */ - teamDiscussionsSettingOrganizations: (args: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for organizations with this setting. - * @defaultValue `{"field":"LOGIN","direction":"ASC"}` - */ - orderBy?: Maybe; - /** - * The setting value to find organizations for. - */ - value: Scalars['Boolean']; - }) => OrganizationConnection; - /** - * The setting value for whether the enterprise requires two-factor authentication for its organizations and users. - */ - twoFactorRequiredSetting: ScalarsEnums['EnterpriseEnabledSettingValue']; - /** - * A list of enterprise organizations configured with the two-factor authentication setting value. - */ - twoFactorRequiredSettingOrganizations: (args: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for organizations with this setting. - * @defaultValue `{"field":"LOGIN","direction":"ASC"}` - */ - orderBy?: Maybe; - /** - * The setting value to find organizations for. - */ - value: Scalars['Boolean']; - }) => OrganizationConnection; -} - -/** - * The connection type for User. - */ -export interface EnterprisePendingCollaboratorConnection { - __typename?: 'EnterprisePendingCollaboratorConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * A user with an invitation to be a collaborator on a repository owned by an organization in an enterprise. - */ -export interface EnterprisePendingCollaboratorEdge { - __typename?: 'EnterprisePendingCollaboratorEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * Whether the invited collaborator does not have a license for the enterprise. - * @deprecated All pending collaborators consume a license Removal on 2021-01-01 UTC. - */ - isUnlicensed: ScalarsEnums['Boolean']; - /** - * The item at the end of the edge. - */ - node?: Maybe; - /** - * The enterprise organization repositories this user is a member of. - */ - repositories: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for repositories. - * @defaultValue `{"field":"NAME","direction":"ASC"}` - */ - orderBy?: Maybe; - }) => EnterpriseRepositoryInfoConnection; -} - -/** - * The connection type for OrganizationInvitation. - */ -export interface EnterprisePendingMemberInvitationConnection { - __typename?: 'EnterprisePendingMemberInvitationConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; - /** - * Identifies the total count of unique users in the connection. - */ - totalUniqueUserCount: ScalarsEnums['Int']; -} - -/** - * An invitation to be a member in an enterprise organization. - */ -export interface EnterprisePendingMemberInvitationEdge { - __typename?: 'EnterprisePendingMemberInvitationEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * Whether the invitation has a license for the enterprise. - * @deprecated All pending members consume a license Removal on 2020-07-01 UTC. - */ - isUnlicensed: ScalarsEnums['Boolean']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * A subset of repository information queryable from an enterprise. - */ -export interface EnterpriseRepositoryInfo { - __typename?: 'EnterpriseRepositoryInfo'; - id: ScalarsEnums['ID']; - /** - * Identifies if the repository is private or internal. - */ - isPrivate: ScalarsEnums['Boolean']; - /** - * The repository's name. - */ - name: ScalarsEnums['String']; - /** - * The repository's name with owner. - */ - nameWithOwner: ScalarsEnums['String']; -} - -/** - * The connection type for EnterpriseRepositoryInfo. - */ -export interface EnterpriseRepositoryInfoConnection { - __typename?: 'EnterpriseRepositoryInfoConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface EnterpriseRepositoryInfoEdge { - __typename?: 'EnterpriseRepositoryInfoEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * An Enterprise Server installation. - */ -export interface EnterpriseServerInstallation { - __typename?: 'EnterpriseServerInstallation'; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * The customer name to which the Enterprise Server installation belongs. - */ - customerName: ScalarsEnums['String']; - /** - * The host name of the Enterprise Server installation. - */ - hostName: ScalarsEnums['String']; - id: ScalarsEnums['ID']; - /** - * Whether or not the installation is connected to an Enterprise Server installation via GitHub Connect. - */ - isConnected: ScalarsEnums['Boolean']; - /** - * Identifies the date and time when the object was last updated. - */ - updatedAt: ScalarsEnums['DateTime']; - /** - * User accounts on this Enterprise Server installation. - */ - userAccounts: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for Enterprise Server user accounts returned from the connection. - * @defaultValue `{"field":"LOGIN","direction":"ASC"}` - */ - orderBy?: Maybe; - }) => EnterpriseServerUserAccountConnection; - /** - * User accounts uploads for the Enterprise Server installation. - */ - userAccountsUploads: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for Enterprise Server user accounts uploads returned from the connection. - * @defaultValue `{"field":"CREATED_AT","direction":"DESC"}` - */ - orderBy?: Maybe; - }) => EnterpriseServerUserAccountsUploadConnection; -} - -/** - * The connection type for EnterpriseServerInstallation. - */ -export interface EnterpriseServerInstallationConnection { - __typename?: 'EnterpriseServerInstallationConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface EnterpriseServerInstallationEdge { - __typename?: 'EnterpriseServerInstallationEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * A user account on an Enterprise Server installation. - */ -export interface EnterpriseServerUserAccount { - __typename?: 'EnterpriseServerUserAccount'; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * User emails belonging to this user account. - */ - emails: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for Enterprise Server user account emails returned from the connection. - * @defaultValue `{"field":"EMAIL","direction":"ASC"}` - */ - orderBy?: Maybe; - }) => EnterpriseServerUserAccountEmailConnection; - /** - * The Enterprise Server installation on which this user account exists. - */ - enterpriseServerInstallation: EnterpriseServerInstallation; - id: ScalarsEnums['ID']; - /** - * Whether the user account is a site administrator on the Enterprise Server installation. - */ - isSiteAdmin: ScalarsEnums['Boolean']; - /** - * The login of the user account on the Enterprise Server installation. - */ - login: ScalarsEnums['String']; - /** - * The profile name of the user account on the Enterprise Server installation. - */ - profileName?: Maybe; - /** - * The date and time when the user account was created on the Enterprise Server installation. - */ - remoteCreatedAt: ScalarsEnums['DateTime']; - /** - * The ID of the user account on the Enterprise Server installation. - */ - remoteUserId: ScalarsEnums['Int']; - /** - * Identifies the date and time when the object was last updated. - */ - updatedAt: ScalarsEnums['DateTime']; -} - -/** - * The connection type for EnterpriseServerUserAccount. - */ -export interface EnterpriseServerUserAccountConnection { - __typename?: 'EnterpriseServerUserAccountConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface EnterpriseServerUserAccountEdge { - __typename?: 'EnterpriseServerUserAccountEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * An email belonging to a user account on an Enterprise Server installation. - */ -export interface EnterpriseServerUserAccountEmail { - __typename?: 'EnterpriseServerUserAccountEmail'; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * The email address. - */ - email: ScalarsEnums['String']; - id: ScalarsEnums['ID']; - /** - * Indicates whether this is the primary email of the associated user account. - */ - isPrimary: ScalarsEnums['Boolean']; - /** - * Identifies the date and time when the object was last updated. - */ - updatedAt: ScalarsEnums['DateTime']; - /** - * The user account to which the email belongs. - */ - userAccount: EnterpriseServerUserAccount; -} - -/** - * The connection type for EnterpriseServerUserAccountEmail. - */ -export interface EnterpriseServerUserAccountEmailConnection { - __typename?: 'EnterpriseServerUserAccountEmailConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface EnterpriseServerUserAccountEmailEdge { - __typename?: 'EnterpriseServerUserAccountEmailEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * A user accounts upload from an Enterprise Server installation. - */ -export interface EnterpriseServerUserAccountsUpload { - __typename?: 'EnterpriseServerUserAccountsUpload'; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * The enterprise to which this upload belongs. - */ - enterprise: Enterprise; - /** - * The Enterprise Server installation for which this upload was generated. - */ - enterpriseServerInstallation: EnterpriseServerInstallation; - id: ScalarsEnums['ID']; - /** - * The name of the file uploaded. - */ - name: ScalarsEnums['String']; - /** - * The synchronization state of the upload - */ - syncState: ScalarsEnums['EnterpriseServerUserAccountsUploadSyncState']; - /** - * Identifies the date and time when the object was last updated. - */ - updatedAt: ScalarsEnums['DateTime']; -} - -/** - * The connection type for EnterpriseServerUserAccountsUpload. - */ -export interface EnterpriseServerUserAccountsUploadConnection { - __typename?: 'EnterpriseServerUserAccountsUploadConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface EnterpriseServerUserAccountsUploadEdge { - __typename?: 'EnterpriseServerUserAccountsUploadEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * An account for a user who is an admin of an enterprise or a member of an enterprise through one or more organizations. - */ -export interface EnterpriseUserAccount { - __typename?: 'EnterpriseUserAccount'; - /** - * A URL pointing to the enterprise user account's public avatar. - */ - avatarUrl: (args?: { - /** - * The size of the resulting square image. - */ - size?: Maybe; - }) => ScalarsEnums['URI']; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * The enterprise in which this user account exists. - */ - enterprise: Enterprise; - id: ScalarsEnums['ID']; - /** - * An identifier for the enterprise user account, a login or email address - */ - login: ScalarsEnums['String']; - /** - * The name of the enterprise user account - */ - name?: Maybe; - /** - * A list of enterprise organizations this user is a member of. - */ - organizations: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for organizations returned from the connection. - * @defaultValue `{"field":"LOGIN","direction":"ASC"}` - */ - orderBy?: Maybe; - /** - * The search string to look for. - */ - query?: Maybe; - /** - * The role of the user in the enterprise organization. - */ - role?: Maybe; - }) => EnterpriseOrganizationMembershipConnection; - /** - * The HTTP path for this user. - */ - resourcePath: ScalarsEnums['URI']; - /** - * Identifies the date and time when the object was last updated. - */ - updatedAt: ScalarsEnums['DateTime']; - /** - * The HTTP URL for this user. - */ - url: ScalarsEnums['URI']; - /** - * The user within the enterprise. - */ - user?: Maybe; -} - -/** - * The connection type for EnterpriseUserAccount. - */ -export interface EnterpriseUserAccountConnection { - __typename?: 'EnterpriseUserAccountConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface EnterpriseUserAccountEdge { - __typename?: 'EnterpriseUserAccountEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * An environment. - */ -export interface Environment { - __typename?: 'Environment'; - /** - * Identifies the primary key from the database. - */ - databaseId?: Maybe; - id: ScalarsEnums['ID']; - /** - * The name of the environment - */ - name: ScalarsEnums['String']; - /** - * The protection rules defined for this environment - */ - protectionRules: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => DeploymentProtectionRuleConnection; -} - -/** - * The connection type for Environment. - */ -export interface EnvironmentConnection { - __typename?: 'EnvironmentConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface EnvironmentEdge { - __typename?: 'EnvironmentEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * An external identity provisioned by SAML SSO or SCIM. - */ -export interface ExternalIdentity { - __typename?: 'ExternalIdentity'; - /** - * The GUID for this identity - */ - guid: ScalarsEnums['String']; - id: ScalarsEnums['ID']; - /** - * Organization invitation for this SCIM-provisioned external identity - */ - organizationInvitation?: Maybe; - /** - * SAML Identity attributes - */ - samlIdentity?: Maybe; - /** - * SCIM Identity attributes - */ - scimIdentity?: Maybe; - /** - * User linked to this external identity. Will be NULL if this identity has not been claimed by an organization member. - */ - user?: Maybe; -} - -/** - * The connection type for ExternalIdentity. - */ -export interface ExternalIdentityConnection { - __typename?: 'ExternalIdentityConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface ExternalIdentityEdge { - __typename?: 'ExternalIdentityEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * SAML attributes for the External Identity - */ -export interface ExternalIdentitySamlAttributes { - __typename?: 'ExternalIdentitySamlAttributes'; - /** - * The emails associated with the SAML identity - */ - emails?: Maybe>; - /** - * Family name of the SAML identity - */ - familyName?: Maybe; - /** - * Given name of the SAML identity - */ - givenName?: Maybe; - /** - * The groups linked to this identity in IDP - */ - groups?: Maybe>; - /** - * The NameID of the SAML identity - */ - nameId?: Maybe; - /** - * The userName of the SAML identity - */ - username?: Maybe; -} - -/** - * SCIM attributes for the External Identity - */ -export interface ExternalIdentityScimAttributes { - __typename?: 'ExternalIdentityScimAttributes'; - /** - * The emails associated with the SCIM identity - */ - emails?: Maybe>; - /** - * Family name of the SCIM identity - */ - familyName?: Maybe; - /** - * Given name of the SCIM identity - */ - givenName?: Maybe; - /** - * The groups linked to this identity in IDP - */ - groups?: Maybe>; - /** - * The userName of the SCIM identity - */ - username?: Maybe; -} - -/** - * Autogenerated return type of FollowUser - */ -export interface FollowUserPayload { - __typename?: 'FollowUserPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The user that was followed. - */ - user?: Maybe; -} - -/** - * The connection type for User. - */ -export interface FollowerConnection { - __typename?: 'FollowerConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * The connection type for User. - */ -export interface FollowingConnection { - __typename?: 'FollowingConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * A funding platform link for a repository. - */ -export interface FundingLink { - __typename?: 'FundingLink'; - /** - * The funding platform this link is for. - */ - platform: ScalarsEnums['FundingPlatform']; - /** - * The configured URL for this funding link. - */ - url: ScalarsEnums['URI']; -} - -/** - * A generic hovercard context with a message and icon - */ -export interface GenericHovercardContext { - __typename?: 'GenericHovercardContext'; - /** - * A string describing this context - */ - message: ScalarsEnums['String']; - /** - * An octicon to accompany this context - */ - octicon: ScalarsEnums['String']; -} - -/** - * A Gist. - */ -export interface Gist { - __typename?: 'Gist'; - /** - * A list of comments associated with the gist - */ - comments: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => GistCommentConnection; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * The gist description. - */ - description?: Maybe; - /** - * The files in this gist. - */ - files: (args?: { - /** - * The maximum number of files to return. - * @defaultValue `10` - */ - limit?: Maybe; - /** - * The oid of the files to return - */ - oid?: Maybe; - }) => Maybe>>; - /** - * A list of forks associated with the gist - */ - forks: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for gists returned from the connection - */ - orderBy?: Maybe; - }) => GistConnection; - id: ScalarsEnums['ID']; - /** - * Identifies if the gist is a fork. - */ - isFork: ScalarsEnums['Boolean']; - /** - * Whether the gist is public or not. - */ - isPublic: ScalarsEnums['Boolean']; - /** - * The gist name. - */ - name: ScalarsEnums['String']; - /** - * The gist owner. - */ - owner?: Maybe; - /** - * Identifies when the gist was last pushed to. - */ - pushedAt?: Maybe; - /** - * The HTML path to this resource. - */ - resourcePath: ScalarsEnums['URI']; - /** - * Returns a count of how many stargazers there are on this object - */ - stargazerCount: ScalarsEnums['Int']; - /** - * A list of users who have starred this starrable. - */ - stargazers: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Order for connection - */ - orderBy?: Maybe; - }) => StargazerConnection; - /** - * Identifies the date and time when the object was last updated. - */ - updatedAt: ScalarsEnums['DateTime']; - /** - * The HTTP URL for this Gist. - */ - url: ScalarsEnums['URI']; - /** - * Returns a boolean indicating whether the viewing user has starred this starrable. - */ - viewerHasStarred: ScalarsEnums['Boolean']; -} - -/** - * Represents a comment on an Gist. - */ -export interface GistComment { - __typename?: 'GistComment'; - /** - * The actor who authored the comment. - */ - author?: Maybe; - /** - * Author's association with the gist. - */ - authorAssociation: ScalarsEnums['CommentAuthorAssociation']; - /** - * Identifies the comment body. - */ - body: ScalarsEnums['String']; - /** - * The body rendered to HTML. - */ - bodyHTML: ScalarsEnums['HTML']; - /** - * The body rendered to text. - */ - bodyText: ScalarsEnums['String']; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * Check if this comment was created via an email reply. - */ - createdViaEmail: ScalarsEnums['Boolean']; - /** - * Identifies the primary key from the database. - */ - databaseId?: Maybe; - /** - * The actor who edited the comment. - */ - editor?: Maybe; - /** - * The associated gist. - */ - gist: Gist; - id: ScalarsEnums['ID']; - /** - * Check if this comment was edited and includes an edit with the creation data - */ - includesCreatedEdit: ScalarsEnums['Boolean']; - /** - * Returns whether or not a comment has been minimized. - */ - isMinimized: ScalarsEnums['Boolean']; - /** - * The moment the editor made the last edit - */ - lastEditedAt?: Maybe; - /** - * Returns why the comment was minimized. - */ - minimizedReason?: Maybe; - /** - * Identifies when the comment was published at. - */ - publishedAt?: Maybe; - /** - * Identifies the date and time when the object was last updated. - */ - updatedAt: ScalarsEnums['DateTime']; - /** - * A list of edits to this content. - */ - userContentEdits: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => Maybe; - /** - * Check if the current viewer can delete this object. - */ - viewerCanDelete: ScalarsEnums['Boolean']; - /** - * Check if the current viewer can minimize this object. - */ - viewerCanMinimize: ScalarsEnums['Boolean']; - /** - * Check if the current viewer can update this object. - */ - viewerCanUpdate: ScalarsEnums['Boolean']; - /** - * Reasons why the current viewer can not update this comment. - */ - viewerCannotUpdateReasons: Array; - /** - * Did the viewer author this comment. - */ - viewerDidAuthor: ScalarsEnums['Boolean']; -} - -/** - * The connection type for GistComment. - */ -export interface GistCommentConnection { - __typename?: 'GistCommentConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface GistCommentEdge { - __typename?: 'GistCommentEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * The connection type for Gist. - */ -export interface GistConnection { - __typename?: 'GistConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface GistEdge { - __typename?: 'GistEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * A file in a gist. - */ -export interface GistFile { - __typename?: 'GistFile'; - /** - * The file name encoded to remove characters that are invalid in URL paths. - */ - encodedName?: Maybe; - /** - * The gist file encoding. - */ - encoding?: Maybe; - /** - * The file extension from the file name. - */ - extension?: Maybe; - /** - * Indicates if this file is an image. - */ - isImage: ScalarsEnums['Boolean']; - /** - * Whether the file's contents were truncated. - */ - isTruncated: ScalarsEnums['Boolean']; - /** - * The programming language this file is written in. - */ - language?: Maybe; - /** - * The gist file name. - */ - name?: Maybe; - /** - * The gist file size in bytes. - */ - size?: Maybe; - /** - * UTF8 text data or null if the file is binary - */ - text: (args?: { - /** - * Optionally truncate the returned file to this length. - */ - truncate?: Maybe; - }) => Maybe; -} - -/** - * Represents an actor in a Git commit (ie. an author or committer). - */ -export interface GitActor { - __typename?: 'GitActor'; - /** - * A URL pointing to the author's public avatar. - */ - avatarUrl: (args?: { - /** - * The size of the resulting square image. - */ - size?: Maybe; - }) => ScalarsEnums['URI']; - /** - * The timestamp of the Git action (authoring or committing). - */ - date?: Maybe; - /** - * The email in the Git commit. - */ - email?: Maybe; - /** - * The name in the Git commit. - */ - name?: Maybe; - /** - * The GitHub user corresponding to the email field. Null if no such user exists. - */ - user?: Maybe; -} - -/** - * The connection type for GitActor. - */ -export interface GitActorConnection { - __typename?: 'GitActorConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface GitActorEdge { - __typename?: 'GitActorEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * Represents information about the GitHub instance. - */ -export interface GitHubMetadata { - __typename?: 'GitHubMetadata'; - /** - * Returns a String that's a SHA of `github-services` - */ - gitHubServicesSha: ScalarsEnums['GitObjectID']; - /** - * IP addresses that users connect to for git operations - */ - gitIpAddresses?: Maybe>; - /** - * IP addresses that service hooks are sent from - */ - hookIpAddresses?: Maybe>; - /** - * IP addresses that the importer connects from - */ - importerIpAddresses?: Maybe>; - /** - * Whether or not users are verified - */ - isPasswordAuthenticationVerifiable: ScalarsEnums['Boolean']; - /** - * IP addresses for GitHub Pages' A records - */ - pagesIpAddresses?: Maybe>; -} - -/** - * Represents a Git object. - */ -export interface GitObject { - __typename?: 'Blob' | 'Commit' | 'Tag' | 'Tree'; - /** - * An abbreviated version of the Git object ID - */ - abbreviatedOid: ScalarsEnums['String']; - /** - * The HTTP path for this Git object - */ - commitResourcePath: ScalarsEnums['URI']; - /** - * The HTTP URL for this Git object - */ - commitUrl: ScalarsEnums['URI']; - id: ScalarsEnums['ID']; - /** - * The Git object ID - */ - oid: ScalarsEnums['GitObjectID']; - /** - * The Repository the Git object belongs to - */ - repository: Repository; - $on: $GitObject; -} - -/** - * Information about a signature (GPG or S/MIME) on a Commit or Tag. - */ -export interface GitSignature { - __typename?: 'GpgSignature' | 'SmimeSignature' | 'UnknownSignature'; - /** - * Email used to sign this object. - */ - email: ScalarsEnums['String']; - /** - * True if the signature is valid and verified by GitHub. - */ - isValid: ScalarsEnums['Boolean']; - /** - * Payload for GPG signing object. Raw ODB object without the signature header. - */ - payload: ScalarsEnums['String']; - /** - * ASCII-armored signature header from object. - */ - signature: ScalarsEnums['String']; - /** - * GitHub user corresponding to the email signing this commit. - */ - signer?: Maybe; - /** - * The state of this signature. `VALID` if signature is valid and verified by GitHub, otherwise represents reason why signature is considered invalid. - */ - state: ScalarsEnums['GitSignatureState']; - /** - * True if the signature was made with GitHub's signing key. - */ - wasSignedByGitHub: ScalarsEnums['Boolean']; - $on: $GitSignature; -} - -/** - * Represents a GPG signature on a Commit or Tag. - */ -export interface GpgSignature { - __typename?: 'GpgSignature'; - /** - * Email used to sign this object. - */ - email: ScalarsEnums['String']; - /** - * True if the signature is valid and verified by GitHub. - */ - isValid: ScalarsEnums['Boolean']; - /** - * Hex-encoded ID of the key that signed this object. - */ - keyId?: Maybe; - /** - * Payload for GPG signing object. Raw ODB object without the signature header. - */ - payload: ScalarsEnums['String']; - /** - * ASCII-armored signature header from object. - */ - signature: ScalarsEnums['String']; - /** - * GitHub user corresponding to the email signing this commit. - */ - signer?: Maybe; - /** - * The state of this signature. `VALID` if signature is valid and verified by GitHub, otherwise represents reason why signature is considered invalid. - */ - state: ScalarsEnums['GitSignatureState']; - /** - * True if the signature was made with GitHub's signing key. - */ - wasSignedByGitHub: ScalarsEnums['Boolean']; -} - -/** - * Represents a 'head_ref_deleted' event on a given pull request. - */ -export interface HeadRefDeletedEvent { - __typename?: 'HeadRefDeletedEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * Identifies the Ref associated with the `head_ref_deleted` event. - */ - headRef?: Maybe; - /** - * Identifies the name of the Ref associated with the `head_ref_deleted` event. - */ - headRefName: ScalarsEnums['String']; - id: ScalarsEnums['ID']; - /** - * PullRequest referenced by event. - */ - pullRequest: PullRequest; -} - -/** - * Represents a 'head_ref_force_pushed' event on a given pull request. - */ -export interface HeadRefForcePushedEvent { - __typename?: 'HeadRefForcePushedEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the after commit SHA for the 'head_ref_force_pushed' event. - */ - afterCommit?: Maybe; - /** - * Identifies the before commit SHA for the 'head_ref_force_pushed' event. - */ - beforeCommit?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - id: ScalarsEnums['ID']; - /** - * PullRequest referenced by event. - */ - pullRequest: PullRequest; - /** - * Identifies the fully qualified ref name for the 'head_ref_force_pushed' event. - */ - ref?: Maybe; -} - -/** - * Represents a 'head_ref_restored' event on a given pull request. - */ -export interface HeadRefRestoredEvent { - __typename?: 'HeadRefRestoredEvent'; - /** - * Identifies the actor who performed the event. - */ - actor?: Maybe; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - id: ScalarsEnums['ID']; - /** - * PullRequest referenced by event. - */ - pullRequest: PullRequest; -} - -/** - * Detail needed to display a hovercard for a user - */ -export interface Hovercard { - __typename?: 'Hovercard'; - /** - * Each of the contexts for this hovercard - */ - contexts: Array; -} - -/** - * An individual line of a hovercard - */ -export interface HovercardContext { - __typename?: - | 'GenericHovercardContext' - | 'OrganizationTeamsHovercardContext' - | 'OrganizationsHovercardContext' - | 'ReviewStatusHovercardContext' - | 'ViewerHovercardContext'; - /** - * A string describing this context - */ - message: ScalarsEnums['String']; - /** - * An octicon to accompany this context - */ - octicon: ScalarsEnums['String']; - $on: $HovercardContext; -} - -/** - * Autogenerated return type of InviteEnterpriseAdmin - */ -export interface InviteEnterpriseAdminPayload { - __typename?: 'InviteEnterpriseAdminPayload'; - /** - * A unique identifier for the client performing the mutation. - */ - clientMutationId?: Maybe; - /** - * The created enterprise administrator invitation. - */ - invitation?: Maybe; -} - -/** - * An IP address or range of addresses that is allowed to access an owner's resources. - */ -export interface IpAllowListEntry { - __typename?: 'IpAllowListEntry'; - /** - * A single IP address or range of IP addresses in CIDR notation. - */ - allowListValue: ScalarsEnums['String']; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - id: ScalarsEnums['ID']; - /** - * Whether the entry is currently active. - */ - isActive: ScalarsEnums['Boolean']; - /** - * The name of the IP allow list entry. - */ - name?: Maybe; - /** - * The owner of the IP allow list entry. - */ - owner: IpAllowListOwner; - /** - * Identifies the date and time when the object was last updated. - */ - updatedAt: ScalarsEnums['DateTime']; -} - -/** - * The connection type for IpAllowListEntry. - */ -export interface IpAllowListEntryConnection { - __typename?: 'IpAllowListEntryConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface IpAllowListEntryEdge { - __typename?: 'IpAllowListEntryEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * Types that can own an IP allow list. - */ -export interface IpAllowListOwner { - __typename?: 'App' | 'Enterprise' | 'Organization'; - $on: $IpAllowListOwner; -} - -/** - * An Issue is a place to discuss ideas, enhancements, tasks, and bugs for a project. - */ -export interface Issue { - __typename?: 'Issue'; - /** - * Reason that the conversation was locked. - */ - activeLockReason?: Maybe; - /** - * A list of Users assigned to this object. - */ - assignees: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => UserConnection; - /** - * The actor who authored the comment. - */ - author?: Maybe; - /** - * Author's association with the subject of the comment. - */ - authorAssociation: ScalarsEnums['CommentAuthorAssociation']; - /** - * Identifies the body of the issue. - */ - body: ScalarsEnums['String']; - /** - * The body rendered to HTML. - */ - bodyHTML: ScalarsEnums['HTML']; - /** - * The http path for this issue body - */ - bodyResourcePath: ScalarsEnums['URI']; - /** - * Identifies the body of the issue rendered to text. - */ - bodyText: ScalarsEnums['String']; - /** - * The http URL for this issue body - */ - bodyUrl: ScalarsEnums['URI']; - /** - * `true` if the object is closed (definition of closed may depend on type) - */ - closed: ScalarsEnums['Boolean']; - /** - * Identifies the date and time when the object was closed. - */ - closedAt?: Maybe; - /** - * A list of comments associated with the Issue. - */ - comments: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for issue comments returned from the connection. - */ - orderBy?: Maybe; - }) => IssueCommentConnection; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * Check if this comment was created via an email reply. - */ - createdViaEmail: ScalarsEnums['Boolean']; - /** - * Identifies the primary key from the database. - */ - databaseId?: Maybe; - /** - * The actor who edited the comment. - */ - editor?: Maybe; - /** - * The hovercard information for this issue - */ - hovercard: (args?: { - /** - * Whether or not to include notification contexts - * @defaultValue `true` - */ - includeNotificationContexts?: Maybe; - }) => Hovercard; - id: ScalarsEnums['ID']; - /** - * Check if this comment was edited and includes an edit with the creation data - */ - includesCreatedEdit: ScalarsEnums['Boolean']; - /** - * Indicates whether or not this issue is currently pinned to the repository issues list - */ - isPinned?: Maybe; - /** - * Is this issue read by the viewer - */ - isReadByViewer?: Maybe; - /** - * A list of labels associated with the object. - */ - labels: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for labels returned from the connection. - * @defaultValue `{"field":"CREATED_AT","direction":"ASC"}` - */ - orderBy?: Maybe; - }) => Maybe; - /** - * The moment the editor made the last edit - */ - lastEditedAt?: Maybe; - /** - * `true` if the object is locked - */ - locked: ScalarsEnums['Boolean']; - /** - * Identifies the milestone associated with the issue. - */ - milestone?: Maybe; - /** - * Identifies the issue number. - */ - number: ScalarsEnums['Int']; - /** - * A list of Users that are participating in the Issue conversation. - */ - participants: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => UserConnection; - /** - * List of project cards associated with this issue. - */ - projectCards: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * A list of archived states to filter the cards by - * @defaultValue `["ARCHIVED","NOT_ARCHIVED"]` - */ - archivedStates?: Maybe>>; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => ProjectCardConnection; - /** - * Find a project by project (beta) number. - */ - projectNext: (args: { - /** - * The project (beta) number. - */ - number: Scalars['Int']; - }) => Maybe; - /** - * A list of project (beta) items under the owner. - */ - projectsNext: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * A project (beta) to search for under the the owner. - */ - query?: Maybe; - /** - * How to order the returned projects (beta). - * @defaultValue `"TITLE"` - */ - sortBy?: Maybe; - }) => ProjectNextConnection; - /** - * Identifies when the comment was published at. - */ - publishedAt?: Maybe; - /** - * A list of reactions grouped by content left on the subject. - */ - reactionGroups?: Maybe>; - /** - * A list of Reactions left on the Issue. - */ - reactions: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Allows filtering Reactions by emoji. - */ - content?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Allows specifying the order in which reactions are returned. - */ - orderBy?: Maybe; - }) => ReactionConnection; - /** - * The repository associated with this node. - */ - repository: Repository; - /** - * The HTTP path for this issue - */ - resourcePath: ScalarsEnums['URI']; - /** - * Identifies the state of the issue. - */ - state: ScalarsEnums['IssueState']; - /** - * A list of events, comments, commits, etc. associated with the issue. - * @deprecated `timeline` will be removed Use Issue.timelineItems instead. Removal on 2020-10-01 UTC. - */ - timeline: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Allows filtering timeline events by a `since` timestamp. - */ - since?: Maybe; - }) => IssueTimelineConnection; - /** - * A list of events, comments, commits, etc. associated with the issue. - */ - timelineItems: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Filter timeline items by type. - */ - itemTypes?: Maybe>; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Filter timeline items by a `since` timestamp. - */ - since?: Maybe; - /** - * Skips the first _n_ elements in the list. - */ - skip?: Maybe; - }) => IssueTimelineItemsConnection; - /** - * Identifies the issue title. - */ - title: ScalarsEnums['String']; - /** - * Identifies the issue title rendered to HTML. - */ - titleHTML: ScalarsEnums['String']; - /** - * Identifies the date and time when the object was last updated. - */ - updatedAt: ScalarsEnums['DateTime']; - /** - * The HTTP URL for this issue - */ - url: ScalarsEnums['URI']; - /** - * A list of edits to this content. - */ - userContentEdits: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => Maybe; - /** - * Can user react to this subject - */ - viewerCanReact: ScalarsEnums['Boolean']; - /** - * Check if the viewer is able to change their subscription status for the repository. - */ - viewerCanSubscribe: ScalarsEnums['Boolean']; - /** - * Check if the current viewer can update this object. - */ - viewerCanUpdate: ScalarsEnums['Boolean']; - /** - * Reasons why the current viewer can not update this comment. - */ - viewerCannotUpdateReasons: Array; - /** - * Did the viewer author this comment. - */ - viewerDidAuthor: ScalarsEnums['Boolean']; - /** - * Identifies if the viewer is watching, not watching, or ignoring the subscribable entity. - */ - viewerSubscription?: Maybe; -} - -/** - * Represents a comment on an Issue. - */ -export interface IssueComment { - __typename?: 'IssueComment'; - /** - * The actor who authored the comment. - */ - author?: Maybe; - /** - * Author's association with the subject of the comment. - */ - authorAssociation: ScalarsEnums['CommentAuthorAssociation']; - /** - * The body as Markdown. - */ - body: ScalarsEnums['String']; - /** - * The body rendered to HTML. - */ - bodyHTML: ScalarsEnums['HTML']; - /** - * The body rendered to text. - */ - bodyText: ScalarsEnums['String']; - /** - * Identifies the date and time when the object was created. - */ - createdAt: ScalarsEnums['DateTime']; - /** - * Check if this comment was created via an email reply. - */ - createdViaEmail: ScalarsEnums['Boolean']; - /** - * Identifies the primary key from the database. - */ - databaseId?: Maybe; - /** - * The actor who edited the comment. - */ - editor?: Maybe; - id: ScalarsEnums['ID']; - /** - * Check if this comment was edited and includes an edit with the creation data - */ - includesCreatedEdit: ScalarsEnums['Boolean']; - /** - * Returns whether or not a comment has been minimized. - */ - isMinimized: ScalarsEnums['Boolean']; - /** - * Identifies the issue associated with the comment. - */ - issue: Issue; - /** - * The moment the editor made the last edit - */ - lastEditedAt?: Maybe; - /** - * Returns why the comment was minimized. - */ - minimizedReason?: Maybe; - /** - * Identifies when the comment was published at. - */ - publishedAt?: Maybe; - /** - * Returns the pull request associated with the comment, if this comment was made on a - * pull request. - */ - pullRequest?: Maybe; - /** - * A list of reactions grouped by content left on the subject. - */ - reactionGroups?: Maybe>; - /** - * A list of Reactions left on the Issue. - */ - reactions: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Allows filtering Reactions by emoji. - */ - content?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Allows specifying the order in which reactions are returned. - */ - orderBy?: Maybe; - }) => ReactionConnection; - /** - * The repository associated with this node. - */ - repository: Repository; - /** - * The HTTP path for this issue comment - */ - resourcePath: ScalarsEnums['URI']; - /** - * Identifies the date and time when the object was last updated. - */ - updatedAt: ScalarsEnums['DateTime']; - /** - * The HTTP URL for this issue comment - */ - url: ScalarsEnums['URI']; - /** - * A list of edits to this content. - */ - userContentEdits: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - }) => Maybe; - /** - * Check if the current viewer can delete this object. - */ - viewerCanDelete: ScalarsEnums['Boolean']; - /** - * Check if the current viewer can minimize this object. - */ - viewerCanMinimize: ScalarsEnums['Boolean']; - /** - * Can user react to this subject - */ - viewerCanReact: ScalarsEnums['Boolean']; - /** - * Check if the current viewer can update this object. - */ - viewerCanUpdate: ScalarsEnums['Boolean']; - /** - * Reasons why the current viewer can not update this comment. - */ - viewerCannotUpdateReasons: Array; - /** - * Did the viewer author this comment. - */ - viewerDidAuthor: ScalarsEnums['Boolean']; -} - -/** - * The connection type for IssueComment. - */ -export interface IssueCommentConnection { - __typename?: 'IssueCommentConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface IssueCommentEdge { - __typename?: 'IssueCommentEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * The connection type for Issue. - */ -export interface IssueConnection { - __typename?: 'IssueConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * This aggregates issues opened by a user within one repository. - */ -export interface IssueContributionsByRepository { - __typename?: 'IssueContributionsByRepository'; - /** - * The issue contributions. - */ - contributions: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for contributions returned from the connection. - * @defaultValue `{"direction":"DESC"}` - */ - orderBy?: Maybe; - }) => CreatedIssueContributionConnection; - /** - * The repository in which the issues were opened. - */ - repository: Repository; -} - -/** - * An edge in a connection. - */ -export interface IssueEdge { - __typename?: 'IssueEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * Used for return value of Repository.issueOrPullRequest. - */ -export interface IssueOrPullRequest { - __typename?: 'Issue' | 'PullRequest'; - $on: $IssueOrPullRequest; -} - -/** - * A repository issue template. - */ -export interface IssueTemplate { - __typename?: 'IssueTemplate'; - /** - * The template purpose. - */ - about?: Maybe; - /** - * The suggested issue body. - */ - body?: Maybe; - /** - * The template name. - */ - name: ScalarsEnums['String']; - /** - * The suggested issue title. - */ - title?: Maybe; -} - -/** - * The connection type for IssueTimelineItem. - */ -export interface IssueTimelineConnection { - __typename?: 'IssueTimelineConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An item in an issue timeline - */ -export interface IssueTimelineItem { - __typename?: - | 'AssignedEvent' - | 'ClosedEvent' - | 'Commit' - | 'CrossReferencedEvent' - | 'DemilestonedEvent' - | 'IssueComment' - | 'LabeledEvent' - | 'LockedEvent' - | 'MilestonedEvent' - | 'ReferencedEvent' - | 'RenamedTitleEvent' - | 'ReopenedEvent' - | 'SubscribedEvent' - | 'TransferredEvent' - | 'UnassignedEvent' - | 'UnlabeledEvent' - | 'UnlockedEvent' - | 'UnsubscribedEvent' - | 'UserBlockedEvent'; - $on: $IssueTimelineItem; -} - -/** - * An edge in a connection. - */ -export interface IssueTimelineItemEdge { - __typename?: 'IssueTimelineItemEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * An item in an issue timeline - */ -export interface IssueTimelineItems { - __typename?: - | 'AddedToProjectEvent' - | 'AssignedEvent' - | 'ClosedEvent' - | 'CommentDeletedEvent' - | 'ConnectedEvent' - | 'ConvertedNoteToIssueEvent' - | 'ConvertedToDiscussionEvent' - | 'CrossReferencedEvent' - | 'DemilestonedEvent' - | 'DisconnectedEvent' - | 'IssueComment' - | 'LabeledEvent' - | 'LockedEvent' - | 'MarkedAsDuplicateEvent' - | 'MentionedEvent' - | 'MilestonedEvent' - | 'MovedColumnsInProjectEvent' - | 'PinnedEvent' - | 'ReferencedEvent' - | 'RemovedFromProjectEvent' - | 'RenamedTitleEvent' - | 'ReopenedEvent' - | 'SubscribedEvent' - | 'TransferredEvent' - | 'UnassignedEvent' - | 'UnlabeledEvent' - | 'UnlockedEvent' - | 'UnmarkedAsDuplicateEvent' - | 'UnpinnedEvent' - | 'UnsubscribedEvent' - | 'UserBlockedEvent'; - $on: $IssueTimelineItems; -} - -/** - * The connection type for IssueTimelineItems. - */ -export interface IssueTimelineItemsConnection { - __typename?: 'IssueTimelineItemsConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * Identifies the count of items after applying `before` and `after` filters. - */ - filteredCount: ScalarsEnums['Int']; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Identifies the count of items after applying `before`/`after` filters and `first`/`last`/`skip` slicing. - */ - pageCount: ScalarsEnums['Int']; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; - /** - * Identifies the date and time when the timeline was last updated. - */ - updatedAt: ScalarsEnums['DateTime']; -} - -/** - * An edge in a connection. - */ -export interface IssueTimelineItemsEdge { - __typename?: 'IssueTimelineItemsEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe; -} - -/** - * Represents a user signing up for a GitHub account. - */ -export interface JoinedGitHubContribution { - __typename?: 'JoinedGitHubContribution'; - /** - * Whether this contribution is associated with a record you do not have access to. For - * example, your own 'first issue' contribution may have been made on a repository you can no - * longer access. - */ - isRestricted: ScalarsEnums['Boolean']; - /** - * When this contribution was made. - */ - occurredAt: ScalarsEnums['DateTime']; - /** - * The HTTP path for this contribution. - */ - resourcePath: ScalarsEnums['URI']; - /** - * The HTTP URL for this contribution. - */ - url: ScalarsEnums['URI']; - /** - * The user who made this contribution. - */ - user: User; -} - -/** - * A label for categorizing Issues, Pull Requests, Milestones, or Discussions with a given Repository. - */ -export interface Label { - __typename?: 'Label'; - /** - * Identifies the label color. - */ - color: ScalarsEnums['String']; - /** - * Identifies the date and time when the label was created. - */ - createdAt?: Maybe; - /** - * A brief description of this label. - */ - description?: Maybe; - id: ScalarsEnums['ID']; - /** - * Indicates whether or not this is a default label. - */ - isDefault: ScalarsEnums['Boolean']; - /** - * A list of issues associated with this label. - */ - issues: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Filtering options for issues returned from the connection. - */ - filterBy?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * A list of label names to filter the pull requests by. - */ - labels?: Maybe>; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for issues returned from the connection. - */ - orderBy?: Maybe; - /** - * A list of states to filter the issues by. - */ - states?: Maybe>; - }) => IssueConnection; - /** - * Identifies the label name. - */ - name: ScalarsEnums['String']; - /** - * A list of pull requests associated with this label. - */ - pullRequests: (args?: { - /** - * Returns the elements in the list that come after the specified cursor. - */ - after?: Maybe; - /** - * The base ref name to filter the pull requests by. - */ - baseRefName?: Maybe; - /** - * Returns the elements in the list that come before the specified cursor. - */ - before?: Maybe; - /** - * Returns the first _n_ elements from the list. - */ - first?: Maybe; - /** - * The head ref name to filter the pull requests by. - */ - headRefName?: Maybe; - /** - * A list of label names to filter the pull requests by. - */ - labels?: Maybe>; - /** - * Returns the last _n_ elements from the list. - */ - last?: Maybe; - /** - * Ordering options for pull requests returned from the connection. - */ - orderBy?: Maybe; - /** - * A list of states to filter the pull requests by. - */ - states?: Maybe>; - }) => PullRequestConnection; - /** - * The repository associated with this label. - */ - repository: Repository; - /** - * The HTTP path for this label. - */ - resourcePath: ScalarsEnums['URI']; - /** - * Identifies the date and time when the label was last updated. - */ - updatedAt?: Maybe; - /** - * The HTTP URL for this label. - */ - url: ScalarsEnums['URI']; -} - -/** - * The connection type for Label. - */ -export interface LabelConnection { - __typename?: 'LabelConnection'; - /** - * A list of edges. - */ - edges?: Maybe>>; - /** - * A list of nodes. - */ - nodes?: Maybe>>; - /** - * Information to aid in pagination. - */ - pageInfo: PageInfo; - /** - * Identifies the total count of items in the connection. - */ - totalCount: ScalarsEnums['Int']; -} - -/** - * An edge in a connection. - */ -export interface LabelEdge { - __typename?: 'LabelEdge'; - /** - * A cursor for use in pagination. - */ - cursor: ScalarsEnums['String']; - /** - * The item at the end of the edge. - */ - node?: Maybe - ); -} - -export default App; diff --git a/examples/vite-example/src/gqty/index.ts b/examples/vite-example/src/gqty/index.ts deleted file mode 100644 index 97dccf737..000000000 --- a/examples/vite-example/src/gqty/index.ts +++ /dev/null @@ -1,86 +0,0 @@ -/** - * GQTY: You can safely modify this file and Query Fetcher based on your needs - */ - -import { createReactClient } from '@gqty/react'; - -import { createClient, QueryFetcher } from 'gqty'; -import { - generatedSchema, - scalarsEnumsHash, - GeneratedSchema, - SchemaObjectTypes, - SchemaObjectTypesNames, -} from './schema.generated'; - -const queryFetcher: QueryFetcher = async function (query, variables) { - // Modify "https://examples-api.gqty.dev/graphql" if needed - const response = await fetch('https://examples-api.gqty.dev/graphql', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - query, - variables, - }), - mode: 'cors', - }); - - const json = await response.json(); - - return json; -}; - -export const client = createClient< - GeneratedSchema, - SchemaObjectTypesNames, - SchemaObjectTypes ->({ - schema: generatedSchema, - scalarsEnumsHash, - queryFetcher, -}); - -const { query, mutation, mutate, subscription, resolved, refetch } = client; - -export { query, mutation, mutate, subscription, resolved, refetch }; - -const { - graphql, - useQuery, - usePaginatedQuery, - useTransactionQuery, - useLazyQuery, - useRefetch, - useMutation, - useMetaState, - prepareReactRender, - useHydrateCache, - prepareQuery, -} = createReactClient(client, { - defaults: { - // Set this flag as "true" if your usage involves React Suspense - // Keep in mind that you can overwrite it in a per-hook basis - suspense: false, - - // Set this flag based on your needs - staleWhileRevalidate: false, - }, -}); - -export { - graphql, - useQuery, - usePaginatedQuery, - useTransactionQuery, - useLazyQuery, - useRefetch, - useMutation, - useMetaState, - prepareReactRender, - useHydrateCache, - prepareQuery, -}; - -export * from './schema.generated'; diff --git a/examples/vite-example/src/gqty/schema.generated.ts b/examples/vite-example/src/gqty/schema.generated.ts deleted file mode 100644 index ea5859075..000000000 --- a/examples/vite-example/src/gqty/schema.generated.ts +++ /dev/null @@ -1,303 +0,0 @@ -/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY - */ - -export type Maybe = T | null; -export type InputMaybe = Maybe; -export type Exact = { - [K in keyof T]: T[K]; -}; -export type MakeOptional = Omit & { - [SubKey in K]?: Maybe; -}; -export type MakeMaybe = Omit & { - [SubKey in K]: Maybe; -}; -/** All built-in and custom scalars, mapped to their actual values */ -export interface Scalars { - ID: string; - String: string; - Boolean: boolean; - Int: number; - Float: number; - /** A date-time string at UTC, such as 2007-12-03T10:15:30Z, compliant with the `date-time` format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar. */ - DateTime: string; - /** A field whose value conforms to the standard internet email address format as specified in RFC822: https://www.w3.org/Protocols/rfc822/. */ - EmailAddress: any; - /** A string that cannot be passed as an empty value */ - NonEmptyString: any; - /** Integers that will have a value of 0 or more. */ - NonNegativeInt: any; -} - -export interface CursorConnectionArgs { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; -} - -export interface LoginInput { - email: Scalars['EmailAddress']; -} - -export interface PostCreate { - category?: InputMaybe>; - title: Scalars['NonEmptyString']; -} - -export interface PostUpdate { - category?: InputMaybe>; - id: Scalars['String']; - published?: InputMaybe; - title?: InputMaybe; -} - -export interface RegisterInput { - email: Scalars['EmailAddress']; -} - -export enum UserRole { - ADMIN = 'ADMIN', - USER = 'USER', -} - -export const scalarsEnumsHash: import('gqty').ScalarsEnumsHash = { - Boolean: true, - DateTime: true, - EmailAddress: true, - ID: true, - Int: true, - NonEmptyString: true, - NonNegativeInt: true, - String: true, - UserRole: true, -}; -export const generatedSchema = { - AuthResult: { - __typename: { __type: 'String!' }, - error: { __type: 'String' }, - token: { __type: 'String' }, - user: { __type: 'User' }, - }, - Category: { - __typename: { __type: 'String!' }, - id: { __type: 'ID!' }, - name: { __type: 'String' }, - posts: { - __type: 'PostsConnection!', - __args: { input: 'CursorConnectionArgs!' }, - }, - }, - CursorConnectionArgs: { - after: { __type: 'NonEmptyString' }, - before: { __type: 'NonEmptyString' }, - first: { __type: 'NonNegativeInt' }, - last: { __type: 'NonNegativeInt' }, - }, - CursorPageInfo: { - __typename: { __type: 'String!' }, - endCursor: { __type: 'NonEmptyString' }, - hasNextPage: { __type: 'Boolean!' }, - hasPreviousPage: { __type: 'Boolean!' }, - startCursor: { __type: 'NonEmptyString' }, - }, - LoginInput: { email: { __type: 'EmailAddress!' } }, - Post: { - __typename: { __type: 'String!' }, - category: { __type: '[Category!]' }, - createdAt: { __type: 'DateTime!' }, - id: { __type: 'ID!' }, - published: { __type: 'Boolean!' }, - title: { __type: 'String!' }, - }, - PostCreate: { - category: { __type: '[String!]' }, - title: { __type: 'NonEmptyString!' }, - }, - PostUpdate: { - category: { __type: '[String!]' }, - id: { __type: 'String!' }, - published: { __type: 'Boolean' }, - title: { __type: 'NonEmptyString' }, - }, - PostsConnection: { - __typename: { __type: 'String!' }, - nodes: { __type: '[Post!]!' }, - pageInfo: { __type: 'CursorPageInfo!' }, - }, - RegisterInput: { email: { __type: 'EmailAddress!' } }, - User: { - __typename: { __type: 'String!' }, - email: { __type: 'String!' }, - id: { __type: 'ID!' }, - name: { __type: 'String' }, - posts: { - __type: 'PostsConnection!', - __args: { input: 'CursorConnectionArgs!' }, - }, - role: { __type: 'UserRole!' }, - }, - mutation: { - __typename: { __type: 'String!' }, - createPost: { __type: 'Post!', __args: { post: 'PostCreate!' } }, - hello: { __type: 'String!' }, - login: { __type: 'AuthResult!', __args: { input: 'LoginInput!' } }, - register: { __type: 'AuthResult!', __args: { input: 'RegisterInput!' } }, - removeOwnPost: { __type: 'Boolean!', __args: { postId: 'String!' } }, - setName: { __type: 'User!', __args: { name: 'String!' } }, - updatePost: { __type: 'Post!', __args: { post: 'PostUpdate!' } }, - }, - query: { - __typename: { __type: 'String!' }, - currentUser: { __type: 'AuthResult!' }, - hello: { __type: 'String!' }, - namesList: { __type: '[String!]!', __args: { n: 'Int' } }, - postsCategories: { __type: '[Category!]!' }, - publicPosts: { - __type: 'PostsConnection!', - __args: { input: 'CursorConnectionArgs!' }, - }, - }, - subscription: {}, -} as const; - -export interface AuthResult { - __typename?: 'AuthResult'; - error?: Maybe; - token?: Maybe; - user?: Maybe; -} - -export interface Category { - __typename?: 'Category'; - id: ScalarsEnums['ID']; - name?: Maybe; - posts: (args: { input: CursorConnectionArgs }) => PostsConnection; -} - -export interface CursorPageInfo { - __typename?: 'CursorPageInfo'; - endCursor?: Maybe; - hasNextPage: ScalarsEnums['Boolean']; - hasPreviousPage: ScalarsEnums['Boolean']; - startCursor?: Maybe; -} - -export interface Post { - __typename?: 'Post'; - category?: Maybe>; - createdAt: ScalarsEnums['DateTime']; - id: ScalarsEnums['ID']; - published: ScalarsEnums['Boolean']; - title: ScalarsEnums['String']; -} - -export interface PostsConnection { - __typename?: 'PostsConnection'; - nodes: Array; - pageInfo: CursorPageInfo; -} - -export interface User { - __typename?: 'User'; - email: ScalarsEnums['String']; - id: ScalarsEnums['ID']; - name?: Maybe; - /** - * Posts created by user - */ - posts: (args: { input: CursorConnectionArgs }) => PostsConnection; - role: ScalarsEnums['UserRole']; -} - -export interface Mutation { - __typename?: 'Mutation'; - /** - * [Authenticated] Create new post - */ - createPost: (args: { post: PostCreate }) => Post; - hello: ScalarsEnums['String']; - /** - * Login user - */ - login: (args: { input: LoginInput }) => AuthResult; - /** - * Register user - */ - register: (args: { input: RegisterInput }) => AuthResult; - /** - * [Authenticated] Remove own post - */ - removeOwnPost: (args: { - postId: Scalars['String']; - }) => ScalarsEnums['Boolean']; - setName: (args: { name: Scalars['String'] }) => User; - /** - * [Authenticated] Update existing post - */ - updatePost: (args: { post: PostUpdate }) => Post; -} - -export interface Query { - __typename?: 'Query'; - /** - * Current authenticated user - */ - currentUser: AuthResult; - hello: ScalarsEnums['String']; - namesList: (args?: { - /** - * @defaultValue `10` - */ - n?: Maybe; - }) => Array; - /** - * Get all current created categories - */ - postsCategories: Array; - /** - * Get all published posts - */ - publicPosts: (args: { input: CursorConnectionArgs }) => PostsConnection; -} - -export interface Subscription { - __typename?: 'Subscription'; -} - -export interface SchemaObjectTypes { - AuthResult: AuthResult; - Category: Category; - CursorPageInfo: CursorPageInfo; - Mutation: Mutation; - Post: Post; - PostsConnection: PostsConnection; - Query: Query; - Subscription: Subscription; - User: User; -} -export type SchemaObjectTypesNames = - | 'AuthResult' - | 'Category' - | 'CursorPageInfo' - | 'Mutation' - | 'Post' - | 'PostsConnection' - | 'Query' - | 'Subscription' - | 'User'; - -export interface GeneratedSchema { - query: Query; - mutation: Mutation; - subscription: Subscription; -} - -export type MakeNullable = { - [K in keyof T]: T[K] | undefined; -}; - -export interface ScalarsEnums extends MakeNullable { - UserRole: UserRole | undefined; -} diff --git a/examples/vite-example/src/main.tsx b/examples/vite-example/src/main.tsx deleted file mode 100644 index 6832e7832..000000000 --- a/examples/vite-example/src/main.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import './index.css'; -import App from './App'; - -ReactDOM.render( - - - , - document.getElementById('root') -); diff --git a/examples/vite-example/.gitignore b/examples/vite-react/.gitignore similarity index 100% rename from examples/vite-example/.gitignore rename to examples/vite-react/.gitignore diff --git a/examples/vite-example/index.html b/examples/vite-react/index.html similarity index 77% rename from examples/vite-example/index.html rename to examples/vite-react/index.html index 38f386110..fde15500f 100644 --- a/examples/vite-example/index.html +++ b/examples/vite-react/index.html @@ -1,9 +1,11 @@ - + + + Vite App diff --git a/examples/vite-example/package.json b/examples/vite-react/package.json similarity index 60% rename from examples/vite-example/package.json rename to examples/vite-react/package.json index 793984d53..5c87e865c 100644 --- a/examples/vite-example/package.json +++ b/examples/vite-react/package.json @@ -9,19 +9,18 @@ "serve": "vite preview" }, "dependencies": { - "@gqty/cli": "workspace:^3.3.0", - "@gqty/react": "workspace:^2.1.1", - "gqty": "workspace:^2.3.0", - "react": "^17.0.2", - "react-dom": "^17.0.2" + "@gqty/cli": "workspace:^", + "@gqty/react": "workspace:^", + "gqty": "workspace:^", + "react": "^18.2.0", + "react-dom": "^18.2.0" }, "devDependencies": { - "@types/node": "^18.15.5", - "@types/react": "^17.0.53", + "@types/node": "^18.15.11", + "@types/react": "^18.2.0", "@types/react-dom": "^18.0.11", "@vitejs/plugin-react-refresh": "^1.3.6", "esbuild": "^0.17.12", - "typescript": "^4.9.5", "vite": "^4.2.1" } } diff --git a/examples/vite-example/src/App.css b/examples/vite-react/src/App.css similarity index 100% rename from examples/vite-example/src/App.css rename to examples/vite-react/src/App.css diff --git a/examples/vite-react/src/App.tsx b/examples/vite-react/src/App.tsx new file mode 100644 index 000000000..38c18db64 --- /dev/null +++ b/examples/vite-react/src/App.tsx @@ -0,0 +1,80 @@ +import { useState } from 'react'; +import './App.css'; +import Avatar from './App/Avatar'; +import Card from './App/Card'; +import SmallText from './App/SmallText'; +import { Text } from './App/Text'; +import { useQuery } from './gqty'; +import logo from './logo.svg'; + +let renderCount = 0; + +function App() { + const [count, setCount] = useState(0); + const { characters } = useQuery(); + + return ( +
+
+ logo +

Hello Vite + React!

+ +

Render count {++renderCount}

+ +

+ +

+

+ Edit App.tsx and save to test HMR updates. +

+

+ + Learn React + + {' | '} + + Vite Docs + +

+ +
+ {characters({ filter: { name: 'alien' } })?.results?.map( + (character) => ( + + + +
+ {character?.name} + {character?.species} + {character?.origin?.name} +
+
+ ) + )} +
+
+
+ ); +} + +export default App; diff --git a/examples/vite-react/src/App/Avatar.tsx b/examples/vite-react/src/App/Avatar.tsx new file mode 100644 index 000000000..8701435e3 --- /dev/null +++ b/examples/vite-react/src/App/Avatar.tsx @@ -0,0 +1,30 @@ +import { type FunctionComponent } from 'react'; +import { Character, Maybe } from '../gqty'; +import Skeleton from './Skeleton'; + +const avatarStyle = `inline-block rounded-full mr-3`; + +const Avatar: FunctionComponent<{ character?: Maybe }> = ({ + character, +}) => ( + + } + > + {character?.image && ( + {`Image + )} + +); + +export default Avatar; diff --git a/examples/vite-react/src/App/Card.tsx b/examples/vite-react/src/App/Card.tsx new file mode 100644 index 000000000..e49e2bf8a --- /dev/null +++ b/examples/vite-react/src/App/Card.tsx @@ -0,0 +1,13 @@ +import { type FunctionComponent, type HTMLAttributes } from 'react'; + +const Card: FunctionComponent> = ({ + className, + ...props +}) => ( +
+); + +export default Card; diff --git a/examples/vite-react/src/App/Skeleton.tsx b/examples/vite-react/src/App/Skeleton.tsx new file mode 100644 index 000000000..77f110de0 --- /dev/null +++ b/examples/vite-react/src/App/Skeleton.tsx @@ -0,0 +1,19 @@ +import { + type FunctionComponent, + type PropsWithChildren, + type ReactNode, +} from 'react'; +import { useMetaState } from '../gqty'; + +export type Props = { fallback?: ReactNode }; + +const Skeleton: FunctionComponent> = ({ + children, + fallback, +}) => { + const { isFetching } = useMetaState(); + + return <>{children ?? fallback}; +}; + +export default Skeleton; diff --git a/examples/vite-react/src/App/SmallText.tsx b/examples/vite-react/src/App/SmallText.tsx new file mode 100644 index 000000000..f790daa52 --- /dev/null +++ b/examples/vite-react/src/App/SmallText.tsx @@ -0,0 +1,32 @@ +import { FunctionComponent, PropsWithChildren } from 'react'; +import Skeleton from './Skeleton'; + +const SmallText: FunctionComponent< + PropsWithChildren<{ textLength?: number }> +> = ({ textLength = 25, children }) => ( +

+ +   + + } + > + {children} + +

+); + +export default SmallText; diff --git a/examples/vite-react/src/App/Text.tsx b/examples/vite-react/src/App/Text.tsx new file mode 100644 index 000000000..aec776cd3 --- /dev/null +++ b/examples/vite-react/src/App/Text.tsx @@ -0,0 +1,31 @@ +import { FunctionComponent, PropsWithChildren } from 'react'; +import Skeleton from './Skeleton'; + +export const Text: FunctionComponent< + PropsWithChildren<{ textLength?: number }> +> = ({ textLength = 25, children }) => ( + +   + + } + > + {children} + +); + +export default Text; diff --git a/examples/vite-example/src/favicon.svg b/examples/vite-react/src/favicon.svg similarity index 100% rename from examples/vite-example/src/favicon.svg rename to examples/vite-react/src/favicon.svg diff --git a/examples/vite-react/src/gqty/index.ts b/examples/vite-react/src/gqty/index.ts new file mode 100644 index 000000000..fd6e38bef --- /dev/null +++ b/examples/vite-react/src/gqty/index.ts @@ -0,0 +1,90 @@ +/** + * GQty: You can safely modify this file based on your needs. + */ + +import { createReactClient } from '@gqty/react'; +import type { QueryFetcher } from 'gqty'; +import { Cache, createClient } from 'gqty'; +import type { GeneratedSchema } from './schema.generated'; +import { generatedSchema, scalarsEnumsHash } from './schema.generated'; + +const queryFetcher: QueryFetcher = async function ( + { query, variables, operationName }, + fetchOptions +) { + // Modify "https://rickandmortyapi.com/graphql" if needed + const response = await fetch('https://rickandmortyapi.com/graphql', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + query, + variables, + operationName, + }), + mode: 'cors', + ...fetchOptions, + }); + + const json = await response.json(); + + return json; +}; + +const cache = new Cache( + undefined, + /** + * Default cache options immediate expiry with a 5 minutes window of + * stale-while-revalidate. + */ + { + maxAge: 0, + staleWhileRevalidate: 5 * 60 * 1000, + normalization: true, + } +); + +export const client = createClient({ + schema: generatedSchema, + scalars: scalarsEnumsHash, + cache, + fetchOptions: { + fetcher: queryFetcher, + }, +}); + +// Core functions +export const { resolve, subscribe, schema } = client; + +// Legacy functions +export const { + query, + mutation, + mutate, + subscription, + resolved, + refetch, + track, +} = client; + +export const { + graphql, + useQuery, + usePaginatedQuery, + useTransactionQuery, + useLazyQuery, + useRefetch, + useMutation, + useMetaState, + prepareReactRender, + useHydrateCache, + prepareQuery, +} = createReactClient(client, { + defaults: { + // Enable Suspense, you can override this option at hooks. + suspense: false, + }, +}); + +export * from './schema.generated'; diff --git a/examples/vite-react/src/gqty/schema.generated.ts b/examples/vite-react/src/gqty/schema.generated.ts new file mode 100644 index 000000000..ec868660f --- /dev/null +++ b/examples/vite-react/src/gqty/schema.generated.ts @@ -0,0 +1,370 @@ +/** + * GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY + */ + +export type Maybe = T | null; +export type InputMaybe = Maybe; +export type Exact = { + [K in keyof T]: T[K]; +}; +export type MakeOptional = Omit & { + [SubKey in K]?: Maybe; +}; +export type MakeMaybe = Omit & { + [SubKey in K]: Maybe; +}; +/** All built-in and custom scalars, mapped to their actual values */ +export interface Scalars { + ID: string; + String: string; + Boolean: boolean; + Int: number; + Float: number; + /** The `Upload` scalar type represents a file upload. */ + Upload: any; +} + +export enum CacheControlScope { + PRIVATE = 'PRIVATE', + PUBLIC = 'PUBLIC', +} + +export interface FilterCharacter { + gender?: InputMaybe; + name?: InputMaybe; + species?: InputMaybe; + status?: InputMaybe; + type?: InputMaybe; +} + +export interface FilterEpisode { + episode?: InputMaybe; + name?: InputMaybe; +} + +export interface FilterLocation { + dimension?: InputMaybe; + name?: InputMaybe; + type?: InputMaybe; +} + +export const scalarsEnumsHash: import('gqty').ScalarsEnumsHash = { + Boolean: true, + CacheControlScope: true, + ID: true, + Int: true, + String: true, + Upload: true, +}; +export const generatedSchema = { + Character: { + __typename: { __type: 'String!' }, + created: { __type: 'String' }, + episode: { __type: '[Episode]!' }, + gender: { __type: 'String' }, + id: { __type: 'ID' }, + image: { __type: 'String' }, + location: { __type: 'Location' }, + name: { __type: 'String' }, + origin: { __type: 'Location' }, + species: { __type: 'String' }, + status: { __type: 'String' }, + type: { __type: 'String' }, + }, + Characters: { + __typename: { __type: 'String!' }, + info: { __type: 'Info' }, + results: { __type: '[Character]' }, + }, + Episode: { + __typename: { __type: 'String!' }, + air_date: { __type: 'String' }, + characters: { __type: '[Character]!' }, + created: { __type: 'String' }, + episode: { __type: 'String' }, + id: { __type: 'ID' }, + name: { __type: 'String' }, + }, + Episodes: { + __typename: { __type: 'String!' }, + info: { __type: 'Info' }, + results: { __type: '[Episode]' }, + }, + FilterCharacter: { + gender: { __type: 'String' }, + name: { __type: 'String' }, + species: { __type: 'String' }, + status: { __type: 'String' }, + type: { __type: 'String' }, + }, + FilterEpisode: { episode: { __type: 'String' }, name: { __type: 'String' } }, + FilterLocation: { + dimension: { __type: 'String' }, + name: { __type: 'String' }, + type: { __type: 'String' }, + }, + Info: { + __typename: { __type: 'String!' }, + count: { __type: 'Int' }, + next: { __type: 'Int' }, + pages: { __type: 'Int' }, + prev: { __type: 'Int' }, + }, + Location: { + __typename: { __type: 'String!' }, + created: { __type: 'String' }, + dimension: { __type: 'String' }, + id: { __type: 'ID' }, + name: { __type: 'String' }, + residents: { __type: '[Character]!' }, + type: { __type: 'String' }, + }, + Locations: { + __typename: { __type: 'String!' }, + info: { __type: 'Info' }, + results: { __type: '[Location]' }, + }, + mutation: {}, + query: { + __typename: { __type: 'String!' }, + character: { __type: 'Character', __args: { id: 'ID!' } }, + characters: { + __type: 'Characters', + __args: { filter: 'FilterCharacter', page: 'Int' }, + }, + charactersByIds: { __type: '[Character]', __args: { ids: '[ID!]!' } }, + episode: { __type: 'Episode', __args: { id: 'ID!' } }, + episodes: { + __type: 'Episodes', + __args: { filter: 'FilterEpisode', page: 'Int' }, + }, + episodesByIds: { __type: '[Episode]', __args: { ids: '[ID!]!' } }, + location: { __type: 'Location', __args: { id: 'ID!' } }, + locations: { + __type: 'Locations', + __args: { filter: 'FilterLocation', page: 'Int' }, + }, + locationsByIds: { __type: '[Location]', __args: { ids: '[ID!]!' } }, + }, + subscription: {}, +} as const; + +export interface Character { + __typename?: 'Character'; + /** + * Time at which the character was created in the database. + */ + created?: Maybe; + /** + * Episodes in which this character appeared. + */ + episode: Array>; + /** + * The gender of the character ('Female', 'Male', 'Genderless' or 'unknown'). + */ + gender?: Maybe; + /** + * The id of the character. + */ + id?: Maybe; + /** + * Link to the character's image. + * All images are 300x300px and most are medium shots or portraits since they are intended to be used as avatars. + */ + image?: Maybe; + /** + * The character's last known location + */ + location?: Maybe; + /** + * The name of the character. + */ + name?: Maybe; + /** + * The character's origin location + */ + origin?: Maybe; + /** + * The species of the character. + */ + species?: Maybe; + /** + * The status of the character ('Alive', 'Dead' or 'unknown'). + */ + status?: Maybe; + /** + * The type or subspecies of the character. + */ + type?: Maybe; +} + +export interface Characters { + __typename?: 'Characters'; + info?: Maybe; + results?: Maybe>>; +} + +export interface Episode { + __typename?: 'Episode'; + /** + * The air date of the episode. + */ + air_date?: Maybe; + /** + * List of characters who have been seen in the episode. + */ + characters: Array>; + /** + * Time at which the episode was created in the database. + */ + created?: Maybe; + /** + * The code of the episode. + */ + episode?: Maybe; + /** + * The id of the episode. + */ + id?: Maybe; + /** + * The name of the episode. + */ + name?: Maybe; +} + +export interface Episodes { + __typename?: 'Episodes'; + info?: Maybe; + results?: Maybe>>; +} + +export interface Info { + __typename?: 'Info'; + /** + * The length of the response. + */ + count?: Maybe; + /** + * Number of the next page (if it exists) + */ + next?: Maybe; + /** + * The amount of pages. + */ + pages?: Maybe; + /** + * Number of the previous page (if it exists) + */ + prev?: Maybe; +} + +export interface Location { + __typename?: 'Location'; + /** + * Time at which the location was created in the database. + */ + created?: Maybe; + /** + * The dimension in which the location is located. + */ + dimension?: Maybe; + /** + * The id of the location. + */ + id?: Maybe; + /** + * The name of the location. + */ + name?: Maybe; + /** + * List of characters who have been last seen in the location. + */ + residents: Array>; + /** + * The type of the location. + */ + type?: Maybe; +} + +export interface Locations { + __typename?: 'Locations'; + info?: Maybe; + results?: Maybe>>; +} + +export interface Mutation { + __typename?: 'Mutation'; +} + +export interface Query { + __typename?: 'Query'; + /** + * Get a specific character by ID + */ + character: (args: { id: Scalars['ID'] }) => Maybe; + /** + * Get the list of all characters + */ + characters: (args?: { + filter?: Maybe; + page?: Maybe; + }) => Maybe; + /** + * Get a list of characters selected by ids + */ + charactersByIds: (args: { + ids: Array; + }) => Maybe>>; + /** + * Get a specific episode by ID + */ + episode: (args: { id: Scalars['ID'] }) => Maybe; + /** + * Get the list of all episodes + */ + episodes: (args?: { + filter?: Maybe; + page?: Maybe; + }) => Maybe; + /** + * Get a list of episodes selected by ids + */ + episodesByIds: (args: { + ids: Array; + }) => Maybe>>; + /** + * Get a specific locations by ID + */ + location: (args: { id: Scalars['ID'] }) => Maybe; + /** + * Get the list of all locations + */ + locations: (args?: { + filter?: Maybe; + page?: Maybe; + }) => Maybe; + /** + * Get a list of locations selected by ids + */ + locationsByIds: (args: { + ids: Array; + }) => Maybe>>; +} + +export interface Subscription { + __typename?: 'Subscription'; +} + +export interface GeneratedSchema { + query: Query; + mutation: Mutation; + subscription: Subscription; +} + +export type MakeNullable = { + [K in keyof T]: T[K] | undefined; +}; + +export interface ScalarsEnums extends MakeNullable { + CacheControlScope: CacheControlScope | undefined; +} diff --git a/examples/vite-example/src/index.css b/examples/vite-react/src/index.css similarity index 100% rename from examples/vite-example/src/index.css rename to examples/vite-react/src/index.css diff --git a/examples/vite-example/src/logo.svg b/examples/vite-react/src/logo.svg similarity index 100% rename from examples/vite-example/src/logo.svg rename to examples/vite-react/src/logo.svg diff --git a/examples/vite-react/src/main.tsx b/examples/vite-react/src/main.tsx new file mode 100644 index 000000000..8d5b75c16 --- /dev/null +++ b/examples/vite-react/src/main.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { createRoot } from 'react-dom/client'; +import App from './App'; +import './index.css'; + +createRoot(document.getElementById('root')!).render( + + + +); diff --git a/examples/vite-example/src/vite-env.d.ts b/examples/vite-react/src/vite-env.d.ts similarity index 100% rename from examples/vite-example/src/vite-env.d.ts rename to examples/vite-react/src/vite-env.d.ts diff --git a/examples/vite-example/tsconfig.json b/examples/vite-react/tsconfig.json similarity index 88% rename from examples/vite-example/tsconfig.json rename to examples/vite-react/tsconfig.json index 013e6c54f..7a5128aa6 100644 --- a/examples/vite-example/tsconfig.json +++ b/examples/vite-react/tsconfig.json @@ -1,19 +1,20 @@ { "compilerOptions": { - "target": "ESNext", - "lib": ["DOM", "DOM.Iterable", "ESNext"], "allowJs": false, - "skipLibCheck": false, - "esModuleInterop": false, "allowSyntheticDefaultImports": true, - "strict": true, + "esModuleInterop": false, "forceConsistentCasingInFileNames": true, + "isolatedModules": true, + "jsx": "react-jsx", + "lib": ["DOM", "DOM.Iterable", "ESNext"], "module": "ESNext", "moduleResolution": "Node", - "resolveJsonModule": true, - "isolatedModules": true, "noEmit": true, - "jsx": "react" + "resolveJsonModule": true, + "skipLibCheck": false, + "strict": true, + "target": "ESNext", + "verbatimModuleSyntax": true }, "include": ["./src"] } diff --git a/examples/vite-example/vite.config.ts b/examples/vite-react/vite.config.ts similarity index 100% rename from examples/vite-example/vite.config.ts rename to examples/vite-react/vite.config.ts diff --git a/integration/graphql-17/ava.config.mjs b/integration/graphql-17/ava.config.mjs deleted file mode 100644 index 276f8166f..000000000 --- a/integration/graphql-17/ava.config.mjs +++ /dev/null @@ -1,7 +0,0 @@ -export default { - files: ['**/*.test.ts'], - extensions: { - ts: 'module', - }, - nodeArguments: ['--require=bob-tsm', '--loader=bob-tsm'], -}; diff --git a/integration/graphql-17/package.json b/integration/graphql-17/package.json deleted file mode 100644 index 98340d33d..000000000 --- a/integration/graphql-17/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "integration-graphql-17", - "version": "0.0.1", - "private": true, - "scripts": { - "generate": "bob-tsm src/generate.ts", - "test": "pnpm i --ignore-scripts && c8 ava" - }, - "devDependencies": { - "@gqty/cli": "workspace:^3.3.0", - "@graphql-ez/fastify": "^0.12.0", - "@graphql-ez/fastify-testing": "^0.4.0", - "@graphql-typed-document-node/core": "^3.2.0", - "@types/node": "^18.15.5", - "ava": "^5.2.0", - "bob-tsm": "^1.1.2", - "c8": "^7.13.0", - "esbuild": "^0.17.12", - "fastify": "^4.11.0", - "gqty": "workspace:^2.3.0", - "graphql": "17.0.0-alpha.2", - "graphql-ez": "^0.16.0", - "typescript": "^4.9.5" - }, - "dependenciesMeta": { - "@gqty/cli": { - "injected": true - }, - "gqty": { - "injected": true - } - } -} diff --git a/integration/graphql-17/src/api.ts b/integration/graphql-17/src/api.ts deleted file mode 100644 index 0962bcb3e..000000000 --- a/integration/graphql-17/src/api.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { CreateApp, LazyPromise } from '@graphql-ez/fastify'; -import { CreateTestClient } from '@graphql-ez/fastify-testing'; -import { - GraphQLNonNull, - GraphQLObjectType, - GraphQLSchema, - GraphQLString, -} from 'graphql'; - -export const schema = new GraphQLSchema({ - query: new GraphQLObjectType({ - name: 'Query', - fields: { - hello: { - type: new GraphQLNonNull(GraphQLString), - resolve() { - return 'Hello World'; - }, - }, - }, - }), -}); - -export const API = CreateApp({ - schema, -}); - -export const TestClient = LazyPromise(() => CreateTestClient(API)); diff --git a/integration/graphql-17/src/generate.ts b/integration/graphql-17/src/generate.ts deleted file mode 100644 index 2fa23ca72..000000000 --- a/integration/graphql-17/src/generate.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { writeGenerate } from '@gqty/cli'; -import { resolve } from 'path'; -import { schema } from './api'; - -await writeGenerate(schema, resolve(__dirname, './gqty.ts')); diff --git a/integration/graphql-17/src/gqty.ts b/integration/graphql-17/src/gqty.ts deleted file mode 100644 index b529e5425..000000000 --- a/integration/graphql-17/src/gqty.ts +++ /dev/null @@ -1,36 +0,0 @@ -/** - * GQTY: You can safely modify this file and Query Fetcher based on your needs - */ - -import type { QueryFetcher } from 'gqty'; -import { createClient } from 'gqty'; -import { TestClient } from './api'; -import type { - GeneratedSchema, - SchemaObjectTypes, - SchemaObjectTypesNames, -} from './schema.generated'; -import { generatedSchema, scalarsEnumsHash } from './schema.generated'; - -const queryFetcher: QueryFetcher = async function (query, variables) { - return (await TestClient).query(query, { - variables, - }); -}; - -export const client = createClient< - GeneratedSchema, - SchemaObjectTypesNames, - SchemaObjectTypes ->({ - schema: generatedSchema, - scalarsEnumsHash, - queryFetcher, -}); - -const { query, mutation, mutate, subscription, resolved, refetch, track } = - client; - -export { query, mutation, mutate, subscription, resolved, refetch, track }; - -export * from './schema.generated'; diff --git a/integration/graphql-17/src/schema.generated.ts b/integration/graphql-17/src/schema.generated.ts deleted file mode 100644 index 20bfe6acc..000000000 --- a/integration/graphql-17/src/schema.generated.ts +++ /dev/null @@ -1,65 +0,0 @@ -/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY - */ - -export type Maybe = T | null; -export type InputMaybe = Maybe; -export type Exact = { - [K in keyof T]: T[K]; -}; -export type MakeOptional = Omit & { - [SubKey in K]?: Maybe; -}; -export type MakeMaybe = Omit & { - [SubKey in K]: Maybe; -}; -/** All built-in and custom scalars, mapped to their actual values */ -export interface Scalars { - ID: string; - String: string; - Boolean: boolean; - Int: number; - Float: number; -} - -export const scalarsEnumsHash: import('gqty').ScalarsEnumsHash = { - Boolean: true, - String: true, -}; -export const generatedSchema = { - mutation: {}, - query: { __typename: { __type: 'String!' }, hello: { __type: 'String!' } }, - subscription: {}, -} as const; - -export interface Mutation { - __typename?: 'Mutation'; -} - -export interface Query { - __typename?: 'Query'; - hello: ScalarsEnums['String']; -} - -export interface Subscription { - __typename?: 'Subscription'; -} - -export interface SchemaObjectTypes { - Mutation: Mutation; - Query: Query; - Subscription: Subscription; -} -export type SchemaObjectTypesNames = 'Mutation' | 'Query' | 'Subscription'; - -export interface GeneratedSchema { - query: Query; - mutation: Mutation; - subscription: Subscription; -} - -export type MakeNullable = { - [K in keyof T]: T[K] | undefined; -}; - -export interface ScalarsEnums extends MakeNullable {} diff --git a/integration/graphql-17/test/main.test.ts b/integration/graphql-17/test/main.test.ts deleted file mode 100644 index efddf2508..000000000 --- a/integration/graphql-17/test/main.test.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { query, resolved } from '../src/gqty'; - -import test from 'ava'; - -test('Hello World', async (t) => { - const result = await resolved(() => { - return query.hello; - }); - - t.is(result, 'Hello World'); -}); diff --git a/integration/graphql-17/tsconfig.json b/integration/graphql-17/tsconfig.json deleted file mode 100644 index bdc8af29a..000000000 --- a/integration/graphql-17/tsconfig.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Projects */ - // "incremental": true, /* Enable incremental compilation */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "esnext" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ - // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - - /* Modules */ - "module": "esnext" /* Specify what module code is generated. */, - // "rootDir": "./", /* Specify the root folder within your source files. */ - "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */, - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "resolveJsonModule": true, /* Enable importing .json files */ - // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ - // "outDir": "./", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - - /* Type Checking */ - "strict": true /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ - // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ - // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } -} diff --git a/internal/images/hero.png b/internal/images/hero.png new file mode 100644 index 000000000..a837ea010 Binary files /dev/null and b/internal/images/hero.png differ diff --git a/internal/website/public/logo.png b/internal/images/logo.png similarity index 100% rename from internal/website/public/logo.png rename to internal/images/logo.png diff --git a/internal/test-utils/jest.config.js b/internal/test-utils/jest.config.js index b6b7765ba..4ace177f2 100644 --- a/internal/test-utils/jest.config.js +++ b/internal/test-utils/jest.config.js @@ -10,14 +10,16 @@ process.env.TS_JEST_HOOKS = require.resolve('./tsJestHooks.js'); * @type {import("@jest/types").Config.InitialOptions} */ const defaultConfig = { - globals: { - 'ts-jest': { - tsconfig: require.resolve('./test/tsconfig.json'), - isolatedModules: true, - }, - }, preset: 'ts-jest', - transform: { '\\.[jt]sx?$': 'ts-jest' }, + transform: { + '\\.[jt]sx?$': [ + 'ts-jest', + { + tsconfig: require.resolve('./test/tsconfig.json'), + isolatedModules: true, + }, + ], + }, transformIgnorePatterns: ['[/\\\\]node_modules[/\\\\].+\\.(js|jsx)$'], modulePathIgnorePatterns: ['/dist/'], moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], diff --git a/internal/test-utils/package.json b/internal/test-utils/package.json index 1b436d258..96f847eb6 100644 --- a/internal/test-utils/package.json +++ b/internal/test-utils/package.json @@ -4,15 +4,20 @@ "private": true, "license": "MIT", "author": "PabloSzx ", + "maintainers": [ + "Vicary Archangel " + ], "main": "dist/index.js", "module": "dist/index.mjs", "types": "src/index.ts", "exports": { ".": { + "types": "./dist/index.d.ts", "require": "./dist/index.js", "import": "./dist/index.mjs" }, "./*": { + "types": "./dist/*.d.ts", "require": "./dist/*.js", "import": "./dist/*.mjs" }, @@ -40,9 +45,7 @@ "graphql-ez": "^0.16.0", "jest": "^29.5.0", "jest-watch-typeahead": "^2.2.2", - "prettier": "^2.8.6", "randomstring": "^1.2.3", - "ts-jest": "^29.0.5", "wait-for-expect": "^3.0.2" }, "devDependencies": { @@ -50,11 +53,18 @@ "@jest/types": "^29.5.0", "@types/node": "^18.15.5", "@types/randomstring": "^1.1.8", - "bob-esbuild-cli": "^4.0.0", - "bob-ts": "^4.1.1", + "bob-esbuild-cli": "5.0.0-alpha-227aebc.0", + "bob-ts": "5.0.0-alpha-227aebc.0", "concurrently": "^7.6.0", "esbuild": "^0.17.12", - "tslib": "^2.5.0", - "typescript": "^4.9.5" + "tslib": "^2.5.0" + }, + "peerDependencies": { + "graphql": "*" + }, + "peerDependenciesMeta": { + "graphql": { + "optional": true + } } } diff --git a/internal/test-utils/src/app.ts b/internal/test-utils/src/app.ts index b77d5a4dc..8c3de5648 100644 --- a/internal/test-utils/src/app.ts +++ b/internal/test-utils/src/app.ts @@ -1,11 +1,11 @@ import { createDeferredPromise, - FastifyAppOptions, - PromiseType, + type FastifyAppOptions, + type PromiseType, } from '@graphql-ez/fastify'; import { CreateTestClient, GlobalTeardown } from '@graphql-ez/fastify-testing'; -import { CodegenOptions, ezCodegen } from '@graphql-ez/plugin-codegen'; -import { ezSchema, EZSchemaOptions } from '@graphql-ez/plugin-schema'; +import { ezCodegen, type CodegenOptions } from '@graphql-ez/plugin-codegen'; +import { ezSchema, type EZSchemaOptions } from '@graphql-ez/plugin-schema'; import { ezWebSockets } from '@graphql-ez/plugin-websockets'; import { InMemoryPubSub } from 'graphql-ez/pubsub'; import { inspect } from 'util'; @@ -91,7 +91,7 @@ export async function createTestApp( ); if (websockets) { - ezPlugins.push(ezWebSockets('legacy')); + ezPlugins.push(ezWebSockets()); } const client = await CreateTestClient({ @@ -107,4 +107,3 @@ export async function createTestApp( } export * from '@graphql-ez/fastify'; -export * as fastify from 'fastify'; diff --git a/internal/test-utils/src/index.ts b/internal/test-utils/src/index.ts index 227d8dbb3..8b6da3d8f 100644 --- a/internal/test-utils/src/index.ts +++ b/internal/test-utils/src/index.ts @@ -1,8 +1,9 @@ +import * as fastify from 'fastify'; import * as randomstring from 'randomstring'; export { default as waitForExpect } from 'wait-for-expect'; - -export * as fastify from 'fastify'; +export * from './app'; +export { fastify, randomstring }; export function assertIsDefined( value: T, @@ -15,7 +16,3 @@ export function assertIsDefined( throw error; } } - -export { randomstring }; - -export * from './app'; diff --git a/internal/website/docs/cli/codegen.mdx b/internal/website/docs/cli/codegen.mdx deleted file mode 100644 index 93afb7374..000000000 --- a/internal/website/docs/cli/codegen.mdx +++ /dev/null @@ -1,134 +0,0 @@ ---- -id: codegen -title: Codegen ---- - -Given it's [configuration](/docs/cli/config), creates a typed gqty client from a graphql endpoint/schema. - -## Installation - -Install the following dependencies to your project: - - - -## Command - -After `@gless/cli` is installed in your package, you should add a `script` in your `package.json`. - -```json -{ - "scripts": { - "generate": "gqty generate" - } -} -``` - -Then, you can execute: - - - -## Format output code - -The CLI code generator comes with built in support for formatting code using [Prettier](https://prettier.io/). The config search will start at the output directory and will continue up the directories tree. - -## Default client generated code - -By default with `react` & `subscriptions` turned on, the generated client files should look like this: - -```ts -import { createReactClient } from '@gqty/react'; -import { createSubscriptionsClient } from '@gqty/subscriptions'; -import { createClient, QueryFetcher } from 'gqty'; -import { - GeneratedSchema, - generatedSchema, - scalarsEnumsHash, - SchemaObjectTypes, - SchemaObjectTypesNames, -} from './schema.generated'; - -const queryFetcher: QueryFetcher = async function (query, variables) { - // Modify "/api/graphql" if needed - const response = await fetch('/api/graphql', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - query, - variables, - }), - mode: 'cors', - }); - - const json = await response.json(); - - return json; -}; - -const subscriptionsClient = - typeof window !== 'undefined' - ? createSubscriptionsClient({ - wsEndpoint: () => { - // Modify if needed - const url = new URL('/api/graphql', window.location.href); - url.protocol = url.protocol.replace('http', 'ws'); - return url.href; - }, - }) - : undefined; - -export const client = createClient< - GeneratedSchema, - SchemaObjectTypesNames, - SchemaObjectTypes ->({ - schema: generatedSchema, - scalarsEnumsHash, - queryFetcher, - subscriptionsClient, -}); - -export const { - query, - mutation, - mutate, - subscription, - resolved, - refetch, - track, -} = client; - -export const { - graphql, - useQuery, - useTransactionQuery, - useLazyQuery, - useMutation, - useRefetch, - useMetaState, - prepareReactRender, - useHydrateCache, - prepareQuery, - useSubscription, -} = createReactClient(client, { - defaults: { - // Set this flag as "true" if your usage involves React Suspense - // Keep in mind that you can overwrite it in a per-hook basis - suspense: false, - - // Set this flag based on your needs - staleWhileRevalidate: false, - }, -}); - -export * from './schema.generated'; -``` - -You can modify this file safely, and each client has configurations you can set. - -- See [Core client configuration](/docs/client/config) - -- See [React configuration](/docs/react/config) - -- See [Subscriptions configuration](/docs/client/subscriptions) diff --git a/internal/website/docs/cli/config.mdx b/internal/website/docs/cli/config.mdx deleted file mode 100644 index 0d22f50dd..000000000 --- a/internal/website/docs/cli/config.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: config -title: CLI Configuration -sidebar_label: Configuration ---- - -The `CLI` looks for 3 places of configuration files/property, in this respective order: - -1. `gqty.config.cjs` -2. `gqty.config.js` -3. `gqty` property inside `package.json` - -And since it's using [cosmiconfig](https://github.com/davidtheclark/cosmiconfig) to resolve it, if you are using GQty in a monorepo, having it in the root of your monorepo might be enough :tada:. - -## Default Config - -The default configuration file, which is automatically generated after the first execution of `gqty generate`, should look like this: - -```js -/** - * @type {import("@gqty/cli").GQtyConfig} - */ -const config = { - enumsAsStrings: false, - react: true, - scalarTypes: { DateTime: 'string' }, - preImport: '', - introspection: { - endpoint: 'SPECIFY_ENDPOINT_OR_SCHEMA_FILE_PATH_HERE', - headers: {}, - }, - destination: './src/gqty/index.ts', - subscriptions: false, -}; - -module.exports = config; -``` - -## Properties - -| Name | Type | Description | -| ---------------------- | --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| enumsAsStrings | `boolean` | Whether to use enums as simple string types, or as the default [Object String Enums of TypeScript](https://www.typescriptlang.org/docs/handbook/enums.html#string-enums). | -| react | `boolean` | Whether to add the [React](/docs/react/fetching-data) bindings to the first-generated client. | -| scalarTypes | `Record` | Mapping of Custom Scalar Types to TypeScript, since by default, **any custom scalar will be casted as `any`**. | -| preImport | `string` | Code to be added at the very beginning of the generated `schema file`, useful for adding custom imported types in custom scalars. | -| introspection.endpoint | `string` | Endpoint from where the introspection of the target GraphQL API, it can be an `http`/`https` endpoint, or the path of a `.gql` GraphQL schema file. | -| introspection.headers | `Record` | Custom headers to be added to `http`/`https` introspection, normally for authorization purposes. | -| destination | `string` | **File destination** of the generated client. Keep in mind that the generated schema always will be alongside this destination, but named `schema.generated.ts`. | -| subscriptions | `boolean` | Whether to add [Subscriptions](/docs/client/subscriptions) support to the client. | -| transformSchema | `(schema: GraphQLSchema, graphql_js: import("graphql")) => Promise | GraphQLSchema` | Transform the GraphQL Schema before being used to generate the client | - ---- - -- See [JavaScript Output](/docs/cli/javascript) -- See [Programmatic Usage](/docs/cli/programmatic) -- See [Codegen](/docs/cli/codegen) diff --git a/internal/website/docs/cli/javascript.mdx b/internal/website/docs/cli/javascript.mdx deleted file mode 100644 index da959934b..000000000 --- a/internal/website/docs/cli/javascript.mdx +++ /dev/null @@ -1,104 +0,0 @@ ---- -id: javascript -title: JavaScript Output ---- - -Although the focus of GQty is to be used in [TypeScript](https://www.typescriptlang.org/), -it's completely possible to use it in JavaScript projects, outputting valid JavaScript code, -alongside it's type-definitions, and using [JSDoc](https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html) -to be able to use a typed GQty. - -We recommend taking a look at [Type Checking JavaScript files](https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html), [allowJs](https://www.typescriptlang.org/tsconfig#allowJs) and [checkJs](https://www.typescriptlang.org/tsconfig#checkJs). - -## Configuration - -To enable `JavaScript Output` you have to especify an extra `javascriptOutput` property in your [Configuration file](/docs/cli/config), with some extra considerations: - -```js -/** - * @type {import("@gqty/cli").GQtyConfig} - */ -const config = { - // It should be set as 'true' or removed. - enumsAsStrings: true, - - // You have to specify the '.js' extension - destination: './src/gqty/index.js', - - // This has to be set as 'true' - javascriptOutput: true, -}; - -module.exports = config; -``` - -And the client will be created following the structure: - -```bash -src/gqty -├── schema.generated.d.ts # Generated schema, you shouldn't modify it manually -├── schema.generated.js # Generated schema, you shouldn't modify it manually -└── index.js # gqty client is exported from here, you can safely modify it based on your needs -``` - -## Usage - -The usage should be exactly the same: - -```js -import { query, resolved } from './gqty/index.js'; - -resolved(() => { - const dogsNames = query.dogs.map((dog) => { - return dog.name; - }); - return { - type: query.time, - dogsNames, - }; -}) - .then((data) => { - console.log({ - data, - }); - }) - .catch(console.error); -``` - -With the caveat that, even if the autocomplete might allow you to import the types, it will probably mean a runtime-error: - -![Javascript Output Type Error](/img/javascript-output-type-error.png) - -To use the types, you have to use the [JSDoc](https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html) [`@type`](https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#type): - -```js -import { query, resolved } from '../gqty'; - -// ... - -// Here user should be automatically typed -const user = await resolved((query) => { - const user = query.user({ - id: '1', - }); - - user.id; - user.name; - - return user; -}); - -function readUserData( - /** - * @type {import("./gqty").User} - */ - user -) { - // Here `user` will be typed -} - -readUserData(user); -``` - -> For [`Node.js`](https://nodejs.org/) usage, if you don't have `"type": "module"` in your `package.json`, you might have to manually modify some `imports` to `requires`, -> since _for now_, outputting `.mjs` doesn't have much utility, since [TypeScript doesn't support it yet](https://github.com/microsoft/TypeScript/issues/18442) diff --git a/internal/website/docs/cli/programmatic.mdx b/internal/website/docs/cli/programmatic.mdx deleted file mode 100644 index 64848878b..000000000 --- a/internal/website/docs/cli/programmatic.mdx +++ /dev/null @@ -1,117 +0,0 @@ ---- -id: programmatic -title: Programmatic usage of CLI -sidebar_label: Programmatic usage ---- - -**@gqty/cli** has also a complete programmatic API, which allows you to generate the client with custom scripts. - -## inspectWriteGenerate - -Basically calling CLI functionality programmatically. - -All the fields are optional, and it will always read from the [Configuration](/docs/cli/config) if any field is not specified. - -```tsx -import { inspectWriteGenerate } from '@gqty/cli'; - -await inspectWriteGenerate({ - destination: './src/gqty/index.ts', - generateOptions: { - preImport: '', - scalarTypes: { - DateTime: 'string', - }, - react: true, - enumsAsStrings: false, - subscriptions: false, - }, - headers: { - authorization: process.env.TOKEN, - }, -}); -``` - -## writeGenerate - -If you have direct access to the [GraphQLSchema](https://graphql.org/graphql-js/type/#graphqlschema) from [graphql-js](https://github.com/graphql/graphql-js), you can give it to this function and it will do the rest. - -All the `GenerateOptions` are optional, and it will always read from the [Configuration](/docs/cli/config) if any field is not specified. - -```tsx -import { writeGenerate } from '@gqty/cli'; - -// You get the `schema` from somewhere... - -await writeGenerate( - // Required - schema, - // Destination, Required - './src/gqty/index.ts', - // GenerateOptions, optional - { - preImport: '', - scalarTypes: { - DateTime: 'string', - }, - react: true, - enumsAsStrings: false, - subscriptions: false, - }, - // What to do if a gqty client file already exists, Optional - (existingFile) => { - // existingFile == string - } -); -``` - -## generate - -If you have direct access to the [GraphQLSchema](https://graphql.org/graphql-js/type/#graphqlschema) from [graphql-js](https://github.com/graphql/graphql-js), you can give it to this function and it generates the code and simply return it. - -All the GenerateOptions are optional, and it will always read from the [Configuration](/docs/cli/config) if any field is not specified. - -```tsx -import { generate } from '@gqty/cli'; - -// You get the `schema` from somewhere... - -const { clientCode, schemaCode, generatedSchema, scalarsEnumsHash } = - await generate( - // Required - schema, - // GenerateOptions, optional - { - preImport: '', - scalarTypes: { - DateTime: 'string', - }, - react: true, - enumsAsStrings: false, - subscriptions: false, - } - ); -``` - -## getRemoteSchema - -Inspect a remote GraphQL API - -If the headers are not specified, it will look for [Configuration](/docs/cli/config). - -```tsx -import { getRemoteSchema } from '@gqty/cli'; - -const schema = await getRemoteSchema( - // Endpoint, required - 'http://localhost:3000/api/graphql', - // Optional - { - headers: { - authorization: process.env.TOKEN, - }, - } -); - -// schema == import("graphql").GraphQLSchema -``` diff --git a/internal/website/docs/client/config.mdx b/internal/website/docs/client/config.mdx deleted file mode 100644 index 9ba9785f9..000000000 --- a/internal/website/docs/client/config.mdx +++ /dev/null @@ -1,114 +0,0 @@ ---- -id: config -title: Core Configuration -sidebar_label: Configuration ---- - -The Core Client has some configurations you can set manually: - -```ts -createClient({ - // Required configuration - schema: generatedSchema, - scalarsEnumsHash, - queryFetcher, - - // Optional configurable options - - catchSelectionsTimeMS: 10, - retry: true, - normalization: true, - subscriptionsClient, -}); -``` - -## ClientOptions - -| Name | Type | Default Value | Description | -| --------------------- | ----------------------------------------------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| catchSelectionsTimeMS | `number` | `10` | Amount of time in milliseconds for the scheduler to wait for grouping data selections together | -| retry | [`RetryOptions`](#retryoptions) | `true` | Retry on error behavior | -| normalization | `boolean` or [`NormalizationOptions`](#normalization) | `true` | Enable, disable and configure [Normalization](#normalization) | -| subscriptionsClient | [`SubscriptionsClient`](/docs/client/subscriptions) | `undefined` | Subscriptions client | -| depthLimit | `number` | `15` | Set the maximum depth limit, needed to prevent possible infinite recursion. After the specified depth is reached, the proxy creation is stopped returning `null` | - -## RetryOptions - -By default GQty has a retry policy of `3` max retries, with a delay of a standard back-off delay `(attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 30000)` ms. - -You can customize it this way: - -- `retry = false` to disable it. -- `retry = 6` it will retry failing requests `6` times, with the standard back-off delay. -- `retry = true` to use the default `3` max retries, with a delay of standard, a back-off delay. -- `{ maxRetries: 6, retryDelay: 2000 }` for `6` max retries, with flat 2000ms of delay per retry. -- `{ retryDelay: function customRetryDelay(attemptIndex) { ... } }` for `3` max retries with custom back-off delay, and so on... - -## Normalization - -GQty has support for normalization, which helps to reduce data redundancy and improve data integrity across all the cache. - -It is `enabled` by default, but you can disable it, which will disable the need of automatically fetching `__typename` and `id's` and all the computing logic needed to support it. - -```ts -createClient({ - // ... - normalization: false, -}); -``` - -But often enough, it's very useful, and keep in mind that `Normalization` in GQty is highly customizable: - -### Identifier - -You can specify a custom object identifier function. - -It gives an incoming object with it's `__typename` and it should return: - -- A **string** if successfully identified -- '**null**' if it shouldn't be normalized -- Or '**undefined**', to fallback to either default or custom [`keyFields`](#keyfields) - -```ts -createClient({ - // ... - normalization: { - identifier(obj) { - switch (obj.__typename) { - case 'User': { - if (obj.email) { - return `${obj.__typename}${obj.email}`; - } - return null; - } - default: { - return; - } - } - }, - }, -}); -``` - -### keyFields - -Auto-fetch & object identifier customization. - -> Keep in mind that GQty already checks your schema and looks for the fields **id** or **\_\_id** -> and it add thems **automatically**. - -Set custom **id's** of any object type in your schema. - -**IMPORTANT**: Please make sure to only put [`Scalars`](https://graphql.org/learn/schema/#scalar-types) -without any variable needed as `keyFields` - -```ts -createClient({ - // ... - normalization: { - keyFields: { - User: ['email'], - }, - }, -}); -``` diff --git a/internal/website/docs/client/fetching-data.mdx b/internal/website/docs/client/fetching-data.mdx deleted file mode 100644 index 7a632cffa..000000000 --- a/internal/website/docs/client/fetching-data.mdx +++ /dev/null @@ -1,197 +0,0 @@ ---- -id: fetching-data -title: Fetching data ---- - -### Prerequisites - -Make sure you've completed [Getting Started](/docs/getting-started) first. - -> `../gqty` refers to the generated directory. - ---- - -GQty is a framework-agnostic GraphQL client, and can be used anywhere _(we might add more bindings for other Frontend frameworks in the future)_. - -## Fetching data - -### resolved - -Accepts a callback, which will be recursively executed, until the data has been fetched (or an error occurs). -The final result of the callback is returned as a promise. - -If your request has any error, either from syntax or from the GraphQL API, -it will always throw an instance of `GQtyError` _(which is itself, an instance of [`Error`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error))_ - -```ts -import { query, resolved } from '../gqty'; - -resolved(() => { - return query.helloWorld!; -}) - .then((data) => { - // data == string - }) - .catch((err) => { - // err == import("gqty").GQtyError - }); -``` - -You can specify options in the second argument, like forcing a refetch or isolating from existing cache. - -### inlineResolved - -`inlineResolved` is the exact same as [resolved](#resolved), but it returns the data straight away if it can. - -```ts -const possibleData = inlineResolved(() => { - return query.helloWorld!; -}); - -if (possibleData instanceof Promise) { - // data == Promise - - // Waiting for data from API - const data = await possibleData; - - // data == string -} else { - // possibleData == string -} -``` - -## Refetching data - -### refetch - -A special function that accepts object proxies, or functions. - -When dealing with object proxies, it recovers **all** the history of the specific object down the tree of selections, -and refetchs them, returning the same object back after all the resolutions are done. - -On the other hand, when used with a **function**, it calls the function (using the core scheduler) ignoring possible nulls in the middle in the first pass, -and returns whatever the function gave back as a promise. - -```ts -import { query, refetch, resolved } from '../gqty'; - -// ... - -const data = await resolved(() => { - const user = query.user; - - if (user) { - return { - id: user.name, - name: user.name, - }; - } - return null; -}); - -// Later... - -// It will refetch 'id' & 'name' of 'query.user' -const refetchedUser = await refetch(query.user); -``` - -## Advanced Usages - -### Operation name - -A custom operation name can be added to GraphQL queries, mutations and subscriptions. - -This is useful when mocking for unit tests, and advanced server logics. - -```ts -import { query, resolved, inlineResolved } from '../gqty'; - -resolved(() => query.helloWorld, { operationName: 'MyQuery' }); - -inlineResolved(() => query.helloWorld, { operationName: 'MyQuery' }); -``` - -Both `resolved` and `inlineResolved` above will generate the following query: - -```graphql -query MyQuery { - helloWorld -} -``` - -### track - -The function `track` accepts a callback that gets automatically called every time related data arrives or related cache changes, particularly useful for subscriptions, but it also works for queries. - -The returned function `stop` unsubscribes and stops tracking and `data` is an object that has a field `.current` that has the latest returned value from the callback. - -```ts -import { track, subscription } from '../gqty'; - -const { stop, data } = track(() => { - return subscription.newNotification; -}); - -// data.current === string | undefined - -setTimeout(() => { - stop(); -}, 5000); -``` - -#### track options - -```ts -track( - (info) => { - /** - * info === { type: "initial" | "cache_change" } - **/ - }, - { - onError(err) { - /** - * err === GQtyError - **/ - - console.error(err); - }, - // Refetch on initial call - refetch: true, - } -); -``` - -### The scheduler - -GQty exposes the Scheduler API, which is used by the helper functions above. - -```ts -import { query, client } from '../gqty'; - -async function Example() { - query.helloWorld; - - await client.scheduler.resolving?.promise; - - // string - const helloWorld = query.helloWorld!; -} -``` - -#### Error handling - -The scheduler resolves to a promise of a `GQtyError`: - -```ts -async function Example() { - query.helloWorld; - - await client.scheduler.resolving?.promise.then(({ error }) => { - // error == import("gqty").GQtyError | undefined - if (error) { - throw error; - } - }); -} -``` diff --git a/internal/website/docs/client/helper-functions.mdx b/internal/website/docs/client/helper-functions.mdx deleted file mode 100644 index b0879344a..000000000 --- a/internal/website/docs/client/helper-functions.mdx +++ /dev/null @@ -1,170 +0,0 @@ ---- -id: helper-functions -title: Helper Functions ---- - -# Helper Functions - -## prepass - -A common pattern to do while using GQty is to just access manually some specified fields, so GQty can pick up your requirements faster. -That allows preventing some possible "waterfalling", or simply to make sure to get all the fields requested in the same query, -specially while using conditionals on possible nulls in your GraphQL Schema. - -For that use case we offer a very useful function called `prepass`, in which you can give it an object or array, and given some paths, it will traverse them, -with some specific features: - -- You can specify the path with different syntaxes `"user.dog.name"`, `["user", "dog", "name"]` or `["user", { field: "pet", variables: { type: "dog" } }, "name"]` -- You **don't** have to specify an array index, since if it finds an array, it will pass-through the **first non-null** value of it -- If you have a field with arguments that you want to access, you can also specify it's value and it will automatically call it's function with that value. - -The only **disadvantages** we see are basically: - -- If it finds a function, and you don't specify it's variables, it can't check if all variables are actually optional, so it will call the function anyways without any variable, and that might result in a GraphQL error. -- It doesn't have autocomplete 😔 - -```ts -import { prepass } from 'gqty'; -import { query } from '../gqty'; - -prepass( - query.user, - 'dog.name', - 'address.country.name', - 'address.country.location', - [ - { - field: 'pet', - variables: { - type: 'dog', - }, - }, - 'name', - ] - //... -); -``` - -## selectFields - -Given an object or an array of objects, create a new object/array with the specified fields. - -### Features and Limitations - -- Allows to **select every field** of the proxy with a simple `"*"`. -- But when it encounters a field with arguments, it only returns the function back, since it can't assume your intent, - even if all arguments are optional. -- Specified keys can be composed via `foo.bar` -- Specify recursive depth _(`1` by default)_ -- Bad Type-safety, it just returns the same type as the input - -### Examples - -```ts -import { selectFields } from 'gqty'; -import { query } from '../gqty'; - -const dataPicked = selectFields(query.user, ['name', 'address.city']); - -const dataEverything1Depth = selectFields(query.user, '*'); - -const dataDeep = selectFields(query.user, '*', 2); -``` - -## getFields - -Given an object, pre-access the specified fields, and returns the object back. - -### Features and Limitations - -- Good Type-Safety -- Allows keeping the proxies around. -- If no keys are specified, it selects all the scalars of the object -- You can only specify the first level of scalars -- It doesn't do anything for objects inside objects -- It skips fields with arguments - -```ts -import { getFields } from 'gqty'; -import { query, resolved } from '../gqty'; - -const data = await resolved(() => { - return getFields(query.user, 'name', 'email'); -}); - -// Proxy is kept, and you can pass it around safely -// data == query.user -``` - -### getArrayFields - -We also have a helper to work with arrays, and works the same way as `getFields`. - -```ts -import { getArrayFields } from 'gqty'; -import { query, resolved } from '../gqty'; - -const data = await resolved(() => { - return getArrayFields(query.allUsers, 'name', 'email'); -}); - -// Proxy Array is kept, and you can pass it around safely -// data == query.allUsers -``` - -## Type Casters - -If you find too annoying having to deal with `undefined` everywhere when -by logic you can be completely sure that in runtime you are not dealing with actual `undefined`s, GQty also exports no-op functions -with useful types that removes your `undefined`s. - -> Use with caution, since you might encounter runtime errors if they are used unwisely - -> You can also use the types that are being used for this functions for types-only usage. - -### castNotSkeleton - -Removes all the `undefined`s in 1 level of your object or array. - -This next example is a perfectly safe place to use it, since here `id` and `name` will always be actual values in it's return value, not `undefined`. - -```ts -import { castNotSkeleton } from 'gqty'; -import { resolved, query } from '../gqty'; - -const data = await resolved(() => { - const { id, name } = query.user; - - return castNotSkeleton({ - id, - name, - }); -}); - -// query.user = { id: string | undefined; name: string | undefined; } -// data = { id: string; name: string } -``` - -### castNotSkeletonDeep - -Removes all the `undefined`s **recursively** of your object or array. - -This next example is a perfectly safe place to use it, since here all the fields returned will always be actual values in it's return value, not `undefined`. - -```ts -import { castNotSkeletonDeep } from 'gqty'; -import { resolved, query } from '../gqty'; - -const data = await resolved(() => { - const { id, name, dogs } = query.user; - - return castNotSkeletonDeep({ - id, - name, - dogsNames: dogs.map((dog) => dog.name), - }); -}); - -// query.user = { id: string | undefined; name: string | undefined; dogs: { name: string | undefined }[] } -// data = { id: string; name: string; dogsNames: string[] } -``` diff --git a/internal/website/docs/client/mutations.mdx b/internal/website/docs/client/mutations.mdx deleted file mode 100644 index 8dc4055f7..000000000 --- a/internal/website/docs/client/mutations.mdx +++ /dev/null @@ -1,35 +0,0 @@ ---- -id: mutations -title: Core Mutations -sidebar_label: Mutations ---- - -Mutations greatly follow the format of queries (see [fetching data with `resolved`](/docs/client/fetching-data#resolved)). - -## Example - -```ts -import { resolved, mutation } from '../gqty'; - -resolved(() => { - const { email, name } = mutation.createUser({ - email: 'xx@xx.com', - name: 'XX', - }); - - return { - email, - name, - }; -}) - .then((data) => { - console.log('User created!', data); - }) - .catch((err) => { - console.error(err); - }); -``` - -## See also - -- [Mutations with React](/docs/react/mutations) diff --git a/internal/website/docs/client/persistence.mdx b/internal/website/docs/client/persistence.mdx deleted file mode 100644 index 0d25567ae..000000000 --- a/internal/website/docs/client/persistence.mdx +++ /dev/null @@ -1,114 +0,0 @@ ---- -id: persistence -title: Core Cache Persistence -sidebar_label: Cache Persistence ---- - -GQty offers easy to use `Cache persistence`. - -- `client.backupPersistence` gets all the cache and returns a string, and optionally accepts a `version` string parameter, that allows for invalidating previous versions of cache, and ignoring them. -- `client.restorePersistence` accepts a **_possible_** string that should have been stored persistently in some way, and optionally accepts a second `version` string paramater, that should be the same as the one used in `backupPersistence`. - -## Data Revalidation - -For an effective usage of `Cache persistence` it's almost always required some kind of automatic data refetching, -and for that reason we recommend you to use: - -- React - - - [useQuery](/docs/react/fetching-data#usequery) and [graphql HOC](/docs/react/fetching-data#graphql-hoc) `staleWhileRevalidate`, - - [useTransactionQuery](/docs/react/fetching-data#usetransactionquery) and [useLazyQuery](/docs/react/fetching-data#uselazyquery) [`cache-and-network` fetchPolicy](/docs/react/fetching-data#fetch-policy), - - And setting them by default in [your defaults](/docs/react/config#defaults). - -- Core - - [resolved](/docs/client/fetching-data#resolved)'s `onCacheData` function. - -## Examples - -In both examples we use a `debounce` function exported from GQty that reduces the amount calls to the storages, improving the user experience. - -[Here you can read a quick explanation of debouncing](https://dev.to/afrazchelsea/debouncing-v-s-throttling-what-s-the-difference-4k95) - -### Local Storage - -In this example, for simplicity we are using [`localStorage`](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) to offer cache persistence, -but for most serious applications we recommend using async solutions like [localForage](https://github.com/localForage/localForage). - -```ts -//... -import { debounce } from 'gqty'; - -// ... - -export const client = createClient< - GeneratedSchema, - SchemaObjectTypesNames, - SchemaObjectTypes ->({ - schema: generatedSchema, - scalarsEnumsHash, - queryFetcher, - // ... -}); - -// ... - -// This conditional should not be present for client-side only apps -if (typeof window !== 'undefined') { - const backup = debounce(() => { - localStorage.setItem('gqty-cache', client.backupPersistence('v1')); - }, 1000); - - client.restorePersistence(localStorage.getItem('gqty-cache'), 'v1'); - - client.eventHandler.onFetchSubscribe((promise) => promise.then(backup)); - - client.eventHandler.onCacheChangeSubscribe(backup); -} -``` - -### Async Storage - -We recommend using [localForage](https://localforage.github.io/localForage/) or [@react-native-async-storage/async-storage](https://github.com/react-native-async-storage/async-storage) - -```ts -import { debounce } from 'gqty'; - -// ... - -import localForage from 'localforage'; -// import AsyncStorage from '@react-native-async-storage/async-storage'; - -export const client = createClient< - GeneratedSchema, - SchemaObjectTypesNames, - SchemaObjectTypes ->({ - schema: generatedSchema, - scalarsEnumsHash, - queryFetcher, - // ... -}); - -// ... - -export const clientReadyPromise = client.restorePersistence(() => { - // return AsyncStorage.getItem('gqty-cache'); - return localForage.getItem('gqty-cache'); -}, 'v1'); - -// This conditional should not be present for React Native or client-side only apps -if (typeof window !== 'undefined') { - const backup = debounce(() => { - // AsyncStorage.setItem('gqty-cache', client.backupPersistence('v1')); - localForage.setItem('gqty-cache', client.backupPersistence('v1')); - }, 1000); - - client.eventHandler.onFetchSubscribe((promise) => promise.then(backup)); - - client.eventHandler.onCacheChangeSubscribe(backup); -} -``` - -### diff --git a/internal/website/docs/client/subscriptions.mdx b/internal/website/docs/client/subscriptions.mdx deleted file mode 100644 index e2c832c6f..000000000 --- a/internal/website/docs/client/subscriptions.mdx +++ /dev/null @@ -1,121 +0,0 @@ ---- -id: subscriptions -title: Core Subscriptions -sidebar_label: Subscriptions ---- - -Support for [`GraphQL Subscriptions`](https://github.com/graphql/graphql-wg/blob/main/rfcs/Subscriptions.md) in GQty. - -## Installation - -First, install `@gqty/subscriptions` into your project's dependencies: - - - -## Usage - -If you activated `subscriptions` in the [CLI Configuration](/docs/cli/config) you should have something like this in your generated client file: - -```ts -const subscriptionsClient = - typeof window !== 'undefined' - ? createSubscriptionsClient({ - wsEndpoint: () => { - // Modify if needed - const url = new URL('${endpoint}', window.location.href); - url.protocol = url.protocol.replace('http', 'ws'); - return url.href; - }, - }) - : undefined; - -//... - -export const client = createClient< - GeneratedSchema, - SchemaObjectTypesNames, - SchemaObjectTypes ->({ - // ... - subscriptionsClient, -}); -``` - -It basically enables subscriptions only on client side, in case you are using [SSR](/docs/react/ssr). - -It's important to note that `wsEndpoint` can be a `string`, a `function` that returns a `string` or and an `async function` that returns a `string`. - -### setConnectionParams - -`subscriptionsClient` returns a helper in where you can set the connection parameters for the websocket connection, normally used for `authorization` purposes. - -The second parameter is an optional boolean flag that automatically will reset the websocket connection if it's already connected. - -```ts -const subscriptionsClient = - typeof window !== 'undefined' - ? createSubscriptionsClient({ - wsEndpoint: () => { - // Modify if needed - const url = new URL('${endpoint}', window.location.href); - url.protocol = url.protocol.replace('http', 'ws'); - return url.href; - }, - }) - : undefined; - -const { setConnectionParams } = subscriptionsClient || {}; - -export { setConnectionParams }; - -// ... -``` - -```ts -import { setConnectionParams } from '../gqty'; - -// ... - -let resetWebsocketConnection = true; - -setConnectionParams( - { - token: 'zLjYkmrdX5...', - }, - resetWebsocketConnection -); -``` - -### Lazy behavior - -By default the subscriptions client uses a `lazy` behavior, which means that it will create the connection only when you actually make a subscription, and disconnect after a couple seconds on last unsubscribe. - -```ts -createSubscriptionsClient({ - //... - - /** - * Controls when should the connection be established. - * - * `false`: Establish a connection immediately. - * - * `true`: Establish a connection on first subscribe and close on last unsubscribe. - * - * @default true - */ - lazy: false, -}); -``` - -### More options - -| Name | Type | Default Value | Description | -| ------------------------ | ---------------------------------------------------------------------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -| reconnect | `boolean` | `true` | Should the websocket connection try to reconnect | -| maxReconnectAttempts | `boolean` | `Infinity` | Amount of reconnection attempts | -| connectionCallback | `() => void` | `undefined` | Callback after successful connection | -| failedConnectionCallback | `(payload: unknown) => Promise` | `undefined` | Callback after failed connection | -| failedReconnectCallback | `() => void` | `undefined` | Callback after last reconnection attempt failed | -| connectionInitPayload | `(() => Promise>` or `Record` | `{}` | Connection init payload, or async function to get the init payload before connection, overridable with [setConnectionParams](#setconnectionparams) | -| headers | `Record` | `undefined` | **Might not be actually supported by browsers, use connection params**. Headers to be set on websocket connection | -| lazy | `boolean` | `true` | See [Lazy behavior](#lazy-behavior) | diff --git a/internal/website/docs/client/upload.mdx b/internal/website/docs/client/upload.mdx deleted file mode 100644 index 9d5bdc2d3..000000000 --- a/internal/website/docs/client/upload.mdx +++ /dev/null @@ -1,131 +0,0 @@ ---- -id: graphql-upload -title: GraphQL Upload -sidebar_label: GraphQL Upload ---- - -In GQty you can add `File Upload` support easily, following the [GraphQL multipart request specification](https://github.com/jaydenseric/graphql-multipart-request-spec). - -## Preparation - -Normally, in the API servers, they implement [graphql-upload](https://github.com/jaydenseric/graphql-upload), which could be implemented with [mercurius-upload](https://github.com/mercurius-js/mercurius-upload) for [Mercurius](https://mercurius.dev/), or in [GraphQL EZ](https://www.graphql-ez.com/) with the [GraphQL Upload EZ Plugin](https://www.graphql-ez.com/plugins/upload). - -Meanwhile in the client, to follow the GraphQL multipart spec, you can easily use [extract-files](https://www.npmjs.com/package/extract-files). - - - -And then, use it in your `QueryFetcher`, like the following example: - -> Compatible with browser's [File](https://developer.mozilla.org/en-US/docs/web/api/file) and [Blob](https://developer.mozilla.org/en-US/docs/web/api/blob), and **React Native** using [ReactNativeFile](https://github.com/jaydenseric/extract-files#class-reactnativefile) - -```ts -import { extractFiles } from 'extract-files'; - -// ... - -const queryFetcher: QueryFetcher = async function (query, variables) { - const extracted = extractFiles({ - query, - variables, - }); - - if (extracted.files.size > 0) { - const form = new FormData(); - form.append('operations', JSON.stringify(extracted.clone)); - - const map: Record = {}; - let i = 0; - extracted.files.forEach((paths) => { - map[++i] = paths; - }); - form.append('map', JSON.stringify(map)); - i = 0; - extracted.files.forEach((_paths, file) => { - form.append(++i + '', file as File); - }); - - const response = await fetch('/api/graphql', { - method: 'POST', - headers: {}, - body: form, - mode: 'cors', - }); - - const json = await response.json(); - - return json; - } - - // Fallback to regular queries - - const response = await fetch('/api/graphql', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - query, - variables, - }), - mode: 'cors', - }); - - const json = await response.json(); - - return json; -}; -``` - -## Usage - -### Core - -Since the images are not serializable, GQty might be confused while -using them, that's why you have to specify a special option `nonSerializableVariables` in your [`resolved`](/docs/client/fetching-data#resolved)s - -```ts -import { resolved, mutation } from '../gqty'; - -resolved( - () => { - return mutation.uploadFile({ - file, - })!; - }, - { - //... - - // You should specify this flag - nonSerializableVariables: true, - } -) - .then((data) => { - // ... - }) - .catch((error) => { - // ... - }); -``` - -### React - -Since the images are not serializable, GQty might be confused while -using them, that's why you have to specify a special option `nonSerializableVariables` in your [`useMutation`](/docs/react/mutations)s - -```ts -const [uploadFile, { isLoading, data, error }] = useMutation( - (mutation, file: File) => { - return mutation.uploadFile({ - file, - })!; - }, - { - // ... - - // You should specify this flag - nonSerializableVariables: true, - } -); -``` diff --git a/internal/website/docs/development/logger.mdx b/internal/website/docs/development/logger.mdx deleted file mode 100644 index 0dc30233b..000000000 --- a/internal/website/docs/development/logger.mdx +++ /dev/null @@ -1,49 +0,0 @@ ---- -id: logger -title: Logger ---- - -You can improve the development experience using a `Logger` of your GQty usage, which will print relevant information about the requests made to your GraphQL API Server. - -![Logger screenshot](/img/logger.png) - -## Installation - - - -## Usage - -> You can add the logger alongside the generated client, or import it from another file - -```ts -// /src/gqty/index.ts - -// ... - -export const client = createClient< - GeneratedSchema, - SchemaObjectTypesNames, - SchemaObjectTypes ->({ - schema: generatedSchema, - scalarsEnumsHash, - queryFetcher, -}); - -if (process.env.NODE_ENV === 'development' && typeof window !== 'undefined') { - import('@gqty/logger').then(({ createLogger }) => { - const logger = createLogger(client, { - // Custom options... - }); - logger.start(); - }); -} -``` - -### Options - -| Name | Type | Default Value | Description | -| -------------- | --------- | ------------- | --------------------------------- | -| showSelections | `boolean` | `true` | Show "selections" in logs | -| showCache | `boolean` | `true` | Show cache snapshots in logs | -| stringifyJSON | `boolean` | `false` | Stringify JSON before printing it | diff --git a/internal/website/docs/getting-started.mdx b/internal/website/docs/getting-started.mdx deleted file mode 100644 index 5ce9de1e7..000000000 --- a/internal/website/docs/getting-started.mdx +++ /dev/null @@ -1,70 +0,0 @@ ---- -id: getting-started -title: Getting started ---- - -## Installation - -1. Go to the root of your project, and run: - - - -2. Next, add a `script` field to your package.json: - ```json - { - "scripts": { - "generate": "gqty generate" - } - } - ``` -3. Then run the script once, to create a `gqty.config.cjs` file: - - - -## Configuring Codegen - -The default config should look something like this: - -> _Can also be specified in `package.json` via `gqty` key_ - -```js -/** - * @type {import("@gqty/cli").GQtyConfig} - */ -const config = { - react: true, - scalarTypes: { DateTime: 'string' }, - introspection: { - endpoint: 'SPECIFY_ENDPOINT_OR_SCHEMA_FILE_PATH_HERE', - headers: {}, - }, - destination: './src/gqty/index.ts', - subscriptions: false, -}; - -module.exports = config; -``` - -Point `introspection.endpoint` to your GraphQL API, _adding headers for authorization if necessary_. Then run the generate command again, to fetch your schema and output to the `destination` file: - - - -The output should look like this: - -```bash -src/gqty -├── schema.generated.ts # Will be overwritten when you codegen again -└── index.ts # GQty client is exported from here, safe to modify options -``` - -## Getting started - -Configure the `fetch()` call to your GraphQL server, located inside the `queryFetcher()` method within `src/gqty/index.ts`. You might for instance want to dynamically generate the URL depending on environment, or connect it up to your apps authorization. - -## Usage - -See one of the following for more: - -- [**Using with React**](/docs/react/fetching-data) - -- [**Using the standalone Client**](/docs/client/fetching-data) diff --git a/internal/website/docs/intro/README.mdx b/internal/website/docs/intro/README.mdx deleted file mode 100644 index 665825193..000000000 --- a/internal/website/docs/intro/README.mdx +++ /dev/null @@ -1,107 +0,0 @@ ---- -id: intro -title: Introduction -sidebar_label: What is & Why ---- - -From previously working on a large GraphQL codebase, the boilerplate involved with shipping new features often slowed me down. - -## What is - -gqty is a fundamentally new approach to a GraphQL client. It makes using your API enjoyable, by _generating queries at runtime_ based upon the data your app consumes. - -#### Your app - -```tsx -const App = () => { - const query = useQuery(); - - return ( -
- Hello {query.me.name}! - {query.users({ limit: 10 }).map((user) => ( - - ))} -
- ); -}; -``` - -#### Generated query - -```graphql -query { - me { - name - } - users(limit: 10) { - id - name - } -} -``` - -## Why - -I wanted a GraphQL client that lets you _forget you're using GraphQL_, whilst tackling some issues shared across all existing GraphQL clients: - -- **Slow Typescript DX**. Typescript should speed up your workflow, not slow it down -- **Inefficient queries**, due to underutilized nesting. [Relay](https://relay.dev) is a solution, but has even more boilerplate 😢 - -## Workflow comparison - -Lets say you've just added a new field to your API, and want it displayed within multiple places in the UI: - -```graphql -type User { - username: String! -+ avatarUrl(size: Int!): String! -} -``` - -### Conventional client - -First you'd need to search your components, and identify which queries need updating. After referring to your browser for documentation, you'd then update the query - -```graphql -query UserProfile(avatarSize: Int!) { - user { - ... -+ avatarUrl(size: $avatarSize) - } -} -``` - -Typically you'd then run a type generator to create types for each query (changes may not be reflected in IDE straight away). - -Finally you'd do the task you set out to do - updating the components, - -```tsx -const UserProfile = ({ id }) => { - const { data } = useQuery( - gql` - query UserProfile($username: ID!, $avatarSize: Int!) { - user(username: $id) { - avatarUrl(size: $avatarSize) - } - } - `, - { - variables: { id, avatarSize: 100 }, - } - ); - - return ; -}; -``` - -### With GQty - -Just update your components, and the queries generated at runtime will reflect your changes. - -```tsx -const UserProfile = ({ id }) => { - const query = useQuery(); - return ; -}; -``` diff --git a/internal/website/docs/intro/contributing.mdx b/internal/website/docs/intro/contributing.mdx deleted file mode 100644 index 108068a6e..000000000 --- a/internal/website/docs/intro/contributing.mdx +++ /dev/null @@ -1,73 +0,0 @@ ---- -id: contributing -title: Contributing -sidebar_label: How to contribute ---- - -## Codesandbox - -You can test and play with GQty using [This codesandbox](https://codesandbox.io/s/gqty-sandbox-zswf1). - - - -And if you find a bug, reproducing it there would be very helpful. - -It uses [**Next.js**](https://nextjs.org/) for the frontend -and [Fastify](https://www.fastify.io/) + [mercurius](https://mercurius.dev/) for the GraphQL API - -## Cloning / Forking Repo - -This project uses [pnpm](https://pnpm.js.org/) with it's workspaces support. - -To contribute just make sure you have it installed: - -```shell -npm install -g pnpm -``` - -And inside the cloned/forked repo, simply call: - -> To install packages and build everything - -```shell -pnpm i -``` - -> To test everything - -```shell -pnpm test -w -``` - -
-
- -In the repository you will have some specific folders: - -- **internal/website/docs** - - Documentation - -- **examples** - - Examples usually used for "Real world" testing - -- **internal** - - Internal packages like this website, build utilities, and testing utilities. - -- **packages** - - Official packages of GQty diff --git a/internal/website/docs/intro/features.mdx b/internal/website/docs/intro/features.mdx deleted file mode 100644 index fe0ec7bfe..000000000 --- a/internal/website/docs/intro/features.mdx +++ /dev/null @@ -1,32 +0,0 @@ ---- -id: features -title: Features ---- - -## Invisible data fetching - -Simply access data and it will magically appear. Queries are generated automatically, so you never need to write another line of GraphQL again. - - - -## Typescript - -Typescript support is **built-in** and enabled by default. Run code-generation _only when your API changes_. - -## Editor intellisense - -You get awesome DX out the box, with docs displayed inline (no extensions required) - -![VSCode suggestions screenshot](/img/intro/intellisense.png) - -## Server-side Rendering - -We fully support Server-Side rendering (**SSR**), with focused support for [Next.js](https://nextjs.org/) - -## Cache - -The built-in [normalized cache](/docs/client/config#normalization) automatically caches everything for you - -## Subscriptions - -Subscriptions support. [More info here](/docs/client/subscriptions) diff --git a/internal/website/docs/intro/how-it-works.mdx b/internal/website/docs/intro/how-it-works.mdx deleted file mode 100644 index eac328e5d..000000000 --- a/internal/website/docs/intro/how-it-works.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -id: how-it-works -title: How it works ---- - -## Skeleton render & values - -GQty performs a invisible render (called the skeleton render) of all components, to identify the data they need. During this render, all scalars & enums are returned as `undefined` (aka. skeleton values). -Once the response from the server arrives, these skeleton values are replaced with actual ones. - -### Interplay with Lists & Keys - -It's important to be aware of skeleton values, as using them as keys will result in a warning: - -```tsx -query.users.map((user) => ( - // During the skeleton render, the key is `undefined` -
{user.name}
-)); -``` - -![React lists key warning](/img/react-key-warning.png) - -You can overcome this using either destructuring, - -```tsx -query.users.map(({ id = 0, name }) => ( - ^^^^^^ -
{name}
-``` - -or the [nullish coalescing operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator): - -```tsx -query.users.map((user) => ( -
{user.name}
- ^^^^^ -``` - -## How does it work? - -GQty performs a invisible render of all components, to identify the data they need. Once the data is fetched — scalars, nulls, and array sizes are filled in. - -## Will it affect bundle size? - -In the code-generated files, an object representation of the schema is outputted - negligible for most apps. This could be optimized in the future by stripping out unused parts. - -The gqty packages are lightweight and don't require external dependencies. - -## How fast is it? - -Very fast, gqty's architecture was designed with performance in mind. Unlike other clients, queries are generated directly - instead of outputting intermediate AST. diff --git a/internal/website/docs/react/config.mdx b/internal/website/docs/react/config.mdx deleted file mode 100644 index 58314e746..000000000 --- a/internal/website/docs/react/config.mdx +++ /dev/null @@ -1,37 +0,0 @@ ---- -id: config -title: React Client Configuration -sidebar_label: Client Configuration ---- - -The React Client has some configurations you can set manually: - -```tsx -// in your `destination` file specified by your gqty config -createReactClient(client, { - defaults: { - // Here - }, -}); -``` - -## Defaults - -In most functions available through the React Client you have some options you can set. - -The defaults value of some of them can be overriden here: - -| Name | Type | Default Value | Description | -| ------------------------- | ---------------------------------------------------------------------------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| suspense | `boolean` | `false` | Enable/Disable '[React Suspense](/docs/react/suspense)' behavior for [graphql HOC](/docs/react/fetching-data#graphql-hoc) and [useQuery](/docs/react/fetching-data#usequery) | -| lazyQuerySuspense | `boolean` | `false` | Enable/Disable '[React Suspense](/docs/react/suspense)' behavior for [useLazyQuery](/docs/react/fetching-data#uselazyquery) | -| transactionQuerySuspense | `boolean` | inherited from ` suspense` | Enable/Disable '[React Suspense](/docs/react/suspense)' behavior for [useTransactionQuery](/docs/react/fetching-data#usetransactionquery) | -| mutationSuspense | `boolean` | `false` | Enable/Disable '[React Suspense](/docs/react/suspense)' behavior for [useMutation](/docs/react/mutations#useMutation) | -| preparedSuspense | `boolean` | inherited from ` suspense` | Enable/Disable '[React Suspense](/docs/react/suspense)' behavior for [prepareQuery hooks](/docs/react/fetching-data#preparequery) | -| paginatedQuerySuspense | `boolean` | `false` | Enable/Disable '[React Suspense](/docs/react/suspense)' behavior for [prepareQuery hooks](/docs/react/fetching-data#preparequery) | -| transactionFetchPolicy | `"cache-and-network"` or `"cache-first"` or `"network-only"` or `"no-cache"` | `"cache-first"` | '[fetchPolicy](/docs/react/fetching-data#fetch-policy)' of [useTransactionQuery](/docs/react/fetching-data#usetransactionquery) | -| lazyFetchPolicy | `"cache-and-network"` or `"network-only"` or `"no-cache"` | `"network-only"` | Partial '[fetchPolicy](/docs/react/fetching-data#fetch-policy)' of [useLazyQuery](/docs/react/fetching-data#uselazyquery) | -| paginatedQueryFetchPolicy | `"cache-and-network"` or `"network-only"` or `"cache-first"` | `"cache-first"` | Partial '[fetchPolicy](/docs/react/fetching-data#fetch-policy)' of [usePaginatedQuery](/docs/react/fetching-data#usepaginatedquery) | -| staleWhileRevalidate | `boolean` | `false` | Enable/Disable '[stale-while-revalidate](https://web.dev/stale-while-revalidate/)' behavior for [graphql HOC](/docs/react/fetching-data#graphql-hoc) & [useQuery](/docs/react/fetching-data#usequery) | -| retry | [`RetryOptions`](/docs/client/config#retryoptions) | `true` | Retry on error behavior | -| refetchAfterHydrate | `boolean` | `false` | Refetch **after** SSR Hydration | diff --git a/internal/website/docs/react/fetching-data.mdx b/internal/website/docs/react/fetching-data.mdx deleted file mode 100644 index 75c62eb05..000000000 --- a/internal/website/docs/react/fetching-data.mdx +++ /dev/null @@ -1,536 +0,0 @@ ---- -id: fetching-data -title: Fetching data with React -sidebar_label: Fetching Data ---- - -## useQuery - -[React hook](https://reactjs.org/docs/hooks-intro.html) that uses the main design of GQty. - -This hook returns the core `query` object, and it will detect the usage of it, and **suspend** _(if enabled)_ when the data is being fetched for the first time, and update the component when any of the requested data changes. - -### Features - -- **Composability** -- Advanced '[stale-while-revalidate](https://web.dev/stale-while-revalidate/)' behavior, allowing you to set **_any_** value to re-trigger re-validation. -- Extra `$state` in the returned value, which is extra valuable for `Non-Suspense` usage. - -### Suspense Example - -```tsx -import { Suspense } from 'react'; -import { useQuery } from '../gqty'; - -function Example() { - const query = useQuery({ - // boolean | undefined - suspense: true, - - // boolean | object | number | string | null - // If you put an object to trigger re-validation on-demand, it should be a `memoized` value from `useMemo` - staleWhileRevalidate: true, - - // ((error: GQtyError) => void) | undefined - onError(error) {}, - }); - - return

{query.helloWorld}

; -} - -function Container() { - return ( - - - - ); -} -``` - -### Non-Suspense Example - -See [Non-Suspense usage](/docs/react/suspense#non-suspense-usage) for more details - -```tsx -import { useQuery } from '../gqty'; - -function Example() { - const query = useQuery({ - // boolean | undefined - suspense: false, - - // boolean | object | number | string | null - // If you put an object to trigger re-validation on-demand, it should be a `memoized` value from `useMemo` - staleWhileRevalidate: true, - - // ((error: GQtyError) => void) | undefined - onError(error) {}, - }); - - if (query.$state.isLoading) { - return

Loading...

; - } - - return

{query.helloWorld}

; -} -``` - -### prepare - -`useQuery` offers a nice helper that allows for good optimizations, allowing you to do a _prepass_ over specific parts of your expected query, before your component ends rendering the first time. - -It's basically a function that is called right before the `useQuery` returns, allowing your component to either [`Suspend immediately`](/docs/react/suspense) or add a conditional render using the `$state.isLoading` property. - -The function receives as parameters: - -- The [`prepass`](/docs/client/helper-functions#prepass) helper. -- Your auto-generated `query` object. - -> Since it's a function called before the hook itself returned, the returned value/values **are `undefined`**, and unfortunately `TypeScript` can't know that. - -#### Suspense example - -```tsx -import { useQuery } from '../gqty'; - -function ExampleSuspense() { - const query = useQuery({ - prepare({ prepass, query }) { - prepass(query.users, 'id', 'name', 'dogs.name'); - }, - suspense: true, - }); - - return ( - <> - {query.users.map(({ id, name, dogs }) => { - return ( -

- Name: {name} -
- Dogs: -
-

    - {dogs.map(({ name }) => { - return
  • {name}
  • ; - })} -
-

- ); - })} - - ); -} - -// ... - - -; -``` - -#### Non-Suspense example - -```tsx -import { useQuery } from '../gqty'; - -function Example() { - const query = useQuery({ - prepare({ prepass, query }) { - prepass(query.users, 'id', 'name', 'dogs.name'); - }, - suspense: false, - }); - - if (query.$state.isLoading) return

Loading...

; - - return ( - <> - {query.users.map(({ id, name, dogs }) => { - return ( -

- Name: {name} -
- Dogs: -
-

    - {dogs.map(({ name }) => { - return
  • {name}
  • ; - })} -
-

- ); - })} - - ); -} -``` - -## graphql HOC - -`graphql` is a [Higher-Order Component](https://reactjs.org/docs/higher-order-components.html) alternative to [useQuery](#usequery), designed specially for [Suspense usage](/docs/react/suspense). - -For this function it is expected to use the `query` object exported by the core client, and it will detect the usage of it, and **suspend** _(if enabled)_ when the data is being fetched for the first time, and update the component when any of the requested data changes. - -### Features - -- Specify `Suspense fallback` directly -- Intercept the data requests faster than [useQuery](#usequery), allowing it to prevent an extra render. -- Basic '[stale-while-revalidate](https://web.dev/stale-while-revalidate/)' behavior - -### Example - -```tsx -import { Suspense } from 'react'; -import { graphql, query } from '../gqty'; - -const Example = graphql( - function Example() { - return

{query.helloWorld}

; - }, - { - // boolean | { fallback: NonNullable | null } | undefined - suspense: true, - - // ((error: GQtyError) => void) | undefined - onError(error) {}, - - // boolean | undefined - staleWhileRevalidate: true, - } -); - -function Container() { - return ( -
- - - -
- ); -} -``` - -## Difference between "useQuery" and "graphql" - -If you read both, you could see that both do similar stuff, but enable different things based on it's nature and React constraints. - -The [graphql HOC](#graphql-hoc) is targeted specially for **Suspense usage**, since it can intercept the data requests before the render phase and _Suspend_ right away, and also specify the fallback directly, but since it's a [`HOC`](https://reactjs.org/docs/higher-order-components.html), it's not as nice to use as hooks. - -On the other hand, [useQuery](#usequery) enables very nice composability, but it lacks the ability to intercept the Render Phase if not using [useQuery "prepare" helper](#prepare), which in practice it only means 1 extra render, which most of the time it doesn't matter. - -And it's important to note that for `Non-Suspense` usage we encourage to always use [useQuery](#usequery). - -## usePaginatedQuery - -Paginated focused queries, in which you specify a function and initial arguments, which is going to be automatically called on first-render or via custom `fetchMore` calls. - -### Features - -- Suspense support -- Partial [Fetch policy](/docs/react/fetching-data#fetch-policy) support (`'cache-first'`, `'cache-and-network'` or `'network-only'`) -- Custom data merge function, with included `uniqBy` & `sortBy` helpers. -- If no new args are defined in your `fetchMore` call, the previous or initial args are used. -- You can override the existing `fetchPolicy` in the second parameter of `fetchMore`, for example, to force a `refetch`. -- The [helper functions](/docs/client/helper-functions) are included in third parameter of main function. - -### Example - -```tsx -import { usePaginatedQuery, ConnectionArgs } from '../gqty'; - -// ... - -function Example() { - const { data, fetchMore, isLoading } = usePaginatedQuery( - ( - // Auto-generated query object - query, - // You have to specify the arguments types, in this example we are re-using auto-generated types - input: ConnectionArgs, - // Core helpers, in this example we are just using `getArrayFields` - { getArrayFields } - ) => { - const { - nodes, - pageInfo: { hasNextPage, endCursor }, - } = query.users({ - ...input, - }); - return { - nodes: getArrayFields(nodes, 'name'), - hasNextPage, - endCursor, - }; - }, - { - // Required, only used for the first fetch - initialArgs: { - first: 10, - }, - // Optional merge function - merge({ data: { existing, incoming }, uniqBy }) { - if (existing) { - return { - ...incoming, - // If using 'cache-and-network', you have to use `uniqBy` - nodes: uniqBy([...existing.nodes, ...incoming.nodes], (v) => v.id), - }; - } - return incoming; - }, - // Default is 'cache-first' - fetchPolicy: 'cache-and-network', - // Default is `false`, it only applies for the initial fetch. - suspense: true, - } - ); - - return ( -
-
    - {data?.nodes.map(({ id = 0, name }) => { - return
  • {name}
  • ; - })} -
- {isLoading &&

Loading...

} - {data?.hasNextPage && data.endCursor ? ( - - ) : null} -
- ); -} -``` - -## useTransactionQuery - -Alternative to `graphql` and `useQuery` that works via pre-defined functions, which allows for extra features that are not available in `useQuery` & `graphql HOC`. - -### Features - -- Polling -- Conditional skipping -- Automatic call on variable change -- Lifecycle functions `onCompleted` & `onError` -- Suspense support -- [Fetch policy](#fetch-policy) support - -### Example - -```tsx -import { useTransactionQuery } from '../gqty'; - -// ... - -function Example() { - const { data, error, isLoading } = useTransactionQuery( - (query, args: string) => { - return query.hello({ name }); - }, - { - variables: 'John', - // By default is 'cache-first' - fetchPolicy: 'cache-and-network', - // Polling every 5 seconds - pollInterval: 5000, - // By default is `true` - notifyOnNetworkStatusChange: true, - onCompleted(data) {}, - onError(error) {}, - suspense: false, - // By default is `false` - skip: false, - } - ); - - if (isLoading) { - return

Loading...

; - } - - if (error) { - return

Error! {error.message}

; - } - - return

{data}

; -} -``` - -## useLazyQuery - -Queries meant to be called in response of events, like button clicks. - -### Features - -- Lifecycle functions `onCompleted` & `onError` -- Suspense support -- Partial [Fetch policy](#fetch-policy) support (no `'cache-first'`) - -```tsx -import { useLazyQuery } from '../gqty'; - -function Example() { - const [getName, { isLoading, data }] = useLazyQuery( - (query, name: string) => { - return query.hello({ name }); - }, - { - onCompleted(data) {}, - onError(error) {}, - // Default is 'network-only' - fetchPolicy: 'cache-and-network', - retry: false, - suspense: false, - } - ); - - if (isLoading) { - return

Loading...

; - } - - if (data) { - return

{data}

; - } - - return ( - - ); -} -``` - -## useRefetch - -Refetch giving specific parts of the schema or via functions - -### Example with functions - -```tsx -import { useRefetch, useQuery } from '../gqty'; - -function Example() { - const refetch = useRefetch(); - const query = useQuery(); - - return ( -
- -

{query.helloWorld}

-
- ); -} -``` - -### Example with objects - -In this case, you have to specify an **object type**, **scalars won't work** (for those, you have to use functions). - -It will automatically refetch **everything** previously requested under that tree - -```tsx -import { useRefetch, useQuery } from '../gqty'; - -function Example() { - const refetch = useRefetch(); - const query = useQuery(); - - return ( -
- -

{query.user.name}

-

{query.user.email}

-
- ); -} -``` - -## prepareQuery - -Prepare queries on **module-level**. - -### Features - -- Enable **Render as you fetch** pattern -- **Re-using** the callbacks in [_useTransactionQuery_](/docs/react/fetching-data#usetransactionquery) & [_useLazyQuery_](/docs/react/fetching-data#uselazyquery) -- Composition -- Prefetching -- Refetching -- Suspense Support - -### Example - -```tsx -import { useState } from 'react'; -import { prepareQuery } from '../gqty'; - -const { preload, refetch, usePrepared, callback } = prepareQuery((query) => { - return query.helloWorld; -}); - -function Example() { - const { data } = usePrepared(); - - return

{data}

; -} - -function Container() { - const [show, setShow] = useState(false); - - return ( -
- - - {show && } -
- ); -} -``` - -## Fetch Policy - -Fetch policies allow you to have fine-grained control over your fetch behaviors - -| Name | Description | -| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `cache-first` | Client executes the query against the cache, if **all** requested data is present in the **cache**, that data is returned.
Otherwise, it executes the query against your **GraphQL server** and returns the data after caching it.

Prioritizes minimizing the number of network requests sent by your application. | -| `cache-and-network` | Client executes the full query against both the **cache** and your **GraphQL server**.

Provides a fast response while also helping to keep cached data consistent with server data. | -| `network-only` | Client executes the full query against your GraphQL server, without first checking the cache.

The query's result is stored in the cache. | -| `no-cache` | Client executes the full query against your GraphQL server, without first checking the cache.

The query's result **is NOT** stored in the cache. | diff --git a/internal/website/docs/react/meta.mdx b/internal/website/docs/react/meta.mdx deleted file mode 100644 index 531bd8021..000000000 --- a/internal/website/docs/react/meta.mdx +++ /dev/null @@ -1,81 +0,0 @@ ---- -id: meta -title: Inspecting Client State ---- - -## useMetaState - -Hook designed to inspect the React Client state, like error handling and fetching state - -### Features - -- Notify start fetching -- Notify fetching complete -- Notify on error -- Notify on retry attempt -- Filter selections you want to inspect in the specific hook -- Returns current errors and fetching state - -### Example - -```tsx -import { useMetaState, query } from '../gqty'; - -function Inspector() { - const { isFetching, errors } = useMetaState({ - onStartFetching() {}, - onDoneFetching() {}, - onError({ newError, selections, isLastTry }) {}, - onRetry({ retryPromise, selections }) {}, - - // Optional, if it's not specified, inspects everything - filterSelections: [query.user], - }); - - return ( -
- {isFetching &&

Fetching...

} - {errors && ( - <> -

Errors!

-
    - {errors.map((error, key) => { - return
  • {error.message}
  • ; - })} -
- - )} -
- ); -} -``` - -```tsx -import { useMetaState } from '../gqty'; - -export function Example() { - const { isFetching, errors } = useMetaState({ - onError({ newError, isLastTry }) { - if (isLastTry) { - console.error(newError); - } - }, - }); - - return ( -
- {isFetching &&

Fetching...

} - {errors && ( - <> -

Errors!

-
    - {errors.map((error, key) => { - return
  • {error.message}
  • ; - })} -
- - )} -
- ); -} -``` diff --git a/internal/website/docs/react/mutations.mdx b/internal/website/docs/react/mutations.mdx deleted file mode 100644 index ac06aa63d..000000000 --- a/internal/website/docs/react/mutations.mdx +++ /dev/null @@ -1,90 +0,0 @@ ---- -id: mutations -title: Using Mutations with React -sidebar_label: Mutations ---- - -## useMutation - -Hook designed to be used for [GraphQL Mutations](https://graphql.org/graphql-js/mutations-and-input-types/). - -### Features - -- Lifecycle functions `onCompleted` & `onError` -- Optional **Refetch queries** after mutation call _(with 'awaitRefetchQueries' option, to wait until they are complete before calling the mutation complete)_ -- Suspense support - -### Example - -```tsx -import { useState } from 'react'; -import { useMutation, query } from '../gqty'; - -export function LoginComponent() { - const [login, { isLoading, data, error }] = useMutation( - (mutation, args: { email: string; password: string }) => { - const { user, error } = mutation.login({ args }); - - if (user) { - return { - name: user.name, - }; - } - - return { - error, - }; - }, - { - onCompleted(data) {}, - onError(error) {}, - refetchQueries: [query.user], - awaitRefetchQueries: true, - suspense: false, - } - ); - - const [formData, setFormData] = useState(() => ({ email: '', password: '' })); - - const errorMessage = data?.error || error?.message; - - return ( -
- - { - setFormData({ - ...formData, - email: ev.target.value, - }); - }} - /> - - - { - setFormData({ - ...formData, - password: ev.target.value, - }); - }} - /> - - - - {errorMessage ?

Error: {errorMessage}

: null} -
- ); -} -``` diff --git a/internal/website/docs/react/ssr.mdx b/internal/website/docs/react/ssr.mdx deleted file mode 100644 index badc5b0e3..000000000 --- a/internal/website/docs/react/ssr.mdx +++ /dev/null @@ -1,139 +0,0 @@ ---- -id: ssr -title: Server-Side Rendering with React -sidebar_label: Server-Side Rendering ---- - -## Helper functions - -These functions are meant to be used together, in different steps of your application. - -### prepareReactRender - -Function designed to be used before the React Render is being made, for example, in places like [getStaticProps](https://nextjs.org/docs/basic-features/data-fetching#getstaticprops-static-generation) or [getServerSideProps](https://nextjs.org/docs/basic-features/data-fetching#getserversideprops-server-side-rendering) of [Next.js](https://nextjs.org/) - -Internally it uses [react-ssr-prepass](https://github.com/FormidableLabs/react-ssr-prepass) - -### useHydrateCache - -Function designed to be placed at the very top of the hydrated component - -### Example - -Made with **[Next.js SSR Data Fetching](https://nextjs.org/docs/basic-features/data-fetching)** in mind. - -> It's exactly the same usage for `getServerSideProps` -> If you are using `staleWhileRevalidate` in your application, **You should always set 'shouldRefetch' as false**, since that feature will always do the refetch anyways. - -```tsx -import { PropsWithServerCache } from '@gqty/react'; -import { GetStaticProps } from 'next'; -import { prepareReactRender, useHydrateCache, useQuery } from '../gqty'; - -type PageProps = PropsWithServerCache<{ - name: string; -}>; - -export default function ExamplePage({ cacheSnapshot, name }: PageProps) { - useHydrateCache({ - cacheSnapshot, - - // If it should refetch everything after the component is mounted - // By default 'shouldRefetch' is `false` (You can change it in the 'defaults' option) - shouldRefetch: false, - }); - - const query = useQuery(); - - return ( -
-

{query.hello({ name })}

-
- ); -} - -export const getStaticProps: GetStaticProps = async (_ctx) => { - const name = 'John'; - const { cacheSnapshot } = await prepareReactRender( - - ); - - return { - props: { - cacheSnapshot, - name, - }, - }; -}; -``` - -## Using Suspense - -Please check [Suspense in SSR](/docs/react/suspense#suspense-in-ssr) - -## Using Next.js Router - -If you are using [Next.js `useRouter`](https://nextjs.org/docs/api-reference/next/router) inside a component of a Next.js project, you might encounter errors like: - -- `TypeError: Cannot destructure property 'pathname' of 'Object(...)(...)' as it is null.` - -Since with `prepareReactRender` you are rendering outside of the Next.js tree, you don't have access to it's `router`, and it's not even created yet. - -We suggest a couple of solutions: - -### Add a default object before destructuring - -You will need to check if you really have any router property available - -```ts -import { useRouter } from 'next/router'; - -// ... - -const { pathname } = useRouter() || {}; - -// pathname == undefined while "prepareReactRender" -``` - -### Mocking Router Data - -Here you can either manually set the values of the router, or simply let it be `{}`, and all it's properties are simply going to be undefined. - -```tsx -import type { PropsWithServerCache } from '@gqty/react'; -import type { GetServerSideProps } from 'next'; -import { useHydrateCache, prepareReactRender } from '../gqty'; - -import { useRouter } from 'next/router'; - -import { RouterContext } from 'next/dist/next-server/lib/router-context'; - -export const getServerSideProps: GetServerSideProps = - async ({}) => { - const { cacheSnapshot } = await prepareReactRender( - - - - ); - - return { - props: { - cacheSnapshot, - }, - }; - }; - -export default function Page({ cacheSnapshot }: PropsWithServerCache) { - // ... - const { - // ... - } = useRouter(); - // ... -} -``` diff --git a/internal/website/docs/react/subscriptions.mdx b/internal/website/docs/react/subscriptions.mdx deleted file mode 100644 index 1729630a1..000000000 --- a/internal/website/docs/react/subscriptions.mdx +++ /dev/null @@ -1,36 +0,0 @@ ---- -id: subscriptions -title: Using Subscriptions with React -sidebar_label: Subscriptions ---- - -## useSubscription - -Hook designed to be used for [GraphQL Subscriptions](https://github.com/graphql/graphql-wg/blob/main/rfcs/Subscriptions.md). - -For more configuration of Subscriptions [check here](/docs/client/subscriptions). - -### Features: - -- Subscribe on-demand -- Automatic unsubscribe on component unmount -- Automatic updates on cache changes - -### Example - -```tsx -import { useSubscription } from '../gqty'; - -export function Example() { - const { newNotification } = useSubscription(); - - if (newNotification) { - return ( -

- New Notification: {newNotification} -

- ); - } - return

Waiting for new notifications...

; -} -``` diff --git a/internal/website/docs/react/suspense.mdx b/internal/website/docs/react/suspense.mdx deleted file mode 100644 index f1a28bcbb..000000000 --- a/internal/website/docs/react/suspense.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -id: suspense -title: Using React Suspense -sidebar_label: Suspense & usage without ---- - -## How to enable it - -One of the goals of GQty is to embrace the React features [Suspense](https://reactjs.org/docs/concurrent-mode-suspense.html) & [Concurrent Mode](https://reactjs.org/docs/concurrent-mode-intro.html). - -Until these features become widespread enough, you will need to **opt-in** for Suspense support via configuration. This can be done directly in hook, or via the [defaults of the client](/docs/react/config#defaults). - -```ts -// Enabling support with hooks -const query = useQuery({ suspense: true }); - -// Enabling support with HoC -const Component = graphql(() =>
, { suspense: true }); -``` - -## Usage without Suspense - -All hooks return a `$state` object, when suspense support is not enabled. - -```tsx -function Example() { - const query = useQuery({ suspense: false }); - - if (query.$state.isLoading) return

Loading...

; - - return

{helloWorld}

; -} -``` - -## Suspense & SSR - -React doesn't yet support suspense whilst rendering on the server, so [react-ssr-prepass](https://github.com/FormidableLabs/react-ssr-prepass) is used in our SSR functions: - -![React Error with Suspense in SSR](/img/suspense-ssr.png) - -And for that, reason we suggest using a slighty modified `Suspense` component: - -```tsx -import { Suspense as ReactSuspense, SuspenseProps } from 'react'; - -export const Suspense = - typeof window !== 'undefined' - ? ReactSuspense - : function SuspenseSSR({ children }: SuspenseProps) { - return <>{children}; - }; -``` - -And everything should work as you might expect. diff --git a/internal/website/docs/react/troubleshooting.mdx b/internal/website/docs/react/troubleshooting.mdx deleted file mode 100644 index 712b98b85..000000000 --- a/internal/website/docs/react/troubleshooting.mdx +++ /dev/null @@ -1,72 +0,0 @@ ---- -id: troubleshooting -title: Troubleshooting ---- - -## Skeleton Render Values Are `Undefined` - -GQty performs a invisible render of all components, to identify the data they need. Once the data is fetched — scalars, nulls, and array sizes are filled in. - -During this render, these skeleton values are `undefined`, so using them as keys will result in a warning: - -![React lists key warning](/img/react-key-warning.png) - -Take a look at the [How It Works](/docs/intro/how-it-works#interplay-with-lists--keys) guide for options to overcome this. - -## Data Selections & Conditionals - -Placing a data selection behind a condition is not supported. For server-side rendering to work properly, and to prevent cascade requests, you must ensure that you have no data selections behind a condition. Take the following example: - -❌ **Wrong**: Data selection behind a condition - -```tsx -import { useQuery } from '../gqty'; - -export default function ExamplePage() { - const posts = useQuery().posts()?.nodes; - - return ( - <> -

Posts

- -
    - {posts.map((post) => { - if (post.id === 250) { - return
  • {post?.title}
  • ; - ^^^^^^^^^^^ - } - })} -
- - ); -} -``` - -✅ **Right**: Requiring the data no matter what - -```tsx -import { useQuery } from '../gqty'; - -export default function ExamplePage() { - const posts = useQuery().posts()?.nodes; - - return ( - <> -

Posts

- -
    - {posts.map((post) => { - // Define the data selection outside the condition - const postTitle = post?.title; - - if (post.id === 250) { - return
  • {postTitle}
  • ; - } - })} -
- - ); -} -``` - -Alternatively, you could use the [`prepass` helper](/docs/react/fetching-data#prepare) to do a **prepass** of your data before rendering. diff --git a/internal/website/next-env.d.ts b/internal/website/next-env.d.ts deleted file mode 100644 index 4f11a03dc..000000000 --- a/internal/website/next-env.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -/// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/internal/website/next-i18next.config.js b/internal/website/next-i18next.config.js deleted file mode 100644 index 7c7e42774..000000000 --- a/internal/website/next-i18next.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - i18n: { - defaultLocale: 'en', - locales: ['en'], - }, -}; diff --git a/internal/website/next.config.js b/internal/website/next.config.js deleted file mode 100644 index b6f319ee6..000000000 --- a/internal/website/next.config.js +++ /dev/null @@ -1,30 +0,0 @@ -require('bob-tsm'); - -const { i18n } = require('./next-i18next.config'); - -const { withGuildDocs } = require('@guild-docs/server'); - -const { getRoutes } = require('./routes.ts'); - -const withBundleAnalyzer = require('@next/bundle-analyzer')({ - enabled: process.env.ANALYZE === 'true', -}); - -module.exports = withBundleAnalyzer( - withGuildDocs({ - i18n, - getRoutes, - experimental: { - esmExternals: false, - }, - async redirects() { - return [ - { - source: '/docs', - destination: '/docs/getting-started', - permanent: true, - }, - ]; - }, - }) -); diff --git a/internal/website/package.json b/internal/website/package.json deleted file mode 100644 index ff1c9c5ea..000000000 --- a/internal/website/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "website", - "version": "0.0.1", - "private": true, - "scripts": { - "analyze": "cross-env ANALYZE=true next build", - "build:docs": "next build", - "dev:docs": "concurrently -r \"next-remote-watch ./docs ./src/pages/_app.tsx ./src/pages/_document.tsx\" \"wait-on -s 1 http://localhost:3000 && open-cli http://localhost:3000\"", - "next": "next", - "start": "next start" - }, - "dependencies": { - "@chakra-ui/icons": "^1.1.7", - "@chakra-ui/react": "^1.8.9", - "@chakra-ui/theme-tools": "^1.3.6", - "@chakra-ui/utils": "^1.10.4", - "@emotion/react": "^11.10.6", - "@emotion/styled": "^11.10.6", - "@guild-docs/client": "2.1.1", - "@guild-docs/server": "4.0.0", - "@mdx-js/react": "^2.3.0", - "@theguild/components": "^1.12.0", - "csstype": "^3.1.1", - "framer-motion": "^6.5.1", - "i18next": "^22.4.13", - "next": "^12.3.4", - "next-i18next": "^13.2.2", - "next-seo": "^5.15.0", - "react": "^17.0.2", - "react-dom": "^17.0.2", - "react-i18next": "^12.2.0", - "react-icons": "^4.8.0", - "react-use": "^17.4.0", - "shiki": "^0.12.1" - }, - "devDependencies": { - "@next/bundle-analyzer": "^12.3.4", - "@types/node": "^18.15.5", - "@types/react": "^17.0.53", - "@types/react-dom": "^18.0.11", - "bob-tsm": "^1.1.2", - "concurrently": "^7.6.0", - "cross-env": "^7.0.3", - "esbuild": "^0.17.12", - "next-remote-watch": "^2.0.0", - "open-cli": "^7.2.0", - "typescript": "^4.9.5", - "wait-on": "^7.0.1" - } -} diff --git a/internal/website/public/android-chrome-192x192.png b/internal/website/public/android-chrome-192x192.png deleted file mode 100644 index 4000fe3f6..000000000 Binary files a/internal/website/public/android-chrome-192x192.png and /dev/null differ diff --git a/internal/website/public/android-chrome-512x512.png b/internal/website/public/android-chrome-512x512.png deleted file mode 100644 index ea3c99110..000000000 Binary files a/internal/website/public/android-chrome-512x512.png and /dev/null differ diff --git a/internal/website/public/apple-touch-icon.png b/internal/website/public/apple-touch-icon.png deleted file mode 100644 index 7077c396b..000000000 Binary files a/internal/website/public/apple-touch-icon.png and /dev/null differ diff --git a/internal/website/public/browserconfig.xml b/internal/website/public/browserconfig.xml deleted file mode 100644 index b3930d0f0..000000000 --- a/internal/website/public/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #da532c - - - diff --git a/internal/website/public/favicon-16x16.png b/internal/website/public/favicon-16x16.png deleted file mode 100644 index 055854f65..000000000 Binary files a/internal/website/public/favicon-16x16.png and /dev/null differ diff --git a/internal/website/public/favicon-32x32.png b/internal/website/public/favicon-32x32.png deleted file mode 100644 index e5f8be050..000000000 Binary files a/internal/website/public/favicon-32x32.png and /dev/null differ diff --git a/internal/website/public/favicon.ico b/internal/website/public/favicon.ico deleted file mode 100644 index 74a56305f..000000000 Binary files a/internal/website/public/favicon.ico and /dev/null differ diff --git a/internal/website/public/fonts.css b/internal/website/public/fonts.css deleted file mode 100644 index 016e9581e..000000000 --- a/internal/website/public/fonts.css +++ /dev/null @@ -1,26 +0,0 @@ -@font-face { - font-family: Colfax; - font-weight: 300; - src: url('/fonts/ColfaxWebLight.woff2') format('woff2'); -} - -@font-face { - font-family: 'Operator Mono'; - src: url('/fonts/OperatorMono.otf'); -} - -@font-face { - font-family: Colfax; - font-weight: 400; - src: url('/fonts/ColfaxWebRegular.woff2') format('woff2'); -} -@font-face { - font-family: Colfax; - font-weight: 500; - src: url('/fonts/ColfaxWebMedium.woff2') format('woff2'); -} -@font-face { - font-family: Colfax; - font-weight: 600; - src: url('/fonts/ColfaxWebBold.woff2') format('woff2'); -} diff --git a/internal/website/public/fonts/ColfaxWebBold.woff2 b/internal/website/public/fonts/ColfaxWebBold.woff2 deleted file mode 100644 index 914df484f..000000000 Binary files a/internal/website/public/fonts/ColfaxWebBold.woff2 and /dev/null differ diff --git a/internal/website/public/fonts/ColfaxWebLight.woff2 b/internal/website/public/fonts/ColfaxWebLight.woff2 deleted file mode 100644 index e2c28d923..000000000 Binary files a/internal/website/public/fonts/ColfaxWebLight.woff2 and /dev/null differ diff --git a/internal/website/public/fonts/ColfaxWebMedium.woff2 b/internal/website/public/fonts/ColfaxWebMedium.woff2 deleted file mode 100644 index 663dbd70e..000000000 Binary files a/internal/website/public/fonts/ColfaxWebMedium.woff2 and /dev/null differ diff --git a/internal/website/public/fonts/ColfaxWebRegular.woff2 b/internal/website/public/fonts/ColfaxWebRegular.woff2 deleted file mode 100644 index 5852a9a64..000000000 Binary files a/internal/website/public/fonts/ColfaxWebRegular.woff2 and /dev/null differ diff --git a/internal/website/public/fonts/OperatorMono.otf b/internal/website/public/fonts/OperatorMono.otf deleted file mode 100644 index 76a6c930d..000000000 Binary files a/internal/website/public/fonts/OperatorMono.otf and /dev/null differ diff --git a/internal/website/public/img/graphql.svg b/internal/website/public/img/graphql.svg deleted file mode 100644 index f884b452f..000000000 --- a/internal/website/public/img/graphql.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/internal/website/public/img/intro/client-only_fields.png b/internal/website/public/img/intro/client-only_fields.png deleted file mode 100644 index 7b8e0903b..000000000 Binary files a/internal/website/public/img/intro/client-only_fields.png and /dev/null differ diff --git a/internal/website/public/img/intro/intellisense.png b/internal/website/public/img/intro/intellisense.png deleted file mode 100644 index 6c404a72f..000000000 Binary files a/internal/website/public/img/intro/intellisense.png and /dev/null differ diff --git a/internal/website/public/img/javascript-output-type-error.png b/internal/website/public/img/javascript-output-type-error.png deleted file mode 100644 index 52789a1e1..000000000 Binary files a/internal/website/public/img/javascript-output-type-error.png and /dev/null differ diff --git a/internal/website/public/img/logger.png b/internal/website/public/img/logger.png deleted file mode 100644 index 0efc81e2f..000000000 Binary files a/internal/website/public/img/logger.png and /dev/null differ diff --git a/internal/website/public/img/logger/devtools_query.png b/internal/website/public/img/logger/devtools_query.png deleted file mode 100644 index 9a962def4..000000000 Binary files a/internal/website/public/img/logger/devtools_query.png and /dev/null differ diff --git a/internal/website/public/img/logger/devtools_verbose.png b/internal/website/public/img/logger/devtools_verbose.png deleted file mode 100644 index 8a7fcaa25..000000000 Binary files a/internal/website/public/img/logger/devtools_verbose.png and /dev/null differ diff --git a/internal/website/public/img/production_ready.png b/internal/website/public/img/production_ready.png deleted file mode 100644 index 989af4c7b..000000000 Binary files a/internal/website/public/img/production_ready.png and /dev/null differ diff --git a/internal/website/public/img/react-key-warning.png b/internal/website/public/img/react-key-warning.png deleted file mode 100644 index adb74c853..000000000 Binary files a/internal/website/public/img/react-key-warning.png and /dev/null differ diff --git a/internal/website/public/img/react.svg b/internal/website/public/img/react.svg deleted file mode 100644 index ea77a618d..000000000 --- a/internal/website/public/img/react.svg +++ /dev/null @@ -1,9 +0,0 @@ - - React Logo - - - - - - - diff --git a/internal/website/public/img/suspense-ssr.png b/internal/website/public/img/suspense-ssr.png deleted file mode 100644 index a8be95609..000000000 Binary files a/internal/website/public/img/suspense-ssr.png and /dev/null differ diff --git a/internal/website/public/img/typescript.png b/internal/website/public/img/typescript.png deleted file mode 100644 index 1ec933d22..000000000 Binary files a/internal/website/public/img/typescript.png and /dev/null differ diff --git a/internal/website/public/locales/en/common.json b/internal/website/public/locales/en/common.json deleted file mode 100644 index 1dd64c715..000000000 --- a/internal/website/public/locales/en/common.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "greeting": "Hello!" -} diff --git a/internal/website/public/logo/logo-light.svg b/internal/website/public/logo/logo-light.svg deleted file mode 100644 index f4546e139..000000000 --- a/internal/website/public/logo/logo-light.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - logo-light - - - - - - - - - - \ No newline at end of file diff --git a/internal/website/public/logo/logo-sm.svg b/internal/website/public/logo/logo-sm.svg deleted file mode 100644 index 54fe953dd..000000000 --- a/internal/website/public/logo/logo-sm.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - logo-sm - - - - - - - - - - \ No newline at end of file diff --git a/internal/website/public/logo/logo.svg b/internal/website/public/logo/logo.svg deleted file mode 100644 index 759028744..000000000 --- a/internal/website/public/logo/logo.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - logo - - - - - - - - - - - - - \ No newline at end of file diff --git a/internal/website/public/mstile-150x150.png b/internal/website/public/mstile-150x150.png deleted file mode 100644 index f49827753..000000000 Binary files a/internal/website/public/mstile-150x150.png and /dev/null differ diff --git a/internal/website/public/powered-by-vercel.svg b/internal/website/public/powered-by-vercel.svg deleted file mode 100644 index 877828684..000000000 --- a/internal/website/public/powered-by-vercel.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/internal/website/public/safari-pinned-tab.svg b/internal/website/public/safari-pinned-tab.svg deleted file mode 100644 index ccb3b06cf..000000000 --- a/internal/website/public/safari-pinned-tab.svg +++ /dev/null @@ -1,7830 +0,0 @@ - - - - -Created by potrace 1.14, written by Peter Selinger 2001-2017 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/internal/website/public/site.webmanifest b/internal/website/public/site.webmanifest deleted file mode 100644 index fa99de77d..000000000 --- a/internal/website/public/site.webmanifest +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "", - "short_name": "", - "icons": [ - { - "src": "/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" -} diff --git a/internal/website/public/style.css b/internal/website/public/style.css deleted file mode 100644 index 3b8f06a59..000000000 --- a/internal/website/public/style.css +++ /dev/null @@ -1,26 +0,0 @@ -code[class*='language-'], -pre[class*='language-'] { - white-space: pre-wrap !important; - word-break: break-word !important; -} - -code, -code * { - font-family: 'SF Mono', 'Source Code Pro', Menlo, monospace !important; - - margin-top: 0.2em; - margin-bottom: 0.2em; -} - -article { - width: 100%; - overflow-x: auto; -} - -.admonition-heading h1, -.admonition-heading h2, -.admonition-heading h3, -.admonition-heading h4, -.admonition-heading h5 { - padding-top: 20px !important; -} diff --git a/internal/website/public/video/invisible-data-fetching.mp4 b/internal/website/public/video/invisible-data-fetching.mp4 deleted file mode 100644 index 6002e26a1..000000000 Binary files a/internal/website/public/video/invisible-data-fetching.mp4 and /dev/null differ diff --git a/internal/website/routes.ts b/internal/website/routes.ts deleted file mode 100644 index b524d8bea..000000000 --- a/internal/website/routes.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { IRoutes, GenerateRoutes } from '@guild-docs/server'; - -export function getRoutes(): IRoutes { - const Routes: IRoutes = { - _: { - docs: { - $name: 'Docs', - $routes: [ - '$intro', - 'getting-started', - '$react', - '$client', - '$cli', - '$development', - ], - _: { - intro: { - $name: 'Introduction', - $routes: ['README', 'how-it-works', 'features', 'contributing'], - }, - react: { - $name: 'Usage with React', - $routes: [ - 'fetching-data', - 'mutations', - 'subscriptions', - 'config', - 'suspense', - 'ssr', - 'meta', - 'troubleshooting', - ], - }, - client: { - $name: 'Core Client', - $routes: [ - 'fetching-data', - 'mutations', - 'subscriptions', - 'config', - 'persistence', - 'helper-functions', - 'upload', - ], - }, - cli: { - $name: 'CLI', - $routes: ['config', 'codegen', 'javascript', 'programmatic'], - }, - development: { - $name: 'Development Tools', - }, - }, - }, - }, - }; - GenerateRoutes({ - Routes, - folderPattern: 'docs', - basePath: 'docs', - basePathLabel: 'Documentation', - }); - - return Routes; -} diff --git a/internal/website/src/components/Examples/App.tsx b/internal/website/src/components/Examples/App.tsx deleted file mode 100644 index dfb70c5d9..000000000 --- a/internal/website/src/components/Examples/App.tsx +++ /dev/null @@ -1,105 +0,0 @@ -import { - Box, - Drawer, - DrawerCloseButton, - DrawerContent, - DrawerOverlay, - Flex, - IconButton, - Spinner, - useBreakpointValue, - useDisclosure, -} from '@chakra-ui/react'; -import { FC, useEffect, useState } from 'react'; -import { HiOutlineMenu } from 'react-icons/hi'; -import { Sidebar } from './Sidebar'; - -const Topbar = () => { - const { isOpen, onClose, onOpen } = useMobileMenuState(); - return ( - - } - /> - - - - - - - - - ); -}; - -let globalIsClientSide = false; - -export function WithExamplePage(Cmp: FC) { - return function WithExamplePage(props: T) { - const [isClientSide, setIsClientSide] = useState(globalIsClientSide); - - useEffect(() => { - if (isClientSide) return; - - setIsClientSide((globalIsClientSide = true)); - }, [isClientSide, setIsClientSide]); - - if (!isClientSide) return ; - return ( - - - - - - } - /> - - - ); - }; -} - -const useMobileMenuState = () => { - const { isOpen, onClose, onOpen } = useDisclosure(); - const isMobile = useBreakpointValue({ base: true, lg: false }); - useEffect(() => { - if (isMobile == false) { - onClose(); - } - }, [isMobile, onClose]); - return { isOpen, onClose, onOpen }; -}; diff --git a/internal/website/src/components/Examples/Embed.tsx b/internal/website/src/components/Examples/Embed.tsx deleted file mode 100644 index 1656a0bbd..000000000 --- a/internal/website/src/components/Examples/Embed.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import { useEffect, useState } from 'react'; -import { useWindowSize } from 'react-use'; - -import { Box, Spinner, Stack } from '@chakra-ui/react'; - -const EmbedSpinner = ({ frameHeight }: { frameHeight: number }) => { - const [hideSpinner, setHideSpinner] = useState(false); - - useEffect(() => { - let isMounted = true; - const timeout = setTimeout(() => { - if (isMounted) setHideSpinner(true); - }, 5000); - return () => { - isMounted = false; - clearTimeout(timeout); - }; - }, []); - - if (hideSpinner) return null; - - return ( - - - - ); -}; - -export interface EmbedProps { - file: string; - initialPath: string; -} - -export function CodeSandboxEmbed({ file, initialPath }: EmbedProps) { - const { height } = useWindowSize(0, 400); - - if (!file.startsWith('/')) file = '/' + file; - - const src = `https://codesandbox.io/embed/gqty-sandbox-forked-o9int?fontsize=14&hidenavigation=1&module=${encodeURIComponent( - file - )}&theme=dark&initialpath=${encodeURIComponent(initialPath)}`; - - const frameHeight = height - 250; - - return ( - - - - { - document.body.style.overflowY = 'hidden'; - document.body.style.overflowX = 'hidden'; - }} - onMouseOut={() => { - document.body.style.overflowY = 'auto'; - document.body.style.overflowX = 'auto'; - }} - /> - - ); -} diff --git a/internal/website/src/components/Examples/NavLink.tsx b/internal/website/src/components/Examples/NavLink.tsx deleted file mode 100644 index 0aae6c54e..000000000 --- a/internal/website/src/components/Examples/NavLink.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { - HStack, - Icon, - Link, - LinkProps, - Text, - useColorModeValue as mode, -} from '@chakra-ui/react'; -import NextLink from 'next/link'; -import { useRouter } from 'next/router'; - -interface NavLinkProps extends LinkProps { - label: string; - icon?: any; -} - -export const NavLink = (props: NavLinkProps) => { - const { icon, label, href, ...rest } = props; - const { pathname } = useRouter(); - - const isActive = pathname === href; - - return ( - - - - - - {label} - - - - - ); -}; diff --git a/internal/website/src/components/Examples/Sidebar.tsx b/internal/website/src/components/Examples/Sidebar.tsx deleted file mode 100644 index 058f0d594..000000000 --- a/internal/website/src/components/Examples/Sidebar.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { FaAngleRight, FaReact } from 'react-icons/fa'; - -import { Flex, FlexProps, Spacer, Stack } from '@chakra-ui/react'; - -import { NavLink } from './NavLink'; - -export const Sidebar = (props: FlexProps) => { - return ( - - - - - - - - - - - - - ); -}; diff --git a/internal/website/src/components/ThemeSwitch.tsx b/internal/website/src/components/ThemeSwitch.tsx deleted file mode 100644 index 19c777b47..000000000 --- a/internal/website/src/components/ThemeSwitch.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { IconButton } from '@chakra-ui/react'; -import { useThemeContext } from '@theguild/components'; -import { BsMoonFill, BsSun } from 'react-icons/bs'; - -export function ThemeSwitch() { - const { setDarkTheme, isDarkTheme } = useThemeContext(); - - if (!setDarkTheme) return null; - - return ( - : } - onClick={() => setDarkTheme((state) => !state)} - /> - ); -} diff --git a/internal/website/src/pages/_app.tsx b/internal/website/src/pages/_app.tsx deleted file mode 100644 index 3315d1f8f..000000000 --- a/internal/website/src/pages/_app.tsx +++ /dev/null @@ -1,288 +0,0 @@ -import { - Box, - BoxProps, - chakra, - extendTheme, - theme as chakraTheme, - useColorModeValue, -} from '@chakra-ui/react'; -import { mode } from '@chakra-ui/theme-tools'; -import { ClassNames } from '@emotion/react'; -import { - AppSeoProps, - CombinedThemeProvider, - DocsPage, - ExtendComponents, - handlePushRoute, -} from '@guild-docs/client'; -import { Subheader } from '@theguild/components'; -import { appWithTranslation } from 'next-i18next'; -import type { AppProps } from 'next/app'; -import Router from 'next/router'; -import '../../public/style.css'; -import { ThemeSwitch } from '../components/ThemeSwitch'; - -const BaseAnchor = chakra('a', { - baseStyle: { - color: '#2f77c9', - _hover: { - textDecoration: 'underline', - }, - }, -}); - -const a: typeof BaseAnchor = (props) => { - const localHref = - typeof props.href === 'string' && !props.href.startsWith('http') - ? props.href - : undefined; - - return ( - { - ev.preventDefault(); - Router.push(localHref); - }) - } - onMouseOver={ - localHref && - (() => { - Router.prefetch(localHref); - }) - } - /> - ); -}; - -const blockquote = (props: BoxProps) => { - const bgColor = useColorModeValue('pink.500', 'pink.700'); - - return ( - *:first-of-type': { - marginTop: 0, - }, - }} - {...props} - /> - ); -}; -export const table = (props: BoxProps) => ( - -); - -export const th = (props: BoxProps) => { - const bg = useColorModeValue('gray.50', 'whiteAlpha.100'); - - return ( - - ); -}; - -export const td = (props: BoxProps) => ( - -); - -ExtendComponents({ - HelloWorld() { - return

Hello World!

; - }, - Box, - a, - blockquote, - table, - th, - td, -}); - -const styles: typeof chakraTheme['styles'] = { - global: (props) => ({ - body: { - bg: mode('white', 'gray.850')(props), - }, - }), -}; - -const theme = extendTheme({ - colors: { - gray: { - 50: '#fafafa', - 100: '#f5f5f5', - 200: '#e5e5e5', - 300: '#d4d4d4', - 400: '#a3a3a3', - 500: '#737373', - 600: '#525252', - 700: '#404040', - 800: '#262626', - 850: '#1b1b1b', - 900: '#171717', - }, - }, - fonts: { - heading: 'TGCFont, sans-serif', - body: 'TGCFont, sans-serif', - }, - config: { - initialColorMode: 'light', - useSystemColorMode: false, - }, - styles, -}); - -const accentColor = '#C00B84'; - -const serializedMdx = process.env.SERIALIZED_MDX_ROUTES; -const mdxRoutes = { data: serializedMdx && JSON.parse(serializedMdx) }; - -function AppContent(appProps: AppProps) { - const { Component, pageProps, router } = appProps; - const isDocs = router.asPath.startsWith('/docs'); - - return ( - <> - - {({ css }) => { - return ( - <> - handlePushRoute('/', e), - }} - links={[ - { - children: 'Home', - title: 'Read about Guild Docs', - href: '/', - onClick: (e) => handlePushRoute('/', e), - }, - { - children: 'Examples', - title: 'Check Examples', - href: '/examples', - onClick: (e) => handlePushRoute('/examples', e), - }, - { - children: 'GitHub', - href: 'https://github.com/gqty-dev/gqty', - target: '_blank', - rel: 'noopener norefereer', - title: "Head to the project's GitHub", - }, - { - children: 'Docs', - title: 'Check Documentation', - href: '/docs', - onClick: (e) => handlePushRoute('/docs/getting-started', e), - }, - { - children: , - href: null as any, - title: '', - }, - ]} - cta={{ - children: 'Get Started', - title: 'Start using GQty', - href: '/docs/getting-started', - onClick: (e) => handlePushRoute('/docs/getting-started', e), - target: '_blank', - rel: 'noopener noreferrer', - }} - /> - - ); - }} - - {isDocs ? ( - - ) : ( - - )} - - ); -} - -const defaultSeo: AppSeoProps = { - title: 'GQty', - description: 'a GraphQL client built for rapid iteration.', - logo: { - url: 'https://gqty.dev/logo.png', - width: 50, - height: 54, - }, -}; - -export default appWithTranslation(function App(appProps) { - return ( - - - - ); -}); diff --git a/internal/website/src/pages/_document.tsx b/internal/website/src/pages/_document.tsx deleted file mode 100644 index ae8c80840..000000000 --- a/internal/website/src/pages/_document.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import Document, { Head, Html, Main, NextScript } from 'next/document'; - -import { ColorModeScript } from '@chakra-ui/react'; - -export default class MyDocument extends Document { - render() { - return ( - - - - - - - - - - - - - -
- - - - ); - } -} diff --git a/internal/website/src/pages/docs/[[...slug]].tsx b/internal/website/src/pages/docs/[[...slug]].tsx deleted file mode 100644 index 37731b21d..000000000 --- a/internal/website/src/pages/docs/[[...slug]].tsx +++ /dev/null @@ -1,51 +0,0 @@ -import Head from 'next/head'; - -import { DocsContent, DocsTOC, MDXPage } from '@guild-docs/client'; -import { MDXPaths, MDXProps } from '@guild-docs/server'; - -import { getRoutes } from '../../../routes'; - -import type { GetStaticPaths, GetStaticProps } from 'next'; - -export default MDXPage( - function PostPage({ content, TOC, MetaHead, BottomNavigation }) { - return ( - <> - {MetaHead} - {content} - - - - - - ); - }, - { - renderTitle(title) { - if (!title) return 'GQty'; - return `${title} - GQty`; - }, - giscus: { - repo: 'gqty-dev/gqty', - repoId: 'MDEwOlJlcG9zaXRvcnkzNzU4MjIxOTM=', - category: 'Q&A', - categoryId: 'DIC_kwDOFmaXcc4B-nRb', - }, - } -); - -export const getStaticProps: GetStaticProps = (ctx) => { - return MDXProps( - ({ readMarkdownFile, getArrayParam }) => { - return readMarkdownFile('docs/', getArrayParam('slug')); - }, - ctx, - { - getRoutes, - } - ); -}; - -export const getStaticPaths: GetStaticPaths = (ctx) => { - return MDXPaths('docs', { ctx }); -}; diff --git a/internal/website/src/pages/examples/index.tsx b/internal/website/src/pages/examples/index.tsx deleted file mode 100644 index 91fa621f3..000000000 --- a/internal/website/src/pages/examples/index.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import { FaCircle, FaReact } from 'react-icons/fa'; - -import { Heading, Stack, Text, Link as ChakraLink } from '@chakra-ui/react'; -import Link from 'next/link'; - -import { WithExamplePage } from '../../components/Examples/App'; -import { NavLink } from '../../components/Examples/NavLink'; - -export default WithExamplePage(function Page() { - return ( - - API - - All the examples made here are around a playground API specially made to - showcase usual usage of GraphQL APIs in gqty. - - - You can also check it{' '} - - http://examples-api.gqty.dev - {' '} - and play with it, since it also offers a playground using{' '} - - Altair GraphQL Client - {' '} - and an interactive visualization of the schema using{' '} - - GraphQL Voyager - - . - - Feel free to suggest new specific features to offer in it. - Online Editor and Visualization - - These examples are made using{' '} - - - CodeSandbox - - - , which allows you to modify the examples and play with gqty{' '} - without installing anything. - - Examples - - We are planning to add more examples about all the different expected - usages of gqty. - - - And we encourage you to open a new{' '} - - GitHub issue - {' '} - to request some examples about specific issues you might have, and you - will also be helping everyone. - -
- For now, you can check some examples about: - - - {' '} - - gqty in React Suspense - - - - - - - -
- ); -}); diff --git a/internal/website/src/pages/examples/suspense/auth.tsx b/internal/website/src/pages/examples/suspense/auth.tsx deleted file mode 100644 index b435f9b6d..000000000 --- a/internal/website/src/pages/examples/suspense/auth.tsx +++ /dev/null @@ -1,96 +0,0 @@ -import React, { useMemo } from 'react'; - -import { - Heading, - ListItem, - Stack, - Text, - UnorderedList, - Link as ChakraLink, -} from '@chakra-ui/react'; -import Link from 'next/link'; -import { useRouter } from 'next/router'; - -import { WithExamplePage } from '../../../components/Examples/App'; -import { - CodeSandboxEmbed, - EmbedProps, -} from '../../../components/Examples/Embed'; - -export default WithExamplePage(function Page() { - const { query = {} } = useRouter(); - - const { file, initialPath } = useMemo(() => { - switch (query.hash) { - case '#headers': { - return { - file: 'src/gqty/index.ts', - initialPath: '/login', - }; - } - case '#currentUser': - return { - file: 'src/hooks/currentUser.ts', - initialPath: '/login', - }; - - case '#register': - return { - file: 'src/components/Register.tsx', - initialPath: '/register', - }; - - case '#login': - default: - return { - file: 'src/components/Login.tsx', - initialPath: '/login', - }; - } - }, [query.hash]); - return ( - <> - GraphQL Authentication in React Suspense - - - In this example you can check some examples of{' '} - useMutation inside a authentication - inside GraphQL Flow. - - - - Relevant files: - - - - Handling of authorization headers in fetch:{' '} - - src/gqty/index.ts - - - - Login:{' '} - - src/Components/Login.tsx - - - - Register:{' '} - - - src/Components/Register.tsx - - - - - Checking if user is authenticated:{' '} - - src/hooks/currentUser.ts - - - - - - - ); -}); diff --git a/internal/website/src/pages/examples/suspense/query.tsx b/internal/website/src/pages/examples/suspense/query.tsx deleted file mode 100644 index f50828fe8..000000000 --- a/internal/website/src/pages/examples/suspense/query.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; - -import { Heading, Text, Link as ChakraLink } from '@chakra-ui/react'; -import Link from 'next/link'; - -import { WithExamplePage } from '../../../components/Examples/App'; -import { CodeSandboxEmbed } from '../../../components/Examples/Embed'; - -export default WithExamplePage(function Page() { - return ( - <> - GraphQL Queries in React Suspense - - In this example you can see some usage examples of{' '} - - useQuery - {' '} - and{' '} - - graphql HOC - - . - - - - ); -}); diff --git a/internal/website/src/pages/index.tsx b/internal/website/src/pages/index.tsx deleted file mode 100644 index 0f0fc3443..000000000 --- a/internal/website/src/pages/index.tsx +++ /dev/null @@ -1,117 +0,0 @@ -import { HeroGradient, InfoList } from '@theguild/components'; - -import { handlePushRoute } from '@guild-docs/client'; -import { ClassNames } from '@emotion/react'; -import { Heading, HStack } from '@chakra-ui/react'; -import Image from 'next/image'; -import GraphQLLogo from '../../public/img/graphql.svg'; -import TypeScriptLogo from '../../public/img/typescript.png'; -import ReactLogo from '../../public/img/react.svg'; -import ProductionReady from '../../public/img/production_ready.png'; - -export default function Index() { - return ( - <> - handlePushRoute('/docs/getting-started', e), - }} - colors={['#EC4CB7', '#C00B84']} - /> - - - {({ css }) => { - return ( - div { - align-items: center; - justify-content: center; - } - `, - }} - items={[ - { - title: ( - - - Invisible data fetching - - ), - description: - 'Queries, Mutations and Subscriptions are generated at runtime using ES6 Proxies.', - link: { - href: '/docs/intro/features#invisible-data-fetching', - onClick: (e) => - handlePushRoute( - '/docs/intro/features#invisible-data-fetching', - e - ), - title: 'Read more', - children: 'Read more', - }, - }, - { - title: ( - - - Strongly typed - - ), - description: - 'Built from the ground up to work with Typescript — no more code generation', - link: { - href: '/docs/intro/features#typescript', - onClick: (e) => - handlePushRoute('/docs/intro/features#typescript', e), - title: 'Read more', - children: 'Read more', - }, - }, - { - title: ( - - - React.js - - ), - description: - 'React Suspense support, hooks, automatic component updates and more.', - link: { - href: '/docs/react/fetching-data', - onClick: (e) => - handlePushRoute('/docs/react/fetching-data', e), - title: 'Read more', - children: 'Read more', - }, - }, - { - title: ( - - - Production ready - - ), - description: - 'Fully-featured with inbuilt normalized cache, server side rendering, subscriptions and more.', - link: { - href: '/docs/intro/features', - onClick: (e) => handlePushRoute('/docs/intro/features', e), - title: 'Read more', - children: 'Read more', - }, - }, - ]} - /> - ); - }} - - - ); -} diff --git a/package.json b/package.json index 119f78a20..fee4202c3 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "license": "MIT", "type": "module", "scripts": { - "build": "pnpm build -r --stream", + "build": "pnpm -r --filter=!example-* build", "build:docs": "pnpm build:website", "build:website": "pnpm -r --filter website build:docs", "changeset": "changeset --", @@ -21,7 +21,6 @@ "pretty": "pretty-quick", "pretty:all": "prettier --write \"**/*.{ts,tsx}\"", "publish:all": "changeset version && pnpm i && pnpm test && pnpm -r publish --access public", - "release:canary": "node scripts/canary-release.cjs", "test": "pnpm test -r --no-sort --no-bail --stream --", "test:ci": "pnpm test -r --workspace-concurrency=0 --no-sort --no-bail --stream --", "test:watch": "pnpm test:watch -r --no-bail --no-sort --stream", @@ -32,22 +31,22 @@ "devDependencies": { "@changesets/apply-release-plan": "^6.1.3", "@changesets/assemble-release-plan": "^5.2.3", + "@changesets/changelog-github": "^0.4.8", "@changesets/cli": "^2.26.0", "@changesets/config": "^2.3.0", "@changesets/read": "^0.5.9", "@manypkg/get-packages": "^1.1.3", "@types/node": "^18.15.5", - "bob-esbuild": "^4.0.3", - "bob-esbuild-cli": "^4.0.0", - "bob-ts": "^4.1.1", - "bob-tsm": "^1.1.2", + "bob-esbuild": "5.0.0-alpha-227aebc.0", + "bob-esbuild-cli": "5.0.0-alpha-227aebc.0", + "bob-ts": "5.0.0-alpha-227aebc.0", + "bob-tsm": "2.0.0-alpha-227aebc.0", "bufferutil": "^4.0.7", "chalk": "^5.2.0", "changesets-github-release": "^0.1.0", "concurrently": "^7.6.0", - "esbuild": "^0.17.12", + "esbuild": "^0.18.17", "globby": "^13.1.3", - "graphql": "^16.6.0", "husky": "^8.0.3", "jest": "^29.5.0", "open": "^8.4.2", @@ -55,10 +54,10 @@ "pretty-quick": "^3.1.3", "rimraf": "^4.4.0", "semver": "^7.3.8", - "ts-jest": "^29.0.5", + "ts-jest": "^29.1.0", "ts-node": "^10.9.1", "tslib": "^2.5.0", - "typescript": "^4.9.5", + "typescript": "^5.0.4", "utf-8-validate": "^6.0.3", "wait-on": "^7.0.1" }, @@ -67,31 +66,20 @@ }, "pnpm": { "overrides": { - "trim@<0.0.3": ">=0.0.3", - "glob-parent@<5.1.2": ">=5.1.2", - "undici": "5.7.0", - "mermaid@<8.13.8": ">=8.13.8", "@braintree/sanitize-url@<6.0.0": ">=6.0.0", + "d3-color@<3.1.0": ">=3.1.0", "dset@<3.1.2": ">=3.1.2", - "mermaid@>=8.0.0 <9.1.2": ">=9.1.2", + "glob-parent@<5.1.2": ">=5.1.2", "mdx-mermaid@<1.3.0": ">=1.3.0", - "d3-color@<3.1.0": ">=3.1.0" + "@manypkg/get-packages": "^1.1.3", + "mermaid@<8.13.8": ">=8.13.8", + "mermaid@>=8.0.0 <9.1.2": ">=9.1.2", + "trim@<0.0.3": ">=0.0.3", + "undici": "5.7.0" }, - "peerDependencyRules": { - "allowedVersions": { - "graphql": "*" - }, - "ignoreMissing": [ - "@babel/preset-env", - "@babel/core", - "@algolia/client-search", - "@chakra-ui/system", - "unist-util-visit", - "prop-types", - "@envelop/core", - "rollup", - "react-native" - ] + "patchedDependencies": { + "use-sync-external-store@1.2.0": "patches/use-sync-external-store@1.2.0.patch" } - } + }, + "packageManager": "pnpm@8.14.0" } diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index b32e67fe6..4f6ffd7ea 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -22,7 +22,7 @@ Test: '_TEST', MyValue: 'My_Value', } as const; - export type EnumAsConst = typeof EnumAsConst[keyof typeof EnumAsConst]; + export type EnumAsConst = (typeof EnumAsConst)[keyof typeof EnumAsConst]; function useEnum(value: Enum) {} function useEnumAsConst(value: EnumAsConst) {} @@ -44,9 +44,14 @@ ### Minor Changes -- dd47986: New option `"fetchOptions"`, added to the [`resolved`](https://gqty.dev/docs/client/fetching-data#resolved) client function, that allows for giving extra configurations to the expected [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) call. +- dd47986: New option `"fetchOptions"`, added to the + [`resolved`](https://gqty.dev/docs/client/fetching-data#resolved) client + function, that allows for giving extra configurations to the expected + [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) call. - This enables, for example, the customization of the headers sent for a specific query or to pass an [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal). + This enables, for example, the customization of the headers sent for a + specific query or to pass an + [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal). ```ts import { resolved, query } from '../gqty'; @@ -66,7 +71,8 @@ }); ``` - For already generated clients to be able to use this new option, it is required manually modify the existing query fetcher, to do for example: + For already generated clients to be able to use this new option, it is + required manually modify the existing query fetcher, to do for example: ```ts const queryFetcher: QueryFetcher = async function ( @@ -92,7 +98,8 @@ }; ``` -- b7c8710: Fix generator: Argument is required only if it is non-null and does not have default value. Previously only checking if it is non-null. +- b7c8710: Fix generator: Argument is required only if it is non-null and does + not have default value. Previously only checking if it is non-null. ### Patch Changes @@ -124,13 +131,15 @@ ### Minor Changes -- f9fd0b9: Added the ability to use fast-glob patterns in the schema generate endpoint to be able to use and combine multiple gql/graphql schema files +- f9fd0b9: Added the ability to use fast-glob patterns in the schema generate + endpoint to be able to use and combine multiple gql/graphql schema files ## 2.3.1 ### Patch Changes -- 96ab370: Change export syntax to fix bundling issues, show a warning on existent generated clients with `export const {` syntax. +- 96ab370: Change export syntax to fix bundling issues, show a warning on + existent generated clients with `export const {` syntax. Closes #292 @@ -151,7 +160,9 @@ ### Minor Changes - cba5c43: Don't skip config read on NODE_ENV === "test" -- a4fc294: New [Envelop](https://www.envelop.dev/) / [graphql-ez](https://www.graphql-ez.com/) plugin that automatically generates gqty code based on schema and gqty.config.cjs +- a4fc294: New [Envelop](https://www.envelop.dev/) / + [graphql-ez](https://www.graphql-ez.com/) plugin that automatically generates + gqty code based on schema and gqty.config.cjs ```ts // graphql-ez @@ -207,7 +218,8 @@ ### Patch Changes -- f4ddac9: Enforce `"importsNotUsedAsValues"` & `"preserveValueImports"` using `import type` +- f4ddac9: Enforce `"importsNotUsedAsValues"` & `"preserveValueImports"` using + `import type` - ff821ef: default config react enabled only if "react" dependency is found ## 2.1.0 @@ -224,7 +236,8 @@ ### Patch Changes -- 28e2c09: [Bug fixing breaking change] Fix types and retrieval of unions/interfaces of different object types +- 28e2c09: [Bug fixing breaking change] Fix types and retrieval of + unions/interfaces of different object types - Updated dependencies [28e2c09] - gqty@2.0.1 @@ -232,7 +245,8 @@ ### Major Changes -- 3586c45: Change previous unstable `Unions` support with new `"$on"` property with support for both `Unions` & `Interfaces` +- 3586c45: Change previous unstable `Unions` support with new `"$on"` property + with support for both `Unions` & `Interfaces` ### Patch Changes @@ -331,10 +345,13 @@ ### Patch Changes - 4a3d5ef: allow introspection json without "data" field -- af6a437: - Rename `gqtyConfig` to `GQtyConfig` (so it's consistent with the new logo) +- af6a437: - Rename `gqtyConfig` to `GQtyConfig` (so it's consistent with the + new logo) - Rename `gqtyError` to `GQtyError` - - Remove `endpoint` option from the configuration, and instead always defaults to introspection one - - It's confusing why theres two of them, and the user can change it later by modifying the file anyway + - Remove `endpoint` option from the configuration, and instead always defaults + to introspection one + - It's confusing why theres two of them, and the user can change it later by + modifying the file anyway - 4a3d5ef: disable config file write if no cli usage - Updated dependencies [4a3d5ef] - Updated dependencies [af6a437] diff --git a/packages/cli/build.ts b/packages/cli/build.ts index 3dd5d7ba4..c77864324 100644 --- a/packages/cli/build.ts +++ b/packages/cli/build.ts @@ -26,7 +26,7 @@ async function main() { define: { __VERSION__: JSON.stringify(pkg.version), }, - minify: false, + minify: true, }, sourcemap: false, external: ['./deps.js'], @@ -35,11 +35,11 @@ async function main() { }, }), build({ + entryPoints: ['./src/deps.ts'], bundle: true, format: 'cjs', - target: 'node12.20', - entryPoints: ['./src/deps.ts'], outfile: 'dist/deps.js', + target: 'node12.20', platform: 'node', minify: true, external: ['graphql'], @@ -69,7 +69,7 @@ async function main() { outDir: 'dist', target: 'node12.20', esbuild: { - minify: false, + minify: true, }, sourcemap: false, external: ['./deps.js'], diff --git a/packages/cli/package.json b/packages/cli/package.json index aae21169b..bcd7652a4 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -8,14 +8,19 @@ }, "license": "MIT", "author": "PabloSzx ", + "maintainers": [ + "Vicary Archangel " + ], "sideEffects": false, "exports": { ".": { + "types": "./dist/index.d.ts", "require": "./dist/index.js", "import": "./dist/index.mjs" }, "./deps": "./dist/deps.js", "./*": { + "types": "./dist/*.d.ts", "require": "./dist/*.js", "import": "./dist/*.mjs" } @@ -40,52 +45,44 @@ "test:watch-coverage": "rimraf coverage && mkdirp coverage/lcov-report && concurrently --raw \"jest --watchAll\" \"serve -l 8787 coverage/lcov-report\" \"wait-on tcp:8787 coverage/lcov-report/index.html && open-cli http://localhost:8787\"" }, "dependencies": { - "gqty": "workspace:^2.3.0", - "undici": "^5.21.0" - }, - "devDependencies": { "@graphql-codegen/core": "^3.1.0", "@graphql-codegen/typescript": "^3.0.2", "@graphql-tools/delegate": "^9.0.25", "@graphql-tools/utils": "^9.2.0", "@graphql-tools/wrap": "^9.3.4", + "chalk": "^5.2.0", + "commander": "^11.0.0", + "cosmiconfig": "^8.1.3", + "cross-fetch": "^3.1.5", + "fast-glob": "^3.2.12", + "gqty": "workspace:^", + "graphql": "^16.0.0", + "inquirer": "^8.2.5", + "lodash-es": "^4.17.21", + "micromatch": "^4.0.5", + "mkdirp": "^2.1.5", + "prettier": "^2.8.6", + "trading-signals": "^3.7.0" + }, + "devDependencies": { "@size-limit/preset-small-lib": "^8.2.4", - "@types/lodash": "^4.14.191", - "@types/lodash.sortby": "^4.7.7", + "@types/inquirer": "^8.2.6", + "@types/lodash-es": "^4.14.191", + "@types/micromatch": "^4.0.2", "@types/mkdirp": "^1.0.2", + "@types/ms": "^0.7.31", "@types/node": "^18.15.5", - "bob-ts": "^4.1.1", - "bob-tsm": "^1.1.2", - "changesets-github-release": "^0.1.0", - "commander": "^10.0.0", - "cosmiconfig": "^8.1.3", + "bob-tsm": "2.0.0-alpha-227aebc.0", "esbuild": "^0.17.12", - "fast-glob": "^3.2.12", - "graphql": "^16.6.0", - "lodash": "^4.17.21", - "mkdirp": "^2.1.5", "open-cli": "^7.2.0", - "prettier": "^2.8.6", + "p-lazy": "^3.1.0", "rimraf": "^4.4.0", "serve": "^14.2.0", "size-limit": "^8.2.4", - "test-utils": "workspace:^0.1.0", + "test-utils": "workspace:^", "tmp-promise": "^3.0.3", - "tslib": "^2.5.0", - "typescript": "^4.9.5", "wait-on": "^7.0.1" }, - "peerDependencies": { - "graphql": "*" - }, - "peerDependenciesMeta": { - "graphql": { - "optional": true - } - }, - "engines": { - "node": "^12.20.0 || >=14.13.0" - }, "publishConfig": { "directory": "dist" }, diff --git a/packages/cli/src/bin.ts b/packages/cli/src/bin.ts index 72bd6abfe..c314844d4 100644 --- a/packages/cli/src/bin.ts +++ b/packages/cli/src/bin.ts @@ -1,43 +1,15 @@ -import { defaultConfig } from './config'; +import * as defaultCommand from './commands/default'; +import * as generateCommand from './commands/generate'; import * as deps from './deps.js'; import { __innerState } from './innerState'; -import { inspectWriteGenerate } from './inspectWriteGenerate'; __innerState.isCLI = true; declare const __VERSION__: string; -deps.program.version(__VERSION__).description('CLI for gqty'); +deps.program.version(__VERSION__); -deps.program - .command('generate [endpoint] [destination]') - .option('--react', 'Create React client') - .description( - `Inspect or read from a file a GraphQL Schema and generate the gqty client in the specified directory (./src/generated/graphql.ts by default). -EXAMPLE 1: "gqty generate ./schema.gql --react" -EXAMPLE 2: "gqty generate http://localhost:3000/graphql src/gqty/index.ts" -EXAMPLE 3 (Configuration file): "gqty generate"` - ) - .action(async (endpoint, destination, opts) => { - let react; - if (opts.react != null) { - react = defaultConfig.react = - typeof opts.react === 'boolean' ? opts.react : !!opts.react; - } - - await inspectWriteGenerate({ - endpoint, - destination, - cli: true, - generateOptions: { - react, - }, - }).catch((err) => { - if (err instanceof Error) delete err.stack; - console.error(err); - process.exit(1); - }); - process.exit(0); - }); +generateCommand.addCommand(deps.program); +defaultCommand.addCommand(deps.program); deps.program.parse(process.argv); diff --git a/packages/cli/src/commands/default.ts b/packages/cli/src/commands/default.ts new file mode 100644 index 000000000..4fb7b08fb --- /dev/null +++ b/packages/cli/src/commands/default.ts @@ -0,0 +1,360 @@ +import { type PackageJSON } from 'bob-esbuild/config/packageJson'; +import type { Command } from 'commander'; +import { cosmiconfig } from 'cosmiconfig'; +import { readFile, watch } from 'node:fs/promises'; +import { type GQtyConfig } from '../config'; +import { inquirer } from '../deps'; +import { convertHeadersInput } from './default/convertHeadersInput'; +import { fetchSchemas, isURL } from './default/fetchSchema'; +import { generateClient } from './default/generateClient'; +import { getCommandName } from './default/getCommandName'; +import { logger } from './default/logger'; +import { promptInstall, runInstall } from './default/promptInstall'; + +export type CommandOptions = { + header?: string[]; + install?: boolean; + react?: boolean; + subscriptions?: string; + target?: string; + typescript?: boolean; + watch: boolean; +}; + +export const addCommand = (command: Command) => { + return command + .name(getCommandName()) + .usage(`[options] [endpoints...]`) + .argument('[endpoints...]', 'GraphQL endpoints or schema files.') + .option( + '-H, --header
', + 'Custom header for the introspection query.', + (value, previous: string[]) => [...previous, value], + [] + ) + .option('--react', 'Include React hooks in the generated client.') + .option( + '--subscriptions [client]', + 'Includes specified package as subscription client, must be graphql-ws compatible.' + ) + .option('--no-subscriptions') + .option('--target ', 'Destination path for the generated client.') + .option( + '--typescript', + 'Generates a TypeScript client over a JavaScript one.' + ) + .option('--no-typescript') + .option( + '--install', + 'Automatically install dependencies with current package manager.' + ) + .option('--no-install') + .option( + '-w, --watch', + 'Activate watch mode, regenerate on change changes.', + false + ) + .action(async (argv: string[], options: CommandOptions) => { + const config: GQtyConfig = await cosmiconfig('gqty') + .search() + .then((result) => result?.config ?? {}); + + let endpoints = argv; + + if (endpoints.length === 0) { + if (!process.stdin.isTTY) { + logger.error('Please provide your GraphQL endpoint(s).'); + process.exit(1); + } + + endpoints = await promptEndpoints( + config.introspections + ? Object.keys(config.introspections).join(', ') + : config.introspection?.endpoint + ); + } + + endpoints = endpoints.map((endpoint) => endpoint.trim()).filter(Boolean); + + if (endpoints.length === 0) { + return logger.error('Please provide your GraphQL endpoint(s).'); + } + + // Make sure we have a object for `fetchSchemas` to fill in user headers. + if (!config.introspections) { + config.introspections = {}; + } + + const schema = await fetchSchemas(endpoints, { + headers: + convertHeadersInput(options.header) ?? config.introspection?.headers, + headersByEndpoint: config.introspections, + }).catch(terminateWithError); + + if (Object.keys(config.introspections ?? {}).length > 0) { + // TODO: Save config to file. + } + + const manifest = await (async () => { + try { + return JSON.parse( + await readFile('package.json', { encoding: 'utf-8' }) + ) as PackageJSON; + } catch { + return; + } + })(); + + // Detect React and TypeScript from package.json. + if (manifest) { + config.react ??= manifest.dependencies?.['react'] !== undefined; + + config.javascriptOutput ??= + manifest.dependencies?.['typescript'] === undefined && + manifest.devDependencies?.['typescript'] === undefined; + } + + // Detect Subscriptions from schema. + if (schema.getSubscriptionType()) { + config.subscriptions ??= 'graphql-ws'; + } + + // CLI options + { + if (options.react) { + config.react = true; + } + + // Explicitly allow empty string + if (options.subscriptions !== undefined) { + config.subscriptions = options.subscriptions || false; + } + + if (options.typescript) { + config.javascriptOutput = false; + } + + if (options.target) { + config.destination = options.target; + } + } + + // Enter interactive mode if user did not provide arguments. + if (argv.length === 0) { + config.react = await promptReact(config.react ?? false); + + config.subscriptions = await promptSubscriptions( + config.subscriptions + ? config.subscriptions === true + ? 'graphql-ws' + : config.subscriptions + : undefined + ); + + config.javascriptOutput = !(await promptTypescript( + !config.javascriptOutput + )); + + config.destination ??= await promptTarget( + config.javascriptOutput ? 'gqty/index.js' : 'gqty/index.ts' + ); + } + + config.destination ??= config.javascriptOutput + ? 'gqty/index.js' + : 'gqty/index.ts'; + + if (isURL(argv[0])) { + config.endpoint = argv[0]; + } + + await generateClient(schema, { + destination: '', + ...config, + }); + + if (argv.length === 0 && options.install === undefined) { + await promptInstall(config); + } else if (manifest && options.install !== false) { + await runInstall(manifest, config); + } + + // Watch mode + if (options.watch) { + const { printSchema } = await import('graphql'); + const { FasterSMA: SMA } = await import('trading-signals'); + const { default: throttle } = await import('lodash-es/throttle.js'); + const { + default: { isMatch }, + } = await import('micromatch'); + + const sma = new SMA(3); + const getMovingAverage = () => { + try { + return sma.getResult(); + } catch { + if (sma.prices.length === 0) return 0; + + return sma.prices.reduce((a, b) => a + b, 0) / sma.prices.length; + } + }; + const doGenerateSchema = throttle( + async () => { + if (mutexLock) return; + + mutexLock = true; + + const start = Date.now(); + + try { + const schema = await fetchSchemas(endpoints, { + headers: convertHeadersInput(options.header), + headersByEndpoint: config.introspections, + silent: true, + }).catch((e) => { + if (e instanceof Error) { + logger.errorProgress(e.message); + + return Promise.resolve(undefined); + } else { + return Promise.reject(e); + } + }); + + if (!schema) return; + + const schemaText = printSchema(schema); + + if (schemaText !== lastSchema) { + lastSchema = schemaText; + + await generateClient(schema, { + destination: '', + ...config, + }); + + sma.update(Date.now() - start); + } + + logger.infoProgress( + 'Watching for schema changes... (Ctrl+C to exit)' + ); + } finally { + mutexLock = false; + } + }, + 1000, + { leading: true, trailing: true } + ); + + let mutexLock = false; + let lastSchema = printSchema(schema); + + logger.infoProgress('Watching for schema changes... (Ctrl+C to exit)'); + + // Polling loop, only happens with URL endpoints. + if (endpoints.some((endpoint) => isURL(endpoint))) { + (async () => { + while (true) { + const wait = Math.max( + 5000, + Math.min(30000, getMovingAverage() * 10) + ); + + await new Promise((resolve) => setTimeout(resolve, wait)); + + doGenerateSchema(); + } + })(); + } + + // Watch file changes + (async () => { + let shouldRun = false; + + for await (const { filename } of watch('.', { recursive: true })) { + if (filename && isMatch(filename, endpoints)) { + // Already queued + if (shouldRun) continue; + shouldRun = true; + + process.nextTick(() => { + // Already executed + if (!shouldRun) return; + shouldRun = false; + + doGenerateSchema(); + }); + } + } + })(); + } + }); +}; + +const promptEndpoints = async (defaultEndpoint?: string) => { + const { endpoints } = await inquirer.prompt<{ endpoints: string }>({ + name: 'endpoints', + type: 'input', + message: 'Where is your GraphQL endpoint or schema files?', + default: defaultEndpoint, + }); + + return endpoints + .split(/[,\s+]/) + .map((s) => s.trim()) + .filter(Boolean); +}; + +const promptTarget = async (defaultTarget: string) => { + const { target } = await inquirer.prompt<{ target: string }>({ + name: 'target', + type: 'input', + message: 'Where should the client be generated?', + default: defaultTarget, + }); + + return target; +}; + +const promptReact = async (defaultValue: boolean) => { + const { react } = await inquirer.prompt<{ react: boolean }>({ + name: 'react', + type: 'confirm', + message: 'Are you using React with GQty?', + default: defaultValue, + }); + + return react; +}; + +const promptSubscriptions = async (defaultValue?: string) => { + const { subscriptions } = await inquirer.prompt<{ subscriptions: string }>({ + name: 'subscriptions', + type: 'input', + message: 'Do you need a subscription client? (Enter "-" to skip)', + default: defaultValue?.trim() || undefined, + }); + + return subscriptions?.trim().replace(/^\-$/, '') || false; +}; + +const promptTypescript = async (defaultValue: boolean) => { + const { typescript } = await inquirer.prompt<{ typescript: boolean }>({ + name: 'typescript', + type: 'confirm', + message: 'Do you want a TypeScript client over vanilla.js?', + default: defaultValue, + }); + + return typescript; +}; + +const terminateWithError = (e: unknown) => { + if (e instanceof Error) { + logger.error(e.message); + process.exit(1); + } + + throw e; +}; diff --git a/packages/cli/src/commands/default/convertHeadersInput.ts b/packages/cli/src/commands/default/convertHeadersInput.ts new file mode 100644 index 000000000..4fbba7a02 --- /dev/null +++ b/packages/cli/src/commands/default/convertHeadersInput.ts @@ -0,0 +1,17 @@ +export const convertHeadersInput = (headers?: string[]) => { + if (!headers?.length) return; + + const headersObject: Record = {}; + + for (const header of headers) { + const [key, value] = header.trim().split(/\s*:\s*/); + + if (key && value) { + headersObject[key] = value; + } + } + + if (Object.keys(headersObject).length === 0) return; + + return headersObject; +}; diff --git a/packages/cli/src/commands/default/fetchSchema.ts b/packages/cli/src/commands/default/fetchSchema.ts new file mode 100644 index 000000000..e16a3e2b0 --- /dev/null +++ b/packages/cli/src/commands/default/fetchSchema.ts @@ -0,0 +1,187 @@ +import { type AsyncExecutor } from '@graphql-tools/utils'; +import { type ExecutionResult, type GraphQLSchema } from 'graphql'; +import { readFile } from 'node:fs/promises'; +import { extname } from 'path'; +import { type GQtyConfig } from '../../config'; +import * as deps from '../../deps'; +import { convertHeadersInput } from './convertHeadersInput'; +import { logger } from './logger'; + +const schemaFileExtensions = ['.gql', '.graphql']; + +export class FetchError extends Error { + readonly name = 'FetchError'; + + constructor(readonly request: RequestInit, readonly response: Response) { + super( + `Received status code ${response.status} when introspecting ${response.url}` + ); + } +} + +export type FetchSchemasOptions = { + headers?: Record; + headersByEndpoint?: GQtyConfig['introspections']; + silent?: boolean; +}; + +export const fetchSchemas = async ( + endpoints: string[], + options: FetchSchemasOptions +): Promise => { + const schemas: string[] = []; + + if (!options.headersByEndpoint) { + options.headersByEndpoint = {}; + } + + for (const endpoint of endpoints) { + const { headers, headersByEndpoint } = options; + + const doFetchSchema = async () => { + const schema = await fetchSchema(endpoint, { + headers: headers ?? headersByEndpoint[endpoint]?.headers, + silent: options.silent, + }); + + if (schema === undefined) return; + + schemas.push(schema); + }; + + try { + await doFetchSchema(); + } catch (e) { + if ( + e instanceof FetchError && + e.response.status === 401 && + headers === undefined && + headersByEndpoint[endpoint]?.headers === undefined + ) { + process.stdout.write('\r'); + + const endpoint = e.response.url; + const inHeaders = await promptHeaders(endpoint); + + // If still no headers provided, throw. + if (inHeaders === undefined) { + throw e; + } + + headersByEndpoint[endpoint] = { headers: inHeaders }; + + try { + await doFetchSchema(); + } catch (e) { + throw e; + } + } else { + throw e; + } + } + } + + if (schemas.length === 0) { + throw new Error('No schemas found.'); + } + + if (!options.silent) { + logger.successProgress('Schema introspection completed.'); + console.log(''); + } + + return deps.buildSchema(schemas.join('\n')); +}; + +const fetchSchema = async ( + endpoint: string, + options?: Pick & { silent?: boolean } +): Promise => { + if (isURL(endpoint)) { + if (!options?.silent) { + logger.infoProgress( + `Fetching schema from remote endpoint '${endpoint}'...` + ); + } + + const executor: AsyncExecutor> = async ({ + document, + variables, + extensions = {}, + }) => { + const { print } = await import('graphql'); + const request: RequestInit = { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + ...options?.headers, + }, + body: JSON.stringify({ + query: print(document), + variables, + extensions: { + ...extensions, + endpoint, + }, + }), + }; + const response = await deps.fetch(endpoint, request); + + if (response.status >= 400) { + throw new FetchError(request, response); + } + + const body = await response.text(); + + try { + return JSON.parse(body) as ExecutionResult; + } catch { + throw new SyntaxError( + `Invalid JSON received from ${endpoint}: "${ + body.length > 50 + ? body.slice(0, 50).replace(/\n/g, '') + '...' + : body + }".` + ); + } + }; + + const schema = await deps.schemaFromExecutor(executor); + + return deps.printSchema(schema); + } else { + const files = await deps + .fg(endpoint) + .then((files) => + files.filter((file) => schemaFileExtensions.includes(extname(file))) + ); + + if (files.length === 0) return; + + const fileContents: string[] = []; + + for (const file of files) { + if (!options?.silent) { + logger.infoProgress(`Reading schema file ${file} ...`); + } + + fileContents.push(await readFile(file, { encoding: 'utf-8' })); + } + + return fileContents.join('\n'); + } +}; + +const promptHeaders = async (endpoint: string) => { + if (!process.stdin.isTTY) return; + + const { headers } = await deps.inquirer.prompt<{ headers: string }>({ + name: 'headers', + type: 'input', + message: `Any authorization headers for ${endpoint}? (comma separated)`, + }); + + return convertHeadersInput(headers.split(/,/)); +}; + +export const isURL = (input: string) => /^https?:\/\//.test(input); diff --git a/packages/cli/src/commands/default/generateClient.ts b/packages/cli/src/commands/default/generateClient.ts new file mode 100644 index 000000000..9b2ec3ac4 --- /dev/null +++ b/packages/cli/src/commands/default/generateClient.ts @@ -0,0 +1,60 @@ +import { type GraphQLSchema } from 'graphql'; +import { unlink } from 'node:fs/promises'; +import { type GQtyConfig, type SetRequired } from '../../config'; +import { inquirer } from '../../deps'; +import { writeGenerate } from '../../writeGenerate'; +import { logger } from './logger'; + +export const generateClient = async ( + schema: GraphQLSchema, + configuration: SetRequired +) => { + logger.infoProgress(`Generating client and schema ...`); + + await writeGenerate( + schema, + configuration.destination, + configuration, + async (existingFile) => { + process.stdout.write('\r'); + + if ( + configuration.subscriptions && + !existingFile.includes('createSubscriptionsClient') && + (await promptRegenerate( + `Subscrioption client not found in ${configuration.destination}, do you want to regenerate it?` + )) + ) { + await unlink(configuration.destination); + await writeGenerate(schema, configuration.destination, configuration); + return; + } + + if ( + configuration.react && + !existingFile.includes('createReactClient') && + (await promptRegenerate( + `React hooks not found in ${configuration.destination}, do you want to regenerate it?` + )) + ) { + await unlink(configuration.destination); + await writeGenerate(schema, configuration.destination, configuration); + return; + } + } + ); + + logger.successProgress(`Code generation completed.`); + console.log(); +}; + +const promptRegenerate = async (message: string): Promise => { + const { regenerate } = await inquirer.prompt<{ regenerate: boolean }>({ + type: 'confirm', + name: 'regenerate', + message, + default: false, + }); + + return regenerate; +}; diff --git a/packages/cli/src/commands/default/getCommandName.ts b/packages/cli/src/commands/default/getCommandName.ts new file mode 100644 index 000000000..5400442ea --- /dev/null +++ b/packages/cli/src/commands/default/getCommandName.ts @@ -0,0 +1,18 @@ +import { getUserPackageManager } from './getUserPackageManager'; + +export const getCommandName = () => { + switch (getUserPackageManager()) { + case 'npm': { + return 'npx @gqty/cli'; + } + case 'pnpm': { + return 'pnpm dlx @gqty/cli'; + } + case 'yarn': { + return 'yarn dlx @gqty/cli'; + } + default: { + return 'gqty'; + } + } +}; diff --git a/packages/cli/src/commands/default/getUserPackageManager.ts b/packages/cli/src/commands/default/getUserPackageManager.ts new file mode 100644 index 000000000..66d3b6381 --- /dev/null +++ b/packages/cli/src/commands/default/getUserPackageManager.ts @@ -0,0 +1,22 @@ +// Credit: https://github.com/t3-oss/create-t3-app/blob/next/cli/src/utils/getUserPkgManager.ts + +import { existsSync } from 'node:fs'; + +export type PackageManager = 'npm' | 'pnpm' | 'yarn'; + +export const getUserPackageManager: () => PackageManager | undefined = () => { + // This environment variable is set by npm and yarn but pnpm seems less consistent + const userAgent = process.env.npm_config_user_agent; + + if (userAgent) { + if (userAgent.startsWith('yarn') || existsSync('yarn.lock')) { + return 'yarn'; + } else if (userAgent.startsWith('pnpm') || existsSync('pnpm-lock.yaml')) { + return 'pnpm'; + } else { + return 'npm'; + } + } + + return; +}; diff --git a/packages/cli/src/commands/default/logger.ts b/packages/cli/src/commands/default/logger.ts new file mode 100644 index 000000000..4107d5aff --- /dev/null +++ b/packages/cli/src/commands/default/logger.ts @@ -0,0 +1,56 @@ +import chalk from 'chalk'; + +/** + * When false, triggers a new line before the next non-progress log. + */ +let isNewline = true; +let lastProgressLength = 0; + +const normalMessage = (message?: any, ...optionalParams: any[]): void => { + if (!isNewline) { + isNewline = true; + console.log(''); + } + + return console.log(message, ...optionalParams); +}; + +const progressMessage = (message: string) => { + isNewline = false; + + const result = process.stdout.write( + `\r${message}`.padEnd(lastProgressLength, ' ') + ); + + lastProgressLength = message.length + 1; + + return result; +}; + +export const logger = { + error(...args: unknown[]) { + return normalMessage(chalk.red('✗'), ...args); + }, + warn(...args: unknown[]) { + return normalMessage(chalk.yellow('!'), ...args); + }, + info(...args: unknown[]) { + return normalMessage(chalk.cyan('i'), ...args); + }, + success(...args: unknown[]) { + return normalMessage(chalk.green('✔'), ...args); + }, + + errorProgress(message: string) { + return progressMessage(chalk.red('✗') + ' ' + message); + }, + warnProgress(message: string) { + return progressMessage(chalk.yellow('!') + ' ' + message); + }, + infoProgress(message: string) { + return progressMessage(chalk.cyan('i') + ' ' + message); + }, + successProgress(message: string) { + return progressMessage(chalk.green('✔') + ' ' + message); + }, +}; diff --git a/packages/cli/src/commands/default/promptInstall.ts b/packages/cli/src/commands/default/promptInstall.ts new file mode 100644 index 000000000..7dec26ef0 --- /dev/null +++ b/packages/cli/src/commands/default/promptInstall.ts @@ -0,0 +1,84 @@ +import { type PackageJSON } from 'bob-esbuild/config/packageJson'; +import { type GQtyConfig } from '../../config'; +import { inquirer } from '../../deps'; +import { + getUserPackageManager, + type PackageManager, +} from './getUserPackageManager'; + +export const promptInstall = async (configuration: GQtyConfig) => { + const packages = getInstallPackages(configuration); + const command = getUserPackageManager() ?? 'npm'; + const args = getInstallCommand(command).concat(packages); + + const { install } = await inquirer.prompt<{ install: boolean }>({ + type: 'confirm', + name: 'install', + message: `Do you want us to run "${command} ${args[0]}" for you?`, + default: true, + }); + + if (!install) return; + + const { spawnSync } = await import('child_process'); + + spawnSync(command, args, { stdio: 'inherit' }); +}; + +/** + * Install missing packages with the current package manager. + */ +export const runInstall = async ( + { dependencies, devDependencies }: PackageJSON, + configuration: GQtyConfig +) => { + const deps = new Set([ + ...Object.keys(dependencies ?? {}), + ...Object.keys(devDependencies ?? {}), + ]); + const pkgs = getInstallPackages(configuration).filter( + (pkg) => !deps.has(pkg) + ); + + if (pkgs.length === 0) return; + + const command = getUserPackageManager() ?? 'npm'; + const args = getInstallCommand(command).concat(pkgs); + const { spawnSync } = await import('child_process'); + + spawnSync(command, args, { stdio: 'inherit' }); +}; + +const getInstallCommand = (packager: PackageManager) => { + switch (packager) { + case 'npm': { + return ['install', '--save-dev']; + } + case 'pnpm': { + return ['add', '--save-dev']; + } + case 'yarn': { + return ['add', '--dev']; + } + } +}; + +const getInstallPackages = (configuration: GQtyConfig) => { + const packages = ['gqty', 'graphql']; + + if (configuration.react) { + packages.push('@gqty/react'); + } + + if (configuration.subscriptions === true) { + packages.push('graphql-ws'); + } else if (configuration.subscriptions) { + packages.push(configuration.subscriptions); + } + + if (!configuration.javascriptOutput) { + packages.push('typescript'); + } + + return packages; +}; diff --git a/packages/cli/src/commands/generate.ts b/packages/cli/src/commands/generate.ts new file mode 100644 index 000000000..22ebaad54 --- /dev/null +++ b/packages/cli/src/commands/generate.ts @@ -0,0 +1,38 @@ +import type { Command } from 'commander'; + +export const addCommand = (command: Command) => { + return command + .command('generate [endpoint] [destination]', { hidden: true }) + .option('--react', 'Create React client') + .description( + `Inspect or read from a file a GraphQL Schema and generate the gqty client in the specified directory (./src/generated/graphql.ts by default). +EXAMPLE 1: "gqty generate ./schema.gql --react" +EXAMPLE 2: "gqty generate http://localhost:3000/graphql src/gqty/index.ts" +EXAMPLE 3 (Configuration file): "gqty generate"` + ) + .action(async (endpoint, destination, opts) => { + const { defaultConfig } = await import('../config'); + const { inspectWriteGenerate } = await import('../inspectWriteGenerate'); + + let react; + if (opts.react != null) { + react = defaultConfig.react = + typeof opts.react === 'boolean' ? opts.react : !!opts.react; + } + + try { + await inspectWriteGenerate({ + endpoint, + destination, + cli: true, + generateOptions: { + react, + }, + }); + } catch (err) { + if (err instanceof Error) delete err.stack; + console.error(err); + process.exit(1); + } + }); +}; diff --git a/packages/cli/src/config.ts b/packages/cli/src/config.ts index 1051785b8..2e05d2a24 100644 --- a/packages/cli/src/config.ts +++ b/packages/cli/src/config.ts @@ -1,20 +1,36 @@ -import { promises } from 'fs'; -import { createRequire } from 'module'; -import { resolve } from 'path'; -import type { Loader } from './deps'; +import { promises } from 'node:fs'; +import { createRequire } from 'node:module'; +import { resolve } from 'node:path'; import * as deps from './deps.js'; -import type { GenerateOptions } from './generate'; +import { type GenerateOptions } from './generate'; import { __innerState } from './innerState'; -import type { IntrospectionOptions } from './introspection'; +import { type IntrospectionOptions } from './introspection'; import { formatPrettier } from './prettier'; -const cjsRequire = globalThis.require || createRequire(import.meta.url); +const cjsRequire = + globalThis.require || createRequire(import.meta.url.toString()); export type GQtyConfig = GenerateOptions & { /** * Introspection options + * + * @deprecated Use `introspectionOptions` instead */ introspection?: IntrospectionOptions; + /** + * Introspection options for multple endpoints. + * + * ```json + * { + * "https://example.com/graphql": { + * "headers": { + * "Authorization": "Bearer ..." + * } + * } + * } + * ``` + */ + introspections?: Record>; /** * Client generation destination */ @@ -33,11 +49,13 @@ function isStringRecord(v: unknown): v is Record { export const DUMMY_ENDPOINT = 'SPECIFY_ENDPOINT_OR_SCHEMA_FILE_PATH_HERE'; -export const defaultConfig: Omit< - Required, - 'endpoint' | 'transformSchema' -> & - Pick = { +export type SetRequired = Omit & + Required>; + +export const defaultConfig: SetRequired< + GQtyConfig, + Exclude +> = { react: (() => { try { cjsRequire.resolve('react'); @@ -184,6 +202,31 @@ export function getValidConfig(v: unknown): GQtyConfig { } break; } + case 'introspections': { + if (isPlainObject(value)) { + const introspections: GQtyConfig['introspections'] = {}; + + for (const [endpoint, httpExecutorOptions] of Object.entries( + value + )) { + if (isPlainObject(httpExecutorOptions)) { + introspections[endpoint] = httpExecutorOptions; + } else { + warnConfig( + `${key}.${endpoint}`, + httpExecutorOptions, + '"object of strings"', + {} + ); + } + } + + newConfig[key] = introspections; + } else { + warnConfig(key, value, 'object', defaultConfig[key]); + } + break; + } case 'transformSchema': { if (typeof value === 'function') { newConfig[key] = value as GQtyConfig['transformSchema']; @@ -212,84 +255,88 @@ export function getValidConfig(v: unknown): GQtyConfig { const defaultFilePath = resolve(process.cwd(), 'gqty.config.cjs'); -type DeepReadonly = T extends (infer R)[] - ? DeepReadonlyArray - : T extends Function - ? T - : T extends object - ? DeepReadonlyObject - : T; - -interface DeepReadonlyArray extends ReadonlyArray> {} - -type DeepReadonlyObject = { - readonly [P in keyof T]: DeepReadonly; -}; - const defaultGQtyConfig = { filepath: defaultFilePath, config: defaultConfig, }; -export const gqtyConfigPromise: Promise<{ +type GQtyConfigResult = { + config: GQtyConfig; filepath: string; - config: DeepReadonly; -}> = new Promise(async (resolve) => { - try { - const cjsLoader: Loader = (filePath) => { - return cjsRequire(filePath); - }; - const config = await deps - .cosmiconfig('gqty', { - searchPlaces: ['gqty.config.cjs', 'gqty.config.js', 'package.json'], - loaders: { - '.cjs': cjsLoader, - '.js': cjsLoader, - }, - }) - .search(); - - if (!config || config.isEmpty) { - const filepath = config?.filepath || defaultFilePath; - - const NODE_ENV = process.env['NODE_ENV']; - - if ( - NODE_ENV !== 'test' && - NODE_ENV !== 'production' && - __innerState.isCLI - ) { - const { format } = formatPrettier({ - parser: 'typescript', - }); + isEmpty?: boolean; +}; - const config: GQtyConfig = { ...defaultConfig }; - delete config.preImport; - delete config.enumsAsStrings; +let gqtyConfigPromise: Promise | undefined = undefined; - await promises.writeFile( - defaultFilePath, - await format(` - /** - * @type {import("@gqty/cli").GQtyConfig} - */ - const config = ${JSON.stringify(config)}; +export const loadOrGenerateConfig = async ({ + writeConfigFile = false, +}: { + writeConfigFile?: boolean; +} = {}): Promise => { + if (gqtyConfigPromise === undefined) { + gqtyConfigPromise = new Promise(async (resolve) => { + try { + const cjsLoader: deps.Loader = (filePath) => { + return cjsRequire(filePath); + }; + const config = await deps + .cosmiconfig('gqty', { + searchPlaces: ['gqty.config.cjs', 'gqty.config.js', 'package.json'], + loaders: { + '.cjs': cjsLoader, + '.js': cjsLoader, + }, + }) + .search(); - module.exports = config;`) - ); - } - return resolve({ - filepath, - config: defaultConfig, - }); - } + if (!config || config.isEmpty) { + const filepath = config?.filepath || defaultFilePath; + + const NODE_ENV = process.env['NODE_ENV']; + + if ( + NODE_ENV !== 'test' && + NODE_ENV !== 'production' && + __innerState.isCLI + ) { + const { format } = formatPrettier({ + parser: 'typescript', + }); + + const config: GQtyConfig = { ...defaultConfig }; + delete config.preImport; + delete config.enumsAsStrings; + + if (writeConfigFile) { + await promises.writeFile( + defaultFilePath, + await format(` + /** + * @type {import("@gqty/cli").GQtyConfig} + */ + const config = ${JSON.stringify(config)}; - resolve({ - config: getValidConfig(config.config), - filepath: config.filepath, + module.exports = config;`) + ); + } + } + + return resolve({ + filepath, + config: defaultConfig, + }); + } + + resolve({ + config: getValidConfig(config.config), + filepath: config.filepath, + }); + } catch (err) { + console.error(err); + resolve(defaultGQtyConfig); + } }); - } catch (err) { - console.error(err); - resolve(defaultGQtyConfig); } -}); + + return gqtyConfigPromise; +}; diff --git a/packages/cli/src/deps.ts b/packages/cli/src/deps.ts index c88a6f4db..ab7a21b7a 100644 --- a/packages/cli/src/deps.ts +++ b/packages/cli/src/deps.ts @@ -1,19 +1,13 @@ -export { program } from 'commander'; - -export { cosmiconfig, Loader } from 'cosmiconfig'; - export { codegen } from '@graphql-codegen/core'; - export * as typescriptPlugin from '@graphql-codegen/typescript'; - export { printSchemaWithDirectives } from '@graphql-tools/utils'; - -export { default as sortBy } from 'lodash/sortBy.js'; - -export { introspectSchema, wrapSchema } from '@graphql-tools/wrap'; - -export { default as prettier, Options as PrettierOptions } from 'prettier'; - -export { default as mkdirp } from 'mkdirp'; - +export { schemaFromExecutor, wrapSchema } from '@graphql-tools/wrap'; +export { program } from 'commander'; +export { cosmiconfig, type Loader } from 'cosmiconfig'; +export { fetch } from 'cross-fetch'; export { default as fg } from 'fast-glob'; +export { buildSchema, printSchema } from 'graphql'; +export { default as inquirer } from 'inquirer'; +export { default as sortBy } from 'lodash-es/sortBy.js'; +export { default as mkdirp } from 'mkdirp'; +export { default as prettier, type Options as PrettierOptions } from 'prettier'; diff --git a/packages/cli/src/envelop.ts b/packages/cli/src/envelop.ts index 13e0aa69f..116a1ea1d 100644 --- a/packages/cli/src/envelop.ts +++ b/packages/cli/src/envelop.ts @@ -1,7 +1,8 @@ -import { LazyPromise } from 'gqty/Utils/promise'; import type { GraphQLSchema } from 'graphql'; +import PLazy from 'p-lazy'; +import type { defaultConfig, loadOrGenerateConfig } from './config'; import type { GenerateOptions, TransformSchemaOptions } from './generate'; -import type { OnExistingFileConflict } from './writeGenerate'; +import type { OnExistingFileConflict, writeGenerate } from './writeGenerate'; export interface UseGenerateGQtyOptions extends GenerateOptions { /** @@ -27,19 +28,24 @@ export interface UseGenerateGQtyOptions extends GenerateOptions { export function useGenerateGQty(config?: UseGenerateGQtyOptions): { onSchemaChange(options: { schema: GraphQLSchema }): void; } { - const pluginDeps = LazyPromise(async () => { - const [{ writeGenerate }, { config: gqtyConfig }, { defaultConfig }] = - await Promise.all([ - import('./writeGenerate'), - import('./config').then((v) => v.gqtyConfigPromise), - import('./config'), - ]); - - return { - writeGenerate, - gqtyConfig, - defaultConfig, - }; + const pluginDeps = new PLazy<{ + writeGenerate: typeof writeGenerate; + gqtyConfig: Awaited>['config']; + defaultConfig: typeof defaultConfig; + }>((resolve, reject) => { + return Promise.all([ + import('./writeGenerate'), + import('./config').then((v) => v.loadOrGenerateConfig()), + import('./config'), + ]) + .then( + ([{ writeGenerate }, { config: gqtyConfig }, { defaultConfig }]) => ({ + writeGenerate, + gqtyConfig, + defaultConfig, + }) + ) + .then(resolve, reject); }); return { diff --git a/packages/cli/src/generate.ts b/packages/cli/src/generate.ts index 118fd4950..245fde51e 100644 --- a/packages/cli/src/generate.ts +++ b/packages/cli/src/generate.ts @@ -1,12 +1,12 @@ import { - ArgsDescriptions, - FieldDescription, - parseSchemaType, - ScalarsEnumsHash, - Schema, SchemaUnionsKey, - Type, -} from 'gqty'; + parseSchemaType, + type ArgsDescriptions, + type FieldDescription, + type ScalarsEnumsHash, + type Schema, + type Type, +} from 'gqty/Schema/types'; import type { GraphQLEnumType, GraphQLField, @@ -18,7 +18,7 @@ import type { GraphQLUnionType, } from 'graphql'; import * as graphql from 'graphql'; -import { defaultConfig, gqtyConfigPromise } from './config'; +import { defaultConfig, type GQtyConfig } from './config'; import * as deps from './deps.js'; import { formatPrettier } from './prettier'; @@ -64,19 +64,22 @@ export interface GenerateOptions { react?: boolean; /** * Define enums as string types instead of enums objects + * * @default false */ enumsAsStrings?: boolean; /** * Define enums as const types instead of enums objects + * * @default false */ enumsAsConst?: boolean; /** - * Generate subscriptions client + * Generate subscriptions client with target package + * * @default false */ - subscriptions?: boolean; + subscriptions?: boolean | string; /** * Generate Javascript code instead of TypeScript * @@ -94,8 +97,9 @@ export interface GenerateOptions { export interface TransformSchemaOptions { /** - * Get a field in which every argument is optional, if this functions return "true", gqty will _always__ ignore it's arguments, - * and you won't be able to specify them + * Get a field in which every argument is optional, if this functions return + * "true", gqty will _always__ ignore it's arguments, and you won't be able to + * specify them */ ignoreArgs?: (type: GraphQLField) => boolean; } @@ -103,16 +107,17 @@ export interface TransformSchemaOptions { export async function generate( schema: GraphQLSchema, { - preImport, - scalarTypes, - react, endpoint, - enumsAsStrings, enumsAsConst, - subscriptions, + enumsAsStrings, + introspection, javascriptOutput, + preImport, + react, + scalarTypes, + subscriptions, transformSchema, - }: GenerateOptions = {}, + }: GQtyConfig = {}, { ignoreArgs }: TransformSchemaOptions = {} ): Promise<{ clientCode: string; @@ -122,45 +127,39 @@ export async function generate( scalarsEnumsHash: ScalarsEnumsHash; isJavascriptOutput: boolean; }> { - const gqtyConfig = (await gqtyConfigPromise).config; - - const isJavascriptOutput = - javascriptOutput ?? - gqtyConfig.javascriptOutput ?? - defaultConfig.javascriptOutput; + const isJavascriptOutput = javascriptOutput ?? defaultConfig.javascriptOutput; if (isJavascriptOutput) { - if (gqtyConfig.enumsAsStrings) { + if (enumsAsStrings) { console.warn( `"enumsAsStrings" is automatically set as "true" with "javascriptOutput" enabled.` ); } enumsAsStrings = true; } else { - enumsAsStrings ??= gqtyConfig.enumsAsStrings ?? false; + enumsAsStrings ??= false; } if (isJavascriptOutput) { - if (gqtyConfig.enumsAsConst) { + if (enumsAsConst) { console.warn( `"enumsAsConst" is automatically set as "false" with "javascriptOutput" enabled.` ); } enumsAsConst = false; } - enumsAsConst ??= gqtyConfig.enumsAsConst ?? defaultConfig.enumsAsConst; + enumsAsConst ??= enumsAsConst ?? defaultConfig.enumsAsConst; - scalarTypes ||= gqtyConfig.scalarTypes || defaultConfig.scalarTypes; + scalarTypes ||= scalarTypes || defaultConfig.scalarTypes; endpoint ||= - gqtyConfig.endpoint || - gqtyConfig.introspection?.endpoint || + endpoint || + introspection?.endpoint || defaultConfig.endpoint || defaultConfig.introspection.endpoint; - react ??= gqtyConfig.react ?? defaultConfig.react; - preImport ??= gqtyConfig.preImport ?? defaultConfig.preImport; - subscriptions ??= gqtyConfig.subscriptions ?? defaultConfig.subscriptions; - transformSchema ??= gqtyConfig.transformSchema; + react ??= defaultConfig.react; + preImport ??= defaultConfig.preImport; + subscriptions ??= defaultConfig.subscriptions; const { format } = formatPrettier({ parser: 'typescript', @@ -558,12 +557,12 @@ export async function generate( const unionsMapObj = Array.from( unionsAndInterfacesObjectTypesMap.entries() ).reduce((acum, [key, value]) => { - generatedSchema[key]['$on'] = { - __type: `$${key}!`, - }; + generatedSchema[key]!.$on = { __type: `$${key}!` }; + acum[key] = value; return acum; }, {} as Record); + if (unionsAndInterfacesObjectTypesMap.size) { generatedSchema[SchemaUnionsKey] = unionsMapObj; } @@ -663,7 +662,7 @@ export async function generate( interfaceOrUnionsObjectTypes ? interfaceOrUnionsObjectTypes.map((v) => `"${v}"`).join(' | ') : `"${typeName}"` - }; ${Object.entries(typeValue).reduce( + }; ${Object.entries(typeValue!).reduce( (acum, [fieldKey, fieldValue]) => { if (fieldKey === '__typename') { objectTypeMap.set(fieldKey, `?: "${typeName}"`); @@ -729,23 +728,6 @@ export async function generate( return acum; }, ''); - const objectTypesEntries = deps.sortBy( - Array.from(objectTypeTSTypes.entries()), - (v) => v[0] - ); - - typescriptTypes += ` - export interface SchemaObjectTypes { - ${objectTypesEntries.reduce((acum, [typeName]) => { - acum += `${typeName}:${typeName};`; - return acum; - }, '')} - } - export type SchemaObjectTypesNames = ${objectTypesEntries - .map(([key]) => `"${key}"`) - .join(' | ')}; - `; - if (unionsAndInterfacesObjectTypesMap.size) { typescriptTypes += ` ${deps @@ -771,9 +753,7 @@ export async function generate( mutation: Mutation subscription: Subscription } - `; - typescriptTypes += ` export type MakeNullable = { [K in keyof T]: T[K] | undefined; }; @@ -794,8 +774,8 @@ export async function generate( ${ isJavascriptOutput ? typeDoc('import("gqty").QueryFetcher') + 'const queryFetcher' - : 'const queryFetcher : QueryFetcher' - } = async function (query, variables, fetchOptions) { + : 'const queryFetcher: QueryFetcher' + } = async function ({ query, variables, operationName }, fetchOptions) { // Modify "${endpoint}" if needed const response = await fetch("${endpoint}", { method: "POST", @@ -805,14 +785,29 @@ export async function generate( body: JSON.stringify({ query, variables, + operationName, }), mode: "cors", ...fetchOptions }); - const json = await response.json(); + if (response.status >= 400) { + throw new GQtyError( + \`GraphQL endpoint responded with HTTP status \${response.status}.\` + ); + } + + const text = await response.text(); - return json; + try { + return JSON.parse(text); + } catch { + throw new GQtyError( + \`Malformed JSON response: \${ + text.length > 50 ? text.slice(0, 50) + '...' : text + }\` + ); + } }; `; @@ -837,208 +832,169 @@ export async function generate( ); const javascriptSchemaCode = await format(` -/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY - */ -${hasUnions ? 'import { SchemaUnionsKey } from "gqty";' : ''} + /** + * GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY + */ + + ${hasUnions ? 'import { SchemaUnionsKey } from "gqty";' : ''} -${typeDoc( - 'import("gqty").ScalarsEnumsHash' -)}export const scalarsEnumsHash = ${scalarsEnumsHashString}; + ${typeDoc( + 'import("gqty").ScalarsEnumsHash' + )}export const scalarsEnumsHash = ${scalarsEnumsHashString}; -export const generatedSchema = {${generatedSchemaCodeString}}; + export const generatedSchema = {${generatedSchemaCodeString}}; `); - const schemaCode = await format( - ` -/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY - */ - ${preImport} + const schemaCode = await format(` + /** + * GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY + */ - ${hasUnions ? 'import { SchemaUnionsKey } from "gqty";' : ''} + ${preImport} - ${await codegenResultPromise} + ${hasUnions ? 'import { SchemaUnionsKey } from "gqty";' : ''} - export${ - isJavascriptOutput ? ' declare' : '' - } const scalarsEnumsHash: import("gqty").ScalarsEnumsHash${ - isJavascriptOutput ? ';' : ` = ${scalarsEnumsHashString};` - } - export${isJavascriptOutput ? ' declare' : ''} const generatedSchema ${ - isJavascriptOutput ? ':' : '=' - } {${generatedSchemaCodeString}}${isJavascriptOutput ? '' : ' as const'}; + ${await codegenResultPromise} - ${typescriptTypes} - ` - ); + export${ + isJavascriptOutput ? ' declare' : '' + } const scalarsEnumsHash: import("gqty").ScalarsEnumsHash${ + isJavascriptOutput ? ';' : ` = ${scalarsEnumsHashString};` + } + export${isJavascriptOutput ? ' declare' : ''} const generatedSchema ${ + isJavascriptOutput ? ':' : '=' + } {${generatedSchemaCodeString}}${isJavascriptOutput ? '' : ' as const'}; - let reactClientCode = ''; - if (react) { - if (isJavascriptOutput) { - reactClientCode = ` - ${typeDoc( - 'import("@gqty/react").ReactClient' - )}const reactClient = createReactClient(client, { - defaults: { - // Set this flag as "true" if your usage involves React Suspense - // Keep in mind that you can overwrite it in a per-hook basis - suspense: false, - - // Set this flag based on your needs - staleWhileRevalidate: false - } - }); - - const { - graphql, - useQuery, - usePaginatedQuery, - useTransactionQuery, - useLazyQuery, - useRefetch, - useMutation, - useMetaState, - prepareReactRender, - useHydrateCache, - prepareQuery, - ${subscriptions ? 'useSubscription,' : ''} - } = reactClient; - - export { - graphql, - useQuery, - usePaginatedQuery, - useTransactionQuery, - useLazyQuery, - useRefetch, - useMutation, - useMetaState, - prepareReactRender, - useHydrateCache, - prepareQuery, - ${subscriptions ? 'useSubscription,' : ''} - } - `.trim(); - } else { - reactClientCode = ` - const { - graphql, - useQuery, - usePaginatedQuery, - useTransactionQuery, - useLazyQuery, - useRefetch, - useMutation, - useMetaState, - prepareReactRender, - useHydrateCache, - prepareQuery, - ${subscriptions ? 'useSubscription,' : ''} - } = createReactClient(client, { - defaults: { - // Set this flag as "true" if your usage involves React Suspense - // Keep in mind that you can overwrite it in a per-hook basis - suspense: false, - - // Set this flag based on your needs - staleWhileRevalidate: false + ${typescriptTypes} + `); + + const reactClientCode = react + ? ` + export const { + graphql, + useQuery, + usePaginatedQuery, + useTransactionQuery, + useLazyQuery, + useRefetch, + useMutation, + useMetaState, + prepareReactRender, + useHydrateCache, + prepareQuery, + ${subscriptions ? 'useSubscription,' : ''} + } = ${ + isJavascriptOutput + ? `${typeDoc( + 'import("@gqty/react").ReactClient' + )}createReactClient(client, {` + : `createReactClient(client, {` } - }); - - export { - graphql, - useQuery, - usePaginatedQuery, - useTransactionQuery, - useLazyQuery, - useRefetch, - useMutation, - useMetaState, - prepareReactRender, - useHydrateCache, - prepareQuery, - ${subscriptions ? 'useSubscription,' : ''} - } - `; + defaults: { + // Enable Suspense, you can override this option for each hook. + suspense: true, + } + }); + `.trim() + : ''; + + const clientCode = await format(` + /** + * GQty: You can safely modify this file based on your needs. + */ + + ${[ + react ? `import { createReactClient } from "@gqty/react";` : '', + subscriptions + ? `import { createClient as createSubscriptionsClient } from "${ + subscriptions === true ? 'graphql-ws' : subscriptions + }";` + : '', + isJavascriptOutput + ? 'import { Cache, GQtyError, createClient } from "gqty";' + : 'import { Cache, GQtyError, createClient, type QueryFetcher } from "gqty";', + isJavascriptOutput + ? 'import { generatedSchema, scalarsEnumsHash } from "./schema.generated";' + : 'import { generatedSchema, scalarsEnumsHash, type GeneratedSchema } from "./schema.generated";', + ] + .filter(Boolean) + .join('\n')} + + ${queryFetcher} + + ${ + subscriptions + ? `const subscriptionsClient = + typeof window !== "undefined" ? + createSubscriptionsClient({ + lazy: true, + url: () => { + // Modify if needed + const url = new URL("${endpoint}", window.location.href); + url.protocol = url.protocol.replace('http', 'ws'); + return url.href; + } + }) : undefined;` + : '' } - } - const clientCode = await format( + const cache = new Cache( + undefined, + /** + * Default option is immediate cache expiry but keep it for 5 minutes, + * allowing soft refetches in background. + */ + { + maxAge: 0, + staleWhileRevalidate: 5 * 60 * 1000, + normalization: true, + } + ); + + ${ + isJavascriptOutput + ? `${typeDoc( + 'import("gqty").GQtyClient' + )}export const client = createClient({ + schema: generatedSchema, + scalars: scalarsEnumsHash, + cache, + fetchOptions: { + fetcher: queryFetcher, + ${subscriptions ? 'subscriber: subscriptionsClient' : ''} + }, + }); + ` + : ` + export const client = createClient({ + schema: generatedSchema, + scalars: scalarsEnumsHash, + cache, + fetchOptions:{ + fetcher: queryFetcher, + ${subscriptions ? 'subscriber: subscriptionsClient' : ''} + }, + }); ` -/** - * GQTY: You can safely modify this file and Query Fetcher based on your needs - */ - - ${react ? `import { createReactClient } from "@gqty/react"` : ''} - ${ - subscriptions - ? `import { createSubscriptionsClient } from "@gqty/subscriptions"` - : '' - } - ${isJavascriptOutput ? '' : 'import type { QueryFetcher } from "gqty";'} - import { createClient } from 'gqty'; - ${ - isJavascriptOutput - ? '' - : 'import type { GeneratedSchema, SchemaObjectTypes, SchemaObjectTypesNames } from "./schema.generated";' - } - import { generatedSchema, scalarsEnumsHash } from "./schema.generated"; - - - ${queryFetcher} - - ${ - subscriptions - ? ` - const subscriptionsClient = - typeof window !== "undefined" ? - createSubscriptionsClient({ - wsEndpoint: () => { - // Modify if needed - const url = new URL("${endpoint}", window.location.href); - url.protocol = url.protocol.replace('http', 'ws'); - return url.href; } - }) : undefined; - ` - : '' - } - ${ - isJavascriptOutput - ? `${typeDoc( - 'import("gqty").GQtyClient' - )}export const client = createClient({ - schema: generatedSchema, - scalarsEnumsHash, - queryFetcher - ${subscriptions ? ', subscriptionsClient' : ''} - });` - : `export const client = createClient({ - schema: generatedSchema, - scalarsEnumsHash, - queryFetcher - ${subscriptions ? ', subscriptionsClient' : ''} - });` - } + // Core functions + export const { resolve, subscribe, schema } = client; + // Legacy functions + export const { query, mutation, mutate, subscription, resolved, refetch, track } = client; - const { query, mutation, mutate, subscription, resolved, refetch, track } = client; + ${reactClientCode} - export { query, mutation, mutate, subscription, resolved, refetch, track }; - - ${reactClientCode} + export * from "./schema.generated"; + `); - export * from "./schema.generated"; - ` - ); return { clientCode, - schemaCode, - javascriptSchemaCode, generatedSchema, - scalarsEnumsHash, isJavascriptOutput, + javascriptSchemaCode, + scalarsEnumsHash, + schemaCode, }; } diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index f048e317e..1343438eb 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -1,7 +1,7 @@ +export { defaultConfig, loadOrGenerateConfig } from './config'; +export type { GQtyConfig as gqtyConfig, GQtyConfig } from './config'; export * from './generate'; +export { __innerState } from './innerState'; export * from './inspectWriteGenerate'; export * from './introspection'; export * from './writeGenerate'; -export type { GQtyConfig as gqtyConfig, GQtyConfig } from './config'; -export { defaultConfig, gqtyConfigPromise } from './config'; -export { __innerState } from './innerState'; diff --git a/packages/cli/src/inspectWriteGenerate.ts b/packages/cli/src/inspectWriteGenerate.ts index 895842696..45cfefac4 100644 --- a/packages/cli/src/inspectWriteGenerate.ts +++ b/packages/cli/src/inspectWriteGenerate.ts @@ -2,7 +2,7 @@ import { existsSync, promises } from 'fs'; import type { GraphQLSchema, IntrospectionQuery } from 'graphql'; import * as graphql from 'graphql'; import { extname, resolve } from 'path'; -import { defaultConfig, DUMMY_ENDPOINT, gqtyConfigPromise } from './config'; +import { DUMMY_ENDPOINT, defaultConfig, loadOrGenerateConfig } from './config'; import * as deps from './deps.js'; import type { GenerateOptions, TransformSchemaOptions } from './generate'; import { getRemoteSchema } from './introspection'; @@ -51,14 +51,16 @@ export async function inspectWriteGenerate({ defaultConfig.destination = destination; } + const { config, filepath } = await loadOrGenerateConfig({ + writeConfigFile: true, + }); + if (endpoint) { defaultConfig.introspection.endpoint = endpoint; } else if (existsSync(resolve('./schema.gql'))) { endpoint = './schema.gql'; defaultConfig.introspection.endpoint = endpoint; } else { - const { config, filepath } = await gqtyConfigPromise; - const configIntrospectionEndpoint = config.introspection && config.introspection.endpoint; @@ -80,14 +82,14 @@ export async function inspectWriteGenerate({ } if (!destination) { - const configDestination = (await gqtyConfigPromise).config.destination; + const configDestination = config.destination; destination = configDestination || defaultConfig.destination; } destination = resolve(destination); - const genOptions = Object.assign({}, generateOptions); + const genOptions = Object.assign({}, config, generateOptions); let schema: GraphQLSchema; @@ -175,10 +177,8 @@ export async function inspectWriteGenerate({ destination, genOptions, async (existingFile) => { - const subscriptions = - genOptions.subscriptions ?? - (await gqtyConfigPromise).config.subscriptions; - const react = genOptions.react ?? (await gqtyConfigPromise).config.react; + const subscriptions = genOptions.subscriptions ?? config.subscriptions; + const react = genOptions.react ?? config.react; const advice = `\nIf you meant to change this, please remove "${destination}" and re-run code generation.`; @@ -198,12 +198,6 @@ export async function inspectWriteGenerate({ ); } } - - if (existingFile.includes('export const {')) { - console.warn( - `[Warning] To prevent possible bundling issues, it's recommended to change the export syntax from "export const { query, ... } = client;" to "const { query, ... } = client; export { query, ... };"` - ); - } }, transformSchemaOptions ); diff --git a/packages/cli/src/introspection.ts b/packages/cli/src/introspection.ts index dc5e9bfb9..c1c4a8f39 100644 --- a/packages/cli/src/introspection.ts +++ b/packages/cli/src/introspection.ts @@ -1,7 +1,7 @@ import type { AsyncExecutor } from '@graphql-tools/utils'; import type { GraphQLSchema } from 'graphql'; import * as graphql from 'graphql'; -import { defaultConfig, gqtyConfigPromise } from './config'; +import { defaultConfig, loadOrGenerateConfig } from './config'; import * as deps from './deps.js'; export interface IntrospectionOptions { @@ -27,11 +27,10 @@ export const getRemoteSchema = async ( ): Promise => { const executor: AsyncExecutor = async ({ document, variables }) => { headers ||= - (await gqtyConfigPromise).config.introspection?.headers || + (await loadOrGenerateConfig()).config.introspection?.headers || defaultConfig.introspection.headers; const query = graphql.print(document); - const { request } = await import('undici'); - const { body } = await request(endpoint, { + const response = await deps.fetch(endpoint, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -39,13 +38,12 @@ export const getRemoteSchema = async ( }, body: JSON.stringify({ query, variables }), }); - const response = await body.json(); - return response; + return await response.json(); }; const schema = deps.wrapSchema({ - schema: await deps.introspectSchema(executor, { + schema: await deps.schemaFromExecutor(executor, { endpoint, }), executor, diff --git a/packages/cli/src/writeGenerate.ts b/packages/cli/src/writeGenerate.ts index beab70e0e..2d73da239 100644 --- a/packages/cli/src/writeGenerate.ts +++ b/packages/cli/src/writeGenerate.ts @@ -1,12 +1,12 @@ import { existsSync, promises } from 'fs'; -import type { GraphQLSchema } from 'graphql'; +import { type GraphQLSchema } from 'graphql'; import { dirname, resolve } from 'path'; -import { defaultConfig, gqtyConfigPromise } from './config'; +import { defaultConfig, type GQtyConfig } from './config'; import * as deps from './deps.js'; -import { generate, GenerateOptions, TransformSchemaOptions } from './generate'; +import { generate, type TransformSchemaOptions } from './generate'; export type OnExistingFileConflict = - | ((existingFile: string) => void) + | ((existingFile: string) => void | Promise) | undefined; async function writeClientCode({ @@ -23,7 +23,7 @@ async function writeClientCode({ const existingFile = await promises.readFile(destinationPath, { encoding: 'utf-8', }); - onExistingFileConflict(existingFile); + await onExistingFileConflict(existingFile); } return; } @@ -93,14 +93,12 @@ async function writeSchemaCode({ export async function writeGenerate( schema: GraphQLSchema, destinationPath: string, - generateOptions: GenerateOptions = {}, + configuration: GQtyConfig, onExistingFileConflict?: OnExistingFileConflict, transformsGenerate?: TransformSchemaOptions ) { const isJavascriptOutput = - generateOptions.javascriptOutput ?? - (await gqtyConfigPromise).config.javascriptOutput ?? - defaultConfig.javascriptOutput; + configuration.javascriptOutput ?? defaultConfig.javascriptOutput; if (isJavascriptOutput) { if (!destinationPath.endsWith('.js')) { @@ -129,7 +127,7 @@ export async function writeGenerate( destinationPath = resolve(destinationPath); const [{ clientCode, schemaCode, javascriptSchemaCode }] = await Promise.all([ - generate(schema, generateOptions, transformsGenerate), + generate(schema, configuration, transformsGenerate), deps.mkdirp(dirname(destinationPath)), ]); diff --git a/packages/cli/test/config.test.ts b/packages/cli/test/config.test.ts index ba44beb5d..0e2a9d4dd 100644 --- a/packages/cli/test/config.test.ts +++ b/packages/cli/test/config.test.ts @@ -1,6 +1,6 @@ import './utils'; -import { getValidConfig, GQtyConfig } from '../src/config'; +import { getValidConfig, type GQtyConfig } from '../src/config'; test('completely valid config', () => { const spy = jest.spyOn(console, 'warn').mockImplementation(); diff --git a/packages/cli/test/generate.test.ts b/packages/cli/test/generate.test.ts index 21f7c5451..3d27e14ad 100644 --- a/packages/cli/test/generate.test.ts +++ b/packages/cli/test/generate.test.ts @@ -38,7 +38,7 @@ test('basic functionality works', async () => { expect(schemaCode).toMatchInlineSnapshot(` "/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY + * GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY */ // This should be included @@ -106,13 +106,6 @@ test('basic functionality works', async () => { __typename?: 'Subscription'; } - export interface SchemaObjectTypes { - Mutation: Mutation; - Query: Query; - Subscription: Subscription; - } - export type SchemaObjectTypesNames = 'Mutation' | 'Query' | 'Subscription'; - export interface GeneratedSchema { query: Query; mutation: Mutation; @@ -129,23 +122,20 @@ test('basic functionality works', async () => { expect(clientCode).toMatchInlineSnapshot(` "/** - * GQTY: You can safely modify this file and Query Fetcher based on your needs + * GQty: You can safely modify this file based on your needs. */ import { createReactClient } from '@gqty/react'; - import { createSubscriptionsClient } from '@gqty/subscriptions'; - import type { QueryFetcher } from 'gqty'; - import { createClient } from 'gqty'; - import type { - GeneratedSchema, - SchemaObjectTypes, - SchemaObjectTypesNames, + import { createClient as createSubscriptionsClient } from 'graphql-ws'; + import { Cache, GQtyError, createClient, type QueryFetcher } from 'gqty'; + import { + generatedSchema, + scalarsEnumsHash, + type GeneratedSchema, } from './schema.generated'; - import { generatedSchema, scalarsEnumsHash } from './schema.generated'; const queryFetcher: QueryFetcher = async function ( - query, - variables, + { query, variables, operationName }, fetchOptions ) { // Modify "/api/graphql" if needed @@ -157,20 +147,36 @@ test('basic functionality works', async () => { body: JSON.stringify({ query, variables, + operationName, }), mode: 'cors', ...fetchOptions, }); - const json = await response.json(); + if (response.status >= 400) { + throw new GQtyError( + \`GraphQL endpoint responded with HTTP status \${response.status}.\` + ); + } + + const text = await response.text(); - return json; + try { + return JSON.parse(text); + } catch { + throw new GQtyError( + \`Malformed JSON response: \${ + text.length > 50 ? text.slice(0, 50) + '...' : text + }\` + ); + } }; const subscriptionsClient = typeof window !== 'undefined' ? createSubscriptionsClient({ - wsEndpoint: () => { + lazy: true, + url: () => { // Modify if needed const url = new URL('/api/graphql', window.location.href); url.protocol = url.protocol.replace('http', 'ws'); @@ -179,23 +185,44 @@ test('basic functionality works', async () => { }) : undefined; - export const client = createClient< - GeneratedSchema, - SchemaObjectTypesNames, - SchemaObjectTypes - >({ + const cache = new Cache( + undefined, + /** + * Default option is immediate cache expiry but keep it for 5 minutes, + * allowing soft refetches in background. + */ + { + maxAge: 0, + staleWhileRevalidate: 5 * 60 * 1000, + normalization: true, + } + ); + + export const client = createClient({ schema: generatedSchema, - scalarsEnumsHash, - queryFetcher, - subscriptionsClient, + scalars: scalarsEnumsHash, + cache, + fetchOptions: { + fetcher: queryFetcher, + subscriber: subscriptionsClient, + }, }); - const { query, mutation, mutate, subscription, resolved, refetch, track } = - client; - - export { query, mutation, mutate, subscription, resolved, refetch, track }; + // Core functions + export const { resolve, subscribe, schema } = client; - const { + // Legacy functions + export const { + query, + mutation, + mutate, + subscription, + resolved, + refetch, + track, + } = client; + + export const { graphql, useQuery, usePaginatedQuery, @@ -210,30 +237,11 @@ test('basic functionality works', async () => { useSubscription, } = createReactClient(client, { defaults: { - // Set this flag as "true" if your usage involves React Suspense - // Keep in mind that you can overwrite it in a per-hook basis - suspense: false, - - // Set this flag based on your needs - staleWhileRevalidate: false, + // Enable Suspense, you can override this option for each hook. + suspense: true, }, }); - export { - graphql, - useQuery, - usePaginatedQuery, - useTransactionQuery, - useLazyQuery, - useRefetch, - useMutation, - useMetaState, - prepareReactRender, - useHydrateCache, - prepareQuery, - useSubscription, - }; - export * from './schema.generated'; " `); @@ -269,14 +277,7 @@ test('basic functionality works', async () => { expect(clientCode.includes('= createReactClient')).toBeTruthy(); - expect( - schemaCode - .split('\n') - .slice(3) - .join('\n') - .trim() - .startsWith(shouldBeIncluded) - ).toBeTruthy(); + expect(schemaCode.split('\n')[4]).toStrictEqual(shouldBeIncluded); }); test('custom scalars works', async () => { @@ -307,23 +308,19 @@ test('custom scalars works', async () => { expect(clientCode).toMatchInlineSnapshot(` "/** - * GQTY: You can safely modify this file and Query Fetcher based on your needs + * GQty: You can safely modify this file based on your needs. */ import { createReactClient } from '@gqty/react'; - - import type { QueryFetcher } from 'gqty'; - import { createClient } from 'gqty'; - import type { - GeneratedSchema, - SchemaObjectTypes, - SchemaObjectTypesNames, + import { Cache, GQtyError, createClient, type QueryFetcher } from 'gqty'; + import { + generatedSchema, + scalarsEnumsHash, + type GeneratedSchema, } from './schema.generated'; - import { generatedSchema, scalarsEnumsHash } from './schema.generated'; const queryFetcher: QueryFetcher = async function ( - query, - variables, + { query, variables, operationName }, fetchOptions ) { // Modify "/api/graphql" if needed @@ -335,32 +332,68 @@ test('custom scalars works', async () => { body: JSON.stringify({ query, variables, + operationName, }), mode: 'cors', ...fetchOptions, }); - const json = await response.json(); + if (response.status >= 400) { + throw new GQtyError( + \`GraphQL endpoint responded with HTTP status \${response.status}.\` + ); + } + + const text = await response.text(); - return json; + try { + return JSON.parse(text); + } catch { + throw new GQtyError( + \`Malformed JSON response: \${ + text.length > 50 ? text.slice(0, 50) + '...' : text + }\` + ); + } }; - export const client = createClient< - GeneratedSchema, - SchemaObjectTypesNames, - SchemaObjectTypes - >({ + const cache = new Cache( + undefined, + /** + * Default option is immediate cache expiry but keep it for 5 minutes, + * allowing soft refetches in background. + */ + { + maxAge: 0, + staleWhileRevalidate: 5 * 60 * 1000, + normalization: true, + } + ); + + export const client = createClient({ schema: generatedSchema, - scalarsEnumsHash, - queryFetcher, + scalars: scalarsEnumsHash, + cache, + fetchOptions: { + fetcher: queryFetcher, + }, }); - const { query, mutation, mutate, subscription, resolved, refetch, track } = - client; - - export { query, mutation, mutate, subscription, resolved, refetch, track }; + // Core functions + export const { resolve, subscribe, schema } = client; - const { + // Legacy functions + export const { + query, + mutation, + mutate, + subscription, + resolved, + refetch, + track, + } = client; + + export const { graphql, useQuery, usePaginatedQuery, @@ -374,36 +407,18 @@ test('custom scalars works', async () => { prepareQuery, } = createReactClient(client, { defaults: { - // Set this flag as "true" if your usage involves React Suspense - // Keep in mind that you can overwrite it in a per-hook basis - suspense: false, - - // Set this flag based on your needs - staleWhileRevalidate: false, + // Enable Suspense, you can override this option for each hook. + suspense: true, }, }); - export { - graphql, - useQuery, - usePaginatedQuery, - useTransactionQuery, - useLazyQuery, - useRefetch, - useMutation, - useMetaState, - prepareReactRender, - useHydrateCache, - prepareQuery, - }; - export * from './schema.generated'; " `); expect(schemaCode).toMatchInlineSnapshot(` "/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY + * GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY */ export type Maybe = T | null; @@ -451,13 +466,6 @@ test('custom scalars works', async () => { __typename?: 'Subscription'; } - export interface SchemaObjectTypes { - Mutation: Mutation; - Query: Query; - Subscription: Subscription; - } - export type SchemaObjectTypesNames = 'Mutation' | 'Query' | 'Subscription'; - export interface GeneratedSchema { query: Query; mutation: Mutation; @@ -600,7 +608,7 @@ describe('feature complete app', () => { expect(schemaCode).toMatchInlineSnapshot(` "/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY + * GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY */ import { SchemaUnionsKey } from 'gqty'; @@ -833,20 +841,6 @@ describe('feature complete app', () => { __typename?: 'Subscription'; } - export interface SchemaObjectTypes { - Human: Human; - Mutation: Mutation; - OtherHuman: OtherHuman; - Query: Query; - Subscription: Subscription; - } - export type SchemaObjectTypesNames = - | 'Human' - | 'Mutation' - | 'OtherHuman' - | 'Query' - | 'Subscription'; - export interface $HumanType { Human?: Human; OtherHuman?: OtherHuman; @@ -1093,7 +1087,7 @@ test('prettier detects invalid code', async () => { con a; // invalid code `, }).catch((err) => err.message.split('\n')[0]) - ).resolves.toBe(`Unexpected keyword or identifier. (6:9)`); + ).resolves.toBe(`Unexpected keyword or identifier. (7:9)`); }); describe('mutation', () => { @@ -1129,7 +1123,7 @@ describe('mutation', () => { expect(schemaCode).toMatchInlineSnapshot(` "/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY + * GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY */ export type Maybe = T | null; @@ -1179,13 +1173,6 @@ describe('mutation', () => { __typename?: 'Subscription'; } - export interface SchemaObjectTypes { - Mutation: Mutation; - Query: Query; - Subscription: Subscription; - } - export type SchemaObjectTypesNames = 'Mutation' | 'Query' | 'Subscription'; - export interface GeneratedSchema { query: Query; mutation: Mutation; @@ -1265,7 +1252,7 @@ describe('subscription', () => { expect(schemaCode).toMatchInlineSnapshot(` "/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY + * GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY */ export type Maybe = T | null; @@ -1315,13 +1302,6 @@ describe('subscription', () => { newNotification: ScalarsEnums['String']; } - export interface SchemaObjectTypes { - Mutation: Mutation; - Query: Query; - Subscription: Subscription; - } - export type SchemaObjectTypesNames = 'Mutation' | 'Query' | 'Subscription'; - export interface GeneratedSchema { query: Query; mutation: Mutation; @@ -1409,20 +1389,21 @@ test('javascript output works', async () => { expect(clientCode).toMatchInlineSnapshot(` "/** - * GQTY: You can safely modify this file and Query Fetcher based on your needs + * GQty: You can safely modify this file based on your needs. */ import { createReactClient } from '@gqty/react'; - import { createSubscriptionsClient } from '@gqty/subscriptions'; - - import { createClient } from 'gqty'; - + import { createClient as createSubscriptionsClient } from 'graphql-ws'; + import { Cache, GQtyError, createClient } from 'gqty'; import { generatedSchema, scalarsEnumsHash } from './schema.generated'; /** * @type {import("gqty").QueryFetcher} */ - const queryFetcher = async function (query, variables, fetchOptions) { + const queryFetcher = async function ( + { query, variables, operationName }, + fetchOptions + ) { // Modify "/api/graphql" if needed const response = await fetch('/api/graphql', { method: 'POST', @@ -1432,20 +1413,36 @@ test('javascript output works', async () => { body: JSON.stringify({ query, variables, + operationName, }), mode: 'cors', ...fetchOptions, }); - const json = await response.json(); + if (response.status >= 400) { + throw new GQtyError( + \`GraphQL endpoint responded with HTTP status \${response.status}.\` + ); + } + + const text = await response.text(); - return json; + try { + return JSON.parse(text); + } catch { + throw new GQtyError( + \`Malformed JSON response: \${ + text.length > 50 ? text.slice(0, 50) + '...' : text + }\` + ); + } }; const subscriptionsClient = typeof window !== 'undefined' ? createSubscriptionsClient({ - wsEndpoint: () => { + lazy: true, + url: () => { // Modify if needed const url = new URL('/api/graphql', window.location.href); url.protocol = url.protocol.replace('http', 'ws'); @@ -1454,51 +1451,47 @@ test('javascript output works', async () => { }) : undefined; + const cache = new Cache( + undefined, + /** + * Default option is immediate cache expiry but keep it for 5 minutes, + * allowing soft refetches in background. + */ + { + maxAge: 0, + staleWhileRevalidate: 5 * 60 * 1000, + normalization: true, + } + ); + /** * @type {import("gqty").GQtyClient} */ export const client = createClient({ schema: generatedSchema, - scalarsEnumsHash, - queryFetcher, - subscriptionsClient, - }); - - const { query, mutation, mutate, subscription, resolved, refetch, track } = - client; - - export { query, mutation, mutate, subscription, resolved, refetch, track }; - - /** - * @type {import("@gqty/react").ReactClient} - */ - const reactClient = createReactClient(client, { - defaults: { - // Set this flag as "true" if your usage involves React Suspense - // Keep in mind that you can overwrite it in a per-hook basis - suspense: false, - - // Set this flag based on your needs - staleWhileRevalidate: false, + scalars: scalarsEnumsHash, + cache, + fetchOptions: { + fetcher: queryFetcher, + subscriber: subscriptionsClient, }, }); - const { - graphql, - useQuery, - usePaginatedQuery, - useTransactionQuery, - useLazyQuery, - useRefetch, - useMutation, - useMetaState, - prepareReactRender, - useHydrateCache, - prepareQuery, - useSubscription, - } = reactClient; + // Core functions + export const { resolve, subscribe, schema } = client; - export { + // Legacy functions + export const { + query, + mutation, + mutate, + subscription, + resolved, + refetch, + track, + } = client; + + export const { graphql, useQuery, usePaginatedQuery, @@ -1511,15 +1504,26 @@ test('javascript output works', async () => { useHydrateCache, prepareQuery, useSubscription, - }; + } = + /** + * @type {import("@gqty/react").ReactClient} + */ + createReactClient(client, { + defaults: { + // Enable Suspense, you can override this option for each hook. + suspense: true, + }, + }); export * from './schema.generated'; " `); + expect(javascriptSchemaCode).toMatchInlineSnapshot(` "/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY + * GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY */ + import { SchemaUnionsKey } from 'gqty'; /** @@ -1594,7 +1598,7 @@ test('javascript output works', async () => { `); expect(schemaCode).toMatchInlineSnapshot(` "/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY + * GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY */ import { SchemaUnionsKey } from 'gqty'; @@ -1662,20 +1666,6 @@ test('javascript output works', async () => { newNotification: ScalarsEnums['String']; } - export interface SchemaObjectTypes { - A: A; - B: B; - Mutation: Mutation; - Query: Query; - Subscription: Subscription; - } - export type SchemaObjectTypesNames = - | 'A' - | 'B' - | 'Mutation' - | 'Query' - | 'Subscription'; - export interface $C { A?: A; B?: B; @@ -1733,23 +1723,19 @@ test('ignoreArgs transform', async () => { expect(clientCode).toMatchInlineSnapshot(` "/** - * GQTY: You can safely modify this file and Query Fetcher based on your needs + * GQty: You can safely modify this file based on your needs. */ import { createReactClient } from '@gqty/react'; - - import type { QueryFetcher } from 'gqty'; - import { createClient } from 'gqty'; - import type { - GeneratedSchema, - SchemaObjectTypes, - SchemaObjectTypesNames, + import { Cache, GQtyError, createClient, type QueryFetcher } from 'gqty'; + import { + generatedSchema, + scalarsEnumsHash, + type GeneratedSchema, } from './schema.generated'; - import { generatedSchema, scalarsEnumsHash } from './schema.generated'; const queryFetcher: QueryFetcher = async function ( - query, - variables, + { query, variables, operationName }, fetchOptions ) { // Modify "/api/graphql" if needed @@ -1761,32 +1747,68 @@ test('ignoreArgs transform', async () => { body: JSON.stringify({ query, variables, + operationName, }), mode: 'cors', ...fetchOptions, }); - const json = await response.json(); + if (response.status >= 400) { + throw new GQtyError( + \`GraphQL endpoint responded with HTTP status \${response.status}.\` + ); + } + + const text = await response.text(); - return json; + try { + return JSON.parse(text); + } catch { + throw new GQtyError( + \`Malformed JSON response: \${ + text.length > 50 ? text.slice(0, 50) + '...' : text + }\` + ); + } }; - export const client = createClient< - GeneratedSchema, - SchemaObjectTypesNames, - SchemaObjectTypes - >({ + const cache = new Cache( + undefined, + /** + * Default option is immediate cache expiry but keep it for 5 minutes, + * allowing soft refetches in background. + */ + { + maxAge: 0, + staleWhileRevalidate: 5 * 60 * 1000, + normalization: true, + } + ); + + export const client = createClient({ schema: generatedSchema, - scalarsEnumsHash, - queryFetcher, + scalars: scalarsEnumsHash, + cache, + fetchOptions: { + fetcher: queryFetcher, + }, }); - const { query, mutation, mutate, subscription, resolved, refetch, track } = - client; - - export { query, mutation, mutate, subscription, resolved, refetch, track }; + // Core functions + export const { resolve, subscribe, schema } = client; - const { + // Legacy functions + export const { + query, + mutation, + mutate, + subscription, + resolved, + refetch, + track, + } = client; + + export const { graphql, useQuery, usePaginatedQuery, @@ -1800,32 +1822,15 @@ test('ignoreArgs transform', async () => { prepareQuery, } = createReactClient(client, { defaults: { - // Set this flag as "true" if your usage involves React Suspense - // Keep in mind that you can overwrite it in a per-hook basis - suspense: false, - - // Set this flag based on your needs - staleWhileRevalidate: false, + // Enable Suspense, you can override this option for each hook. + suspense: true, }, }); - export { - graphql, - useQuery, - usePaginatedQuery, - useTransactionQuery, - useLazyQuery, - useRefetch, - useMutation, - useMetaState, - prepareReactRender, - useHydrateCache, - prepareQuery, - }; - export * from './schema.generated'; " `); + expect(generatedSchema).toMatchInlineSnapshot(` { "mutation": {}, @@ -1849,7 +1854,7 @@ test('ignoreArgs transform', async () => { `); expect(javascriptSchemaCode).toMatchInlineSnapshot(` "/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY + * GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY */ /** @@ -1870,7 +1875,7 @@ test('ignoreArgs transform', async () => { `); expect(schemaCode).toMatchInlineSnapshot(` "/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY + * GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY */ export type Maybe = T | null; @@ -1925,13 +1930,6 @@ test('ignoreArgs transform', async () => { __typename?: 'Subscription'; } - export interface SchemaObjectTypes { - Mutation: Mutation; - Query: Query; - Subscription: Subscription; - } - export type SchemaObjectTypesNames = 'Mutation' | 'Query' | 'Subscription'; - export interface GeneratedSchema { query: Query; mutation: Mutation; @@ -2093,7 +2091,7 @@ test('fields with default value works', async () => { expect(schemaCode).toMatchInlineSnapshot(` "/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY + * GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY */ // This should be included @@ -2152,13 +2150,6 @@ test('fields with default value works', async () => { __typename?: 'Subscription'; } - export interface SchemaObjectTypes { - Mutation: Mutation; - Query: Query; - Subscription: Subscription; - } - export type SchemaObjectTypesNames = 'Mutation' | 'Query' | 'Subscription'; - export interface GeneratedSchema { query: Query; mutation: Mutation; @@ -2173,12 +2164,5 @@ test('fields with default value works', async () => { " `); - expect( - schemaCode - .split('\n') - .slice(3) - .join('\n') - .trim() - .startsWith(shouldBeIncluded) - ).toBeTruthy(); + expect(schemaCode.split('\n')[4]).toStrictEqual(shouldBeIncluded); }); diff --git a/packages/cli/test/inspectWriteGenerate.test.ts b/packages/cli/test/inspectWriteGenerate.test.ts index cd9e2b198..22e0f1c17 100644 --- a/packages/cli/test/inspectWriteGenerate.test.ts +++ b/packages/cli/test/inspectWriteGenerate.test.ts @@ -1,10 +1,10 @@ import fs from 'fs'; import path from 'path'; import { - BuildContextArgs, createTestApp, - GetEnvelopedFn, gql, + type BuildContextArgs, + type GetEnvelopedFn, } from 'test-utils'; import tmp from 'tmp-promise'; import { inspectWriteGenerate } from '../src/inspectWriteGenerate'; @@ -55,23 +55,19 @@ test('basic inspectWriteGenerate functionality', async () => { ).replace(new RegExp(endpoint, 'g'), '/graphql') ).toMatchInlineSnapshot(` "/** - * GQTY: You can safely modify this file and Query Fetcher based on your needs + * GQty: You can safely modify this file based on your needs. */ import { createReactClient } from '@gqty/react'; - - import type { QueryFetcher } from 'gqty'; - import { createClient } from 'gqty'; - import type { - GeneratedSchema, - SchemaObjectTypes, - SchemaObjectTypesNames, + import { Cache, GQtyError, createClient, type QueryFetcher } from 'gqty'; + import { + generatedSchema, + scalarsEnumsHash, + type GeneratedSchema, } from './schema.generated'; - import { generatedSchema, scalarsEnumsHash } from './schema.generated'; const queryFetcher: QueryFetcher = async function ( - query, - variables, + { query, variables, operationName }, fetchOptions ) { // Modify "/api/graphql" if needed @@ -83,32 +79,68 @@ test('basic inspectWriteGenerate functionality', async () => { body: JSON.stringify({ query, variables, + operationName, }), mode: 'cors', ...fetchOptions, }); - const json = await response.json(); + if (response.status >= 400) { + throw new GQtyError( + \`GraphQL endpoint responded with HTTP status \${response.status}.\` + ); + } + + const text = await response.text(); - return json; + try { + return JSON.parse(text); + } catch { + throw new GQtyError( + \`Malformed JSON response: \${ + text.length > 50 ? text.slice(0, 50) + '...' : text + }\` + ); + } }; - export const client = createClient< - GeneratedSchema, - SchemaObjectTypesNames, - SchemaObjectTypes - >({ + const cache = new Cache( + undefined, + /** + * Default option is immediate cache expiry but keep it for 5 minutes, + * allowing soft refetches in background. + */ + { + maxAge: 0, + staleWhileRevalidate: 5 * 60 * 1000, + normalization: true, + } + ); + + export const client = createClient({ schema: generatedSchema, - scalarsEnumsHash, - queryFetcher, + scalars: scalarsEnumsHash, + cache, + fetchOptions: { + fetcher: queryFetcher, + }, }); - const { query, mutation, mutate, subscription, resolved, refetch, track } = - client; + // Core functions + export const { resolve, subscribe, schema } = client; - export { query, mutation, mutate, subscription, resolved, refetch, track }; - - const { + // Legacy functions + export const { + query, + mutation, + mutate, + subscription, + resolved, + refetch, + track, + } = client; + + export const { graphql, useQuery, usePaginatedQuery, @@ -122,29 +154,11 @@ test('basic inspectWriteGenerate functionality', async () => { prepareQuery, } = createReactClient(client, { defaults: { - // Set this flag as "true" if your usage involves React Suspense - // Keep in mind that you can overwrite it in a per-hook basis - suspense: false, - - // Set this flag based on your needs - staleWhileRevalidate: false, + // Enable Suspense, you can override this option for each hook. + suspense: true, }, }); - export { - graphql, - useQuery, - usePaginatedQuery, - useTransactionQuery, - useLazyQuery, - useRefetch, - useMutation, - useMetaState, - prepareReactRender, - useHydrateCache, - prepareQuery, - }; - export * from './schema.generated'; " `); @@ -155,7 +169,7 @@ test('basic inspectWriteGenerate functionality', async () => { }) ).toMatchInlineSnapshot(` "/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY + * GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY */ export type Maybe = T | null; @@ -201,13 +215,6 @@ test('basic inspectWriteGenerate functionality', async () => { __typename?: 'Subscription'; } - export interface SchemaObjectTypes { - Mutation: Mutation; - Query: Query; - Subscription: Subscription; - } - export type SchemaObjectTypesNames = 'Mutation' | 'Query' | 'Subscription'; - export interface GeneratedSchema { query: Query; mutation: Mutation; @@ -263,23 +270,19 @@ describe('from file', () => { ) ).toMatchInlineSnapshot(` "/** - * GQTY: You can safely modify this file and Query Fetcher based on your needs + * GQty: You can safely modify this file based on your needs. */ import { createReactClient } from '@gqty/react'; - - import type { QueryFetcher } from 'gqty'; - import { createClient } from 'gqty'; - import type { - GeneratedSchema, - SchemaObjectTypes, - SchemaObjectTypesNames, + import { Cache, GQtyError, createClient, type QueryFetcher } from 'gqty'; + import { + generatedSchema, + scalarsEnumsHash, + type GeneratedSchema, } from './schema.generated'; - import { generatedSchema, scalarsEnumsHash } from './schema.generated'; const queryFetcher: QueryFetcher = async function ( - query, - variables, + { query, variables, operationName }, fetchOptions ) { // Modify "/api/graphql" if needed @@ -291,32 +294,68 @@ describe('from file', () => { body: JSON.stringify({ query, variables, + operationName, }), mode: 'cors', ...fetchOptions, }); - const json = await response.json(); - - return json; + if (response.status >= 400) { + throw new GQtyError( + \`GraphQL endpoint responded with HTTP status \${response.status}.\` + ); + } + + const text = await response.text(); + + try { + return JSON.parse(text); + } catch { + throw new GQtyError( + \`Malformed JSON response: \${ + text.length > 50 ? text.slice(0, 50) + '...' : text + }\` + ); + } }; - export const client = createClient< - GeneratedSchema, - SchemaObjectTypesNames, - SchemaObjectTypes - >({ + const cache = new Cache( + undefined, + /** + * Default option is immediate cache expiry but keep it for 5 minutes, + * allowing soft refetches in background. + */ + { + maxAge: 0, + staleWhileRevalidate: 5 * 60 * 1000, + normalization: true, + } + ); + + export const client = createClient({ schema: generatedSchema, - scalarsEnumsHash, - queryFetcher, + scalars: scalarsEnumsHash, + cache, + fetchOptions: { + fetcher: queryFetcher, + }, }); - const { query, mutation, mutate, subscription, resolved, refetch, track } = - client; + // Core functions + export const { resolve, subscribe, schema } = client; - export { query, mutation, mutate, subscription, resolved, refetch, track }; - - const { + // Legacy functions + export const { + query, + mutation, + mutate, + subscription, + resolved, + refetch, + track, + } = client; + + export const { graphql, useQuery, usePaginatedQuery, @@ -330,35 +369,18 @@ describe('from file', () => { prepareQuery, } = createReactClient(client, { defaults: { - // Set this flag as "true" if your usage involves React Suspense - // Keep in mind that you can overwrite it in a per-hook basis - suspense: false, - - // Set this flag based on your needs - staleWhileRevalidate: false, + // Enable Suspense, you can override this option for each hook. + suspense: true, }, }); - export { - graphql, - useQuery, - usePaginatedQuery, - useTransactionQuery, - useLazyQuery, - useRefetch, - useMutation, - useMetaState, - prepareReactRender, - useHydrateCache, - prepareQuery, - }; - export * from './schema.generated'; " `); + expect(generatedFileContentSchema).toMatchInlineSnapshot(` "/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY + * GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY */ export type Maybe = T | null; @@ -405,13 +427,6 @@ describe('from file', () => { __typename?: 'Subscription'; } - export interface SchemaObjectTypes { - Mutation: Mutation; - Query: Query; - Subscription: Subscription; - } - export type SchemaObjectTypesNames = 'Mutation' | 'Query' | 'Subscription'; - export interface GeneratedSchema { query: Query; mutation: Mutation; @@ -469,23 +484,19 @@ describe('from file', () => { ) ).toMatchInlineSnapshot(` "/** - * GQTY: You can safely modify this file and Query Fetcher based on your needs + * GQty: You can safely modify this file based on your needs. */ import { createReactClient } from '@gqty/react'; - - import type { QueryFetcher } from 'gqty'; - import { createClient } from 'gqty'; - import type { - GeneratedSchema, - SchemaObjectTypes, - SchemaObjectTypesNames, + import { Cache, GQtyError, createClient, type QueryFetcher } from 'gqty'; + import { + generatedSchema, + scalarsEnumsHash, + type GeneratedSchema, } from './schema.generated'; - import { generatedSchema, scalarsEnumsHash } from './schema.generated'; const queryFetcher: QueryFetcher = async function ( - query, - variables, + { query, variables, operationName }, fetchOptions ) { // Modify "/api/graphql" if needed @@ -497,32 +508,68 @@ describe('from file', () => { body: JSON.stringify({ query, variables, + operationName, }), mode: 'cors', ...fetchOptions, }); - const json = await response.json(); - - return json; + if (response.status >= 400) { + throw new GQtyError( + \`GraphQL endpoint responded with HTTP status \${response.status}.\` + ); + } + + const text = await response.text(); + + try { + return JSON.parse(text); + } catch { + throw new GQtyError( + \`Malformed JSON response: \${ + text.length > 50 ? text.slice(0, 50) + '...' : text + }\` + ); + } }; - export const client = createClient< - GeneratedSchema, - SchemaObjectTypesNames, - SchemaObjectTypes - >({ + const cache = new Cache( + undefined, + /** + * Default option is immediate cache expiry but keep it for 5 minutes, + * allowing soft refetches in background. + */ + { + maxAge: 0, + staleWhileRevalidate: 5 * 60 * 1000, + normalization: true, + } + ); + + export const client = createClient({ schema: generatedSchema, - scalarsEnumsHash, - queryFetcher, + scalars: scalarsEnumsHash, + cache, + fetchOptions: { + fetcher: queryFetcher, + }, }); - const { query, mutation, mutate, subscription, resolved, refetch, track } = - client; - - export { query, mutation, mutate, subscription, resolved, refetch, track }; + // Core functions + export const { resolve, subscribe, schema } = client; - const { + // Legacy functions + export const { + query, + mutation, + mutate, + subscription, + resolved, + refetch, + track, + } = client; + + export const { graphql, useQuery, usePaginatedQuery, @@ -536,35 +583,18 @@ describe('from file', () => { prepareQuery, } = createReactClient(client, { defaults: { - // Set this flag as "true" if your usage involves React Suspense - // Keep in mind that you can overwrite it in a per-hook basis - suspense: false, - - // Set this flag based on your needs - staleWhileRevalidate: false, + // Enable Suspense, you can override this option for each hook. + suspense: true, }, }); - export { - graphql, - useQuery, - usePaginatedQuery, - useTransactionQuery, - useLazyQuery, - useRefetch, - useMutation, - useMetaState, - prepareReactRender, - useHydrateCache, - prepareQuery, - }; - export * from './schema.generated'; " `); + expect(generatedFileContentSchema).toMatchInlineSnapshot(` "/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY + * GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY */ export type Maybe = T | null; @@ -610,13 +640,6 @@ describe('from file', () => { __typename?: 'Subscription'; } - export interface SchemaObjectTypes { - Mutation: Mutation; - Query: Query; - Subscription: Subscription; - } - export type SchemaObjectTypesNames = 'Mutation' | 'Query' | 'Subscription'; - export interface GeneratedSchema { query: Query; mutation: Mutation; @@ -674,23 +697,19 @@ describe('from file', () => { ) ).toMatchInlineSnapshot(` "/** - * GQTY: You can safely modify this file and Query Fetcher based on your needs + * GQty: You can safely modify this file based on your needs. */ import { createReactClient } from '@gqty/react'; - - import type { QueryFetcher } from 'gqty'; - import { createClient } from 'gqty'; - import type { - GeneratedSchema, - SchemaObjectTypes, - SchemaObjectTypesNames, + import { Cache, GQtyError, createClient, type QueryFetcher } from 'gqty'; + import { + generatedSchema, + scalarsEnumsHash, + type GeneratedSchema, } from './schema.generated'; - import { generatedSchema, scalarsEnumsHash } from './schema.generated'; const queryFetcher: QueryFetcher = async function ( - query, - variables, + { query, variables, operationName }, fetchOptions ) { // Modify "/api/graphql" if needed @@ -702,32 +721,68 @@ describe('from file', () => { body: JSON.stringify({ query, variables, + operationName, }), mode: 'cors', ...fetchOptions, }); - const json = await response.json(); - - return json; + if (response.status >= 400) { + throw new GQtyError( + \`GraphQL endpoint responded with HTTP status \${response.status}.\` + ); + } + + const text = await response.text(); + + try { + return JSON.parse(text); + } catch { + throw new GQtyError( + \`Malformed JSON response: \${ + text.length > 50 ? text.slice(0, 50) + '...' : text + }\` + ); + } }; - export const client = createClient< - GeneratedSchema, - SchemaObjectTypesNames, - SchemaObjectTypes - >({ + const cache = new Cache( + undefined, + /** + * Default option is immediate cache expiry but keep it for 5 minutes, + * allowing soft refetches in background. + */ + { + maxAge: 0, + staleWhileRevalidate: 5 * 60 * 1000, + normalization: true, + } + ); + + export const client = createClient({ schema: generatedSchema, - scalarsEnumsHash, - queryFetcher, + scalars: scalarsEnumsHash, + cache, + fetchOptions: { + fetcher: queryFetcher, + }, }); - const { query, mutation, mutate, subscription, resolved, refetch, track } = - client; - - export { query, mutation, mutate, subscription, resolved, refetch, track }; + // Core functions + export const { resolve, subscribe, schema } = client; - const { + // Legacy functions + export const { + query, + mutation, + mutate, + subscription, + resolved, + refetch, + track, + } = client; + + export const { graphql, useQuery, usePaginatedQuery, @@ -741,35 +796,18 @@ describe('from file', () => { prepareQuery, } = createReactClient(client, { defaults: { - // Set this flag as "true" if your usage involves React Suspense - // Keep in mind that you can overwrite it in a per-hook basis - suspense: false, - - // Set this flag based on your needs - staleWhileRevalidate: false, + // Enable Suspense, you can override this option for each hook. + suspense: true, }, }); - export { - graphql, - useQuery, - usePaginatedQuery, - useTransactionQuery, - useLazyQuery, - useRefetch, - useMutation, - useMetaState, - prepareReactRender, - useHydrateCache, - prepareQuery, - }; - export * from './schema.generated'; " `); + expect(generatedFileContentSchema).toMatchInlineSnapshot(` "/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY + * GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY */ export type Maybe = T | null; @@ -815,13 +853,6 @@ describe('from file', () => { __typename?: 'Subscription'; } - export interface SchemaObjectTypes { - Mutation: Mutation; - Query: Query; - Subscription: Subscription; - } - export type SchemaObjectTypesNames = 'Mutation' | 'Query' | 'Subscription'; - export interface GeneratedSchema { query: Query; mutation: Mutation; @@ -923,23 +954,19 @@ describe('from multiple files', () => { ) ).toMatchInlineSnapshot(` "/** - * GQTY: You can safely modify this file and Query Fetcher based on your needs + * GQty: You can safely modify this file based on your needs. */ import { createReactClient } from '@gqty/react'; - - import type { QueryFetcher } from 'gqty'; - import { createClient } from 'gqty'; - import type { - GeneratedSchema, - SchemaObjectTypes, - SchemaObjectTypesNames, + import { Cache, GQtyError, createClient, type QueryFetcher } from 'gqty'; + import { + generatedSchema, + scalarsEnumsHash, + type GeneratedSchema, } from './schema.generated'; - import { generatedSchema, scalarsEnumsHash } from './schema.generated'; const queryFetcher: QueryFetcher = async function ( - query, - variables, + { query, variables, operationName }, fetchOptions ) { // Modify "/api/graphql" if needed @@ -951,32 +978,68 @@ describe('from multiple files', () => { body: JSON.stringify({ query, variables, + operationName, }), mode: 'cors', ...fetchOptions, }); - const json = await response.json(); - - return json; + if (response.status >= 400) { + throw new GQtyError( + \`GraphQL endpoint responded with HTTP status \${response.status}.\` + ); + } + + const text = await response.text(); + + try { + return JSON.parse(text); + } catch { + throw new GQtyError( + \`Malformed JSON response: \${ + text.length > 50 ? text.slice(0, 50) + '...' : text + }\` + ); + } }; - export const client = createClient< - GeneratedSchema, - SchemaObjectTypesNames, - SchemaObjectTypes - >({ + const cache = new Cache( + undefined, + /** + * Default option is immediate cache expiry but keep it for 5 minutes, + * allowing soft refetches in background. + */ + { + maxAge: 0, + staleWhileRevalidate: 5 * 60 * 1000, + normalization: true, + } + ); + + export const client = createClient({ schema: generatedSchema, - scalarsEnumsHash, - queryFetcher, + scalars: scalarsEnumsHash, + cache, + fetchOptions: { + fetcher: queryFetcher, + }, }); - const { query, mutation, mutate, subscription, resolved, refetch, track } = - client; - - export { query, mutation, mutate, subscription, resolved, refetch, track }; + // Core functions + export const { resolve, subscribe, schema } = client; - const { + // Legacy functions + export const { + query, + mutation, + mutate, + subscription, + resolved, + refetch, + track, + } = client; + + export const { graphql, useQuery, usePaginatedQuery, @@ -990,35 +1053,18 @@ describe('from multiple files', () => { prepareQuery, } = createReactClient(client, { defaults: { - // Set this flag as "true" if your usage involves React Suspense - // Keep in mind that you can overwrite it in a per-hook basis - suspense: false, - - // Set this flag based on your needs - staleWhileRevalidate: false, + // Enable Suspense, you can override this option for each hook. + suspense: true, }, }); - export { - graphql, - useQuery, - usePaginatedQuery, - useTransactionQuery, - useLazyQuery, - useRefetch, - useMutation, - useMetaState, - prepareReactRender, - useHydrateCache, - prepareQuery, - }; - export * from './schema.generated'; " `); + expect(generatedFileContentSchema).toMatchInlineSnapshot(` "/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY + * GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY */ export type Maybe = T | null; @@ -1070,13 +1116,6 @@ describe('from multiple files', () => { __typename?: 'Subscription'; } - export interface SchemaObjectTypes { - Mutation: Mutation; - Query: Query; - Subscription: Subscription; - } - export type SchemaObjectTypesNames = 'Mutation' | 'Query' | 'Subscription'; - export interface GeneratedSchema { query: Query; mutation: Mutation; @@ -1188,23 +1227,19 @@ test('specify generateOptions to inspectWriteGenerate', async () => { generatedFileContentClient.replace(new RegExp(endpoint, 'g'), '/graphql') ).toMatchInlineSnapshot(` "/** - * GQTY: You can safely modify this file and Query Fetcher based on your needs + * GQty: You can safely modify this file based on your needs. */ import { createReactClient } from '@gqty/react'; - - import type { QueryFetcher } from 'gqty'; - import { createClient } from 'gqty'; - import type { - GeneratedSchema, - SchemaObjectTypes, - SchemaObjectTypesNames, + import { Cache, GQtyError, createClient, type QueryFetcher } from 'gqty'; + import { + generatedSchema, + scalarsEnumsHash, + type GeneratedSchema, } from './schema.generated'; - import { generatedSchema, scalarsEnumsHash } from './schema.generated'; const queryFetcher: QueryFetcher = async function ( - query, - variables, + { query, variables, operationName }, fetchOptions ) { // Modify "/api/graphql" if needed @@ -1216,32 +1251,68 @@ test('specify generateOptions to inspectWriteGenerate', async () => { body: JSON.stringify({ query, variables, + operationName, }), mode: 'cors', ...fetchOptions, }); - const json = await response.json(); + if (response.status >= 400) { + throw new GQtyError( + \`GraphQL endpoint responded with HTTP status \${response.status}.\` + ); + } + + const text = await response.text(); - return json; + try { + return JSON.parse(text); + } catch { + throw new GQtyError( + \`Malformed JSON response: \${ + text.length > 50 ? text.slice(0, 50) + '...' : text + }\` + ); + } }; - export const client = createClient< - GeneratedSchema, - SchemaObjectTypesNames, - SchemaObjectTypes - >({ + const cache = new Cache( + undefined, + /** + * Default option is immediate cache expiry but keep it for 5 minutes, + * allowing soft refetches in background. + */ + { + maxAge: 0, + staleWhileRevalidate: 5 * 60 * 1000, + normalization: true, + } + ); + + export const client = createClient({ schema: generatedSchema, - scalarsEnumsHash, - queryFetcher, + scalars: scalarsEnumsHash, + cache, + fetchOptions: { + fetcher: queryFetcher, + }, }); - const { query, mutation, mutate, subscription, resolved, refetch, track } = - client; + // Core functions + export const { resolve, subscribe, schema } = client; - export { query, mutation, mutate, subscription, resolved, refetch, track }; - - const { + // Legacy functions + export const { + query, + mutation, + mutate, + subscription, + resolved, + refetch, + track, + } = client; + + export const { graphql, useQuery, usePaginatedQuery, @@ -1255,35 +1326,18 @@ test('specify generateOptions to inspectWriteGenerate', async () => { prepareQuery, } = createReactClient(client, { defaults: { - // Set this flag as "true" if your usage involves React Suspense - // Keep in mind that you can overwrite it in a per-hook basis - suspense: false, - - // Set this flag based on your needs - staleWhileRevalidate: false, + // Enable Suspense, you can override this option for each hook. + suspense: true, }, }); - export { - graphql, - useQuery, - usePaginatedQuery, - useTransactionQuery, - useLazyQuery, - useRefetch, - useMutation, - useMetaState, - prepareReactRender, - useHydrateCache, - prepareQuery, - }; - export * from './schema.generated'; " `); + expect(generatedFileContentSchema).toMatchInlineSnapshot(` "/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY + * GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY */ // This should be included @@ -1331,13 +1385,6 @@ test('specify generateOptions to inspectWriteGenerate', async () => { __typename?: 'Subscription'; } - export interface SchemaObjectTypes { - Mutation: Mutation; - Query: Query; - Subscription: Subscription; - } - export type SchemaObjectTypesNames = 'Mutation' | 'Query' | 'Subscription'; - export interface GeneratedSchema { query: Query; mutation: Mutation; @@ -1352,14 +1399,9 @@ test('specify generateOptions to inspectWriteGenerate', async () => { " `); - expect( - generatedFileContentSchema - .split('\n') - .slice(3) - .join('\n') - .trim() - .startsWith(shouldBeIncluded) - ).toBeTruthy(); + expect(generatedFileContentSchema.split('\n')[4]).toStrictEqual( + shouldBeIncluded + ); } finally { await tempDir.cleanup(); } @@ -1422,8 +1464,9 @@ describe('inspect headers', () => { expect(generatedFileContent).toMatchInlineSnapshot(` "/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY + * GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY */ + // This should be included export type Maybe = T | null; @@ -1469,13 +1512,6 @@ describe('inspect headers', () => { __typename?: 'Subscription'; } - export interface SchemaObjectTypes { - Mutation: Mutation; - Query: Query; - Subscription: Subscription; - } - export type SchemaObjectTypesNames = 'Mutation' | 'Query' | 'Subscription'; - export interface GeneratedSchema { query: Query; mutation: Mutation; @@ -1493,7 +1529,7 @@ describe('inspect headers', () => { expect( generatedFileContent .split('\n') - .slice(3) + .slice(4) .join('\n') .startsWith(shouldBeIncluded) ).toBeTruthy(); @@ -1554,23 +1590,19 @@ describe('CLI behavior', () => { ).replace(new RegExp(endpoint, 'g'), '/graphql') ).toMatchInlineSnapshot(` "/** - * GQTY: You can safely modify this file and Query Fetcher based on your needs + * GQty: You can safely modify this file based on your needs. */ import { createReactClient } from '@gqty/react'; - - import type { QueryFetcher } from 'gqty'; - import { createClient } from 'gqty'; - import type { - GeneratedSchema, - SchemaObjectTypes, - SchemaObjectTypesNames, + import { Cache, GQtyError, createClient, type QueryFetcher } from 'gqty'; + import { + generatedSchema, + scalarsEnumsHash, + type GeneratedSchema, } from './schema.generated'; - import { generatedSchema, scalarsEnumsHash } from './schema.generated'; const queryFetcher: QueryFetcher = async function ( - query, - variables, + { query, variables, operationName }, fetchOptions ) { // Modify "/api/graphql" if needed @@ -1582,32 +1614,68 @@ describe('CLI behavior', () => { body: JSON.stringify({ query, variables, + operationName, }), mode: 'cors', ...fetchOptions, }); - const json = await response.json(); - - return json; + if (response.status >= 400) { + throw new GQtyError( + \`GraphQL endpoint responded with HTTP status \${response.status}.\` + ); + } + + const text = await response.text(); + + try { + return JSON.parse(text); + } catch { + throw new GQtyError( + \`Malformed JSON response: \${ + text.length > 50 ? text.slice(0, 50) + '...' : text + }\` + ); + } }; - export const client = createClient< - GeneratedSchema, - SchemaObjectTypesNames, - SchemaObjectTypes - >({ + const cache = new Cache( + undefined, + /** + * Default option is immediate cache expiry but keep it for 5 minutes, + * allowing soft refetches in background. + */ + { + maxAge: 0, + staleWhileRevalidate: 5 * 60 * 1000, + normalization: true, + } + ); + + export const client = createClient({ schema: generatedSchema, - scalarsEnumsHash, - queryFetcher, + scalars: scalarsEnumsHash, + cache, + fetchOptions: { + fetcher: queryFetcher, + }, }); - const { query, mutation, mutate, subscription, resolved, refetch, track } = - client; - - export { query, mutation, mutate, subscription, resolved, refetch, track }; + // Core functions + export const { resolve, subscribe, schema } = client; - const { + // Legacy functions + export const { + query, + mutation, + mutate, + subscription, + resolved, + refetch, + track, + } = client; + + export const { graphql, useQuery, usePaginatedQuery, @@ -1621,29 +1689,11 @@ describe('CLI behavior', () => { prepareQuery, } = createReactClient(client, { defaults: { - // Set this flag as "true" if your usage involves React Suspense - // Keep in mind that you can overwrite it in a per-hook basis - suspense: false, - - // Set this flag based on your needs - staleWhileRevalidate: false, + // Enable Suspense, you can override this option for each hook. + suspense: true, }, }); - export { - graphql, - useQuery, - usePaginatedQuery, - useTransactionQuery, - useLazyQuery, - useRefetch, - useMutation, - useMetaState, - prepareReactRender, - useHydrateCache, - prepareQuery, - }; - export * from './schema.generated'; " `); @@ -1654,7 +1704,7 @@ describe('CLI behavior', () => { }) ).toMatchInlineSnapshot(` "/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY + * GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY */ export type Maybe = T | null; @@ -1700,13 +1750,6 @@ describe('CLI behavior', () => { __typename?: 'Subscription'; } - export interface SchemaObjectTypes { - Mutation: Mutation; - Query: Query; - Subscription: Subscription; - } - export type SchemaObjectTypesNames = 'Mutation' | 'Query' | 'Subscription'; - export interface GeneratedSchema { query: Query; mutation: Mutation; @@ -1742,17 +1785,17 @@ test('detect client config change between files', async () => { case 1: { expect(message.replace(clientPathRegex, 'client.ts')) .toMatchInlineSnapshot(` - "[Warning] You've changed the option "subscriptions" to 'true', which is different from your existing "client.ts". - If you meant to change this, please remove "client.ts" and re-run code generation." - `); + "[Warning] You've changed the option "subscriptions" to 'true', which is different from your existing "client.ts". + If you meant to change this, please remove "client.ts" and re-run code generation." + `); break; } case 2: { expect(message.replace(clientPathRegex, 'client.ts')) .toMatchInlineSnapshot(` - "[Warning] You've changed the option "react" to 'true', which is different from your existing "client.ts". - If you meant to change this, please remove "client.ts" and re-run code generation." - `); + "[Warning] You've changed the option "react" to 'true', which is different from your existing "client.ts". + If you meant to change this, please remove "client.ts" and re-run code generation." + `); break; } } @@ -1769,7 +1812,7 @@ test('detect client config change between files', async () => { }, }); - expect(spy).toBeCalledTimes(1); + expect(spy).toBeCalledTimes(0); await inspectWriteGenerate({ endpoint, @@ -1780,7 +1823,7 @@ test('detect client config change between files', async () => { }, }); - expect(spy).toBeCalledTimes(4); + expect(spy).toBeCalledTimes(2); } finally { await tempDir.cleanup(); spy.mockRestore(); diff --git a/packages/cli/test/utils.ts b/packages/cli/test/utils.ts index b84e1a94b..568c1ddf8 100644 --- a/packages/cli/test/utils.ts +++ b/packages/cli/test/utils.ts @@ -1,7 +1,7 @@ -import { gqtyConfigPromise } from '../src/config'; import fs from 'fs'; import { resolve } from 'path'; import tmp from 'tmp-promise'; +import { loadOrGenerateConfig } from '../src/config'; export async function getTempDir({ initClientFile, @@ -33,5 +33,5 @@ export async function getTempDir({ } afterAll(async () => { - await gqtyConfigPromise; + await loadOrGenerateConfig({ writeConfigFile: true }); }); diff --git a/packages/cli/test/writeGenerate.test.ts b/packages/cli/test/writeGenerate.test.ts index 34d18d2d5..83cf6f16f 100644 --- a/packages/cli/test/writeGenerate.test.ts +++ b/packages/cli/test/writeGenerate.test.ts @@ -1,6 +1,7 @@ import fs from 'fs'; import path from 'path'; import { createTestApp, gql } from 'test-utils'; +import { loadOrGenerateConfig } from '../src/config'; import { writeGenerate } from '../src/writeGenerate'; import { getTempDir } from './utils'; @@ -64,18 +65,13 @@ test('generates code and writes existing file', async () => { encoding: 'utf-8', }); - expect( - generatedContent - .split('\n') - .slice(3) - .join('\n') - .startsWith(shouldBeIncluded) - ).toBeTruthy(); + expect(generatedContent.split('\n')[4]).toStrictEqual(shouldBeIncluded); expect(generatedContent).toMatchInlineSnapshot(` "/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY + * GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY */ + // This should be included export type Maybe = T | null; @@ -121,13 +117,6 @@ test('generates code and writes existing file', async () => { __typename?: 'Subscription'; } - export interface SchemaObjectTypes { - Mutation: Mutation; - Query: Query; - Subscription: Subscription; - } - export type SchemaObjectTypesNames = 'Mutation' | 'Query' | 'Subscription'; - export interface GeneratedSchema { query: Query; mutation: Mutation; @@ -172,18 +161,15 @@ test('creates dir, generates code and writes new file', async () => { } ); - expect( - generatedContentSchema - .split('\n') - .slice(3) - .join('\n') - .startsWith(shouldBeIncluded) - ).toBeTruthy(); + expect(generatedContentSchema.split('\n')[4]).toStrictEqual( + shouldBeIncluded + ); expect(generatedContentSchema).toMatchInlineSnapshot(` "/** - * GQTY AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY + * GQty AUTO-GENERATED CODE: PLEASE DO NOT MODIFY MANUALLY */ + // This should be included export type Maybe = T | null; @@ -229,13 +215,6 @@ test('creates dir, generates code and writes new file', async () => { __typename?: 'Subscription'; } - export interface SchemaObjectTypes { - Mutation: Mutation; - Query: Query; - Subscription: Subscription; - } - export type SchemaObjectTypesNames = 'Mutation' | 'Query' | 'Subscription'; - export interface GeneratedSchema { query: Query; mutation: Mutation; @@ -259,23 +238,19 @@ test('creates dir, generates code and writes new file', async () => { expect(generatedContentClient).toMatchInlineSnapshot(` "/** - * GQTY: You can safely modify this file and Query Fetcher based on your needs + * GQty: You can safely modify this file based on your needs. */ import { createReactClient } from '@gqty/react'; - - import type { QueryFetcher } from 'gqty'; - import { createClient } from 'gqty'; - import type { - GeneratedSchema, - SchemaObjectTypes, - SchemaObjectTypesNames, + import { Cache, GQtyError, createClient, type QueryFetcher } from 'gqty'; + import { + generatedSchema, + scalarsEnumsHash, + type GeneratedSchema, } from './schema.generated'; - import { generatedSchema, scalarsEnumsHash } from './schema.generated'; const queryFetcher: QueryFetcher = async function ( - query, - variables, + { query, variables, operationName }, fetchOptions ) { // Modify "/api/graphql" if needed @@ -287,32 +262,68 @@ test('creates dir, generates code and writes new file', async () => { body: JSON.stringify({ query, variables, + operationName, }), mode: 'cors', ...fetchOptions, }); - const json = await response.json(); - - return json; + if (response.status >= 400) { + throw new GQtyError( + \`GraphQL endpoint responded with HTTP status \${response.status}.\` + ); + } + + const text = await response.text(); + + try { + return JSON.parse(text); + } catch { + throw new GQtyError( + \`Malformed JSON response: \${ + text.length > 50 ? text.slice(0, 50) + '...' : text + }\` + ); + } }; - export const client = createClient< - GeneratedSchema, - SchemaObjectTypesNames, - SchemaObjectTypes - >({ + const cache = new Cache( + undefined, + /** + * Default option is immediate cache expiry but keep it for 5 minutes, + * allowing soft refetches in background. + */ + { + maxAge: 0, + staleWhileRevalidate: 5 * 60 * 1000, + normalization: true, + } + ); + + export const client = createClient({ schema: generatedSchema, - scalarsEnumsHash, - queryFetcher, + scalars: scalarsEnumsHash, + cache, + fetchOptions: { + fetcher: queryFetcher, + }, }); - const { query, mutation, mutate, subscription, resolved, refetch, track } = - client; - - export { query, mutation, mutate, subscription, resolved, refetch, track }; + // Core functions + export const { resolve, subscribe, schema } = client; - const { + // Legacy functions + export const { + query, + mutation, + mutate, + subscription, + resolved, + refetch, + track, + } = client; + + export const { graphql, useQuery, usePaginatedQuery, @@ -326,29 +337,11 @@ test('creates dir, generates code and writes new file', async () => { prepareQuery, } = createReactClient(client, { defaults: { - // Set this flag as "true" if your usage involves React Suspense - // Keep in mind that you can overwrite it in a per-hook basis - suspense: false, - - // Set this flag based on your needs - staleWhileRevalidate: false, + // Enable Suspense, you can override this option for each hook. + suspense: true, }, }); - export { - graphql, - useQuery, - usePaginatedQuery, - useTransactionQuery, - useLazyQuery, - useRefetch, - useMutation, - useMetaState, - prepareReactRender, - useHydrateCache, - prepareQuery, - }; - export * from './schema.generated'; " `); @@ -364,9 +357,11 @@ test('generates code and writes existing file', async () => { try { try { + const { config } = await loadOrGenerateConfig(); await writeGenerate( (await testAppPromise).getEnveloped().schema, - tempDir.clientPath + tempDir.clientPath, + config ); throw Error("shouldn't react"); diff --git a/packages/gqty/CHANGELOG.md b/packages/gqty/CHANGELOG.md index 45f47b074..8f5e58267 100644 --- a/packages/gqty/CHANGELOG.md +++ b/packages/gqty/CHANGELOG.md @@ -1,11 +1,42 @@ # gqty +## 3.0.0-alpha.0 + +### Major Changes + +- Added "Legacy" prefix to deprecated types +- Added new logging interface for `@gqty/logger` +- `backupPersistence()` and `restorePersistence()` is now replaced with + `persist()`, `restore()` and `restoreAsync()`. +- QueryFetcher now accepts QueryPayload instead of 3 parameters +- Remade `Cache` with expiry, normalization and persistence +- Axed `Scheduler`, `Interceptor` and `EventHandler` +- Reworked `Accessor` and added scoped context +- Replaced `@gqty/subscriptions` with `graphql-ws` and `graphql-sse` +- Rewritten `Selection` class +- Introduced `resolve()` and `subscribe()` API +- Replaced `lodash` with `just-*` and dropped `@gqty/utils` +- Deprecated `resolved()`, `inlineResolved()`, `mutate()`, `track()`, + `prefetch()` and `refetch()` +- Replace variable serializer with object-hash, now with shortened alias + +### Minor Changes + +- f39bb450: Add `operationName` option to `resolved()` and `inlineResolved()`. +- Added `$meta` API +- Added `name` in `GQtyError` for better logging + +### Patch Changes + +- 595ec843: Remove alias without args + ## 2.3.0 ### Minor Changes - 6ecd2b0: Use lodash mergeWith from "@gqty/utils" package -- 59d38ad: Change variable aliasing to be deterministic with cached and sliced sha1 hashing +- 59d38ad: Change variable aliasing to be deterministic with cached and sliced + sha1 hashing ### Patch Changes @@ -17,9 +48,14 @@ ### Minor Changes -- dd47986: New option `"fetchOptions"`, added to the [`resolved`](https://gqty.dev/docs/client/fetching-data#resolved) client function, that allows for giving extra configurations to the expected [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) call. +- dd47986: New option `"fetchOptions"`, added to the + [`resolved`](https://gqty.dev/docs/client/fetching-data#resolved) client + function, that allows for giving extra configurations to the expected + [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) call. - This enables, for example, the customization of the headers sent for a specific query or to pass an [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal). + This enables, for example, the customization of the headers sent for a + specific query or to pass an + [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal). ```ts import { resolved, query } from '../gqty'; @@ -39,7 +75,8 @@ }); ``` - For already generated clients to be able to use this new option, it is required manually modify the existing query fetcher, to do for example: + For already generated clients to be able to use this new option, it is + required manually modify the existing query fetcher, to do for example: ```ts const queryFetcher: QueryFetcher = async function ( @@ -69,7 +106,9 @@ ### Minor Changes -- 6df0318: Add new Core configuration `"depthLimit"` (by default is `15`), needed to prevent possible infinite recursion, after the specified depth is reached, the proxy creation is stopped returning `null`. +- 6df0318: Add new Core configuration `"depthLimit"` (by default is `15`), + needed to prevent possible infinite recursion, after the specified depth is + reached, the proxy creation is stopped returning `null`. ## 2.0.4 @@ -92,7 +131,8 @@ - d014462: remove unused dependency - 6b60991: improve normalization key auto-fetch logic - 5cc001f: Fix: Prevent duplicated concurrent scheduler fetch -- d6da2ae: `Variables`/`Args` utility type to re-use variables types from any field with arguments. +- d6da2ae: `Variables`/`Args` utility type to re-use variables types from any + field with arguments. You can use either `Variables` or `Args`. @@ -105,7 +145,7 @@ return query.user(args).name; } - function getUserEmail(args: Args) { + function getUserEmail(args: Args<(typeof query)['user']>) { return query.user(args).email; } ``` @@ -114,14 +154,16 @@ ### Patch Changes -- 28e2c09: [Bug fixing breaking change] Fix types and retrieval of unions/interfaces of different object types +- 28e2c09: [Bug fixing breaking change] Fix types and retrieval of + unions/interfaces of different object types ## 2.0.0 ### Major Changes - 3586c45: Remove undocumented "buildSelections" -- 3586c45: Change previous unstable `Unions` support with new `"$on"` property with support for both `Unions` & `Interfaces` +- 3586c45: Change previous unstable `Unions` support with new `"$on"` property + with support for both `Unions` & `Interfaces` ## 1.1.3 @@ -145,7 +187,8 @@ ### Minor Changes -- a216972: add "track" helper, specially useful subscriptions and tracking cache state +- a216972: add "track" helper, specially useful subscriptions and tracking cache + state ## 1.0.3 @@ -184,10 +227,13 @@ ### Patch Changes - 4a3d5ef: divide subscriptions with only one top level field -- af6a437: - Rename `gqtyConfig` to `GQtyConfig` (so it's consistent with the new logo) +- af6a437: - Rename `gqtyConfig` to `GQtyConfig` (so it's consistent with the + new logo) - Rename `gqtyError` to `GQtyError` - - Remove `endpoint` option from the configuration, and instead always defaults to introspection one - - It's confusing why theres two of them, and the user can change it later by modifying the file anyway + - Remove `endpoint` option from the configuration, and instead always defaults + to introspection one + - It's confusing why theres two of them, and the user can change it later by + modifying the file anyway ## 2.0.12 @@ -207,7 +253,8 @@ ### Patch Changes -- 65c4d32: add resolved "onEmptyResolve" callback and warn on empty "resolved" calls +- 65c4d32: add resolved "onEmptyResolve" callback and warn on empty "resolved" + calls ## 2.0.9 diff --git a/packages/gqty/package.json b/packages/gqty/package.json index 863f87eb7..0c96dc867 100644 --- a/packages/gqty/package.json +++ b/packages/gqty/package.json @@ -9,13 +9,18 @@ }, "license": "MIT", "author": "PabloSzx ", + "maintainers": [ + "Vicary Archangel " + ], "sideEffects": false, "exports": { ".": { + "types": "./dist/index.d.ts", "require": "./dist/index.js", "import": "./dist/index.mjs" }, "./*": { + "types": "./dist/*.d.ts", "require": "./dist/*.js", "import": "./dist/*.mjs" } @@ -31,7 +36,6 @@ "analyze": "size-limit --why", "build": "bob-esbuild build", "dev": "bob-esbuild watch", - "playground": "jest test/playground.test.ts --watch --no-coverage", "prepare": "bob-esbuild build", "postpublish": "gh-release", "size": "size-limit", @@ -42,41 +46,58 @@ "test:watch-coverage": "rimraf coverage && mkdirp coverage/lcov-report && concurrently --raw \"jest --watchAll\" \"serve -l 8787 coverage/lcov-report\" \"wait-on tcp:8787 coverage/lcov-report/index.html && open-cli http://localhost:8787\"" }, "dependencies": { - "@gqty/utils": "workspace:^1.0.0" + "flatted": "^3.2.7", + "just-extend": "^6.2.0", + "just-has": "^2.3.0", + "just-memoize": "^2.2.0", + "just-safe-get": "^4.2.0", + "just-safe-set": "^4.2.1", + "multidict": "^1.0.6", + "object-hash": "^3.0.0", + "p-defer": "^3.0.0", + "p-lazy": "^3.1.0" }, "devDependencies": { "@size-limit/preset-small-lib": "^8.2.4", "@types/mkdirp": "^1.0.2", "@types/node": "^18.15.5", - "@types/react": "^17.0.53", - "@types/react-dom": "^18.0.11", + "@types/object-hash": "^3.0.2", "@types/wait-on": "^5.3.1", "@types/ws": "^8.5.4", - "bob-esbuild-cli": "^4.0.0", + "bob-esbuild-cli": "5.0.0-alpha-227aebc.0", "concurrently": "^7.6.0", "cross-env": "^7.0.3", "esbuild": "^0.17.12", "graphql": "^16.6.0", + "graphql-sse": "^2.1.0", + "graphql-ws": "^5.11.3", "jest": "^29.5.0", + "just-memoize": "^2.2.0", "mkdirp": "^2.1.5", "open-cli": "^7.2.0", - "react": "^17.0.2", - "react-dom": "^17.0.2", "rimraf": "^4.4.0", "serve": "^14.2.0", "size-limit": "^8.2.4", "test-utils": "workspace:^0.1.0", "tsc-watch": "^6.0.0", - "typescript": "^4.9.5", + "type-fest": "^3.9.0", "wait-on": "^7.0.1", "ws": "^8.13.0" }, "peerDependencies": { - "graphql": "*" + "graphql": "*", + "graphql-sse": "^2.1.0", + "graphql-ws": "^5.11.3" }, "peerDependenciesMeta": { "graphql": { "optional": true + }, + "graphql-sse": { + "optional": true + }, + "graphql-ws": { + "optional": true } }, "engines": { diff --git a/packages/gqty/src/Accessor/index.ts b/packages/gqty/src/Accessor/index.ts index 91b8282a2..7086377ee 100644 --- a/packages/gqty/src/Accessor/index.ts +++ b/packages/gqty/src/Accessor/index.ts @@ -1,798 +1,142 @@ -import type { ProxyAccessor } from '../Cache'; -import type { InnerClientState } from '../Client/client'; +import type { BaseGeneratedSchema, SchemaContext } from '../Client'; import { GQtyError } from '../Error'; -import { - DeepPartial, - parseSchemaType, - Schema, - SchemaUnionsKey, - Type, -} from '../Schema'; -import { Selection, SelectionType } from '../Selection'; -import { - decycle, - isEmptyObject, - isInteger, - isObject, - isObjectWithType, - retrocycle, -} from '../Utils'; - -const ProxySymbol = Symbol('gqty-proxy'); - -export class SchemaUnion { - constructor( - /** union name */ - public name: string, - public types: Record< - /** object type name */ - string, - /** schema type of object type */ - Record - >, - /** - * Proxy target, pre-made for performance - */ - public fieldsProxy: Record - ) {} -} - -export type SchemaUnions = { - unions: Record; - unionObjectTypesForSelections: Record; -}; - -export function createSchemaUnions(schema: Readonly): SchemaUnions { - const unionObjectTypesForSelections: Record = {}; - - const unions = Object.entries( - schema[SchemaUnionsKey] /* istanbul ignore next */ || {} - ).reduce((acum, [name, unionTypes]) => { - const types = unionTypes.reduce((typeAcum, objectTypeName) => { - unionObjectTypesForSelections[objectTypeName] ||= [objectTypeName]; - const objectType = schema[objectTypeName]; - /* istanbul ignore else */ - if (objectType) { - typeAcum[objectTypeName] = objectType; - } - return typeAcum; - }, {} as SchemaUnion['types']); - - acum[name] = new SchemaUnion( - name, - types, - unionTypes.reduce((fieldsAcum, fieldName) => { - fieldsAcum[fieldName] = ProxySymbol; - return fieldsAcum; - }, {}) - ); - - return acum; - }, {}); - - return { - unions, - unionObjectTypesForSelections, - }; -} - -export interface SetCache { - (selection: Selection, data: unknown): void; - ( - accessor: A, - data: DeepPartial | null | undefined - ): void; - unknown>( - accessor: B, - args: Parameters['0'], - data: DeepPartial> | null | undefined - ): void; -} - -export interface AssignSelections { - ( - source: A | null | undefined, - target: B | null | undefined - ): void; -} - -export interface AccessorCreators< - GeneratedSchema extends { - query: object; - mutation: object; - subscription: object; - } -> { - createAccessor: ( - schemaValue: Schema[string] | SchemaUnion, - prevSelection: Selection, - unions?: string[] | undefined, - parentTypename?: string | undefined - ) => ProxyAccessor | null; - createArrayAccessor: ( - schemaValue: Schema[string] | SchemaUnion, - prevSelection: Selection, - unions?: string[] | undefined, - parentTypename?: string | undefined - ) => ProxyAccessor | null; - assignSelections: AssignSelections; - setCache: SetCache; - query: GeneratedSchema['query']; - mutation: GeneratedSchema['mutation']; - subscription: GeneratedSchema['subscription']; -} - -export function createAccessorCreators< - GeneratedSchema extends { - query: object; - mutation: object; - subscription: object; - } = never ->(innerState: InnerClientState): AccessorCreators { - const { - accessorCache, - selectionManager, - interceptorManager, - scalarsEnumsHash, - schema, - eventHandler, - schemaUnions: { unions: schemaUnions, unionObjectTypesForSelections }, - clientCache: schedulerClientCache, - scheduler: { - errors: { map: schedulerErrorsMap }, - }, - normalizationHandler, - depthLimit, - } = innerState; - - const ResolveInfoSymbol = Symbol(); - - interface ResolveInfo { - key: string | number; - prevSelection: Selection; - argTypes: Record | undefined; - } - - const proxySymbolArray = [ProxySymbol]; - - function extractDataFromProxy(value: unknown): unknown { - if (accessorCache.isProxy(value)) { - const accessorSelection = accessorCache.getProxySelection(value); - - // An edge case hard to reproduce - /* istanbul ignore if */ - if (!accessorSelection) return; - - const selectionCache = - innerState.clientCache.getCacheFromSelection(accessorSelection); - - if (selectionCache === undefined) return; - - return selectionCache; - } else if (isObject(value)) { - /** - * This is necessary to be able to extract data from proxies - * inside user-made objects and arrays - */ - return retrocycle(JSON.parse(JSON.stringify(value))); - } - return value; - } - - function setCache(selection: Selection, data: unknown): void; - function setCache( - accessor: A, - data: DeepPartial | null | undefined - ): void; - function setCache unknown>( - accessor: B, - args: Parameters['0'], - data: DeepPartial> | null | undefined - ): void; - function setCache( - accessorOrSelection: unknown, - dataOrArgs: unknown, - possibleData?: unknown - ) { - if (accessorOrSelection instanceof Selection) { - const data = extractDataFromProxy(dataOrArgs); - innerState.clientCache.setCacheFromSelection(accessorOrSelection, data); - eventHandler.sendCacheChange({ - data, - selection: accessorOrSelection, - }); - } else if (typeof accessorOrSelection === 'function') { - if (dataOrArgs !== undefined && typeof dataOrArgs !== 'object') { - throw new GQtyError('Invalid arguments of type: ' + typeof dataOrArgs, { - caller: setCache, - }); - } - - const args = dataOrArgs as Record; - - const resolveInfo = ( - accessorOrSelection as Function & { - [ResolveInfoSymbol]?: ResolveInfo; +import type { GeneratedSchemaObject } from '../Schema'; +import { Selection } from '../Selection'; +import { $meta } from './meta'; +import { createObjectAccessor } from './resolve'; + +export { $meta } from './meta'; + +export function createSchemaAccessor( + context: SchemaContext +): TSchema { + const selectionCache = new Map(); + + return new Proxy( + { + query: { __typename: 'Query' }, + mutation: { __typename: 'Mutation' }, + subscription: { __typename: 'Subscription' }, + } as unknown as TSchema, + { + get(target, key: string) { + if (key === 'toJSON') { + return () => context.cache.toJSON(); } - )[ResolveInfoSymbol]; - if (!resolveInfo) { - throw new GQtyError('Invalid gqty function', { - caller: setCache, - }); - } - - const selection = innerState.selectionManager.getSelection({ - ...resolveInfo, - args: isEmptyObject(args) ? undefined : args, - }); - - const data = extractDataFromProxy(possibleData); - - innerState.clientCache.setCacheFromSelection(selection, data); - eventHandler.sendCacheChange({ - data, - selection, - }); - } else if (accessorCache.isProxy(accessorOrSelection)) { - const selection = accessorCache.getProxySelection(accessorOrSelection); - - // An edge case hard to reproduce - /* istanbul ignore if */ - if (!selection) { - throw new GQtyError('Invalid proxy selection', { - caller: setCache, - }); - } - - const data = extractDataFromProxy(dataOrArgs); - - innerState.clientCache.setCacheFromSelection(selection, data); - eventHandler.sendCacheChange({ - data, - selection, - }); - } else { - throw new GQtyError('Invalid gqty proxy', { - caller: setCache, - }); - } - } - - function createArrayAccessor( - schemaValue: Schema[string] | SchemaUnion, - prevSelection: Selection, - unions?: string[], - parentTypename?: string - ) { - const arrayCacheValue = innerState.clientCache.getCacheFromSelection< - undefined | null | unknown[] - >(prevSelection); - if (innerState.allowCache && arrayCacheValue === null) return null; - - const proxyValue: unknown[] = - arrayCacheValue === undefined || - !Array.isArray(arrayCacheValue) || - (!innerState.allowCache && - Array.isArray(arrayCacheValue) && - arrayCacheValue.length === 0) - ? proxySymbolArray - : arrayCacheValue; - - const accessor = accessorCache.getArrayAccessor( - prevSelection, - proxyValue, - () => { - return new Proxy(proxyValue, { - set(_target, key: string, value: unknown) { - let index: number | undefined; - - try { - index = parseInt(key); - } catch (err) {} - - if (isInteger(index)) { - const selection = innerState.selectionManager.getSelection({ - key: index, - prevSelection, - }); - - const data = extractDataFromProxy(value); - - innerState.clientCache.setCacheFromSelection(selection, data); - - eventHandler.sendCacheChange({ - selection, - data, - }); - - return true; - } - - if (key === 'length') { - if (!Array.isArray(arrayCacheValue)) { - console.warn( - 'Invalid array assignation to unresolved proxy array' - ); - return true; - } - - Reflect.set(arrayCacheValue, key, value); - - eventHandler.sendCacheChange({ - selection: prevSelection, - data: innerState.clientCache.getCacheFromSelection( - prevSelection - ), - }); - return true; - } - - throw TypeError('Invalid array assignation: ' + key); - }, - get(target, key: string, receiver) { - if (key === 'length') { - if (proxyValue === proxySymbolArray) { - const lengthSelection = - innerState.selectionManager.getSelection({ - key: 0, - prevSelection, - }); - const childAccessor = createAccessor( - schemaValue, - lengthSelection, - unions, - parentTypename - ); - - accessorCache.addAccessorChild(accessor, childAccessor); - - if (childAccessor) Reflect.get(childAccessor, '__typename'); - } - - return target.length; - } else if (key === 'toJSON') { - return () => - decycle( - innerState.clientCache.getCacheFromSelection( - prevSelection, - [] - ) - ); - } - - let index: number | undefined; - - try { - index = parseInt(key); - } catch (err) {} - - if (isInteger(index)) { - const selection = innerState.selectionManager.getSelection({ - key: index, - prevSelection, - }); - - // For the subscribers of data changes - interceptorManager.addSelectionCache(selection); - - if ( - innerState.allowCache && - arrayCacheValue !== undefined && - arrayCacheValue?.[index] == null - ) { - /** - * If cache is enabled and arrayCacheValue[index] is 'null' or 'undefined', return it - */ - return arrayCacheValue?.[index]; - } - - const childAccessor = createAccessor( - schemaValue, - selection, - unions, - parentTypename - ); - - accessorCache.addAccessorChild(accessor, childAccessor); - - return childAccessor; - } - - return Reflect.get(target, key, receiver); + if ( + !Reflect.has(target, key) || + !Reflect.get(target[key as keyof TSchema] as object, '__typename') || + !context.schema[key] + ) + return; + + // Reuse root selections and their internally cached children, accessors + // can in turn be safely cached by selections but still scoped. + // + // TODO: This is a half-way done solution for nullable objects, which + // returns early and removes the possibility to make child selections. + const selection = + selectionCache.get(key) ?? + Selection.createRoot(key, { aliasLength: context.aliasLength }); + selectionCache.set(key, selection); + + return createObjectAccessor({ + context, + cache: { + data: target[key as keyof BaseGeneratedSchema], + expiresAt: Infinity, }, + selection, + type: { __type: key }, }); - } - ); - - return accessor; - } - - const notFoundObjectKey = {}; - const nullObjectKey = {}; - - const unionsCacheValueMap = new WeakMap>(); - - function getCacheValueReference( - cacheValue: unknown, - unions: string[] | undefined - ) { - if (unions === undefined) return cacheValue; - - const mapKey: object = - cacheValue == null - ? nullObjectKey - : typeof cacheValue === 'object' - ? cacheValue! - : notFoundObjectKey; - - let cacheValueMap = unionsCacheValueMap.get(unions); - - if (!cacheValueMap) { - cacheValueMap = new WeakMap(); - cacheValueMap.set(unions, mapKey); - } - - let cacheReference = cacheValueMap.get(mapKey); - - if (!cacheReference) { - cacheReference = {}; - cacheValueMap.set(mapKey, cacheReference); + }, } + ); +} - return cacheReference; +/** + * Handler for object level data updates. + */ +export const setCache = ( + accessor: TData, + data: Partial +) => { + const meta = $meta(accessor); + if (!meta) { + throw new GQtyError(`Subject must be an accessor.`); } - function getCacheTypename(selection: Selection): string | void { - const cacheValue: unknown = - innerState.clientCache.getCacheFromSelection(selection); - - if (isObjectWithType(cacheValue)) return cacheValue.__typename; - - interceptorManager.addSelection( - innerState.selectionManager.getSelection({ - key: '__typename', - prevSelection: selection, - }) + data = ($meta(data)?.cache.data as TData | undefined) ?? data; + if (!data || typeof data !== 'object') { + throw new GQtyError( + `Data must be a subset of the schema object, got type: ${typeof data}.` ); } - const emptyScalarArray = Object.freeze([]); + meta.cache.data = data; - const querySelection = selectionManager.getSelection({ - key: 'query', - type: SelectionType.Query, - }); - - const mutationSelection = selectionManager.getSelection({ - key: 'mutation', - type: SelectionType.Mutation, - }); - - const subscriptionSelection = selectionManager.getSelection({ - key: 'subscription', - type: SelectionType.Subscription, - }); - - function createAccessor( - schemaValue: Schema[string] | SchemaUnion, - prevSelection: Selection, - unions?: string[], - parentTypename?: string - ) { - let cacheValue: unknown = - innerState.clientCache.getCacheFromSelection(prevSelection); - if (innerState.allowCache && cacheValue === null) return null; + Object.assign(accessor, data); +}; - const accessor = accessorCache.getAccessor( - prevSelection, - getCacheValueReference(cacheValue, unions), - () => { - const isUnionsInterfaceSelection = Boolean(unions && parentTypename); +/** + * Use another accessor like a fragment, this function takes all children from + * the donor and runs it again on the accessor. + * + * Useful when you want to query the eaxact same fields from a mutation. + */ +export const assignSelections = ( + source: TData | null, + target: TData | null +) => { + if (source === null || target === null) return; + + if ($meta(source) === undefined) { + throw new GQtyError(`Invalid source proxy`); + } - if (normalizationHandler && (parentTypename || unions)) { - if (unions) { - const schemaKeys = normalizationHandler.schemaKeys; + if ($meta(target) === undefined) { + throw new GQtyError(`Invalid target proxy`); + } - for (const objectTypeName of unions) { - const objectNormalizationKeys = schemaKeys[objectTypeName]; - if (objectNormalizationKeys?.length) { - const coFetchSelections = objectNormalizationKeys.map((key) => - innerState.selectionManager.getSelection({ - key, - prevSelection, - unions: unionObjectTypesForSelections[objectTypeName] || [ - objectTypeName, - ], - }) - ); + const sourceSelection = $meta(source)?.selection; + if (!sourceSelection) return; - prevSelection.addCofetchSelections(coFetchSelections); - } - } - } else if (parentTypename) { - const normalizationKeys = - normalizationHandler.schemaKeys[parentTypename]; - if (normalizationKeys?.length) { - const selections = normalizationKeys.map((key) => - innerState.selectionManager.getSelection({ - key, - prevSelection, - }) - ); + if (sourceSelection.children.size === 0) { + if (process.env.NODE_ENV !== 'production') { + console.warn("Source proxy doesn't have any selections made"); + } + } - prevSelection.addCofetchSelections(selections); - } + const stack = new Set(sourceSelection.children.values()); + + for (const it of stack) { + if (it.children.size === 0) { + // Replay the selection on the accessor + let currentNode: TData | undefined; + for (const selection of it.ancestry) { + if (currentNode === undefined) { + if (selection !== sourceSelection) continue; + + currentNode = target; + } else { + if (selection.input) { + currentNode = currentNode[selection.key](selection.input); + } else { + currentNode = currentNode[selection.key]; } } - - const autoFetchUnionTypename = isUnionsInterfaceSelection - ? () => { - if (isUnionsInterfaceSelection) { - interceptorManager.addSelection( - innerState.selectionManager.getSelection({ - key: '__typename', - prevSelection, - }) - ); - } - } - : undefined; - - const proxyValue = - schemaValue instanceof SchemaUnion - ? schemaValue.fieldsProxy - : Object.keys(schemaValue).reduce((acum, key) => { - acum[key] = ProxySymbol; - return acum; - }, {} as Record); - - return new Proxy(proxyValue, { - set(_target, key: string, value: unknown) { - if (!proxyValue.hasOwnProperty(key)) - throw TypeError('Invalid proxy assignation'); - - const targetSelection = innerState.selectionManager.getSelection({ - key, - prevSelection, - unions, - }); - - const data = extractDataFromProxy(value); - - innerState.clientCache.setCacheFromSelection(targetSelection, data); - eventHandler.sendCacheChange({ - data, - selection: targetSelection, - }); - - return true; - }, - get(_target, key: string, _receiver) { - if (key === 'toJSON') - return () => - decycle<{}>( - innerState.clientCache.getCacheFromSelection( - prevSelection, - {} - ) - ); - - if (schemaValue instanceof SchemaUnion) { - if (!(key in schemaValue.types)) return; - - if (innerState.allowCache) { - const typename = getCacheTypename(prevSelection); - - if (typename && typename !== key) return; - } - - return createAccessor( - schemaValue.types[key], - prevSelection, - [key], - key - ); - } - - if (!proxyValue.hasOwnProperty(key)) return; - - const { __type, __args } = schemaValue[key]; - let { pureType, isArray } = parseSchemaType(__type); - - const resolve = (args?: { - argValues?: Record; - argTypes: Record; - }): unknown => { - const selection = innerState.selectionManager.getSelection({ - key, - prevSelection, - args: args != null ? args.argValues : undefined, - argTypes: args != null ? args.argTypes : undefined, - unions, - }); - - if (selection.selectionsList.length > depthLimit) return null; - - // For the subscribers of data changes - interceptorManager.addSelectionCache(selection); - - if (scalarsEnumsHash[pureType]) { - const cacheValue = - innerState.clientCache.getCacheFromSelection(selection); - - accessorCache.addSelectionToAccessorHistory( - accessor, - selection - ); - - if (cacheValue === undefined) { - innerState.foundValidCache = false; - - let unionTypename: string | undefined | void; - const isUnionWithDifferentTypeResult = - isUnionsInterfaceSelection - ? !!(unionTypename = getCacheTypename(prevSelection)) && - unionTypename !== parentTypename - : false; - - /** - * If cache was not found & the selection doesn't have errors, - * add the selection to the queue, except when querying unions or interfaces - * and the __typename doesn't correspond to the target object type - */ - if ( - selection.type === SelectionType.Subscription || - (!isUnionWithDifferentTypeResult && - (schedulerClientCache !== innerState.clientCache || - !schedulerErrorsMap.has(selection))) - ) { - interceptorManager.addSelection(selection); - autoFetchUnionTypename?.(); - } - - return isArray ? emptyScalarArray : undefined; - } else if ( - !innerState.allowCache || - selection.type === SelectionType.Subscription - ) { - // Or if you are making the network fetch always - interceptorManager.addSelection(selection); - autoFetchUnionTypename?.(); - } else { - // Support cache-and-network / stale-while-revalidate pattern - interceptorManager.addSelectionCacheRefetch(selection); - } - - return cacheValue; - } - - let typeValue: Record | SchemaUnion = - schema[pureType]; - - if (!typeValue && pureType.startsWith('$')) { - typeValue = schemaUnions[(pureType = pureType.slice(1))]; - } - - if (typeValue) { - const childAccessor = ( - isArray ? createArrayAccessor : createAccessor - )(typeValue, selection, undefined, pureType); - - accessorCache.addAccessorChild(accessor, childAccessor); - - return childAccessor; - } - - throw new GQtyError( - `GraphQL Type not found: ${pureType}, available fields: "${Object.keys( - schemaValue - ).join(' | ')}"` - ); - }; - - if (__args) { - const resolveInfo: ResolveInfo = { - key, - prevSelection, - argTypes: __args, - }; - - return Object.assign( - function ProxyFn(argValues?: Record) { - return resolve({ - argValues, - argTypes: __args, - }); - }, - { - [ResolveInfoSymbol]: resolveInfo, - } - ); - } - - return resolve(); - }, - }); } - ); - - return accessor; - } - - const query: GeneratedSchema['query'] = createAccessor( - schema.query, - querySelection - )!; - const mutation: GeneratedSchema['mutation'] = createAccessor( - schema.mutation, - mutationSelection - )!; - const subscription: GeneratedSchema['subscription'] = createAccessor( - schema.subscription, - subscriptionSelection - )!; - - function assignSelections( - source: A | null | undefined, - target: B | null | undefined - ): void { - if (source == null || target == null) return; - - let sourceSelection: Selection; - let targetSelection: Selection; - - if ( - !accessorCache.isProxy(source) || - !(sourceSelection = accessorCache.getProxySelection(source)!) - ) - throw new GQtyError('Invalid source proxy', { - caller: assignSelections, - }); - if ( - !accessorCache.isProxy(target) || - !(targetSelection = accessorCache.getProxySelection(target)!) - ) - throw new GQtyError('Invalid target proxy', { - caller: assignSelections, - }); - - const sourceSelections = accessorCache.getSelectionSetHistory(source); - - if (!sourceSelections) { - if (process.env.NODE_ENV !== 'production') { - console.warn("Source proxy doesn't have any selections made"); - } - return; - } - - for (const selection of sourceSelections) { - let mappedSelection = targetSelection; - const filteredSelections = selection.selectionsList.filter( - (value) => !sourceSelection.selectionsList.includes(value) - ); - - for (const { key, args, argTypes } of filteredSelections) { - mappedSelection = innerState.selectionManager.getSelection({ - key, - args, - argTypes, - prevSelection: mappedSelection, - }); + } else { + for (const [, child] of it.children) { + stack.add(child); } - - accessorCache.addSelectionToAccessorHistory(target, mappedSelection); - interceptorManager.addSelection(mappedSelection); } } +}; - return { - createAccessor, - createArrayAccessor, - assignSelections, - setCache, - query, - mutation, - subscription, - }; -} +/* TODO: Selection - use() + * + * Replace `assignSelection` with `Selection.use(Selection)`, + * `Selection.getLeafNodes()` should comes in handy. + */ diff --git a/packages/gqty/src/Accessor/meta.ts b/packages/gqty/src/Accessor/meta.ts new file mode 100644 index 000000000..3aad8f63d --- /dev/null +++ b/packages/gqty/src/Accessor/meta.ts @@ -0,0 +1,21 @@ +import type { CacheDataContainer, CacheNode } from '../Cache'; +import type { SchemaContext } from '../Client'; +import type { Type } from '../Schema'; +import type { Selection } from '../Selection'; + +export type Meta = { + context: SchemaContext; + cache: CacheDataContainer; + selection: Selection; + /** Object type definition from the geneated schema. */ + type: Type; +}; + +/** Pun-intended, a universe of metadata. */ +const metaverse = new WeakMap(); + +export const $setMeta = (accessor: object, meta: Meta) => { + metaverse.set(accessor, meta); +}; + +export const $meta = (accessor: T) => metaverse.get(accessor); diff --git a/packages/gqty/src/Accessor/resolve.ts b/packages/gqty/src/Accessor/resolve.ts new file mode 100644 index 000000000..c58b0410d --- /dev/null +++ b/packages/gqty/src/Accessor/resolve.ts @@ -0,0 +1,554 @@ +import type { CacheDataContainer, CacheNode, CacheObject } from '../Cache'; +import { flattenObject } from '../Cache/crawl'; +import { isCacheObject } from '../Cache/utils'; +import { GQtyError } from '../Error'; +import { + SchemaUnionsKey, + parseSchemaType, + type GeneratedSchemaObject, + type Type, +} from '../Schema'; +import type { Selection } from '../Selection'; +import { isPlainObject } from '../Utils'; +import type { Meta } from './meta'; +import { $meta, $setMeta } from './meta'; +import { createSkeleton, isSkeleton } from './skeleton'; + +const verbose = process.env.NODE_ENV !== 'production'; + +/** + * Check provided accessor with the new selection, returns appropriate + * accessors, data skeleton or cached value according to the generated schema. + */ +export const resolve = ( + accessor: GeneratedSchemaObject, + /** Incoming new selection to check against the accessor. */ + selection: Selection, + __type: Type['__type'] +) => { + const meta = $meta(accessor); + if (!meta) return; + + const { context } = meta; + const { alias, key, isUnion, cacheKeys } = selection; + const isNumericSelection = +key === +key; + + if (cacheKeys.length >= context.depthLimit) { + if (verbose) { + throw new GQtyError( + `Depth limit reached at ${cacheKeys.join( + '.' + )}, ignoring further selections.` + ); + } + + return; + } + + const cache: CacheDataContainer = + selection.parent === selection.root && key !== '__typename' + ? // The way we structure the cache for SWR requires special treatment + // for 2nd level selections, e.g. query.hello, mutation.update()... etc. + ensureCache(cacheKeys[0], cacheKeys[1], meta) + : Object.defineProperties( + { data: undefined, expiresAt: Infinity }, + Object.getOwnPropertyDescriptors(meta.cache) + ); + + let data = cache.data; + + const { pureType, isArray, isNullable } = parseSchemaType(__type); + const type = context.schema[pureType]; + + // Interfaces & unions pass through the data to children. + if ( + !isUnion && + selection.root !== selection && + (selection.root !== selection.parent || key === '__typename') && + data !== null + ) { + if (Array.isArray(data)) { + if (verbose && !isNumericSelection) { + console.warn(`[GQty] Accessing arrays with non-numeric key "${key}".`); + } + + data = data[+key]; + } else if (typeof data === 'object') { + data = data[alias ?? key]; + } + } + + // nullable types + if (data === null) { + if (!isNullable) { + throw new GQtyError(`Cached null for non-nullable type ${pureType}.`); + } + + return null; + } + + if (!type) { + // Scalar and scalar arrays + if (context.scalars[pureType]) { + // Force expired caches, this happens when users keep intermediate + // accessors before a cache update. When properties of these stale + // accessors are accessed, they should read new data from the cache. + if (cache.expiresAt === -Infinity) { + data = context.cache.get( + selection.cacheKeys.join('.'), + context.cacheOptions + )?.data; + } + + context.select(selection, { ...cache, data }); + + return isArray ? (Array.isArray(data) ? data : [undefined]) : data; + } + + // Interfaces and unions ($on) + const unions = context.schema[SchemaUnionsKey]?.[pureType.slice(1)]; + if (unions?.length) { + return createUnionAccessor({ + context, + cache: meta.cache, + possibleTypes: unions, + selection, + }); + } + + throw new GQtyError(`GraphQL type not found: ${pureType}`); + } + + // Data skeleton + if (data === undefined) { + data = createSkeleton(() => ({})); + + // User is currently getting the array itself, not array items. We wrap the + // skeleton object with a makeshift array. + if (isArray && !isNumericSelection) { + data = createSkeleton(() => [data]); + } + + // When accesing cache roots, put skeletons back in for optimistic updates. + if (cacheKeys.length === 2) { + const [type, field] = cacheKeys; + context.cache.set({ [type]: { [field]: data } }); + } + } + + // Update the cache with skeleton or moulded data + if ( + cacheKeys.length > 2 && + cache.data && + typeof cache.data === 'object' && + !Array.isArray(cache.data) && + !isNumericSelection + ) { + cache.data[alias ?? key] = data; + } + + cache.data = data; + + return isArray && !isNumericSelection + ? createArrayAccessor({ + cache, + context, + selection, + type: { __type: pureType }, + }) + : createObjectAccessor({ + cache, + context, + selection, + type: { __type }, + }); +}; + +export const createUnionAccessor = ({ + context, + cache, + possibleTypes, + selection, +}: Omit & { possibleTypes: readonly string[] }) => { + return new Proxy( + Object.fromEntries(possibleTypes.map((__typename) => [__typename, true])), + { + get(_, __typename) { + if (typeof __typename !== 'string') return; + if (!possibleTypes.includes(__typename)) return; + + const data = cache.data; + if ( + !isSkeleton(data) && + (!isCacheObject(data) || data.__typename !== __typename) + ) + return; + + const type = context.schema[__typename]; + if (!type) return; + + return createObjectAccessor({ + context, + cache, + selection: selection.getChild(__typename, { isUnion: true }), + type: { __type: __typename }, + }); + }, + } + ); +}; + +/** + * Globally defining the proxy handler to avoid accidential scope references. + */ +const objectProxyHandler: ProxyHandler = { + get(currentType: Record, key, proxy) { + if (typeof key !== 'string') return; + + if (key === 'toJSON') { + return () => { + const data = $meta(proxy)?.cache.data; + + if (typeof data !== 'object' || data === null) { + return data; + } + + return Object.entries(data).reduce>( + (prev, [key, value]) => { + if (!isSkeleton(value)) { + prev[key] = value; + } + + return prev; + }, + {} + ); + }; + } + + const meta = $meta(proxy); + if (!meta) return; + + if ( + // Skip Query, Mutation and Subscription + meta.selection.parent !== undefined && + // Prevent infinite recursions + !getIdentityFields(meta).includes(key) + ) { + selectIdentityFields(proxy, currentType); + } + + const targetType = currentType[key]; + if (!targetType || typeof targetType !== 'object') return; + + const { __args, __type } = targetType; + if (__args) { + return (args?: Record) => + resolve( + proxy, + meta.selection.getChild( + key, + args ? { input: { types: __args!, values: args } } : {} + ), + __type + ); + } + + return resolve(proxy, meta.selection.getChild(key), __type); + }, + set(_, key, value, proxy) { + const meta = $meta(proxy); + if (typeof key !== 'string' || !meta) return false; + + const { cache, context, selection } = meta; + + // Extract proxy data, keep the object reference unless users deep clone it. + value = deepMetadata(value) ?? value; + + if (selection.ancestry.length <= 2) { + const [type, field] = selection.cacheKeys; + + if (field) { + const data = + context.cache.get(`${type}.${field}`, context.cacheOptions)?.data ?? + {}; + + if (!isPlainObject(data)) return false; + + data[key] = value; + + context.cache.set({ [type]: { [field]: data } }); + } else { + context.cache.set({ [type]: { [key]: value } }); + } + } + + let result = false; + + if (isCacheObject(cache.data)) { + result = Reflect.set(cache.data, key, value); + } + + /** + * Ported for backward compatability. + * + * Triggering selections via optimistic updates is asking for infinite + * recursions, also it's unnecessarily complicated to infer arrays, + * interfaces and union selections down the selection tree. + * + * If we can't figure out an elegant way to infer selections in future + * iterations, remove it at some point. + */ + for (const [keys, scalar] of flattenObject(value)) { + let currentSelection = selection.getChild(key); + for (const key of keys) { + currentSelection = currentSelection.getChild(key); + } + + context.select(currentSelection, { ...cache, data: scalar }); + } + + return result; + }, +}; + +export type AccessorOptions = { + type: Record; +}; + +export const createObjectAccessor = ( + meta: Meta +) => { + const { + cache: { data }, + context: { schema }, + type: { __type }, + } = meta; + if (data !== undefined && !isCacheObject(data)) { + throw new GQtyError( + `Invalid type ${ + data === null ? 'null' : typeof data + } for object accessors.` + ); + } + + const createAccessor = () => { + const type = schema[parseSchemaType(__type).pureType]; + if (!type) throw new GQtyError(`Invalid schema type ${__type}.`); + + const proxy = new Proxy( + // `type` here for ownKeys proxy trap + type as TSchemaType, + data + ? Object.assign({}, objectProxyHandler, { + getOwnPropertyDescriptor: (target, key) => + Reflect.getOwnPropertyDescriptor(data, key) ?? + Reflect.getOwnPropertyDescriptor(target, key), + } satisfies typeof objectProxyHandler) + : objectProxyHandler + ); + + $setMeta(proxy, meta); + + return proxy; + }; + + return createAccessor(); +}; + +/** Recursively replace proxy accessors with its actual cached value. */ +export const deepMetadata = (input: any) => { + const data = metadata(input); + const stack = new Set([data]); + const seen = new Set(); + + for (const it of stack) { + if (seen.has(it)) continue; + seen.add(it); + + if (Array.isArray(it)) { + for (let [k, v] of it.entries()) { + if (isObject(v)) v = it[k] = metadata(v); + + stack.add(v); + } + } else if (isObject(it)) { + for (let [k, v] of Object.entries(it)) { + if (isObject(v)) v = it[k] = metadata(v); + + stack.add(v); + } + } + } + + return data; + + function metadata>(it: TData): TData { + return ($meta(it)?.cache.data as TData) ?? it; + } + + function isObject(it: any): it is Record { + return typeof it === 'object' && it !== null; + } +}; + +/** + * Read data from cache, creates an empty data slot that never expires when + * target is not found. + * + * `expiresAt` and `swrBefore` is read from cache real-time, allowing stale + * accessor references to keep working. + */ +const ensureCache = ( + type: string, + field: string, + { context: { cache, cacheOptions } }: Meta +) => { + if (!cache.get(`${type}.${field}`, cacheOptions)) { + cache.set({ [type]: { [field]: undefined } }); + } + + const { data } = cache.get(`${type}.${field}`, cacheOptions)!; + + return { + data, + get expiresAt() { + return ( + cache.get(`${type}.${field}`, cacheOptions)?.expiresAt ?? -Infinity + ); + }, + get swrBefore() { + return ( + cache.get(`${type}.${field}`, cacheOptions)?.swrBefore ?? -Infinity + ); + }, + }; +}; + +/** + * Look up user specified key fields for the type. Defaults to `id`, and `_id` + * if `id` is not found. + */ +const getIdentityFields = ({ + context: { typeKeys }, + type: { __type }, +}: Meta) => { + const { pureType } = parseSchemaType(__type); + + return typeKeys?.[pureType] ?? ['__typename', 'id', '_id']; +}; + +/** Add identity fields into selection. */ +const selectIdentityFields = ( + accessor: CacheObject, + type: Record +) => { + if (accessor == null) return; + + const meta = $meta(accessor); + if (!meta) return; + + const { + selection: { parent, isUnion }, + } = meta; + + // Always __typename except inside interfaces and unions + if (parent?.key !== '$on') { + accessor.__typename; + } + + const keys = getIdentityFields(meta); + for (const key of keys) { + // Field not exist on this object type + if (!type[key]) continue; + + // Already selected at the common root of this interface/union. + if (isUnion && parent?.parent?.children.has(key)) continue; + + accessor[key]; + } +}; + +/** + * A proxy handler globally defined to avoid accidential scope references. + */ +const arrayProxyHandler: ProxyHandler = { + get(_, key, proxy) { + const meta = $meta(proxy); + if (!meta) return; + + if (key === 'toJSON' && !isSkeleton(meta.cache.data)) { + return () => $meta(proxy)?.cache.data; + } + + const { + cache: { data }, + selection, + } = meta; + if (!Array.isArray(data)) return; + + // [ ] Retain selections when an empty array is encountered. + // see Cache.#selectionAccessors() for more context. + + if (typeof key === 'string') { + if (!Array.isArray(data)) { + throw new GQtyError(`Cache data must be an array.`); + } + + if (key === 'length') proxy[0]; + + const numKey = +key; + if (!isNaN(numKey) && numKey < data.length) { + return resolve(proxy, selection.getChild(numKey), meta.type.__type); + } + } + + const value = Reflect.get(data, key); + if (typeof value === 'function') { + return value.bind(proxy); + } + + return value; + }, + set(_, key, value, proxy) { + if (typeof key === 'symbol' || (key !== 'length' && +key !== +key)) { + throw new GQtyError(`Invalid array assignment.`); + } + + const meta = $meta(proxy); + if (!meta) return false; + + const { + cache: { data }, + } = meta; + if (!Array.isArray(data)) return false; + + value = $meta(value)?.cache.data ?? value; + + return Reflect.set(data, key, value); + }, +}; + +export const createArrayAccessor = < + TSchemaType extends GeneratedSchemaObject[] +>( + meta: Meta +) => { + if (!Array.isArray(meta.cache.data)) { + if (verbose) { + console.warn( + 'Invalid cache for an array accessor, monkey-patch by wrapping it with an array.', + meta, + meta.context.cache.toJSON() + ); + } + + meta.cache.data = [meta.cache.data]; + } + + const proxy = new Proxy(meta.cache.data as TSchemaType, arrayProxyHandler); + + $setMeta(proxy, meta); + + return proxy; +}; diff --git a/packages/gqty/src/Accessor/skeleton.ts b/packages/gqty/src/Accessor/skeleton.ts new file mode 100644 index 000000000..32d3a7167 --- /dev/null +++ b/packages/gqty/src/Accessor/skeleton.ts @@ -0,0 +1,14 @@ +import { $meta } from './meta'; + +/** These objects won't show up in JSON serialization. */ +const skeletons = new WeakSet(); + +export const isSkeleton = (object: any) => + skeletons.has(object) || skeletons.has($meta(object)?.cache.data as object); + +/** Create data skeleton array/objects. */ +export const createSkeleton = (fn: () => T) => { + const skeleton = fn(); + skeletons.add(skeleton); + return skeleton; +}; diff --git a/packages/gqty/src/Cache/accessorCache.ts b/packages/gqty/src/Cache/accessorCache.ts deleted file mode 100644 index aef112a39..000000000 --- a/packages/gqty/src/Cache/accessorCache.ts +++ /dev/null @@ -1,196 +0,0 @@ -import { Selection } from '../Selection'; - -export interface ProxyAccessor extends Object { - __proxy?: undefined; -} - -const notFoundObjectKey = {}; -const nullObjectKey = {}; - -export interface AccessorCache { - getAccessor: ( - selection: Selection, - cacheValue: unknown, - proxyFactory: () => ProxyAccessor - ) => ProxyAccessor; - getArrayAccessor: ( - selection: Selection, - reference: unknown[], - proxyFactory: () => ProxyAccessor - ) => ProxyAccessor; - isProxy: (obj: any) => obj is ProxyAccessor; - getProxySelection: (proxy: ProxyAccessor) => Selection | undefined; - addSelectionToAccessorHistory: ( - accessor: ProxyAccessor, - selection: Selection - ) => void; - getSelectionSetHistory: ( - accessor: ProxyAccessor - ) => Set | undefined; - addAccessorChild: ( - parent: ProxyAccessor, - child: ProxyAccessor | null - ) => void; -} - -export function createAccessorCache(): AccessorCache { - const proxyCacheMap = new WeakMap< - Selection, - WeakMap - >(); - const arrayProxyMap = new WeakMap< - Selection, - WeakMap - >(); - const proxySet = new WeakSet(); - - const selectionProxyMap = new WeakMap(); - - const selectionSetHistory = new Map>(); - - const selectionChildRelations = new Map>(); - - function getAccessor( - selection: Selection, - cacheValue: unknown, - proxyFactory: () => ProxyAccessor - ): ProxyAccessor { - const mapKey: object = - cacheValue == null - ? nullObjectKey - : typeof cacheValue === 'object' - ? cacheValue! - : notFoundObjectKey; - let cacheMap = proxyCacheMap.get(selection); - - if (cacheMap == null) { - cacheMap = new WeakMap(); - proxyCacheMap.set(selection, cacheMap); - } - - let proxy = cacheMap.get(mapKey); - - if (proxy == null) { - proxy = proxyFactory(); - cacheMap.set(mapKey, proxy); - selectionProxyMap.set(proxy, selection); - proxySet.add(proxy); - } - - return proxy; - } - - function getArrayAccessor( - selection: Selection, - reference: unknown[], - proxyFactory: () => ProxyAccessor - ): ProxyAccessor { - let proxyMap = arrayProxyMap.get(selection); - - if (proxyMap == null) { - proxyMap = new WeakMap(); - arrayProxyMap.set(selection, proxyMap); - } - - let proxy = proxyMap.get(reference); - - if (proxy == null) { - proxy = proxyFactory(); - proxyMap.set(reference, proxy); - selectionProxyMap.set(proxy, selection); - proxySet.add(proxy); - } - - return proxy; - } - - function getProxySelection(proxy: ProxyAccessor) { - return selectionProxyMap.get(proxy); - } - - function isProxy(obj: any): obj is ProxyAccessor { - return proxySet.has(obj); - } - - function addSelectionToAccessorHistory( - accessor: ProxyAccessor, - selection: Selection - ) { - const accessorSelection = getProxySelection(accessor); - - if (!accessorSelection) return; - - let selectionSet = selectionSetHistory.get(accessorSelection); - - if (selectionSet == null) { - selectionSet = new Set(); - selectionSetHistory.set(accessorSelection, selectionSet); - } - - selectionSet.add(selection); - } - - function getSelectionSetHistory( - accessorOrSelection: ProxyAccessor | Selection - ) { - const accessorSelection = - accessorOrSelection instanceof Selection - ? accessorOrSelection - : getProxySelection(accessorOrSelection); - - if (!accessorSelection) return; - - let selections = selectionSetHistory.get(accessorSelection); - - const childs = selectionChildRelations.get(accessorSelection); - - if (childs) { - const selectionsWithChilds = (selections ||= new Set()); - - childs.forEach((childAccessor) => { - const childSelections = getSelectionSetHistory(childAccessor); - if (childSelections) { - childSelections.forEach((selection) => { - selectionsWithChilds.add(selection); - }); - } - }); - } - - return selections; - } - - function addAccessorChild( - parent: ProxyAccessor, - child: ProxyAccessor | null - ) { - if (!child) return; - - const parentSelection = getProxySelection(parent); - - const childSelection = getProxySelection(child); - - if (!parentSelection) return; - - if (!childSelection) return; - - let childs = selectionChildRelations.get(parentSelection); - - if (childs == null) { - childs = new Set(); - selectionChildRelations.set(parentSelection, childs); - } - - childs.add(childSelection); - } - - return { - getAccessor, - getArrayAccessor, - isProxy, - getProxySelection, - addSelectionToAccessorHistory, - getSelectionSetHistory, - addAccessorChild, - }; -} diff --git a/packages/gqty/src/Cache/crawl.ts b/packages/gqty/src/Cache/crawl.ts new file mode 100644 index 000000000..49739156f --- /dev/null +++ b/packages/gqty/src/Cache/crawl.ts @@ -0,0 +1,79 @@ +import { InfiniteFrailMap } from '../Helpers/InfiniteFrailMap'; + +/** + * Stack-based deep crawl, avoiding recursions. + */ +export const crawl = ( + data: any, + fn: ( + it: any, + key: string | number, + parent: Record | any[] + ) => [any, any, any] | void, + maxIterations = 100000 +) => { + const seen = new InfiniteFrailMap(); + const stack = new Set<[any, any, any]>([[data, 0, []]]); + + for (const [it, key, obj] of stack) { + if (maxIterations-- < 0) { + throw new Error('Maximum iterations reached.'); + } + + if (seen.get(it).get(key).has(obj)) continue; + seen.get(it).get(key).set(obj, true); + + const ret = fn(it, key, obj); + if (ret !== undefined) { + stack.add(ret); + } + + if (it === undefined) { + delete obj[key]; + } else if (Array.isArray(it)) { + for (const [k, v] of it.entries()) stack.add([v, k, it]); + } else if (typeof it === 'object' && it !== null) { + for (const [k, v] of Object.entries(it)) stack.add([v, k, it]); + } + } + + return data; +}; + +export const flattenObject = ( + obj: Record, + maxIterations = 100000 +) => { + const result: [string[], string | number | boolean | null][] = []; + const stack = new Set<[string[], unknown]>([[[], obj]]); + const seen = new Set(); + + for (const [key, it] of stack) { + if (maxIterations-- < 0) { + throw new Error('Maximum iterations reached.'); + } + + if (it === undefined) continue; + + if ( + it === null || + typeof it === 'string' || + typeof it === 'number' || + typeof it === 'boolean' + ) { + result.push([key, it]); + } else { + if (seen.has(it)) continue; + seen.add(it); + + if (Array.isArray(it)) { + for (const [k, v] of it.entries()) stack.add([[...key, `${k}`], v]); + } else if (typeof it === 'object') { + for (const [k, v] of Object.entries(it)) + stack.add([[...key, `${k}`], v]); + } + } + } + + return result; +}; diff --git a/packages/gqty/src/Cache/dataCache.ts b/packages/gqty/src/Cache/dataCache.ts deleted file mode 100644 index fa2b5b0f6..000000000 --- a/packages/gqty/src/Cache/dataCache.ts +++ /dev/null @@ -1,100 +0,0 @@ -import type { Selection } from '../Selection'; -import { get, isObject, mergeWith, PlainObject, set } from '../Utils'; - -import type { NormalizationHandler } from '../Normalization'; - -export type CacheType = { - query?: Record; - mutation?: Record; - subscription?: Record; -}; - -export interface CacheInstance { - cache: CacheType; - getCacheFromSelection: { - (selection: Selection): undefined | Value; - ( - selection: Selection, - defaultValue: NotFound - ): Value | NotFound; - }; - setCacheFromSelection: (selection: Selection, value: unknown) => void; - mergeCache: ( - data: Record, - prefix: 'query' | 'mutation' | 'subscription' - ) => void; - normalizedCache: Record | undefined; -} - -export function createCache( - normalization?: NormalizationHandler -): CacheInstance { - const cache: CacheType = {}; - - function getCacheFromSelection( - selection: Selection - ): Value | undefined; - function getCacheFromSelection( - selection: Selection, - defaultValue: NotFound - ): Value | NotFound; - function getCacheFromSelection( - selection: Selection, - notFoundValue: any = undefined - ): Value | NotFound { - return normalization - ? normalization.getCacheFromSelection( - selection, - notFoundValue, - cache - ) - : get(cache, selection.cachePath, notFoundValue); - } - - function setCacheFromSelection(selection: Selection, value: unknown) { - if (normalization && isObject(value)) - normalization.scanNormalizedObjects(value); - - set(cache, selection.cachePath, value); - } - - function onObjectMergeConflict( - currentValue: object, - incomingValue: object - ): object | void { - const result = normalization?.onObjectMergeConflict( - currentValue, - incomingValue - ); - if (result) return result; - - if ( - Array.isArray(currentValue) && - Array.isArray(incomingValue) && - currentValue.length !== incomingValue.length - ) { - return incomingValue; - } - } - - function mergeCache( - data: Record, - prefix: 'query' | 'mutation' | 'subscription' - ) { - normalization?.scanNormalizedObjects(data); - - mergeWith( - cache, - { [prefix]: data }, - onObjectMergeConflict - ); - } - - return { - cache, - getCacheFromSelection, - setCacheFromSelection, - mergeCache, - normalizedCache: normalization?.normalizedCache, - }; -} diff --git a/packages/gqty/src/Cache/index.ts b/packages/gqty/src/Cache/index.ts index ceec9b5db..68b746b6f 100644 --- a/packages/gqty/src/Cache/index.ts +++ b/packages/gqty/src/Cache/index.ts @@ -1,2 +1,452 @@ -export * from './accessorCache'; -export * from './dataCache'; +import set from 'just-safe-set'; +import { MultiDict } from 'multidict'; +import { isSkeleton } from '../Accessor/skeleton'; +import { deepCopy, FrailMap, select } from '../Helpers'; +import { type GeneratedSchemaObject } from '../Schema'; +import { type Selection } from '../Selection'; +import { crawl } from './crawl'; +import { + deepNormalizeObject, + defaultNormalizationHandler, + type CacheNormalizationHandler, + type NormalizedObjectShell, +} from './normalization'; +import { + exportCacheSnapshot, + importCacheSnapshot, + type CacheSnapshot, +} from './persistence'; +import { isCacheObject } from './utils'; + +export type CacheRoot = { + query?: CacheObject; + mutation?: CacheObject; + subscription?: CacheObject; +}; + +export type CacheNode = CacheLeaf | CacheNode[] | CacheObject; + +export type CacheObject = { + __typename?: string; + [key: string]: CacheNode | CacheLeaf; +}; + +export type CacheLeaf = string | number | boolean | null | undefined; + +export type CacheOptions = { + readonly maxAge?: number; + + /** + * `false` to disable normalized cache, which usually means manual + * refetching after mutations. + */ + readonly normalization?: boolean | CacheNormalizationHandler; + + readonly staleWhileRevalidate?: number; +}; + +export type CacheDataContainer = { + data: TData; + + /** + * data is open to TTL eviction after this time, before that only LRU eviction + * may take place. + */ + expiresAt: number; + + /** + * A hint for clients to revaliate, does not affect automatic cache eviction. + */ + swrBefore?: number; + + /** + * Remove internal data reference, allowing WeakRefs to be garbase collected. + * + * For StrongRefs, calling this function has no effect. + */ + unref?: () => void; +}; + +export type CacheListener = ( + value: TData +) => void; + +export type CacheGetOptions = { + includeExpired?: boolean; +}; + +export type CacheSetOptions = { + skipNotify?: boolean; +}; + +/** + * A scoped cache for accessors, selections and data with expiry awareness. + */ +// TODO: LRU cap size +// TODO: Normalized cache eviction: evict(id: string) {} +// TODO: Simple cache eviction: evict(type: string, field: string) {} +export class Cache { + #maxAge = Infinity; + get maxAge() { + return this.#maxAge; + } + + #staleWhileRevalidate: number = 0; + get staleWhileRevalidate() { + return this.#staleWhileRevalidate; + } + + #normalizationOptions?: CacheNormalizationHandler; + get normalizationOptions() { + return this.#normalizationOptions; + } + + /** + * The actual data cache. Cache keys are formatted as the first 2 layer of + * the selection path, e.g. `['query', 'user']` for `query.user`. + * + * This enables a cache expiry/eviction strategy based on top-level queries. + */ + #data = new FrailMap(); + + /** Look up table for normalized objects. */ + #normalizedObjects = new Map>(); + + /** Temporary strong references for the WeakRefs in FrailMap. */ + #dataRefs = new Set(); + + constructor( + data?: CacheSnapshot, + { + maxAge = Infinity, + staleWhileRevalidate = 5 * 30 * 1000, + normalization, + }: CacheOptions = {} + ) { + this.#maxAge = Math.max(maxAge, 0); + this.#staleWhileRevalidate = Math.max(staleWhileRevalidate, 0); + + if (normalization) { + this.#normalizationOptions = + normalization === true + ? defaultNormalizationHandler + : Object.freeze({ ...normalization }); + } + + if (data) { + this.restore(data); + } + } + + restore(data: CacheSnapshot) { + const { query, mutation, subscription, normalizedObjects } = + importCacheSnapshot(data, this.normalizationOptions) ?? {}; + + this.#normalizedObjects = normalizedObjects ?? new FrailMap(); + this.#data = new FrailMap(); + + this.set({ query, mutation, subscription }, { skipNotify: true }); + } + + /** Subscription paths and it's listener function. */ + #subscriptions = new Map(); + + /** Subscription paths that reached a normalized object. */ + #normalizedSubscriptions = new MultiDict(); + + /** Subscribe to cache changes. */ + subscribe(paths: string[], fn: CacheListener) { + const pathsSnapshot = Object.freeze([...paths]); + + this.#subscriptions.set(pathsSnapshot, fn); + this.#subscribeNormalized(paths, fn); + + return () => { + this.#subscriptions.delete(pathsSnapshot); + this.#normalizedSubscriptions.delete(fn); + }; + } + + #subscribeNormalized(paths: readonly string[], fn: CacheListener) { + const getId = this.normalizationOptions?.identity; + if (!getId) return; + + const store = this.#normalizedObjects; + const nsubs = this.#normalizedSubscriptions; + + nsubs.delete(fn); + + for (const path of paths) { + const [type, field, ...parts] = path.split('.'); + select( + this.get(`${type}.${field}`, { includeExpired: true })?.data, + parts, + (node) => { + const id = getId(node); + if (id && store.has(id) && isCacheObject(node)) { + nsubs.set(node, fn); + } + + return node; + } + ); + } + } + + // TODO: Optimization + // This is pretty inefficient, but maintaining an indexed tree is too much + // effort right now. Accepting PRs. + #notifySubscribers = (value: CacheRoot) => { + // Collect all relevant listeners from both path selections and + // normalized objects in a unique Set. + const listeners = new Set(); + const subs = this.#subscriptions; + const nsubs = this.#normalizedSubscriptions; + const getId = this.normalizationOptions?.identity; + + for (const [paths, notify] of this.#subscriptions) { + for (const path of paths) { + const parts = path.split('.'); + const node = select(value, parts, (node) => { + // Normalized subscriptions + if (getId?.(node) && isCacheObject(node)) { + // If already subscribed, notify it. + nsubs.get(node)?.forEach((notify) => { + listeners.add(notify); + }); + + // Otherwise, subscribe it for future cross-triggering. Current + // invocation can be skipped because normal path traversion goes + // down to single properties and is more accurate. + nsubs.set(node, notify); + } + + return node; + }); + + // Notify and breaks when one of the path hits + if ( + Array.isArray(node) + ? (node as unknown[]) + .flat(Infinity) + .some((item) => item !== undefined) + : node !== undefined + ) { + listeners.add(notify); + break; + } + } + } + + // Re-calculate normalized subscriptions of relevant objects when we have + // normalization enabled. + if (getId) { + // Normalized objects reachable by all subscribers, these subscribers + // should also subscribe to these objects. Since we have no idea what had + // been replaced by the current call to `cache.set()`, these subscription + // paths has to re-subscribe from scratch to remove those no longer + // relevant. + const norbjs = new Set(); + + // Crawl value to find all normalized objects + crawl(value, (node) => { + if (getId(node) && isCacheObject(node)) { + norbjs.add(node); + } + }); + + const resubscribingListeners = new Set(); + + for (const norbj of norbjs) { + for (const listener of nsubs.get(norbj) ?? []) { + listeners.add(listener); + resubscribingListeners.add(listener); + } + } + + // Resubscribe + for (const listener of resubscribingListeners) { + for (const [paths, _listener] of subs) { + if (listener === _listener) { + this.#subscribeNormalized(paths, listener); + } + } + } + } + + // Invoke all reachable listeners with a snapshot of value. + if (listeners.size > 0) { + const valueSnapshot = deepCopy(value); + for (const notify of listeners) { + notify(valueSnapshot); + } + } + }; + + /* TODO: Refactor + * + * Caching accessors by selections is a mean to retain sub-selections for + * empty arrays and nullables in cache, such accessors returns null where no + * futher selections can be triggered on them. + * + * When cache value is null or empty array, this cache is responsible for + * returning all child selections made last time in this scope. + * + * Caching accessors by cache values is broken with normalization enabled. + * Different selection paths leading to the same normalized object, where they + * overwrites each other along with the sub-selections inside. + * + * Current workaround is to cache selection children in parents, preventing + * excessive selection object creation. + */ + #selectionAccessors = new WeakMap(); + + getAccessor( + selection: Selection, + createAccessor: () => TSchemaType + ): TSchemaType { + const map = this.#selectionAccessors; + const accessor = map.get(selection) ?? createAccessor(); + + if (!map.has(selection)) { + map.set(selection, accessor); + } + + return accessor as TSchemaType; + } + + /** + * Retrieve cache values by first 2 path segments, e.g. `query.todos` or + * `mutation.createTodo`. + */ + get(path: string, options?: CacheGetOptions): CacheDataContainer | undefined { + const [, type, key, subpath] = + path.match(/^([a-z]+(?:\w*))\.(?:__)?([a-z]+(?:\w*))(.*[^\.])?$/i) ?? []; + if (!type || !key) { + throw new ReferenceError( + 'Cache path must starts with `${type}.`: ' + path + ); + } + + const cacheKey = `${type}.${key}`; + + let dataContainer = this.#data.get(cacheKey); + if (dataContainer === undefined) return; + + const { expiresAt, swrBefore } = dataContainer; + let { data } = dataContainer; + + if (expiresAt < Date.now() && !options?.includeExpired) { + data = undefined; + } else if (subpath) { + data = select(data, subpath.slice(1).split('.')); + } + + return { + data, + expiresAt, + swrBefore, + }; + } + + /** + * Merge objects into the current cache, recursively normalize incoming values + * if normalization is enabled. Notifies cache listeners afterwards. + * + * Example value: `{ query: { foo: "bar" } }` + */ + set(values: CacheRoot, { skipNotify = false }: CacheSetOptions = {}) { + const age = this.maxAge; + const swr = this.staleWhileRevalidate; + const now = Date.now(); + + // Normalize incoming data before merging. + if (this.normalizationOptions) { + values = deepNormalizeObject(values, { + ...this.normalizationOptions, + store: this.#normalizedObjects, + }); + } + + for (const [type, cacheObjects = {}] of Object.entries(values)) { + for (const [field, data] of Object.entries(cacheObjects as CacheObject)) { + // TODO: Cache should reuse existing data containers (if any) and + // update the data, age, swr, and unref timer via Object.assign(). + + const cacheKey = `${type}.${field}`; + + let unrefTimer: ReturnType | undefined; + const unref = () => { + clearTimeout(unrefTimer); + this.#dataRefs.delete(dataContainer); + }; + + const dataContainer: CacheDataContainer = + // Mutation and subscription results should be returned right away for + // immediate use. Their responses are only meaningful to a cache with + // normalization enabled, where it updates subscribing clients. + // We force a short expiration to let it survives the next render, + // then leave it up for GC. + type === 'mutation' || type === 'subscription' + ? { + data, + expiresAt: now + 100, + swrBefore: now, + unref, + } + : { + data, + expiresAt: age + now, + swrBefore: age + swr + now, + unref, + }; + + // Opens up previous cache value for GC. + const existing = this.#data.get(cacheKey); + if (existing) { + existing.unref?.(); + + Object.assign(existing, dataContainer); + } else { + this.#data.set(cacheKey, dataContainer, { strong: !isFinite(age) }); + } + + if (isFinite(age + swr)) { + unrefTimer = setTimeout(unref, age + swr); + + if (typeof unrefTimer === 'object') { + unrefTimer.unref(); + } + + this.#dataRefs.add(dataContainer); + } + } + } + + if (!skipNotify) { + this.#notifySubscribers(values); + } + } + + toJSON() { + const snapshot = + // Remove skeletons + crawl( + [...this.#data].reduce((prev, [key, { data }]) => { + set(prev, key, data); + return prev; + }, {} as CacheRoot), + (it, key, obj) => { + if (isSkeleton(it)) { + delete (obj as any)[key]; + } + } + ); + + if (this.normalizationOptions) { + return exportCacheSnapshot(snapshot, this.normalizationOptions); + } else { + return snapshot; + } + } +} diff --git a/packages/gqty/src/Cache/normalization.ts b/packages/gqty/src/Cache/normalization.ts new file mode 100644 index 000000000..c221072b1 --- /dev/null +++ b/packages/gqty/src/Cache/normalization.ts @@ -0,0 +1,206 @@ +import type { CacheNode, CacheObject } from '.'; +import { GQtyError } from '../Error'; +import { deepAssign } from '../Utils'; +import { isCacheObject } from './utils'; + +const refKey = Symbol('__ref'); + +export type NormalizedObjectShell = + TData & { + $set(value: TData): void; + toJSON(): TData; + }; + +export const isNormalizedObjectShell = ( + value: any +): value is NormalizedObjectShell => shells.has(value); + +const deshell = (input: any) => + isNormalizedObjectShell(input) ? input.toJSON() : input; + +const shells = new Set(); + +export type NormalizatioOptions = + CacheNormalizationHandler & { + store: Map>; + }; + +/** + * Update the store with incoming data, merge or replace them depends on + * provided handlers. + */ +export const normalizeObject = ( + data: TData, + { identity, onConflict = (_, t) => t, store }: NormalizatioOptions +): NormalizedObjectShell | undefined => { + if (typeof data !== 'object' || Array.isArray(data)) { + throw new GQtyError( + `Only objects can be normalized, received ${typeof data}.` + ); + } + + const id = identity(data); + if (!id) return; + + const existing = store.get(id); + data = deshell(data); + + if (existing) { + data = deepAssign({}, [existing.toJSON(), data], onConflict); + + existing.$set(data as TData); + + return existing; + } else { + const result = new Proxy( + { [refKey]: data }, + { + ownKeys(target) { + return Reflect.ownKeys(target[refKey]); + }, + getOwnPropertyDescriptor(target, key) { + return Reflect.getOwnPropertyDescriptor(target[refKey], key); + }, + set(target, key, value) { + return Reflect.set(target[refKey], key, value); + }, + get(target, key) { + if (key === '$set') { + return (value: TData) => { + target[refKey] = value; + }; + } + + if (key === 'toJSON') { + return () => target[refKey]; + } + + return Reflect.get(target, key) ?? Reflect.get(target[refKey], key); + }, + } + ) as unknown as NormalizedObjectShell; + + shells.add(result); + + store.set(id, result); + + return result; + } +}; + +/** + * Recursively replace normalize input objects with the provided store. + */ +export const deepNormalizeObject = ( + data: TData, + options: NormalizatioOptions +): TData => { + return walk(data); + + function walk(input: T, depth = 0): T { + if (depth < 15 && input && typeof input === 'object') { + for (const [key, value] of Object.entries(input)) { + (input as Record)[key] = walk(value, depth + 1); + } + + if (!Array.isArray(input) && isCacheObject(input)) { + const id = options.identity(input); + if (id) { + const norbj = normalizeObject(input, options); + if (norbj) { + return norbj as T; + } + } + } + } + + return input; + } +}; + +export type CacheNormalizationHandler = { + /** + * To disable normalization for a particular object, return undefined. + */ + identity(value: CacheNode): string | undefined; + + onConflict?( + /** Existing value */ + sourceValue: object, + /** Incoming value */ + targetValue: object + ): object | undefined; + + schemaKeys?: Record; +}; + +export const defaultNormalizationHandler: CacheNormalizationHandler = + Object.freeze({ + identity(value) { + if (!value || typeof value !== 'object' || Array.isArray(value)) return; + + const identityFields = [value.__typename, value.id ?? value._id]; + + if (identityFields.some((field) => field === undefined)) return; + + return identityFields.join(':'); + }, + onConflict(existing, incoming) { + const mergeObjects = (a: CacheObject, b: CacheObject) => { + const result = { ...a, ...b }; + + if (isNormalizedObjectShell(a)) { + a.$set(result); + return a; + } else if (isNormalizedObjectShell(b)) { + b.$set(result); + return b; + } + + return result; + }; + + if (Array.isArray(existing) && Array.isArray(incoming)) { + if (existing.length === incoming.length) { + return; + // for (const [k, a] of existing.entries()) { + // const b = incoming[k]; + // if (isCacheObject(a) && isCacheObject(b)) { + // existing[k] = mergeObjects(a, b); + // } + // } + } else { + // Replace the values, but keep the original array reference. + existing.splice(0, existing.length, ...incoming); + } + return existing; + } else if (isCacheObject(existing) && isCacheObject(incoming)) { + return mergeObjects(existing, incoming); + } + // else if (isCacheObject(existing) && isCacheObject(incoming)) { + // /** + // * Object subsets further closer to leaf nodes will replace objects closer + // * to root, we should blindly merge them in the same fetch. + // * + // * Replacements via isSubsetOf() may happen between fetches, not within. + // */ + // if (isSubsetOf(existing, incoming) || isSubsetOf(incoming, existing)) { + // return { ...incoming, ...existing }; + // } else { + // return incoming; + // } + // } + + return; + }, + }); + +export const isSubsetOf = (a: CacheObject, b: CacheObject) => { + for (const [key, value] of Object.entries(a)) { + if (value !== b[key]) { + return false; + } + } + + return true; +}; diff --git a/packages/gqty/src/Cache/persistence.ts b/packages/gqty/src/Cache/persistence.ts index 4b016c2d8..044692a5f 100644 --- a/packages/gqty/src/Cache/persistence.ts +++ b/packages/gqty/src/Cache/persistence.ts @@ -1,99 +1,186 @@ -import type { - SelectionManager, - SelectionsBackup, -} from '../Selection/SelectionManager'; -import { decycle, isPlainObject, retrocycle } from '../Utils'; -import type { CacheInstance } from './dataCache'; - -export interface PersistenceHelpers { - backupPersistence(version?: string): string; - - restorePersistence( - backup: () => Promise, - expectedVersion?: string | undefined - ): Promise; - restorePersistence( - backup: string | null | undefined, - expectedVersion?: string | undefined - ): boolean; -} - -export function createPersistenceHelpers( - clientCache: CacheInstance, - selectionManager: SelectionManager -): PersistenceHelpers { - function backupPersistence(version?: string): string { - const { query } = clientCache.cache; - const cache = decycle({ query }); - const selections = selectionManager.backup(); - - return JSON.stringify({ - version, - cache, - selections, - }); - } +import { fromJSON, toJSON } from 'flatted'; +import type { Cache, CacheLeaf, CacheNode, CacheObject, CacheRoot } from '.'; +import { GQtyError } from '../Error'; +import { FrailMap } from '../Helpers/FrailMap'; +import { deepCopy } from '../Helpers/deepCopy'; +import { isPlainObject } from '../Utils'; +import { crawl } from './crawl'; +import { + isNormalizedObjectShell, + normalizeObject, + type CacheNormalizationHandler, + type NormalizedObjectShell, +} from './normalization'; - function restorePersistence( - backup: () => Promise, - expectedVersion?: string +export type Persistors = { + persist(version?: string): CacheSnapshot; + restore(snapshot: CacheSnapshot, version?: string): boolean; + restoreAsync( + snapshot: () => Promise, + version?: string ): Promise; - function restorePersistence( - backup: string | null | undefined, - expectedVersion?: string - ): boolean; - function restorePersistence( - backup: string | null | undefined | (() => Promise), - expectedVersion?: string - ): boolean | Promise { - if (typeof backup === 'function') { - return new Promise((resolve) => { - backup() - .then((value) => resolve(restore(value))) - .catch(() => resolve(false)); - }); - } - return restore(backup); - - function restore(backup?: unknown) { - if (typeof backup !== 'string') return false; - - const backupObject: { - cache?: Record; - selections?: SelectionsBackup; - version?: string; - } = JSON.parse(backup); - - if (isPlainObject(backupObject) && isPlainObject(backupObject.cache)) { - if ( - (expectedVersion && !backupObject.version) || - (backupObject.version && !expectedVersion) - ) { - return false; +}; + +/** Exported cache shape, for cache initialization and persistence. */ +export type CacheSnapshot = { + query?: Record; + mutation?: Record; + subscription?: Record; + normalized?: Record; + version?: string; +}; + +export type CacheSnapshotOutput = { + query?: Record; + mutation?: Record; + subscription?: Record; + normalizedObjects?: FrailMap>; +}; + +export type CacheSnapshotObject = { + __typename: string; + [key: string]: CacheSnapshotNode | CacheLeaf; +}; + +export type CacheReference = { __ref: string }; + +export type CacheSnapshotNode = + | CacheLeaf + | CacheObject + | CacheReference + | CacheSnapshotNode[] + | CacheSnapshotObject; + +export const isCacheSnapshotObject = ( + value: unknown +): value is CacheSnapshotObject => + isPlainObject(value) && typeof value.__typename === 'string'; + +export const isCacheReference = (value: unknown): value is CacheReference => + isPlainObject(value) && typeof value.__ref === 'string'; + +export const importCacheSnapshot = ( + snapshot: CacheSnapshot, + options?: CacheNormalizationHandler +): CacheSnapshotOutput => { + const { query, mutation, subscription, normalized = {} } = deepCopy(snapshot); + const seen = new Set(); + const data: CacheSnapshotOutput = crawl( + { query, mutation, subscription }, + (it, key, parent) => { + // Dereference + if (isCacheReference(it)) { + const norbj = normalized[it.__ref]; + (parent as any)[key] = norbj; + + if (!seen.has(norbj)) { + seen.add(norbj); + return [norbj, 0, []]; } - if (expectedVersion && backupObject.version) { - if (typeof backupObject.version === 'string') { - if (backupObject.version !== expectedVersion) { - return false; - } - } else { - return false; - } + } + + return; + } + ); + + if (Object.keys(data).length === 0) { + throw new GQtyError( + `No known root keys (query, mutation and subscription) are found.` + ); + } + + if (options) { + data.normalizedObjects = Object.entries(normalized).reduce( + (store, [key, value]) => { + const norbject = normalizeObject(value as CacheObject, { + ...options, + store, + }); + + if (norbject !== undefined) { + store.set(key, norbject); } - Object.assign(clientCache.cache, retrocycle(backupObject.cache)); + return store; + }, + new FrailMap>() + ); + } - selectionManager.restore(backupObject.selections); + return data; +}; - return true; +/** + * Cache may contain circular reference of objects. To properly serialize it, + * use `flatted` or `@ungap/structured-clone`. + */ +export const exportCacheSnapshot = ( + { query, mutation, subscription }: CacheRoot, + options?: CacheNormalizationHandler +): CacheSnapshot => { + const snapshot: CacheSnapshot = fromJSON( + toJSON({ query, mutation, subscription }) + ); + + if (options) { + const normalized: Record = {}; + + crawl(snapshot, (it, key, parent) => { + const id = options?.identity(it); + if (!id) return; + + if (!normalized[id]) { + normalized[id] = isNormalizedObjectShell(it) ? it.toJSON() : it; } - return false; + (parent as any)[key] = { __ref: id }; + }); + + if (Object.keys(normalized).length > 0) { + snapshot.normalized = normalized; } } - return { - backupPersistence, - restorePersistence, - }; -} + return snapshot; +}; + +export const createPersistors = (cache: Cache): Persistors => ({ + persist(version) { + const snapshot = cache.toJSON(); + if (version !== undefined) { + snapshot.version = version; + } + + return snapshot; + }, + + restore(data: CacheSnapshot, version?: string) { + if ( + data.version !== version || + (version !== undefined && typeof version !== 'string') + ) { + console.warn(`[GQty] Cache version mismatch, ignored.`); + return false; + } + + if (data == null || typeof data !== 'object' || Array.isArray(data)) { + return false; + } + + try { + cache.restore(data); + } catch (e) { + console.warn(e); + } finally { + return true; + } + }, + + async restoreAsync(data, version) { + try { + return this.restore(await data(), version); + } catch { + return false; + } + }, +}); diff --git a/packages/gqty/src/Cache/query.ts b/packages/gqty/src/Cache/query.ts new file mode 100644 index 000000000..2f2e4bcb7 --- /dev/null +++ b/packages/gqty/src/Cache/query.ts @@ -0,0 +1,55 @@ +import type { ExecutionResult } from 'graphql'; +import type { Cache } from '.'; + +/** Global query deduplication when cache instance is not provided. */ +const nullObjectKey = {}; + +const deduplicationCache = new WeakMap< + Cache | typeof nullObjectKey, + Map> +>([[nullObjectKey, new Map()]]); + +/** + * Keep track of ongoing promises, identified by a provided hash. + * + * Before the promise is resolved, subsequent requests with the same hash + * gets the same promise. + * + * After promise resolution, the hash is removed from the map. + * + * If the cache to omitted, a global cache will be used instead. + */ +export const dedupePromise = < + TData = Record, + TExtensions = Record +>( + cache: Cache | undefined, + hash: string, + fetchOrSubscribe: () => Promise | void> +): Promise> => { + const key = cache ?? nullObjectKey; + + const queryHashMap = deduplicationCache.get(key) ?? new Map(); + if (!deduplicationCache.has(key)) { + deduplicationCache.set(key, queryHashMap); + } + + const cachedQueryPromise = + queryHashMap.get(hash) ?? + fetchOrSubscribe().finally(() => { + queryHashMap.delete(hash); + }); + + if (!queryHashMap.has(hash)) { + queryHashMap.set(hash, cachedQueryPromise); + } + + return cachedQueryPromise; +}; + +/** Retrieve active promises associated provided cache, useful for SSR. */ +export const getActivePromises = ( + cache?: Cache +): Promise[] => [ + ...(deduplicationCache.get(cache ?? nullObjectKey)?.values() ?? []), +]; diff --git a/packages/gqty/src/Cache/utils.ts b/packages/gqty/src/Cache/utils.ts new file mode 100644 index 000000000..c541607f6 --- /dev/null +++ b/packages/gqty/src/Cache/utils.ts @@ -0,0 +1,14 @@ +import type { CacheObject } from '.'; + +export const isCacheObject = (value: unknown): value is CacheObject => { + if (value === null || typeof value !== 'object' || Array.isArray(value)) + return false; + + const obj = value as CacheObject; + if (obj.__typename && typeof obj.__typename !== 'string') return false; + + return true; +}; + +export const isCacheObjectArray = (value: unknown): value is CacheObject[] => + Array.isArray(value) && value.every(isCacheObject); diff --git a/packages/gqty/src/Client/batching.ts b/packages/gqty/src/Client/batching.ts new file mode 100644 index 000000000..9317027e2 --- /dev/null +++ b/packages/gqty/src/Client/batching.ts @@ -0,0 +1,36 @@ +import { type Cache } from '../Cache'; +import { Selection } from '../Selection'; + +const pendingSelections = new Map>>>(); + +export const addSelections = ( + cache: Cache, + key: string, + selections: Set +) => { + if (!pendingSelections.has(cache)) { + pendingSelections.set(cache, new Map()); + } + + const selectionsByKey = pendingSelections.get(cache)!; + + if (!selectionsByKey.has(key)) { + selectionsByKey.set(key, new Set()); + } + + return selectionsByKey.get(key)!.add(selections); +}; + +export const getSelectionsSet = (cache: Cache, key: string) => + pendingSelections.get(cache)?.get(key); + +export const delSelectionSet = (cache: Cache, key: string) => + pendingSelections.get(cache)?.delete(key) ?? false; + +export const popSelectionsSet = (cache: Cache, key: string) => { + const result = getSelectionsSet(cache, key); + + delSelectionSet(cache, key); + + return result; +}; diff --git a/packages/gqty/src/Client/client.ts b/packages/gqty/src/Client/client.ts deleted file mode 100644 index 64b904101..000000000 --- a/packages/gqty/src/Client/client.ts +++ /dev/null @@ -1,412 +0,0 @@ -import { - AssignSelections, - createAccessorCreators, - createSchemaUnions, - SchemaUnions, - SetCache, -} from '../Accessor'; -import { - AccessorCache, - CacheInstance, - CacheType, - createAccessorCache, - createCache, -} from '../Cache'; -import { - createPersistenceHelpers, - PersistenceHelpers, -} from '../Cache/persistence'; -import { GQtyError } from '../Error'; -import { EventHandler } from '../Events'; -import { createPrefetch, Prefetch } from '../Helpers/prefetch'; -import { createRefetch, Refetch } from '../Helpers/refetch'; -import { createSSRHelpers, HydrateCache, PrepareRender } from '../Helpers/ssr'; -import { createTracker, Track } from '../Helpers/track'; -import { createInterceptorManager, InterceptorManager } from '../Interceptor'; -import { - createNormalizationHandler, - NormalizationHandler, - NormalizationOptions, -} from '../Normalization'; -import { createScheduler, Scheduler } from '../Scheduler'; -import type { QueryFetcher, ScalarsEnumsHash, Schema } from '../Schema/types'; -import type { Selection } from '../Selection/selection'; -import { - createSelectionManager, - SelectionManager, -} from '../Selection/SelectionManager'; -import { - BuildAndFetchSelections, - createResolvers, - InlineResolved, - Resolved, - Resolvers, - RetryOptions, -} from './resolvers'; - -export interface InnerClientState { - allowCache: boolean; - foundValidCache: boolean; - clientCache: CacheInstance; - selectionManager: SelectionManager; - readonly accessorCache: AccessorCache; - readonly interceptorManager: InterceptorManager; - readonly scheduler: Scheduler; - readonly eventHandler: EventHandler; - readonly schema: Readonly; - readonly scalarsEnumsHash: Readonly; - readonly queryFetcher: QueryFetcher; - readonly schemaUnions: SchemaUnions; - readonly normalizationHandler: NormalizationHandler | undefined; - readonly depthLimit: number; - defaults: CoreClientDefaults; -} - -export interface SubscribeEvents { - onData: (data: Record) => void; - onError: (payload: { - error: GQtyError; - data: Record | null; - }) => void; - onStart?: () => void; - onComplete?: () => void; -} - -export type PossiblePromise = Promise | T; - -export interface SubscriptionsClient { - subscribe(opts: { - query: string; - variables: Record | undefined; - selections: Selection[]; - events: - | ((ctx: { - selections: Selection[]; - query: string; - variables: Record | undefined; - operationId: string; - }) => SubscribeEvents) - | SubscribeEvents; - cacheKey?: string; - }): PossiblePromise<{ - unsubscribe: () => Promise; - operationId: string; - }>; - unsubscribe(selections: Selection[] | Set): Promise; - close(): Promise; - setConnectionParams( - connectionParams: - | (() => PossiblePromise>) - | Record, - restartClient?: boolean - ): void; -} - -export interface CoreClientDefaults { - /** - * `resolved` defaults - */ - resolved?: { - /** - * Set the default `noCache` option - * - * @default false - */ - noCache?: boolean; - /** - * Set the default `refetch` option - * - * @default false - */ - refetch?: boolean; - /** - * Set the default `retry` strategy - * - * @default false - */ - retry?: RetryOptions; - }; -} - -export interface ClientOptions< - ObjectTypesNames extends string = never, - SchemaObjectTypes extends { - [P in ObjectTypesNames]: { - __typename?: P; - }; - } = never -> { - schema: Readonly; - scalarsEnumsHash: ScalarsEnumsHash; - queryFetcher: QueryFetcher; - catchSelectionsTimeMS?: number; - retry?: RetryOptions; - normalization?: - | NormalizationOptions - | boolean; - subscriptionsClient?: SubscriptionsClient; - defaults?: CoreClientDefaults; - /** - * Set the maximum depth limit, needed to prevent possible infinite recursion. - * - * After the specified depth is reached, the proxy creation is stopped returning `null` - * - * @default 15 - */ - depthLimit?: number; -} - -export interface MutateHelpers< - GeneratedSchema extends { - query: {}; - } -> { - query: GeneratedSchema['query']; - setCache: SetCache; - assignSelections: AssignSelections; -} - -export interface Mutate< - GeneratedSchema extends { - query: {}; - mutation: {}; - } -> { - ( - fn: (mutation: GeneratedSchema['mutation']) => T, - opts?: { - onComplete?: (data: T, helpers: MutateHelpers) => void; - onError?: ( - error: GQtyError, - helpers: MutateHelpers - ) => void; - } - ): Promise; -} - -export interface GQtyClient< - GeneratedSchema extends { - query: object; - mutation: object; - subscription: object; - } -> extends PersistenceHelpers { - query: GeneratedSchema['query']; - mutation: GeneratedSchema['mutation']; - subscription: GeneratedSchema['subscription']; - resolved: Resolved; - inlineResolved: InlineResolved; - cache: CacheType; - interceptorManager: InterceptorManager; - scheduler: Scheduler; - refetch: Refetch; - accessorCache: AccessorCache; - buildAndFetchSelections: BuildAndFetchSelections; - eventHandler: EventHandler; - setCache: SetCache; - hydrateCache: HydrateCache; - prepareRender: PrepareRender; - assignSelections: AssignSelections; - mutate: Mutate; - subscriptionsClient: SubscriptionsClient | undefined; - prefetch: Prefetch; - track: Track; -} - -export type { - Resolved, - CacheType, - InterceptorManager, - Scheduler, - Refetch, - AccessorCache, - Resolvers, - EventHandler, - SetCache, - HydrateCache, - PrepareRender, - AssignSelections, - Prefetch, - BuildAndFetchSelections, - InlineResolved, -}; - -export function createClient< - GeneratedSchema extends { - query: {}; - mutation: {}; - subscription: {}; - } = never, - ObjectTypesNames extends string = never, - ObjectTypes extends { - [P in ObjectTypesNames]: { - __typename?: P; - }; - } = never ->({ - schema, - scalarsEnumsHash, - queryFetcher, - catchSelectionsTimeMS = 10, - retry, - normalization = true, - subscriptionsClient, - defaults = {}, - depthLimit = 15, -}: ClientOptions): GQtyClient { - const interceptorManager = createInterceptorManager(); - - const { globalInterceptor } = interceptorManager; - - const accessorCache = createAccessorCache(); - - const eventHandler = new EventHandler(); - - const normalizationHandler = createNormalizationHandler( - normalization, - eventHandler, - schema, - scalarsEnumsHash - ); - - const clientCache = createCache(normalizationHandler); - - const selectionManager = createSelectionManager(); - - const scheduler = createScheduler( - interceptorManager, - resolveSchedulerSelections, - catchSelectionsTimeMS - ); - - const innerState: InnerClientState = { - allowCache: true, - foundValidCache: true, - clientCache, - accessorCache, - selectionManager, - interceptorManager, - schema, - scalarsEnumsHash, - scheduler, - eventHandler, - queryFetcher, - schemaUnions: createSchemaUnions(schema), - normalizationHandler, - defaults, - depthLimit, - }; - - const { - resolved, - buildAndFetchSelections, - resolveSelections, - inlineResolved, - } = createResolvers(innerState, catchSelectionsTimeMS, subscriptionsClient); - - async function resolveSchedulerSelections(selections: Set) { - const resolvingPromise = scheduler.resolving; - - const resolvePromise = resolveSelections(selections, undefined, { - retry: retry === undefined ? true : retry, - scheduler: true, - }); - - globalInterceptor.removeSelections(selections); - try { - await resolvePromise; - } catch (error: any) { - resolvingPromise?.resolve({ - error, - selections, - }); - } - } - - const refetch = createRefetch(innerState, resolveSelections, inlineResolved); - - const { query, mutation, subscription, setCache, assignSelections } = - createAccessorCreators(innerState); - - const ssrHelpers = createSSRHelpers({ - innerState, - query, - refetch, - }); - - async function mutate( - fn: (mutation: GeneratedSchema['mutation']) => T, - opts: { - onComplete?: ( - data: T, - helpers: { - query: GeneratedSchema['query']; - setCache: typeof setCache; - assignSelections: typeof assignSelections; - } - ) => void; - onError?: ( - error: GQtyError, - helpers: { - query: GeneratedSchema['query']; - setCache: typeof setCache; - assignSelections: typeof assignSelections; - } - ) => void; - } = {} - ): Promise { - try { - const data = await resolved(() => fn(mutation), { - refetch: true, - }); - opts.onComplete?.(data, { - query, - setCache, - assignSelections, - }); - return data; - } catch (err) { - const error = GQtyError.create(err, mutate); - - opts.onError?.(error, { - query, - setCache, - assignSelections, - }); - - throw error; - } - } - - const prefetch = createPrefetch(query, innerState); - - const persistenceHelpers = createPersistenceHelpers( - clientCache, - selectionManager - ); - - const tracker = createTracker(innerState, subscriptionsClient); - - return { - query, - mutation, - subscription, - resolved, - inlineResolved, - cache: innerState.clientCache.cache, - interceptorManager, - scheduler, - refetch, - accessorCache, - buildAndFetchSelections, - eventHandler, - setCache, - ...ssrHelpers, - assignSelections, - mutate, - subscriptionsClient, - prefetch, - ...persistenceHelpers, - ...tracker, - }; -} diff --git a/packages/gqty/src/Client/compat/client.ts b/packages/gqty/src/Client/compat/client.ts new file mode 100644 index 000000000..6910f8398 --- /dev/null +++ b/packages/gqty/src/Client/compat/client.ts @@ -0,0 +1,191 @@ +import { + type BaseGeneratedSchema, + type FetchOptions, + type SchemaContext, +} from '../..'; +import { type Cache } from '../../Cache'; +import { type ScalarsEnumsHash, type Schema } from '../../Schema'; +import { type Selectable } from '../../Selectable'; +import { type Selection } from '../../Selection'; +import { type createDebugger } from '../debugger'; +import { type Resolvers } from '../resolvers'; +import { + createLegacyHydrateCache, + type LegacyHydrateCache, +} from './hydrateCache'; +import { + createLegacyInlineResolved, + type LegacyInlineResolved, +} from './inlineResolved'; +import { createLegacyMutate, type LegacyMutate } from './mutate'; +import { createLegacyPrefetch, type LegacyPrefetch } from './prefetch'; +import { + createLegacyPrepareRender, + type LegacyPrepareRender, +} from './prepareRender'; +import { type LegacyQueryFetcher } from './queryFetcher'; +import { createRefetch, type LegacyRefetch } from './refetch'; +import { createLegacyResolved, type LegacyResolved } from './resolved'; +import { type LegacySubscriptionsClient } from './subscriptionsClient'; +import { createLegacyTrack, type LegacyTrack } from './track'; + +export { + type LegacyHydrateCache, + type LegacyHydrateCacheOptions, +} from './hydrateCache'; +export { + type LegacyInlineResolveOptions, + type LegacyInlineResolved, +} from './inlineResolved'; +export { type LegacyMutate, type LegacyMutateHelpers } from './mutate'; +export { type LegacyPrefetch } from './prefetch'; +export { type LegacyQueryFetcher } from './queryFetcher'; +export { type LegacyRefetch } from './refetch'; +export { type LegacyResolveOptions, type LegacyResolved } from './resolved'; +export { type LegacySelection } from './selection'; +export { + type LegacySubscribeEvents, + type LegacySubscriptionsClient, +} from './subscriptionsClient'; +export { + type LegacyTrack, + type LegacyTrackCallInfo, + type LegacyTrackCallType, + type LegacyTrackOptions, +} from './track'; + +export type CreateLegacyClientOptions = { + accessor: TSchema; + cache: Cache; + context: SchemaContext; + debugger: ReturnType; + fetchOptions: FetchOptions; + resolvers: Resolvers; + scalars: ScalarsEnumsHash; + schema: Readonly; + __depthLimit?: number; +}; + +export type LegacyClientOptions = { + queryFetcher?: LegacyQueryFetcher; + scalarsEnumsHash?: ScalarsEnumsHash; + subscriptionsClient?: LegacySubscriptionsClient; +}; + +/** + * Subscribing to selections made by global accessors, exposed for testing + * purpose. + */ +export type SelectionSubscriber = (fn: Selectable['select']) => () => void; + +export type LegacyClient = { + /** + * @deprecated Use the new `resolve()` method. + */ + resolved: LegacyResolved; + /** + * @deprecated Use the new `resolve()` method. + */ + inlineResolved: LegacyInlineResolved; + /** + * @deprecated Use the new `resolve()` method. + */ + mutate: LegacyMutate; + /** + * @deprecated Use the new `subscribe()` method. + */ + track: LegacyTrack; + /** + * @deprecated Use the new `resolve()` method. + */ + prefetch: LegacyPrefetch; + /** + * @deprecated Use the new `resolve()` method. + */ + refetch: LegacyRefetch; + /** + * Captures selections made with a fake render, fetches them and returns the + * result. + */ + prepareRender: LegacyPrepareRender; + /** + * @deprecated The new cache hydration has no `shouldRefetch` option. It + * always skip `no-cache` and `no-store` queries, and refetches according + * to cache expiry. + */ + // TODO: Make sure caches do not trigger immediate refetches. + hydrateCache: LegacyHydrateCache; + /** + * @deprecated Please migrate from global accessors to locally scoped + * accessors, i.e. `resolve({ query } => {})` or + * `subscribe({ query } => {})`. + */ + query: TSchema['query']; + /** + * @deprecated Please migrate from global accessors to locally scoped + * accessors, i.e. `resolve({ mutation } => {})` or + * `subscribe({ mutation } => {})`. + */ + mutation: TSchema['mutation']; + /** + * @deprecated Please migrate from global accessors to locally scoped + * accessors, i.e. `resolve({ subscription } => {})` or + * `subscribe({ subscription } => {})`. + */ + subscription: TSchema['subscription']; + /** Exposed for testing purpose. */ + subscribeLegacySelections: SelectionSubscriber; +}; + +export type CreateLegacyMethodOptions = + CreateLegacyClientOptions & { + subscribeLegacySelections: SelectionSubscriber; + }; + +export const createLegacyClient = ( + options: CreateLegacyClientOptions +): LegacyClient => { + // Storing ALL scalar selections ever made, specifically made for refetch(). + const selectionHistory = new Set(); + + options.context.subscribeSelect((select) => { + selectionHistory.add(select); + }); + + const methodOptions: CreateLegacyMethodOptions = { + ...options, + subscribeLegacySelections(fn) { + const { context } = options; + const unsubscribeSelect = context.subscribeSelect(fn); + const unsubscribeDispose = context.subscribeDispose(unsubscribeSelect); + + return () => { + unsubscribeDispose(); + unsubscribeSelect(); + }; + }, + }; + + // `refetch` needs `inlineResolved` + const inlineResolved = createLegacyInlineResolved(methodOptions); + + return { + query: options.accessor.query, + mutation: options.accessor.mutation, + subscription: options.accessor.subscription, + resolved: createLegacyResolved(methodOptions), + inlineResolved, + mutate: createLegacyMutate(methodOptions), + track: createLegacyTrack(methodOptions), + prefetch: createLegacyPrefetch(methodOptions), + refetch: createRefetch({ + ...methodOptions, + selectionHistory, + inlineResolved, + }), + prepareRender: createLegacyPrepareRender(methodOptions), + hydrateCache: createLegacyHydrateCache(methodOptions), + + subscribeLegacySelections: methodOptions.subscribeLegacySelections, + }; +}; diff --git a/packages/gqty/src/Client/compat/hydrateCache.ts b/packages/gqty/src/Client/compat/hydrateCache.ts new file mode 100644 index 000000000..767b76518 --- /dev/null +++ b/packages/gqty/src/Client/compat/hydrateCache.ts @@ -0,0 +1,84 @@ +import { fromJSON } from 'flatted'; +import type { BaseGeneratedSchema } from '..'; +import { $meta } from '../../Accessor'; +import { GQtyError } from '../../Error'; +import type { Selection } from '../../Selection'; +import { fetchSelections } from '../resolveSelections'; +import { updateCaches } from '../updateCaches'; +import type { CreateLegacyMethodOptions } from './client'; +import { isLegacyCacheSnapshot } from './prepareRender'; + +export type LegacyHydrateCache = { + ({ cacheSnapshot, shouldRefetch }: LegacyHydrateCacheOptions): void; +}; + +export type LegacyHydrateCacheOptions = { + /** + * Cache snapshot, returned from `prepareRender` + */ + cacheSnapshot: string; + /** + * If it should refetch everything after + * + * Specify a number greater than `0` to delay the refetch that amount in ms + * + * @default + * false + */ + shouldRefetch?: boolean | number; +}; + +export const createLegacyHydrateCache = + ({ + accessor, + cache, + fetchOptions, + }: CreateLegacyMethodOptions): LegacyHydrateCache => + ({ cacheSnapshot, shouldRefetch = false }) => { + const { cache: snapshot, selections: selectionSnapshots } = + parseSnapshot(cacheSnapshot); + + if (snapshot) { + cache.restore(snapshot); + } + + if (selectionSnapshots && shouldRefetch) { + const selections = new Set(); + for (const [[root], ...snapshot] of selectionSnapshots) { + const { selection } = $meta( + accessor[root as keyof BaseGeneratedSchema]! + )!; + + selections.add(selection.fromJSON(snapshot)); + } + + setTimeout( + () => { + fetchSelections(selections, { + cache, + fetchOptions: { + ...fetchOptions, + cachePolicy: 'no-cache', // refetch + }, + }).then((results) => updateCaches(results, [cache])); + }, + shouldRefetch === true ? 0 : shouldRefetch + ); + } + }; + +// TODO: New SSR should always trust the cache during hydration, never refetch +// until cache expiry or SWR. + +export const parseSnapshot = (snapshot: string) => { + try { + const data = fromJSON(snapshot); + if (!isLegacyCacheSnapshot(data)) { + throw 1; + } + + return data; + } catch { + throw new GQtyError(`Unrecognized snapshot format.`); + } +}; diff --git a/packages/gqty/src/Client/compat/inlineResolved.ts b/packages/gqty/src/Client/compat/inlineResolved.ts new file mode 100644 index 000000000..1c9dec640 --- /dev/null +++ b/packages/gqty/src/Client/compat/inlineResolved.ts @@ -0,0 +1,80 @@ +import type { BaseGeneratedSchema } from '../..'; +import type { CreateLegacyMethodOptions } from './client'; +import { convertSelection, LegacySelection } from './selection'; + +export interface LegacyInlineResolved { + ( + fn: () => TData, + options?: LegacyInlineResolveOptions + ): TData | Promise; +} + +export interface LegacyInlineResolveOptions { + refetch?: boolean; + onEmptyResolve?: () => void; + /** + * Get every selection intercepted in the specified function + */ + onSelection?: (selection: LegacySelection) => void; + /** + * On valid cache data found callback + */ + onCacheData?: (data: TData) => void; + /** + * Query operation name + */ + operationName?: string; +} + +export const createLegacyInlineResolved = < + TSchema extends BaseGeneratedSchema = BaseGeneratedSchema +>({ + resolvers: { createResolver }, + subscribeLegacySelections, +}: CreateLegacyMethodOptions): LegacyInlineResolved => { + return ( + fn, + { + refetch = false, + onEmptyResolve, + onSelection, + onCacheData, + operationName, + } = {} + ) => { + const { context, selections, resolve } = createResolver({ + cachePolicy: refetch ? 'no-cache' : 'default', + operationName, + }); + const unsubscribe = subscribeLegacySelections((selection, cache) => { + context.select(selection, cache); + onSelection?.(convertSelection(selection)); + }); + + context.shouldFetch ||= refetch; + + const data = fn(); + + unsubscribe(); + + if (selections.size === 0) { + if (onEmptyResolve) { + onEmptyResolve(); + } else if (process.env.NODE_ENV !== 'production') { + console.warn('[gqty] Warning! No data requested.'); + } + + return data; + } + + if (!context.shouldFetch) { + return data; + } + + if (context.hasCacheHit && !refetch) { + onCacheData?.(data); + } + + return resolve().then(() => fn()); + }; +}; diff --git a/packages/gqty/src/Client/compat/mutate.ts b/packages/gqty/src/Client/compat/mutate.ts new file mode 100644 index 000000000..49e269123 --- /dev/null +++ b/packages/gqty/src/Client/compat/mutate.ts @@ -0,0 +1,54 @@ +import type { BaseGeneratedSchema } from '..'; +import { assignSelections, setCache } from '../../Accessor'; +import { GQtyError } from '../../Error'; +import type { CreateLegacyMethodOptions } from './client'; + +export interface LegacyMutateHelpers { + query: TSchema['query']; + setCache: typeof setCache; + assignSelections: typeof assignSelections; +} + +export interface LegacyMutate { + ( + fn: (mutation: TSchema['mutation']) => T, + opts?: { + onComplete?: (data: T, helpers: LegacyMutateHelpers) => void; + onError?: ( + error: GQtyError, + helpers: LegacyMutateHelpers + ) => void; + } + ): Promise; +} + +export const createLegacyMutate = + ({ + accessor, + resolvers: { resolve }, + }: CreateLegacyMethodOptions): LegacyMutate => + async (fn, { onComplete, onError } = {}) => { + try { + const data = (await resolve(({ mutation }) => fn(mutation), { + cachePolicy: 'no-cache', + })) as ReturnType; + + onComplete?.(data, { + query: accessor.query, + setCache, + assignSelections, + }); + + return data; + } catch (e) { + if (e instanceof GQtyError) { + onError?.(e, { + query: accessor.query, + setCache, + assignSelections, + }); + } + + throw e; + } + }; diff --git a/packages/gqty/src/Client/compat/prefetch.ts b/packages/gqty/src/Client/compat/prefetch.ts new file mode 100644 index 000000000..8621f01ec --- /dev/null +++ b/packages/gqty/src/Client/compat/prefetch.ts @@ -0,0 +1,31 @@ +import type { BaseGeneratedSchema } from '../..'; +import type { CreateLegacyMethodOptions } from './client'; + +export type LegacyPrefetch = { + (fn: (query: TSchema['query']) => TData): TData | Promise; +}; + +export const createLegacyPrefetch = + ({ + resolvers: { createResolver }, + subscribeLegacySelections, + }: CreateLegacyMethodOptions): LegacyPrefetch => + (fn, { operationName }: { operationName?: string } = {}) => { + const { + accessor: { query }, + context, + resolve, + } = createResolver({ operationName }); + const unsubscribe = subscribeLegacySelections((selection, cache) => { + context.select(selection, cache); + }); + const data = fn(query); + + unsubscribe(); + + if (!context.shouldFetch) { + return data; + } + + return resolve().then(() => fn(query)); + }; diff --git a/packages/gqty/src/Client/compat/prepareRender.ts b/packages/gqty/src/Client/compat/prepareRender.ts new file mode 100644 index 000000000..c44c536d5 --- /dev/null +++ b/packages/gqty/src/Client/compat/prepareRender.ts @@ -0,0 +1,120 @@ +import { toJSON } from 'flatted'; +import type { BaseGeneratedSchema } from '..'; +import { Cache } from '../../Cache'; +import type { CacheSnapshot } from '../../Cache/persistence'; +import type { Selection, SelectionSnapshot } from '../../Selection'; +import { isPlainObject } from '../../Utils'; +import { fetchSelections } from '../resolveSelections'; +import { updateCaches } from '../updateCaches'; +import type { CreateLegacyMethodOptions } from './client'; + +export interface LegacyPrepareRender { + (render: () => Promise | void): Promise<{ + cacheSnapshot: string; + }>; +} + +export type LegacyCacheSnapshot = { + cache?: CacheSnapshot; + selections?: SelectionSnapshot[]; +}; + +export const isLegacyCacheSnapshot = ( + json: unknown +): json is LegacyCacheSnapshot => { + if (json != null && !isPlainObject(json)) { + return false; + } + + const snapshot = json as LegacyCacheSnapshot; + + if (snapshot.cache !== undefined && !isPlainObject(snapshot.cache)) { + return false; + } + + if (snapshot.selections) { + if (!Array.isArray(snapshot.selections)) { + return false; + } + + if ( + !snapshot.selections.every((selection) => { + if ( + !Array.isArray(selection) || + !selection.every((it) => { + if (!Array.isArray(it)) return false; + + if (typeof it[0] !== 'string' && typeof it[0] !== 'number') + return false; + + if ( + it[1] && + (!isPlainObject(it[1]) || + !isPlainObject(it[1].input) || + (it[1].isUnion !== undefined && it[1].isUnion !== true)) + ) + return false; + + return true; + }) + ) + return false; + + return true; + }) + ) + return false; + } + + return true; +}; + +export const createLegacyPrepareRender = ({ + cache, + debugger: debug, + fetchOptions, + subscribeLegacySelections, +}: CreateLegacyMethodOptions): LegacyPrepareRender => { + return async (render) => { + const ssrCache = new Cache(); + const selections = new Set(); + + // This works even for the new scoped hooks because there is a hack at + // SchemaContext.parentContext which sends selections upwards to the context + // at client level. Which should be removed in the future when a proper way + // to chain selection callbacks is implemented. + const unsubscribe = subscribeLegacySelections((selection) => { + selections.add(selection); + }); + + try { + await render(); + } finally { + unsubscribe(); + } + + // We can simply fetch here because subscriptions are be skipped on + // server side. Deferred fetches such as useLazyQuery and useMutation + // also don't fire during SSR. + await fetchSelections( + new Set([...selections].filter((s) => s.root.key !== 'subscription')), + { + cache, + debugger: debug, + fetchOptions, + } + ).then((results) => + updateCaches(results, [cache, ssrCache], { skipNotify: true }) + ); + + return { + cacheSnapshot: toJSON( + Object.keys(cache.toJSON()).length > 0 + ? selections.size > 0 + ? { cache, selections: [...selections] } + : { cache } + : {} + ), + }; + }; +}; diff --git a/packages/gqty/src/Client/compat/queryFetcher.ts b/packages/gqty/src/Client/compat/queryFetcher.ts new file mode 100644 index 000000000..028bb8c83 --- /dev/null +++ b/packages/gqty/src/Client/compat/queryFetcher.ts @@ -0,0 +1,15 @@ +import type { ExecutionResult } from 'graphql'; +import type { QueryFetcher } from '../../Schema'; + +export type LegacyQueryFetcher> = ( + query: string, + variables: Record, + fetchOptions?: Omit +) => Promise> | ExecutionResult; + +export const createLegacyQueryFetcher = + = Record>( + queryFetcher: LegacyQueryFetcher + ): QueryFetcher => + async ({ query, variables = {} }, fetchOptions) => + queryFetcher(query, variables, fetchOptions); diff --git a/packages/gqty/src/Client/compat/refetch.ts b/packages/gqty/src/Client/compat/refetch.ts new file mode 100644 index 000000000..0756a8607 --- /dev/null +++ b/packages/gqty/src/Client/compat/refetch.ts @@ -0,0 +1,61 @@ +import type { BaseGeneratedSchema } from '..'; +import { $meta } from '../../Accessor'; +import type { Selection } from '../../Selection'; +import { fetchSelections } from '../resolveSelections'; +import { updateCaches } from '../updateCaches'; +import type { CreateLegacyMethodOptions } from './client'; +import type { LegacyInlineResolved } from './inlineResolved'; + +export type LegacyRefetch = { + (fn: (schema: TSchema) => TData): Promise; + (accessor: TData): Promise; +}; + +export const createRefetch = ({ + cache, + fetchOptions, + inlineResolved, + selectionHistory, +}: CreateLegacyMethodOptions & { + /** Valid scalar selections for refetching. */ + selectionHistory: Set; + inlineResolved: LegacyInlineResolved; +}): LegacyRefetch => { + return async ( + fnOrProxy: TData | ((schema: TSchema) => TData), + operationName?: string + ): Promise => { + if (typeof fnOrProxy === 'function') { + return inlineResolved(fnOrProxy as any, { refetch: true }); + } else { + const selection = $meta(fnOrProxy as any)?.selection; + if (!selection) { + if (process.env.NODE_ENV !== 'production') { + console.warn('[gqty] Invalid proxy to refetch!'); + } + + return fnOrProxy; + } + + const selections = new Set(); + + for (const leaf of selection.getLeafNodes()) { + if (selectionHistory.has(leaf)) { + selections.add(leaf); + } + } + + if (selections.size > 0) { + await fetchSelections(selections, { + cache, + fetchOptions, + operationName, + }).then((results) => { + updateCaches(results, [cache]); + }); + } + + return fnOrProxy; + } + }; +}; diff --git a/packages/gqty/src/Client/compat/resolved.ts b/packages/gqty/src/Client/compat/resolved.ts new file mode 100644 index 000000000..8f0279dcf --- /dev/null +++ b/packages/gqty/src/Client/compat/resolved.ts @@ -0,0 +1,239 @@ +import { type BaseGeneratedSchema } from '..'; +import { GQtyError, type RetryOptions } from '../../Error'; +import { fetchSelections, subscribeSelections } from '../resolveSelections'; +import { updateCaches } from '../updateCaches'; +import { type CreateLegacyMethodOptions } from './client'; +import { convertSelection, type LegacySelection } from './selection'; + +export interface LegacyFetchOptions extends Omit {} + +export interface LegacyResolved { + (fn: () => T, opts?: LegacyResolveOptions): Promise; +} + +export interface LegacyResolveOptions { + /** + * Ignore cache data during selection, which always results in a fetch. + */ + refetch?: boolean; + /** + * Do not update the cache after fetch, return the result only. + */ + noCache?: boolean; + /** + * Activate special handling of non-serializable variables, + * for example, files uploading + * + * @default false + */ + nonSerializableVariables?: boolean; + /** + * Middleware function that is called if valid cache is found + * for all the data requirements, it should return `true` if the + * the resolution and fetch should continue, and `false` + * if you wish to stop the resolution, resolving the promise + * with the existing cache data. + */ + onCacheData?: (data: TData) => boolean; + /** + * On No Cache found + */ + onNoCacheFound?: () => void; + /** + * Get every selection intercepted in the specified function + */ + onSelection?: (selection: LegacySelection) => void; + /** + * On subscription event listener + */ + onSubscription?: ( + event: + | { + type: 'data'; + unsubscribe: () => Promise; + data: TData; + error?: undefined; + } + | { + type: 'with-errors'; + unsubscribe: () => Promise; + data?: TData; + error: GQtyError; + } + | { + type: 'start' | 'complete'; + unsubscribe: () => Promise; + data?: undefined; + error?: undefined; + } + ) => void; + /** + * Function called on empty resolution + */ + onEmptyResolve?: () => void; + + /** + * Retry strategy + */ + retry?: RetryOptions; + + /** + * Pass any extra fetch options + */ + fetchOptions?: LegacyFetchOptions; + + /** + * Query operation name + */ + operationName?: string; +} + +/** + * `resolved()` has to be re-implemented from the parts because the new + * `resolve()` closes subscriptions on first data to mimic a one-time promise, + * while `resolved()` exposes callbacks, letting subcriptions outlive the + * promise. + */ +export const createLegacyResolved = < + TSchema extends BaseGeneratedSchema = BaseGeneratedSchema +>({ + cache, + context: globalContext, + debugger: debug, + fetchOptions: { fetcher, retryPolicy }, + fetchOptions: clientFetchOptions, + resolvers: { createResolver }, + subscribeLegacySelections, +}: CreateLegacyMethodOptions): LegacyResolved => { + const resolved: LegacyResolved = async ( + fn: () => TData, + { + fetchOptions, + noCache = false, // prevent cache writes after fetch + //nonSerializableVariables, // Ignored, object-hash can handle files + onCacheData, + onEmptyResolve, + onNoCacheFound, + onSelection, + onSubscription, + operationName, + refetch = false, // prevent cache reads from selections + retry = retryPolicy, + }: LegacyResolveOptions = {} + ) => { + const { context, selections } = createResolver({ + cachePolicy: noCache ? 'no-store' : refetch ? 'no-cache' : 'default', + operationName, + }); + const unsubscribe = subscribeLegacySelections((selection, cache) => { + context.select(selection, cache); + onSelection?.(convertSelection(selection)); + }); + const resolutionCache = refetch ? cache : context.cache; + const targetCaches = noCache + ? [context.cache] + : refetch + ? [context.cache, cache] + : [cache]; + const dataFn = () => { + globalContext.cache = resolutionCache; + + try { + return fn(); + } finally { + globalContext.cache = cache; + } + }; + + context.shouldFetch ||= noCache || refetch; + + const data = dataFn(); + + unsubscribe(); + + if (selections.size === 0) { + if (onEmptyResolve) { + onEmptyResolve(); + } else if (process.env.NODE_ENV !== 'production') { + console.warn('[gqty] Warning! No data requested.'); + } + + return data; + } + + if (!context.shouldFetch) { + return data; + } + + if (context.hasCacheHit) { + if (onCacheData?.(data) === false) { + return data; + } + } else { + onNoCacheFound?.(); + } + + { + // Subscriptions + const unsubscribe = subscribeSelections( + new Set([...selections].filter((s) => s.root.key === 'subscription')), + ({ data, error, extensions }) => { + if (data) { + // Skip the error here, resolved uses callbacks. + updateCaches([{ data, extensions }], targetCaches); + } + + if (error) { + onSubscription?.({ + type: 'with-errors', + unsubscribe: async () => unsubscribe(), + data: dataFn() ?? (data as TData) ?? undefined, + error: GQtyError.create(error), + }); + } else if (data) { + onSubscription?.({ + type: 'data', + unsubscribe: async () => unsubscribe(), + data: dataFn() ?? (data as TData), + }); + } + }, + { + cache, + debugger: debug, + fetchOptions: clientFetchOptions, + operationName, + onSubscribe() { + onSubscription?.({ + type: 'start', + unsubscribe: async () => unsubscribe(), + }); + }, + onComplete() { + onSubscription?.({ + type: 'complete', + unsubscribe: async () => unsubscribe(), + }); + }, + } + ); + } + + // Queries and mutations + await fetchSelections( + new Set([...selections].filter((s) => s.root.key !== 'subscription')), + { + debugger: debug, + fetchOptions: { fetcher, retryPolicy: retry, ...fetchOptions }, + operationName, + } + ).then( + (results) => updateCaches(results, targetCaches), + (error) => Promise.reject(GQtyError.create(error)) + ); + + return dataFn(); + }; + + return resolved; +}; diff --git a/packages/gqty/src/Selection/selection.ts b/packages/gqty/src/Client/compat/selection.ts similarity index 62% rename from packages/gqty/src/Selection/selection.ts rename to packages/gqty/src/Client/compat/selection.ts index 4335b0c61..53f36d1a1 100644 --- a/packages/gqty/src/Selection/selection.ts +++ b/packages/gqty/src/Client/compat/selection.ts @@ -1,14 +1,16 @@ -export enum SelectionType { +import type { Selection } from '../../Selection'; + +export enum LegacySelectionType { Query, Mutation, Subscription, } -export type SelectionConstructorArgs = { +export type LegacySelectionConstructorArgs = { id: number; key: string | number; - prevSelection?: Selection; - type?: SelectionType; + prevSelection?: LegacySelection; + type?: LegacySelectionType; operationName?: string; alias?: string; args?: Record; @@ -16,12 +18,12 @@ export type SelectionConstructorArgs = { unions?: string[]; }; -export class Selection { +export class LegacySelection { id: string; key: string | number; - type: SelectionType; + type: LegacySelectionType; operationName?: string; @@ -34,13 +36,13 @@ export class Selection { cachePath: readonly (string | number)[] = []; pathString: string; - selectionsList: readonly Selection[]; + selectionsList: readonly LegacySelection[]; - noIndexSelections: readonly Selection[]; + noIndexSelections: readonly LegacySelection[]; - prevSelection: Selection | null = null; + prevSelection: LegacySelection | null = null; - currentCofetchSelections: Set | null = null; + currentCofetchSelections: Set | null = null; constructor({ key, @@ -52,7 +54,7 @@ export class Selection { alias, unions, id, - }: SelectionConstructorArgs) { + }: LegacySelectionConstructorArgs) { this.id = id + ''; this.key = key; this.operationName = operationName; @@ -93,10 +95,10 @@ export class Selection { this.argTypes = argTypes; this.unions = unions; - this.type = type ?? prevSelection?.type ?? SelectionType.Query; + this.type = type ?? prevSelection?.type ?? LegacySelectionType.Query; } - addCofetchSelections(selections: Selection[] | Set) { + addCofetchSelections(selections: LegacySelection[] | Set) { const cofetchSet = (this.currentCofetchSelections ||= new Set()); for (const selection of selections) { @@ -121,3 +123,29 @@ export class Selection { return this.currentCofetchSelections; } } + +export const convertSelection = ( + selection: Selection, + selectionId = 0, + operationName?: string +): LegacySelection => { + return new LegacySelection({ + id: ++selectionId, + key: selection.key, + // translate the whole selection chain upwards + prevSelection: selection.parent + ? convertSelection(selection.parent, selectionId, operationName) + : undefined, + args: selection.input?.values, + argTypes: selection.input?.types, + type: + selection.root.key === 'query' + ? LegacySelectionType.Query + : selection.root.key === 'mutation' + ? LegacySelectionType.Mutation + : LegacySelectionType.Subscription, + operationName, + alias: selection.alias, + unions: selection.isUnion ? [selection.key.toString()] : undefined, + }); +}; diff --git a/packages/gqty/src/Client/compat/subscriptionsClient.ts b/packages/gqty/src/Client/compat/subscriptionsClient.ts new file mode 100644 index 000000000..258657624 --- /dev/null +++ b/packages/gqty/src/Client/compat/subscriptionsClient.ts @@ -0,0 +1,165 @@ +import type { ExecutionResult } from 'graphql'; +import type { + Client, + ConnectionAckMessage, + Event, + EventListener, + MessageType, + Sink, + SubscribeMessage, + SubscribePayload, +} from 'graphql-ws'; +import { GQtyError } from '../../Error'; +import type { LegacySelection as Selection } from './selection'; + +type Promisable = T | Promise; + +export type LegacySubscriptionsClient< + TData extends Record = Record +> = { + subscribe(opts: { + query: string; + variables: Record | undefined; + selections: Selection[]; + events: + | ((ctx: { + selections: Selection[]; + query: string; + variables: Record | undefined; + operationId: string; + }) => LegacySubscribeEvents) + | LegacySubscribeEvents; + cacheKey?: string; + }): Promisable<{ + unsubscribe: () => Promise; + operationId: string; + }>; + unsubscribe(selections: Selection[] | Set): Promise; + close(): Promise; + setConnectionParams( + connectionParams: + | (() => Promisable>) + | Record, + restartClient?: boolean + ): void; +}; + +export interface LegacySubscribeEvents< + TData extends Record = Record +> { + onData: (data: TData) => void; + onError: (payload: { error: GQtyError; data: TData | null }) => void; + onStart?: () => void; + onComplete?: () => void; +} + +export const createLegacySubscriptionsClient = ( + subscriptionsClient: LegacySubscriptionsClient +): Client => { + const listeners = new Map void>>(); + const dispatchEvent = (event: Event, ...args: unknown[]) => { + const listenersSet = listeners.get(event); + + if (listenersSet) { + for (const listener of listenersSet) { + listener(...args); + } + } + }; + + // @ts-expect-error This type missing needs to be fixed + const client: Client = { + subscribe: < + TData = Record, + TExtensions = Record + >( + payload: SubscribePayload, + sink: Sink> + ) => { + const maybePromise = subscriptionsClient.subscribe({ + query: payload.query, + variables: payload.variables ?? {}, + selections: [], + events: { + onStart: () => { + dispatchEvent('message', { + type: 'connection_ack' as MessageType.ConnectionAck, + } satisfies ConnectionAckMessage); + }, + onComplete: () => { + sink.complete(); + }, + onData: (data) => { + sink.next({ + data: data as TData, + }); + }, + onError({ data, error }) { + // No data or unknown error + if ((error && !error.graphQLErrors?.length) || !data) { + sink.error(error.otherError ?? error); + } else { + sink.next({ + data: data as TData, + errors: error.graphQLErrors, + }); + } + }, + }, + }); + + let unsubscribe: (() => void) | undefined; + + if (maybePromise instanceof Promise) { + maybePromise.then(({ operationId, unsubscribe: _unsubscribe }) => { + unsubscribe = _unsubscribe; + + dispatchEvent('message', { + id: operationId, + type: 'subscribe' as MessageType.Subscribe, + payload, + } satisfies SubscribeMessage); + }); + } else { + const sub = maybePromise as Awaited; + + unsubscribe = sub.unsubscribe; + + dispatchEvent('message', { + id: sub.operationId, + type: 'subscribe' as MessageType.Subscribe, + payload, + } satisfies SubscribeMessage); + } + + return () => { + if (unsubscribe === undefined) { + throw new GQtyError(`Subscription has not started yet.`); + } + + unsubscribe(); + sink.complete(); + }; + }, + dispose: () => { + subscriptionsClient.close(); + }, + terminate: () => { + subscriptionsClient.close(); + }, + on(event: E, listener: EventListener) { + // Just for convenience + const untypedListener = listener as (...args: unknown[]) => void; + const listenersSet = listeners.get(event) ?? new Set(); + + listenersSet.add(untypedListener); + listeners.set(event, listenersSet); + + return () => { + listenersSet.delete(untypedListener); + }; + }, + }; + + return client; +}; diff --git a/packages/gqty/src/Client/compat/track.ts b/packages/gqty/src/Client/compat/track.ts new file mode 100644 index 000000000..2bb5c6a69 --- /dev/null +++ b/packages/gqty/src/Client/compat/track.ts @@ -0,0 +1,84 @@ +import type { BaseGeneratedSchema } from '..'; +import { GQtyError } from '../../Error'; +import type { Selection } from '../../Selection'; +import type { CreateLegacyMethodOptions } from './client'; + +export type LegacyTrackCallType = 'initial' | 'cache_change'; + +export interface LegacyTrackCallInfo { + type: LegacyTrackCallType; +} + +export interface LegacyTrackOptions { + onError?: ((err: GQtyError) => void) | undefined; + + operationName?: string; + + /** Refetch on initial call */ + refetch?: boolean; +} + +export interface LegacyTrack { + ( + callback: (info: LegacyTrackCallInfo) => TData, + options?: LegacyTrackOptions + ): { + stop: () => void; + selections: Set; + data: { current: TData | undefined }; + }; +} + +export const createLegacyTrack = < + TSchema extends BaseGeneratedSchema = BaseGeneratedSchema +>({ + cache, + context: globalContext, + resolvers: { createResolver }, + subscribeLegacySelections, +}: CreateLegacyMethodOptions) => { + const track: LegacyTrack = ( + fn, + { onError, operationName, refetch = false } = {} + ) => { + const { context, selections, subscribe } = createResolver({ + cachePolicy: refetch ? 'no-cache' : 'default', + operationName, + }); + const resolutionCache = refetch ? context.cache : cache; + const dataFn = (info: LegacyTrackCallInfo) => { + globalContext.cache = resolutionCache; + + try { + return fn(info); + } finally { + globalContext.cache = cache; + } + }; + const unsubscribe = subscribeLegacySelections((selection, cache) => { + context.select(selection, cache); + }); + const data = { current: dataFn({ type: 'initial' }) }; + + unsubscribe(); + + const stop = subscribe({ + onError(error) { + const theError = GQtyError.create(error); + + if (onError) { + onError(theError); + } else { + throw theError; + } + }, + onNext() { + data.current = dataFn({ type: 'cache_change' }); + }, + }); + + return { data, selections, stop }; + }; + + return track; +}; diff --git a/packages/gqty/src/Client/context.ts b/packages/gqty/src/Client/context.ts new file mode 100644 index 000000000..7f5f5a7e3 --- /dev/null +++ b/packages/gqty/src/Client/context.ts @@ -0,0 +1,107 @@ +import { Cache, type CacheGetOptions } from '../Cache'; +import { type Disposable } from '../Disposable'; +import { type ScalarsEnumsHash, type Schema } from '../Schema'; +import { type Selectable } from '../Selectable'; + +export type SchemaContext< + T extends Record = Record +> = T & + Disposable & + Selectable & { + cache: Cache; + readonly aliasLength?: number; + readonly cacheOptions?: CacheGetOptions; + readonly depthLimit: number; + readonly scalars: ScalarsEnumsHash; + /** Root schema for type lookups */ + readonly schema: Readonly; + /** Custom key fields for each object type. */ + readonly typeKeys?: Record; + notifyCacheUpdate: boolean; + shouldFetch: boolean; + hasCacheHit: boolean; + hasCacheMiss: boolean; + }; + +export type CreateContextOptions = { + aliasLength?: number; + cache: Cache; + depthLimit: number; + cachePolicy: RequestCache; + scalars: ScalarsEnumsHash; + schema: Readonly; + typeKeys?: Record; +}; + +export const createContext = ({ + aliasLength, + cache, + cachePolicy, + depthLimit, + scalars, + schema, + typeKeys, +}: CreateContextOptions): SchemaContext => { + const disposeSubscriptions = new Set<() => void>(); + const selectSubscriptions = new Set(); + + return { + aliasLength, + cache: + cachePolicy === 'no-cache' || + cachePolicy === 'no-store' || + cachePolicy === 'reload' + ? new Cache(undefined, { maxAge: Infinity }) + : cache, + cacheOptions: { + includeExpired: + cachePolicy === 'default' || + cachePolicy === 'force-cache' || + cachePolicy === 'only-if-cached', + }, + scalars, + schema, + depthLimit, + hasCacheHit: false, + hasCacheMiss: false, + shouldFetch: false, + notifyCacheUpdate: cachePolicy !== 'default', + select(selection, cacheNode) { + const now = Date.now(); + const { data, expiresAt: age = Infinity } = cacheNode ?? {}; + + // Suggests a fetch on a stale or missing cache. + // + // We add a minimum of 100 ms leeway for caches with immedidate staleness, + // this prevents components from infinite rendering loop. + this.shouldFetch ||= data === undefined || age < now - 100; + this.hasCacheHit ||= data !== undefined; + + // Missing cache always notify on cache updates. + // The only case we skip this is when fetching for SWR on 'default'. + this.notifyCacheUpdate ||= data === undefined; + + selectSubscriptions.forEach((fn) => fn(selection, cacheNode)); + }, + subscribeSelect(callback) { + selectSubscriptions.add(callback); + + return () => { + selectSubscriptions.delete(callback); + }; + }, + dispose() { + disposeSubscriptions.forEach((fn) => fn()); + disposeSubscriptions.clear(); + selectSubscriptions.clear(); + }, + subscribeDispose(callback) { + disposeSubscriptions.add(callback); + + return () => { + disposeSubscriptions.delete(callback); + }; + }, + typeKeys, + }; +}; diff --git a/packages/gqty/src/Client/debugger.ts b/packages/gqty/src/Client/debugger.ts new file mode 100644 index 000000000..0221f00f1 --- /dev/null +++ b/packages/gqty/src/Client/debugger.ts @@ -0,0 +1,36 @@ +import type { Cache } from '../Cache'; +import type { QueryPayload } from '../Schema'; +import type { Selection } from '../Selection'; +import type { FetchResult, QueryExtensions } from './resolveSelections'; + +export type DebugEvent = { + cache?: Cache; + label?: string; + request: QueryPayload; + result?: FetchResult; + selections: Set; +}; + +export type DebugEventListener = (event: DebugEvent) => void; + +export type Debugger = { + dispatch: (event: DebugEvent) => Promise; + + /** Returns an unsubscribe function */ + subscribe: (listener: DebugEventListener) => () => void; +}; + +export const createDebugger = (): Debugger => { + const subs = new Set(); + + return { + dispatch: async (event: DebugEvent) => { + await Promise.all([...subs].map((sub) => sub(event))); + }, + + subscribe: (listener: DebugEventListener) => { + subs.add(listener); + return () => subs.delete(listener); + }, + }; +}; diff --git a/packages/gqty/src/Client/index.ts b/packages/gqty/src/Client/index.ts index 31cc2665b..157d31a8b 100644 --- a/packages/gqty/src/Client/index.ts +++ b/packages/gqty/src/Client/index.ts @@ -1,2 +1,243 @@ -export * from './client'; -export type { ResolveOptions, InlineResolveOptions } from './resolvers'; +import { type Client as SseClient } from 'graphql-sse'; +import { type Client as WsClient } from 'graphql-ws'; +import { createSchemaAccessor } from '../Accessor'; +import { Cache } from '../Cache'; +import { createPersistors, type Persistors } from '../Cache/persistence'; +import type { RetryOptions } from '../Error'; +import type { + GeneratedSchemaObject, + QueryFetcher, + ScalarsEnumsHash, + Schema, +} from '../Schema'; +import { + createLegacyClient, + type LegacyClient, + type LegacyClientOptions, +} from './compat/client'; +import { createLegacyQueryFetcher } from './compat/queryFetcher'; +import { createLegacySubscriptionsClient } from './compat/subscriptionsClient'; +import { createContext } from './context'; +import { createDebugger } from './debugger'; +import { createResolvers, type Resolvers } from './resolvers'; + +export { $meta } from '../Accessor'; +export { getFields, prepass, selectFields } from '../Helpers'; +export * as useMetaStateHack from '../Helpers/useMetaStateHack'; +export { pick } from '../Utils'; +export type { + LegacyClientOptions as LegacyFetchers, + LegacyHydrateCache, + LegacyHydrateCacheOptions, + LegacyInlineResolved, + LegacyInlineResolveOptions, + LegacyMutate, + LegacyMutateHelpers, + LegacyPrefetch, + LegacyQueryFetcher, + LegacyRefetch, + LegacyResolved, + LegacyResolveOptions, + LegacySelection, + LegacySubscribeEvents, + LegacySubscriptionsClient, + LegacyTrack, + LegacyTrackCallInfo, + LegacyTrackCallType, + LegacyTrackOptions, +} from './compat/client'; +export type { SchemaContext } from './context'; +export type { DebugEvent } from './debugger'; +export { fetchSelections, subscribeSelections } from './resolveSelections'; + +/** A generated schema type in it's most basic form */ +export type BaseGeneratedSchema = { + query: GeneratedSchemaObject; + mutation?: GeneratedSchemaObject; + subscription?: GeneratedSchemaObject; +}; + +export type SchemaObjectKeys = Exclude< + keyof TSchema, + 'query' | 'mutation' | 'subscription' | number | symbol +>; + +export type SchemaObjects = { + [key in SchemaObjectKeys]: { __typename: key }; +}; + +export type SubscriptionClient = SseClient | WsClient; + +export type FetchOptions = Omit & { + fetcher: QueryFetcher; + + /** + * Defines how a query should fetch from the cache and network. + * + * - `default`: Serves the cached contents when it is fresh, and if they are + * stale within `staleWhileRevalidate` window, fetches in the background and + * updates the cache. Or simply fetches on stale cache or cache miss. During + * SWR, a successful fetch will not notify cache updates. New contents are + * served on next query. + * - `no-store`: Always fetch and does not update on response. + * GQty creates a temporary cache at query-level which immediately expires. + * - `reload`: Always fetch, updates on response. + * - `no-cache`: Same as `reload`, for GraphQL does not support conditional + * requests. + * - `force-cache`: Serves the cached contents regardless of staleness. It + * fetches on cache miss or a stale cache, updates cache on response. + * - `only-if-cached`: Serves the cached contents regardless of staleness, + * throws a network error on cache miss. + * + * _It takes effort to make sure the above stays true for all supported + * frameworks, please consider sponsoring so we can dedicate even more time on + * this._ + */ + cachePolicy?: RequestCache; + + /** Default retry strategy upon fetch failure, configurable on query level. */ + retryPolicy?: RetryOptions; + + /** Client implementation for GraphQL Subscriptions. */ + subscriber?: SubscriptionClient; +}; + +export type ClientOptions = { + /** + * Maximum alias length, reducing overall query payload. You may increase this + * when collisions occur, specify Infinity here to use the full hash. + * + * @default 6 + */ + aliasLength?: number; + + cache: Cache; + fetchOptions: FetchOptions; + scalars: ScalarsEnumsHash; + schema: Readonly; + + /** + * Maximum accessor depth, prevents infinite recursions. + * + * @default 15 + */ + __depthLimit?: number; +}; + +export type Client = Persistors & + Resolvers & + LegacyClient & { + /** Global cache accessors. */ + schema: TSchema; + + /** Subscribe to debug events, useful for logging. */ + subscribeDebugEvents: ReturnType['subscribe']; + + /** Get the cache instance of this client. */ + readonly cache: Cache; + }; + +export const createClient = < + TSchema extends BaseGeneratedSchema, + // TODO: compat: remove in v4 + _ObjectTypesNames extends string = never, + // TODO: compat: remove in v4 + _ObjectTypes extends SchemaObjects = never +>({ + aliasLength = 6, + // This default cache on a required option is for legacy clients, which does + // not provide a `cache` option. + // TODO: compat: remove in v4 + cache = new Cache(undefined, { normalization: true }), + fetchOptions: { + fetcher, + cachePolicy: fetchPolicy = 'default', + retryPolicy: defaultRetryPolicy = { + maxRetries: 3, + retryDelay: 1000, + }, + subscriber, + ...fetchOptions + } = {} as FetchOptions, + scalars, + schema, + __depthLimit = 15, + ...legacyOptions +}: ClientOptions & LegacyClientOptions): Client => { + // TODO: compat: remove in next major + { + if (legacyOptions.queryFetcher) { + fetcher ??= createLegacyQueryFetcher(legacyOptions.queryFetcher); + } + + if (legacyOptions.subscriptionsClient) { + subscriber ??= createLegacySubscriptionsClient( + legacyOptions.subscriptionsClient + ); + } + + if (legacyOptions.scalarsEnumsHash) { + scalars ??= legacyOptions.scalarsEnumsHash; + } + } + + // TODO: Defer creation until `@gqty/logger` is used. + const debug = createDebugger(); + + // Global scope for accessing the cache via `schema` property. + const clientContext = createContext({ + aliasLength, + cache, + depthLimit: __depthLimit, + cachePolicy: fetchPolicy, + scalars, + schema, + typeKeys: cache.normalizationOptions?.schemaKeys, + }); + + const resolvers = createResolvers({ + aliasLength, + scalars, + schema, + cache, + debugger: debug, + fetchOptions: { + fetcher, + cachePolicy: fetchPolicy, + retryPolicy: defaultRetryPolicy, + subscriber, + ...fetchOptions, + }, + depthLimit: __depthLimit, + parentContext: clientContext, + }); + + const accessor = createSchemaAccessor(clientContext); + + return { + ...resolvers, + schema: accessor, + subscribeDebugEvents: debug.subscribe, + ...createPersistors(cache), + get cache() { + return cache; + }, + ...createLegacyClient({ + accessor, + cache, + context: clientContext, + debugger: debug, + fetchOptions: { + fetcher, + cachePolicy: fetchPolicy, + retryPolicy: defaultRetryPolicy, + subscriber, + ...fetchOptions, + }, + scalars, + schema, + resolvers, + __depthLimit, + }), + }; +}; diff --git a/packages/gqty/src/Client/resolveSelections.ts b/packages/gqty/src/Client/resolveSelections.ts new file mode 100644 index 000000000..d5bbbbf19 --- /dev/null +++ b/packages/gqty/src/Client/resolveSelections.ts @@ -0,0 +1,439 @@ +import { type ExecutionResult } from 'graphql'; +import { type Client as SseClient } from 'graphql-sse'; +import { + type MessageType, + type SubscribePayload, + type Client as WsClient, +} from 'graphql-ws'; +import { type CloseEvent } from 'ws'; +import { type FetchOptions } from '.'; +import { type Cache } from '../Cache'; +import { dedupePromise } from '../Cache/query'; +import { GQtyError, doRetry } from '../Error'; +import { notifyFetch, notifyRetry } from '../Helpers/useMetaStateHack'; +import { buildQuery } from '../QueryBuilder'; +import { type QueryPayload } from '../Schema'; +import { type Selection } from '../Selection'; +import { type Debugger } from './debugger'; + +export type FetchSelectionsOptions = { + cache?: Cache; + debugger?: Debugger; + extensions?: Record; + fetchOptions: FetchOptions; + operationName?: string; +}; + +export type QueryExtensions = { type: string; hash: string }; + +export type FetchResult< + TData extends Record = Record +> = Omit, 'errors'> & { error?: Error | GQtyError }; + +export const fetchSelections = < + TData extends Record = Record +>( + selections: Set, + { + cache, + debugger: debug, + extensions: customExtensions, + fetchOptions, + operationName, + }: FetchSelectionsOptions +): Promise[]> => + Promise.all( + buildQuery(selections, operationName).map( + async ({ + query, + variables, + operationName, + extensions: { type, hash } = {}, + }) => { + if (!type) throw new GQtyError(`Invalid query type: ${type}`); + if (!hash) throw new GQtyError(`Expected query hash.`); + + const queryPayload: QueryPayload = { + query, + variables, + operationName, + extensions: { ...customExtensions, type, hash }, + }; + + // Dedupe + const { data, errors, extensions } = await dedupePromise( + cache, + hash, + type === 'subscription' + ? () => doSubscribeOnce(queryPayload, fetchOptions) + : () => + doFetch(queryPayload, { ...fetchOptions, selections }) + ); + + const result: FetchResult = { + data, + extensions: { ...extensions, ...queryPayload.extensions }, + }; + + if (errors?.length) { + result.error = GQtyError.fromGraphQLErrors(errors); + } + + // TODO: Defer logging until after cache update + await debug?.dispatch({ + cache, + request: queryPayload, + result, + selections, + }); + + return result; + } + ) + ); + +export type SubscribeSelectionOptions = FetchSelectionsOptions & { + onComplete?: () => void; + onSubscribe?: () => void; +}; + +export type SubscriptionCallback> = ( + result: FetchResult +) => void; + +export type Unsubscribe = () => void; + +/** + * Reference count when there are more than one listeners, unsubscription + * happens when all listeners are unsubscribed. + */ +const subsRef = new WeakMap< + Promise, + { + dispose: () => void; + count: number; + } +>(); + +export const subscribeSelections = < + TData extends Record = Record +>( + selections: Set, + /** + * When a connection closes, this function will be called a last time without + * any arguments. + */ + fn: SubscriptionCallback, + { + cache, + debugger: debug, + extensions: customExtensions, + fetchOptions: { subscriber }, + operationName, + onSubscribe, + onComplete, + }: SubscribeSelectionOptions +): Unsubscribe => { + const unsubscribers = new Set<() => void>(); + + Promise.all( + buildQuery(selections, operationName).map( + async ({ + query, + variables, + operationName, + extensions: { type, hash } = {}, + }) => { + if (!type) throw new GQtyError(`Invalid query type: ${type}`); + if (!hash) throw new GQtyError(`Expected query hash.`); + + if (type === 'subscription' && !subscriber) { + throw new GQtyError(`Missing subscriber for subscriptions.`); + } + + const queryPayload: QueryPayload = { + query, + variables, + operationName, + extensions: { ...customExtensions, type, hash }, + }; + + let subscriptionId: string | undefined; + + if (isWsClient(subscriber)) { + { + const unsub = subscriber?.on('message', (message) => { + switch (message.type) { + case 'connection_ack' as MessageType.ConnectionAck: { + unsub?.(); + onSubscribe?.(); + break; + } + } + }); + } + + { + const unsub = subscriber?.on('message', (message) => { + switch (message.type) { + case 'connection_ack' as MessageType.ConnectionAck: { + break; + } + case 'subscribe' as MessageType.Subscribe: { + if (message.payload.extensions?.hash !== hash) return; + + subscriptionId = message.id; + + debug?.dispatch({ + cache, + label: `[id=${subscriptionId}] [create]`, + request: queryPayload, + selections, + }); + + unsub?.(); + break; + } + } + }); + } + } else if (isSseClient(subscriber)) { + // TODO: Get id via constructor#onMessage option, this requires + // modifications to the generated client. + subscriptionId = 'EventSource'; + onSubscribe?.(); + } else if (type === 'subscription') { + throw new GQtyError(`Please specify a subscriber for subscriptions.`); + } + + const next = ({ data, errors, extensions }: ExecutionResult) => { + if (data === undefined) return; + + const result: FetchResult = { + data, + extensions: { ...extensions, ...queryPayload.extensions }, + }; + + if (errors?.length) { + result.error = GQtyError.fromGraphQLErrors(errors); + } + + debug?.dispatch({ + cache, + label: subscriptionId ? `[id=${subscriptionId}] [data]` : undefined, + request: queryPayload, + result, + selections, + }); + + fn(result); + }; + + const error = (error: GQtyError) => { + if (error == null) { + throw new GQtyError(`Subscription sink closed without an error.`); + } + + debug?.dispatch({ + cache, + label: subscriptionId + ? `[id=${subscriptionId}] [error]` + : undefined, + request: queryPayload, + selections, + }); + + fn({ error, extensions: queryPayload.extensions }); + }; + + let dispose: (() => void) | undefined; + + // Dedupe + const promise = dedupePromise(cache, hash, () => { + return new Promise((complete) => { + dispose = subscriber!.subscribe>( + queryPayload, + { + next, + error(err) { + if (Array.isArray(err)) { + error(GQtyError.fromGraphQLErrors(err)); + } else if (!isCloseEvent(err)) { + error(GQtyError.create(err)); + } + + this.complete(); + }, + complete() { + debug?.dispatch({ + cache, + label: subscriptionId + ? `[id=${subscriptionId}] [unsubscribe]` + : undefined, + request: queryPayload, + selections, + }); + + complete(); + }, + } + ); + }); + }); + + if (dispose) { + subsRef.set(promise, { dispose, count: 1 }); + } else if (subsRef.get(promise)) { + subsRef.get(promise)!.count++; + } + + unsubscribers.add(() => { + const ref = subsRef.get(promise); + if (ref && --ref.count <= 0) { + // Put this in the back of event loop, after current active + // promises to prevent excessive re-subscriptions. + setTimeout(() => { + // Dispose only if no one else join the game till now. + if (ref.count <= 0) { + ref.dispose(); + } + }); + } + }); + + return promise; + } + ) + ).finally(() => onComplete?.()); + + return () => { + unsubscribers.forEach((fn) => fn()); + }; +}; + +const doFetch = async < + TData extends Record = Record +>( + payload: QueryPayload, + { + fetcher, + retryPolicy, + selections, + ...fetchOptions + }: FetchOptions & { selections: Set } +): Promise> => { + // lol, sorry for bad naming. + const doDoFetch = () => + fetcher(payload, fetchOptions) as Promise>; + + try { + const promise = doDoFetch(); + + notifyFetch(promise, selections); + + return await promise; + } catch (error) { + if ( + // User doesn't want reties + !retryPolicy || + // Let everything unknown through + !(error instanceof Error) || + // GQtyErrors are supposed to be terminating + error instanceof GQtyError + // [ ] Supersede the above with the callback ClientOption#onError: + // (error: unknown, { retryAttempt, retry }) => void + ) { + throw error; + } + + return new Promise((resolve, reject) => { + // Selections are attached solely for useMetaState() + doRetry(retryPolicy!, { + onLastTry: async () => { + try { + const promise = doDoFetch(); + notifyRetry(promise, selections); + resolve(await promise); + } catch (e) { + reject(e); + } + }, + onRetry: async () => { + const promise = doDoFetch(); + notifyRetry(promise, selections); + + resolve(await promise); + }, + }); + }); + } +}; + +const doSubscribeOnce = async < + TData extends Record = Record +>( + { query, variables, operationName }: SubscribePayload, + { subscriber }: FetchOptions +) => { + if (!subscriber) { + throw new GQtyError(`Subscription client is required for subscritions.`); + } + + return new Promise>>( + (resolve, reject) => { + let result: any; + + const unsubscribe = subscriber.subscribe( + { + query, + variables: variables ?? {}, + operationName: operationName ?? undefined, + }, + { + next(data) { + result = data; + unsubscribe(); + }, + error(error) { + if (isCloseEvent(error)) { + resolve(result); + } else if (Array.isArray(error)) { + reject(GQtyError.fromGraphQLErrors(error)); + } else { + reject(error); + } + }, + complete() { + if (!result) { + throw new GQtyError(`Subscription completed without data`); + } + + resolve(result); + }, + } + ); + } + ); +}; + +export const isCloseEvent = (input: unknown): input is CloseEvent => { + const error = input as CloseEvent; + + if (!error || typeof error !== 'object') return false; + + return ( + (error.type === 'close' && + error.target?.constructor?.name === 'WebSocket') || + (typeof error.code === 'number' && + [ + 4004, 4005, 4400, 4401, 4403, 4406, 4408, 4409, 4429, 4499, 4500, 4504, + ].includes(error.code)) + ); +}; + +const isWsClient = (client?: SseClient | WsClient): client is WsClient => { + return client !== undefined && typeof (client as WsClient).on === 'function'; +}; + +const isSseClient = (client?: SseClient | WsClient): client is SseClient => + client !== undefined && !isWsClient(client); diff --git a/packages/gqty/src/Client/resolvers.ts b/packages/gqty/src/Client/resolvers.ts index 62fed635c..35c01a6cb 100644 --- a/packages/gqty/src/Client/resolvers.ts +++ b/packages/gqty/src/Client/resolvers.ts @@ -1,970 +1,503 @@ -import type { ExecutionResult, GraphQLError } from 'graphql'; -import { CacheInstance, createCache } from '../Cache'; -import { GQtyError } from '../Error'; -import { doRetry } from '../Error/retry'; -import { createQueryBuilder } from '../QueryBuilder'; +import { type BaseGeneratedSchema, type FetchOptions } from '.'; +import { createSchemaAccessor } from '../Accessor'; +import { type Cache } from '../Cache'; +import { type GQtyError, type RetryOptions } from '../Error'; +import { type ScalarsEnumsHash, type Schema } from '../Schema'; +import { type Selection } from '../Selection'; +import { addSelections, delSelectionSet, getSelectionsSet } from './batching'; +import { createContext, type SchemaContext } from './context'; +import { type Debugger } from './debugger'; import { - createSelectionManager, - SelectionManager, - separateSelectionTypes, -} from '../Selection/SelectionManager'; -import { - createDeferredPromise, - DeferredPromise, - get, - LazyPromise, -} from '../Utils'; - -import type { FetchEventData } from '../Events'; -import type { NormalizationHandler } from '../Normalization'; -import type { SchedulerPromiseValue } from '../Scheduler'; -import type { FetchOptions } from '../Schema/types'; -import { Selection, SelectionType } from '../Selection/selection'; -import type { - InnerClientState, - SubscribeEvents, - SubscriptionsClient, -} from './client'; - -export interface ResolveOptions { - /** - * Set to `true` to refetch the data requirements - */ - refetch?: boolean; + fetchSelections, + subscribeSelections, + type Unsubscribe, +} from './resolveSelections'; +import { updateCaches } from './updateCaches'; + +export type CreateResolversOptions = { + aliasLength?: number; + cache: Cache; + debugger?: Debugger; + depthLimit: number; + fetchOptions: FetchOptions; + scalars: ScalarsEnumsHash; + schema: Readonly; + + // `useRefetch` and `HOC` needs to grab selections from hooks of the same + // component, we need to simulate what InterceptorManager did. + parentContext?: SchemaContext; +}; + +export type Resolvers = { /** - * Ignore the client cache + * Create internal parts for `resolve()` and `subscribe()`, useful for + * custom fetching logics. The React package uses this funciton. */ - noCache?: boolean; + createResolver: CreateResolverFn; + /** - * Activate special handling of non-serializable variables, - * for example, files uploading + * Query, mutation and subscription in a promise. * - * @default false - */ - nonSerializableVariables?: boolean; - /** - * Middleware function that is called if valid cache is found - * for all the data requirements, it should return `true` if the - * the resolution and fetch should continue, and `false` - * if you wish to stop the resolution, resolving the promise - * with the existing cache data. - */ - onCacheData?: (data: TData) => boolean; - /** - * On No Cache found - */ - onNoCacheFound?: () => void; - /** - * Get every selection intercepted in the specified function + * Selections to queries and mutations are fetched with + * `fetchOptions.fetcher`, the result is resolved with the cache updated + * according to the current fetch policy + * + * Subscriptions are disconnected upon delivery of the first data message, + * the cache is updated and the data is resolved, essentially behaving like + * a promise. */ - onSelection?: (selection: Selection) => void; + resolve: ResolveFn; + /** - * On subscription event listener + * Query, mutation and subscription in an async generator. + * + * Subscription data continuously update the cache, while queries and + * mutations are fetched once and then listen to future cache changes + * from the same selections. + * + * This function subscribes to *cache changes*, termination of underlying + * subscription (WebSocket/EventSource) does not stop this generator. + * + * Calling `.return()` does not terminate pending promises, use + * `onSubscribe()` to acquire the unsubscribe function. */ - onSubscription?: ( - event: - | { - type: 'data'; - unsubscribe: () => Promise; - data: TData; - error?: undefined; - } - | { - type: 'with-errors'; - unsubscribe: () => Promise; - data?: TData; - error: GQtyError; - } - | { - type: 'start' | 'complete'; - unsubscribe: () => Promise; - data?: undefined; - error?: undefined; - } - ) => void; + subscribe: SubscribeFn; +}; + +export type ResolverParts = { + accessor: TSchema; + context: SchemaContext; + resolve: () => Promise; + selections: Set; + subscribe: (callbacks?: { + onComplete?: () => void; + onError?: (error: Error | GQtyError) => void; + onNext?: (value: unknown) => void; + }) => () => void; +}; + +export type CreateResolverFn = ( + options?: ResolveOptions +) => ResolverParts; + +export type ResolveFn = < + TData extends unknown = unknown +>( + fn: DataFn, + options?: ResolveOptions +) => Promise; + +const asyncItDoneMessage = { done: true } as IteratorResult; + +export type SubscribeFn = < + TData extends unknown = unknown +>( + fn: DataFn, + options?: SubscribeOptions +) => AsyncGenerator & { + unsubscribe: Unsubscribe; +}; + +export type DataFn = (schema: TSchema) => TResult; + +export type CreateResolverOptions = { /** - * Function called on empty resolution + * Defines how a query should fetch from the cache and network. + * + * - `default`: Serves the cached contents when it is fresh, and if they are + * stale within `staleWhileRevalidate` window, fetches in the background and + * updates the cache. Or simply fetches on cache stale or cache miss. During + * SWR, a successful fetch will not notify cache updates. New contents are + * served on next query. + * - `no-store`: Always fetch and does not update on response. + * GQty creates a temporary cache at query-level which immediately expires. + * - `no-cache`: Always fetch, updates on response. + * - `force-cache`: Serves the cached contents regardless of staleness. It + * fetches on cache miss or a stale cache, updates cache on response. + * - `only-if-cached`: Serves the cached contents regardless of staleness, + * throws a network error on cache miss. + * + * _It takes effort to make sure the above stays true for all supported + * frameworks, please consider sponsoring so we can dedicate even more time on + * this._ */ - onEmptyResolve?: () => void; + cachePolicy?: RequestCache; - /** - * Retry strategy - */ - retry?: RetryOptions; + /** Custom GraphQL extensions to be exposed to the query fetcher. */ + extensions?: Record; - /** - * Pass any extra fetch options - */ - fetchOptions?: FetchOptions; + retryPolicy?: RetryOptions; + + onSelect?: SchemaContext['select']; - /** - * Query operation name - */ operationName?: string; -} - -export type RetryOptions = - | { - /** - * Amount of retries to be made - * @default 3 - */ - maxRetries?: number; - /** - * Amount of milliseconds between each attempt, it can be a static number, - * or a function based on the attempt number - * - * @default attemptIndex => Math.min(1000 * 2 ** attemptIndex, 30000) - */ - retryDelay?: number | ((attemptIndex: number) => number); - } - /** If retries should be enabled - * @default true - */ - | boolean - /** Amount of retries to be made - * @default 3 - */ - | number; - -export interface FetchResolveOptions { - retry?: RetryOptions; - - scheduler?: boolean; - - ignoreResolveCache?: boolean; - - onSubscription?: ResolveOptions['onSubscription']; - - fetchOptions?: FetchOptions; -} - -function filterSelectionsWithErrors( - graphQLErrors: readonly GraphQLError[] | undefined, - executionData: Record | null | undefined, - selections: Selection[] -) { - if (!executionData) return selections; - - const gqlErrorsPaths = graphQLErrors - ?.map((err) => - err.path - ?.filter( - (pathValue): pathValue is string => typeof pathValue === 'string' - ) - .join('.') - ) - .filter( - (possiblePath): possiblePath is NonNullable => { - return !!possiblePath; - } - ); - const selectionsWithErrors = !gqlErrorsPaths?.length - ? selections - : selections.filter((selection) => { - const selectionPathNoIndex = selection.noIndexSelections - .slice(1) - .map((selection) => selection.alias || selection.key) - .join('.'); - const selectionData = get(executionData, selectionPathNoIndex); - - switch (selectionData) { - case undefined: { - return true; - } - case null: { - return gqlErrorsPaths.includes(selectionPathNoIndex); - } - default: - return false; - } - }); +}; - return selectionsWithErrors; -} - -export interface Resolved { - (dataFn: () => T, opts?: ResolveOptions): Promise; -} - -export interface BuildAndFetchSelections { - ( - selections: Selection[] | undefined, - type: 'query' | 'mutation', - cache?: CacheInstance, - options?: FetchResolveOptions, - lastTry?: boolean | undefined - ): Promise; -} - -export interface ResolveSelections { - ( - selections: Selection[] | Set, - cache?: CacheInstance, - options?: FetchResolveOptions - ): Promise; -} - -export interface Resolvers { - resolveSelections: ResolveSelections; - buildAndFetchSelections: BuildAndFetchSelections; - resolved: Resolved; - inlineResolved: InlineResolved; -} - -export interface InlineResolved { - (fn: () => TData, options?: InlineResolveOptions): - | TData - | Promise; -} - -export interface InlineResolveOptions { - refetch?: boolean; - onEmptyResolve?: () => void; +export type ResolveOptions = CreateResolverOptions & { /** - * Get every selection intercepted in the specified function + * Awaits resolution it the query results in a fetch. Specify `false` to + * immediately return the current cache, placeholder data will be returned on + * a partial or complete cache miss. + * + * @default true */ - onSelection?: (selection: Selection) => void; + awaitsFetch?: boolean; + + onFetch?: (fetchPromise: Promise) => void; +}; + +export type SubscribeOptions = CreateResolverOptions & { /** - * On valid cache data found callback + * Intercept errors thrown from the underlying subscription client or query + * fetcher. + * + * If omitted, the `subscribe()` generator throws and closes on the first + * error, terminating other active subscriptions triggered from the same + * selections. */ - onCacheData?: (data: TData) => void; + onError?: (error: unknown) => void; + /** - * Query operation name + * Called when a subscription is established, receives an unsubscribe + * function that immediately terminates the async generator and any pending + * promise. */ - operationName?: string; -} - -export function createResolvers( - innerState: InnerClientState, - catchSelectionsTimeMS: number, - subscriptions?: SubscriptionsClient -): Resolvers { - const { - interceptorManager, - eventHandler, - queryFetcher, - scheduler, - clientCache: globalCache, - selectionManager: globalSelectionManager, - defaults: { resolved: resolvedDefaults = {} }, - } = innerState; - const { globalInterceptor } = interceptorManager; - const buildQuery = createQueryBuilder(); - - const inlineResolved: InlineResolved = function inlineResolved< - TData = unknown - >( - fn: () => TData, - { - refetch, - onEmptyResolve, - onSelection, - onCacheData, - operationName, - }: InlineResolveOptions = {} - ) { - const prevFoundValidCache = innerState.foundValidCache; - innerState.foundValidCache = true; - - const interceptor = interceptorManager.createInterceptor(); - - let noSelection = true; - function onScalarSelection(selection: Selection) { - selection.operationName = operationName; - noSelection = false; - } - interceptor.selectionAddListeners.add(onScalarSelection); - interceptor.selectionCacheRefetchListeners.add(onScalarSelection); - - if (onSelection) { - interceptor.selectionAddListeners.add(onSelection); - interceptor.selectionCacheListeners.add(onSelection); - interceptor.selectionCacheRefetchListeners.add(onSelection); - } - - const prevAllowCache = innerState.allowCache; - try { - if (refetch) innerState.allowCache = false; - - const data = fn(); - - const foundValidCache = innerState.foundValidCache; - - innerState.allowCache = prevAllowCache; - innerState.foundValidCache = prevFoundValidCache; - interceptorManager.removeInterceptor(interceptor); - - if (noSelection) { - if (process.env.NODE_ENV !== 'production') { - console.warn('[gqty] Warning! No data requested.'); - } - if (onEmptyResolve) onEmptyResolve(); - return data; + onSubscribe?: (unsubscribe: Unsubscribe) => void; +}; + +/** + * A client level query batcher. + */ +const pendingQueries = new WeakMap>, Promise>(); + +export const createResolvers = ({ + aliasLength, + cache: clientCache, + debugger: debug, + depthLimit, + fetchOptions, + fetchOptions: { + cachePolicy: defaultCachePolicy = 'default', + retryPolicy: defaultRetryPoliy, + }, + scalars, + schema, + parentContext, +}: CreateResolversOptions): Resolvers => { + const createResolver = ({ + cachePolicy = defaultCachePolicy, + extensions, + onSelect, + onSubscribe, + operationName, + retryPolicy = defaultRetryPoliy, + }: SubscribeOptions = {}) => { + const selections = new Set(); + const context = createContext({ + aliasLength, + cache: clientCache, + depthLimit, + cachePolicy, + scalars, + schema, + }); + + context.subscribeSelect((selection, cache) => { + onSelect?.(selection, cache); + + // Prevents infinite loop created by legacy functions + if (!selections.has(selection)) { + selections.add(selection); + parentContext?.select(selection, cache); } + }); - const promises: Promise[] = []; - groups: for (const [ - selectionSet, - promise, - ] of scheduler.pendingSelectionsGroupsPromises) { - for (const selection of interceptor.fetchSelections) { - if (selectionSet.has(selection)) { - promises.push(promise); - continue groups; - } - } - } + const accessor = createSchemaAccessor(context); - if (promises.length) { - if (foundValidCache) { - if (onCacheData) { - onCacheData(data); - } + const resolve: ResolverParts['resolve'] = async () => { + if (selections.size === 0) { + if (process.env.NODE_ENV !== 'production') { + console.warn( + '[GQty] No selections found. If you are reading from the ' + + 'global accessors, try using the first argument instead.' + ); } - return Promise.all(promises).then((value) => { - for (const v of value) if (v.error) throw v.error; - - innerState.allowCache = true; - return fn(); - }); + return; } - return data; - } finally { - innerState.allowCache = prevAllowCache; - innerState.foundValidCache = prevFoundValidCache; - interceptorManager.removeInterceptor(interceptor); - } - }; + if (!context.shouldFetch) return; - const { - noCache: noCacheDefault = false, - refetch: refetchDefault = false, - retry: retryDefault = false, - } = resolvedDefaults; - const resolved: Resolved = async function resolved( - dataFn: () => T, - { - refetch = refetchDefault, - noCache = noCacheDefault, - onCacheData, - onSelection, - onSubscription, - retry = retryDefault, - nonSerializableVariables, - onNoCacheFound, - onEmptyResolve, - fetchOptions, - operationName, - }: ResolveOptions = {} - ): Promise { - const prevFoundValidCache = innerState.foundValidCache; - innerState.foundValidCache = true; - - let prevAllowCache = innerState.allowCache; - if (refetch) { - innerState.allowCache = false; - } - - let tempCache: typeof innerState.clientCache | undefined; - if (noCache) { - innerState.clientCache = tempCache = createCache(); - } - - let tempSelectionManager: SelectionManager | undefined; - if (nonSerializableVariables) { - innerState.selectionManager = tempSelectionManager = - createSelectionManager(); - } - - let prevGlobalInterceptorListening = globalInterceptor.listening; - globalInterceptor.listening = false; - - const interceptor = interceptorManager.createInterceptor(); - - let noSelection = true; - - function onScalarSelection(selection: Selection) { - selection.operationName = operationName; - noSelection = false; - } - interceptor.selectionAddListeners.add(onScalarSelection); - interceptor.selectionCacheRefetchListeners.add(onScalarSelection); - - if (onSelection) { - interceptor.selectionAddListeners.add(onSelection); - interceptor.selectionCacheListeners.add(onSelection); - interceptor.selectionCacheRefetchListeners.add(onSelection); - } - - try { - const data = dataFn(); - - if (noSelection) { - if (process.env.NODE_ENV !== 'production') { - console.warn('[gqty] Warning! No data requested.'); - } - if (onEmptyResolve) onEmptyResolve(); - return data; + if (cachePolicy === 'only-if-cached') { + // Mimic fetch error in the Chromium/WebKit monopoly + throw new TypeError('Failed to fetch'); } - interceptorManager.removeInterceptor(interceptor); - - if (innerState.foundValidCache) { - if (onCacheData && !onCacheData(data)) { - return data; - } - } else { - onNoCacheFound?.(); - } + // Batch selections up at client level, fetch all of them "next tick". + const selectionsCacheKey = `${cachePolicy}/${operationName ?? ''}`; - innerState.foundValidCache = prevFoundValidCache; - innerState.allowCache = prevAllowCache; - innerState.clientCache = globalCache; - innerState.selectionManager = globalSelectionManager; - - globalInterceptor.listening = prevGlobalInterceptorListening; - - await resolveSelections( - interceptor.fetchSelections, - tempCache || innerState.clientCache, - { - ignoreResolveCache: refetch || noCache, - onSubscription: onSubscription - ? (event) => { - switch (event.type) { - case 'data': - case 'with-errors': - if (event.data) { - const prevAllowCache = innerState.allowCache; - try { - innerState.allowCache = true; - globalInterceptor.listening = false; - if (tempCache) { - innerState.clientCache = tempCache; - } - onSubscription({ - ...event, - data: dataFn(), - }); - } finally { - innerState.allowCache = prevAllowCache; - globalInterceptor.listening = true; - innerState.clientCache = globalCache; - } - } else { - onSubscription(event); - } - return; - default: - onSubscription(event); - } - } - : undefined, - retry, - fetchOptions, - } + const pendingSelections = addSelections( + clientCache, + selectionsCacheKey, + selections ); - prevAllowCache = innerState.allowCache; - innerState.allowCache = true; + if (!pendingQueries.has(pendingSelections)) { + pendingQueries.set( + pendingSelections, + Promise.resolve().then(() => { + const selections = new Set( + [ + ...(getSelectionsSet(clientCache, selectionsCacheKey) ?? []), + ].flatMap((selections) => [...selections]) + ); - prevGlobalInterceptorListening = globalInterceptor.listening; - globalInterceptor.listening = false; + pendingQueries.delete(pendingSelections); + + delSelectionSet(clientCache, selectionsCacheKey); + + return fetchSelections(selections, { + cache: context.cache, + debugger: debug, + extensions, + fetchOptions: { ...fetchOptions, cachePolicy, retryPolicy }, + operationName, + }).then((results) => { + updateCaches( + results, + cachePolicy !== 'no-store' && context.cache !== clientCache + ? [context.cache, clientCache] + : [context.cache], + { skipNotify: !context.notifyCacheUpdate } + ); - if (tempCache) { - innerState.clientCache = tempCache; - } - if (tempSelectionManager) { - innerState.selectionManager = tempSelectionManager; + return results; + }); + }) + ); } - return dataFn(); - } catch (err) { - throw GQtyError.create(err, resolved); - } finally { - interceptorManager.removeInterceptor(interceptor); - innerState.allowCache = prevAllowCache; - innerState.clientCache = globalCache; - innerState.selectionManager = globalSelectionManager; - innerState.foundValidCache = prevFoundValidCache; - globalInterceptor.listening = prevGlobalInterceptorListening; - } - }; - - const resolutionTempCache = new Map(); - const resolutionTempCacheTimeout = catchSelectionsTimeMS * 5; - - function buildQueryAndCheckTempCache( - selections: Selection[], - type: 'query' | 'mutation' | 'subscription', - normalizationHandler: NormalizationHandler | undefined, - ignoreResolveCache: boolean | undefined, - isGlobalCache: boolean - ) { - const { query, variables, cacheKey } = buildQuery( - selections, - { - type, - }, - normalizationHandler != null, - isGlobalCache - ); - - const cachedData = ignoreResolveCache - ? undefined - : (resolutionTempCache.get(cacheKey) as TData | undefined); - - return { - query, - variables, - cacheKey, - cachedData, + return pendingQueries.get(pendingSelections)!; }; - } - - const resolveQueryPromisesMap: Record> = {}; - - async function buildAndFetchSelections( - selections: Selection[] | undefined, - type: 'query' | 'mutation', - cache: CacheInstance = innerState.clientCache, - options: FetchResolveOptions = {}, - lastTry?: boolean - ) { - if (!selections) return; - - const isLastTry = - lastTry === undefined ? (options.retry ? false : true) : lastTry; - - const { query, variables, cachedData, cacheKey } = - buildQueryAndCheckTempCache( - selections, - type, - innerState.normalizationHandler, - options.ignoreResolveCache, - cache === globalCache - ); - - if (!options.scheduler) return resolve(); - - let promise: Promise | undefined = - resolveQueryPromisesMap[cacheKey]; - - if (promise) return promise; - - promise = LazyPromise(resolve); - resolveQueryPromisesMap[cacheKey] = promise; - - try { - return await promise; - } finally { - delete resolveQueryPromisesMap[cacheKey]; - } - - async function resolve() { - if (!selections) return; - let executionData: ExecutionResult['data']; - - let loggingPromise: DeferredPromise | undefined; - - try { - if (cachedData != null) return cachedData; + const subscribe: ResolverParts['subscribe'] = ({ + onComplete, + onError, + onNext, + } = {}) => { + if (selections.size === 0) { + if (process.env.NODE_ENV !== 'production') { + console.warn( + '[GQty] No selections found. If you are reading from the ' + + 'global accessors, try using the first argument instead.' + ); + } - if (eventHandler.hasFetchSubscribers) { - loggingPromise = createDeferredPromise(); + return () => { + // noop + }; + } - eventHandler.sendFetchPromise(loggingPromise.promise, selections); + const unsubscibers = new Set<() => void>(); + const unsubscribe = () => { + for (const unsubscribe of unsubscibers) { + unsubscribe(); } - - const executionResult = await queryFetcher( - query, - variables, - options.fetchOptions + }; + + // Subscribe to cache changes, re-rendering is triggered separately from + // the actual fetch / subscription. + if (onNext) { + const unsubscribe = context.cache.subscribe( + [...selections].map((s) => s.cacheKeys.join('.')), + (data) => onNext({ data }) ); - const { data, errors } = executionResult; + unsubscibers.add(unsubscribe); + } - if (data) { - if (!errors && cacheKey) { - resolutionTempCache.set(cacheKey, data); - setTimeout( - () => resolutionTempCache.delete(cacheKey), - resolutionTempCacheTimeout - ); - } + const subscriptionSelections = new Set(); + const promises: Promise[] = []; - cache.mergeCache(data, type); - executionData = data; + // fetch query and mutation. + if (context.shouldFetch) { + // resolve() directly processes the selections set, remove subscription + // selections before calling it, we handle subscription differently + // below. + for (const selection of selections) { + if (selection.root.key === 'subscription') { + selections.delete(selection); + subscriptionSelections.add(selection); + } } - if (errors?.length) { - throw GQtyError.fromGraphQLErrors(errors); - } else if (options.scheduler) { - innerState.scheduler.errors.removeErrors(selections); + if (selections.size > 0) { + promises.push(resolve()); } + } - loggingPromise?.resolve({ - executionResult, - query, - variables, - cacheSnapshot: cache.cache, - selections, - type, - }); + // Add subscription selections back after resolve(), the subscribe() + // AsyncGenerator needs it. + for (const selection of subscriptionSelections) { + selections.add(selection); + } - return data as unknown as TData; - } catch (err) { - const error = GQtyError.create(err, () => {}); - loggingPromise?.resolve({ - error, - query, - variables, - cacheSnapshot: cache.cache, - selections, - type, - }); + // Subscriptions ignore shouldFetch, always subscribe for changes. + { + const promise = new Promise((resolve, reject) => { + const unsubscribe: Unsubscribe = subscribeSelections( + subscriptionSelections, + ({ data, error, extensions }) => { + if (error) { + onError?.(error); + + // Discard data here because of how generators work + if (data !== undefined) { + } - if (options.scheduler) { - const selectionsWithErrors = filterSelectionsWithErrors( - error.graphQLErrors, - executionData, - selections - ); - innerState.scheduler.errors.triggerError( - error, - selectionsWithErrors, - isLastTry + reject(error); + } else if (data !== undefined) { + updateCaches( + [{ data, error, extensions }], + cachePolicy !== 'no-store' && context.cache !== clientCache + ? [context.cache, clientCache] + : [context.cache], + { skipNotify: !context.notifyCacheUpdate } + ); + } else { + // Fetches responded, subscriptions closed, but cache subscription is + // still active. + } + }, + { + cache: context.cache, + debugger: debug, + extensions, + fetchOptions: { + ...fetchOptions, + cachePolicy, + retryPolicy, + }, + operationName, + onSubscribe: () => onSubscribe?.(unsubscribe), + onComplete: () => resolve(), + } ); - } - if (options.retry) { - async function retryFn(lastTry: boolean) { - const retryPromise: Promise = - buildAndFetchSelections( - selections, - type, - cache, - Object.assign({}, options, { - retry: false, - ignoreResolveCache: true, - } as FetchResolveOptions), - lastTry - ).then( - (data) => ({ data, selections: new Set(selections) }), - (err) => { - console.error(err); - return { - error: GQtyError.create(err), - selections: new Set(selections), - }; - } - ); + unsubscibers.add(unsubscribe); + }); - if (options.scheduler) { - const setSelections = new Set(selections); - scheduler.pendingSelectionsGroups.add(setSelections); + promises.push(promise); + } - scheduler.errors.retryPromise(retryPromise, setSelections); + Promise.allSettled(promises).finally(onComplete); - retryPromise.finally(() => { - scheduler.pendingSelectionsGroups.delete(setSelections); - }); - } + return unsubscribe; + }; - const { error } = await retryPromise; + return { accessor, context, resolve, selections, subscribe }; + }; - if (error) throw error; - } - doRetry(options.retry, { - onLastTry() { - return retryFn(true); - }, - onRetry() { - return retryFn(false); - }, - }); - } + return { + createResolver, - throw error; - } finally { - interceptorManager.removeSelections(selections); - } - } - } - - function subscriptionSchedulerEvents(ctx: { - selections: Selection[]; - query: string; - variables: Record | undefined; - operationId: string; - }): SubscribeEvents { - return { - onData(data) { - const { selections, query, operationId, variables } = ctx; - globalCache.mergeCache(data, 'subscription'); - scheduler.errors.removeErrors(selections); - for (const selection of selections) { - eventHandler.sendCacheChange({ - data, - selection, - }); - } - if (eventHandler.hasFetchSubscribers) { - eventHandler.sendFetchPromise( - Promise.resolve({ - executionResult: { - data, - }, - cacheSnapshot: globalCache.cache, - query, - variables, - selections, - type: 'subscription', - label: `[id=${operationId}] [data]`, - }), - selections - ); - } - }, - onError({ data, error }) { - const { query, variables, selections, operationId } = ctx; - if (data) globalCache.mergeCache(data, 'subscription'); - - scheduler.errors.triggerError( - error, - filterSelectionsWithErrors(error.graphQLErrors, data, selections), - true - ); + resolve: async (fn, options) => { + const { accessor, resolve } = createResolver(options); + const dataFn = () => fn(accessor); - if (eventHandler.hasFetchSubscribers) { - eventHandler.sendFetchPromise( - Promise.resolve({ - executionResult: { - data, - }, - error, - cacheSnapshot: globalCache.cache, - query, - variables, - selections, - type: 'subscription', - label: `[id=${operationId}] [error]`, - }), - selections - ); - } - }, - }; - } - - async function buildAndSubscribeSelections( - selections: Selection[] | undefined, - cache: CacheInstance = innerState.clientCache, - options: FetchResolveOptions - ) { - if (!selections) return; - - if (!subscriptions) { - if (typeof window !== 'undefined') { - console.error('ERROR: No subscriptions client specified!'); - } - return; - } - - const selectionsByRoot = new Map>(); - - for (const selection of selections) { - const root = selection.selectionsList[1]; - // This case realistically should never happen - /* istanbul ignore next */ - if (!root) continue; - - let selectionSet = selectionsByRoot.get(root); - if (selectionSet) { - selectionSet.push(selection); - } else { - selectionSet = [selection]; - selectionsByRoot.set(root, selectionSet); + // Run once to trigger selections + dataFn(); + + const fetchPromise = resolve().then(dataFn); + + if (options?.awaitsFetch ?? true) { + return fetchPromise; } - } - const unsubscribeCallbacks = new Set<() => Promise>(); - const unsubscribe = async () => { - await Promise.all(Array.from(unsubscribeCallbacks).map((cb) => cb())); - }; + options?.onFetch?.(fetchPromise); - for (const selections of selectionsByRoot.values()) { - const { query, variables, cacheKey } = buildQueryAndCheckTempCache( - selections, - 'subscription', - innerState.normalizationHandler, - true, - cache === globalCache - ); + return dataFn(); + }, + + subscribe: ( + fn, + { onSubscribe, ...options } = {} + ): AsyncGenerator & { unsubscribe: Unsubscribe } => { + const { accessor, selections, subscribe } = createResolver({ + ...options, + onSubscribe: (unsubscribe) => { + onSubscribe?.(() => { + unsubscribe(); + done = true; + deferred?.resolve(); + }); + }, + }); - let operationId: string; - const subResult = subscriptions.subscribe({ - query, - variables, - selections, - cacheKey, - events: options.scheduler - ? subscriptionSchedulerEvents - : { - onData(data) { - cache.mergeCache(data, 'subscription'); - - options.onSubscription?.({ - type: 'data', - unsubscribe, - data, - }); - if (eventHandler.hasFetchSubscribers) { - eventHandler.sendFetchPromise( - Promise.resolve({ - executionResult: { - data, - }, - cacheSnapshot: globalCache.cache, - query, - variables, - selections, - type: 'subscription', - label: `[id=${operationId}] [data]`, - }), - selections - ); - } - }, - onError({ data, error }) { - if (data) cache.mergeCache(data, 'subscription'); - - options.onSubscription?.({ - type: 'with-errors', - unsubscribe, - data, - error, - }); - - if (eventHandler.hasFetchSubscribers) { - eventHandler.sendFetchPromise( - Promise.resolve({ - executionResult: { - data, - }, - error, - cacheSnapshot: globalCache.cache, - query, - variables, - selections, - type: 'subscription', - label: `[id=${operationId}] [error]`, - }), - selections - ); - } - }, - onStart: options.onSubscription - ? () => { - options.onSubscription?.({ - type: 'start', - unsubscribe, - }); - } - : undefined, - onComplete: options.onSubscription - ? () => { - options.onSubscription?.({ - type: 'complete', - unsubscribe, - }); - } - : undefined, - }, + fn(accessor); + + const unsubscribe = subscribe({ + onError: (error) => { + rejected = error; + deferred?.reject(error); + }, + onNext(value) { + pending.push((fn(accessor) as any) ?? (value as any)); + deferred?.resolve(); + }, + onComplete() { + done = true; + deferred?.resolve(); + }, }); - if (subResult instanceof Promise) { - let loggingPromise: DeferredPromise | undefined; - if (eventHandler.hasFetchSubscribers) { - loggingPromise = createDeferredPromise(); - eventHandler.sendFetchPromise(loggingPromise.promise, selections); - } - const { unsubscribe, operationId } = await subResult; + // Assuming child selections are cached and reused in subsequent + // selections, otherwise uncomment the following line to prevent + // excessive duplicated selections. + //context.onSelect = undefined; - unsubscribeCallbacks.add(unsubscribe); + let deferred: + | { + resolve: () => void; + reject: (err: unknown) => void; + } + | undefined; + let rejected: unknown; + let done = false; + const pending = [] as unknown[]; - loggingPromise?.resolve({ - cacheSnapshot: cache.cache, - query, - variables, - selections, - type: 'subscription', - label: `[id=${operationId}] [created]`, - }); - } else { - unsubscribeCallbacks.add(subResult.unsubscribe); + if (selections.size === 0) { + done = true; } - } - } - - async function resolveSelections< - TQuery = unknown, - TMutation = unknown, - TSubscription = unknown - >( - selections: Selection[] | Set, - cache: CacheInstance = innerState.clientCache, - options: FetchResolveOptions = {} - ) { - const selectionBranches = separateSelectionTypes(selections); - - try { - await Promise.all( - selectionBranches.map((selections) => { - const [ - { - noIndexSelections: [{ type }], - }, - ] = selections; - - if (type === SelectionType.Query) { - return buildAndFetchSelections( - selections, - 'query', - cache, - options - ); - } else if (type === SelectionType.Mutation) { - return buildAndFetchSelections( - selections, - 'mutation', - cache, - options - ); - } else if (type === SelectionType.Subscription) { - return buildAndSubscribeSelections( - selections, - cache, - options - ); + + return { + async next() { + if (rejected !== undefined) { + throw rejected; + } else if (done) { + return asyncItDoneMessage; + } else if (pending.length > 0) { + return { value: pending.shift()! }; } else { - throw new TypeError('Invalid selection type'); - } - }) - ); - } catch (err) { - throw GQtyError.create(err); - } - } + await new Promise((resolve, reject) => { + deferred = { resolve, reject }; + }); - return { - resolveSelections, - buildAndFetchSelections, - resolved, - inlineResolved, + return this.next(); + } + }, + async throw(error) { + throw error; + }, + async return() { + unsubscribe(); + return asyncItDoneMessage; + }, + [Symbol.asyncIterator]() { + return this; + }, + unsubscribe, + }; + }, }; -} +}; diff --git a/packages/gqty/src/Client/updateCaches.ts b/packages/gqty/src/Client/updateCaches.ts new file mode 100644 index 000000000..d48ec155d --- /dev/null +++ b/packages/gqty/src/Client/updateCaches.ts @@ -0,0 +1,48 @@ +import type { GraphQLError } from 'graphql'; +import extend from 'just-extend'; +import type { Cache, CacheObject, CacheRoot, CacheSetOptions } from '../Cache'; +import { GQtyError } from '../Error'; +import type { FetchResult } from './resolveSelections'; + +export const updateCaches = >( + results: FetchResult[], + caches: Cache[], + cacheSetOptions?: CacheSetOptions +) => { + const errorSet = new Set(); + + for (const response of results) { + const { data, error, extensions } = response; + const type = extensions?.type; + + if (!type || typeof type !== 'string') { + if (process.env.NODE_ENV !== 'production') { + console.warn('[GQty] Missing extensions.type in query result.'); + } + + continue; + } + + if (data !== undefined) { + const newValues = { + [type]: extend(true, {}, data) as CacheObject, + } as CacheRoot; + + for (const cache of caches) { + cache.set(newValues, cacheSetOptions); + } + } + + if (error) { + if (!(error instanceof GQtyError) || !error.graphQLErrors?.length) { + throw error; + } else { + error.graphQLErrors.forEach((error) => errorSet.add(error)); + } + } + } + + if (errorSet.size) { + throw GQtyError.fromGraphQLErrors([...errorSet]); + } +}; diff --git a/packages/gqty/src/Disposable.ts b/packages/gqty/src/Disposable.ts new file mode 100644 index 000000000..6be9289fd --- /dev/null +++ b/packages/gqty/src/Disposable.ts @@ -0,0 +1,19 @@ +import { type Unsubscribe } from './Unsubscribe'; + +/** + * Objects that can be manually disposed, disposed objects simply opens up + * itself for GC. + * + * Subscribers of the dispose function are supposed to release all references to + * the object when notified. + */ +export interface Disposable { + /** + * Notifying subscribers about the intended dispoal of this object, + * subscribers are responsible to remove any references and release any + * resources. + */ + dispose(): void; + + subscribeDispose(callback: () => void): Unsubscribe; +} diff --git a/packages/gqty/src/Error/index.ts b/packages/gqty/src/Error/index.ts index d347766ed..39231b36c 100644 --- a/packages/gqty/src/Error/index.ts +++ b/packages/gqty/src/Error/index.ts @@ -1,20 +1,19 @@ import type { GraphQLError } from 'graphql'; +export type GQtyErrorOptions = { + graphQLErrors?: GQtyError['graphQLErrors']; + otherError?: GQtyError['otherError']; +}; + export class GQtyError extends Error { + readonly name = 'GQtyError'; + graphQLErrors?: ReadonlyArray; otherError?: unknown; constructor( message: string, - { - graphQLErrors, - otherError, - }: { - graphQLErrors?: GQtyError['graphQLErrors']; - otherError?: GQtyError['otherError']; - // TODO: Remove - caller?: Function; - } = {} + { graphQLErrors, otherError }: GQtyErrorOptions = {} ) { super(message); @@ -30,11 +29,7 @@ export class GQtyError extends Error { }; } - static create( - error: unknown, - // TODO: Remove caller from definitino - _caller?: Function - ): GQtyError { + static create(error: unknown): GQtyError { let newError: GQtyError; if (error instanceof GQtyError) { @@ -51,20 +46,13 @@ export class GQtyError extends Error { } static fromGraphQLErrors(errors: readonly GraphQLError[]) { - return errors.length > 1 - ? new GQtyError( - `GraphQL Errors${ - process.env.NODE_ENV === 'production' - ? '' - : ', please check .graphQLErrors property' - }`, - { - graphQLErrors: errors, - } - ) - : new GQtyError(errors[0].message, { - graphQLErrors: errors, - }); + return new GQtyError( + (errors.length === 1 && errors[0].message) || + (process.env.NODE_ENV === 'production' + ? `GraphQL Errors` + : 'GraphQL Errors, please check .graphQLErrors property'), + { graphQLErrors: errors } + ); } } diff --git a/packages/gqty/src/Events/index.ts b/packages/gqty/src/Events/index.ts deleted file mode 100644 index 629d4f6d4..000000000 --- a/packages/gqty/src/Events/index.ts +++ /dev/null @@ -1,68 +0,0 @@ -import type { ExecutionResult } from 'graphql'; - -import type { CacheType } from '../Cache'; -import type { GQtyError } from '../Error'; -import type { Selection } from '../Selection'; - -export interface FetchEventData { - label?: string; - executionResult?: Pick; - error?: GQtyError; - query: string; - variables: Record | undefined; - cacheSnapshot: CacheType; - selections: Selection[]; - type: 'query' | 'mutation' | 'subscription'; -} - -export interface CacheChangeEventData { - selection: Selection; - data: unknown; -} - -interface OnFetchEventFn { - (data: Promise, selections: Selection[]): void; -} - -interface OnCacheChangeEventFn { - (data: CacheChangeEventData): void; -} - -export class EventHandler { - public hasFetchSubscribers = false; - private onFetchListeners = new Set(); - private onCacheChangeListeners = new Set(); - - public sendCacheChange(data: CacheChangeEventData) { - for (const listener of this.onCacheChangeListeners) { - listener(data); - } - } - - public sendFetchPromise( - data: Promise, - selections: Selection[] - ) { - for (const listener of this.onFetchListeners) { - listener(data, selections); - } - } - - public onCacheChangeSubscribe(fn: OnCacheChangeEventFn) { - this.onCacheChangeListeners.add(fn); - - return () => { - this.onCacheChangeListeners.delete(fn); - }; - } - - public onFetchSubscribe(fn: OnFetchEventFn) { - this.onFetchListeners.add(fn); - this.hasFetchSubscribers = this.onFetchListeners.size > 0; - - return () => { - this.onFetchListeners.delete(fn); - this.hasFetchSubscribers = this.onFetchListeners.size > 0; - }; - } -} diff --git a/packages/gqty/src/Helpers/FrailMap.ts b/packages/gqty/src/Helpers/FrailMap.ts new file mode 100644 index 000000000..81ab715c9 --- /dev/null +++ b/packages/gqty/src/Helpers/FrailMap.ts @@ -0,0 +1,105 @@ +export type FrailContainer = WeakRef<{ data: V }> | StrongRef<{ data: V }>; + +export type SetOptions = { + /** Use strong reference for this value. */ + strong?: boolean; +}; + +/** As oppose to WeakRef */ +class StrongRef { + #data: T; + constructor(data: T) { + this.#data = data; + } + deref() { + return this.#data; + } +} + +/** + * Strong limbs with a weak grab, a WeakMap that supports scalars. + * + * `size` will not be updated until a disposed object is accessed via one of + * these methods: get, entries, forEach, keys or values. + */ +export class FrailMap extends Map { + constructor(entries?: readonly (readonly [K, V])[] | null) { + super(); + + if (entries) { + for (const [k, v] of entries) { + this.set(k, v); + } + } + } + + get(key: K) { + const ref = super.get(key) as FrailContainer | undefined; + const val = ref?.deref(); + if (val === undefined) { + this.delete(key); + return; + } + + return val.data; + } + has(key: K) { + return super.has(key) && this.get(key) !== undefined; + } + set(key: K, value: V, options?: SetOptions) { + return super.set( + key, + (options?.strong || typeof WeakRef === 'undefined' + ? new StrongRef({ data: value }) + : new WeakRef({ data: value })) as V + ); + } + + forEach( + callbackfn: (value: V, key: K, map: Map) => void, + thisArg?: any + ) { + super.forEach((container, k) => { + const ref = (container as FrailContainer).deref(); + if (ref !== undefined) { + callbackfn.call(thisArg, ref.data, k, this); + } else { + this.delete(k); + } + }); + } + entries() { + const map = new Map(); + this.forEach((v, k) => { + map.set(k, v); + }); + return map.entries(); + } + keys() { + const keys = new Set(); + this.forEach((_, k) => { + keys.add(k); + }); + return keys.values(); + } + values() { + const keys = new Set(); + this.forEach((v) => { + keys.add(v); + }); + return keys.values(); + } + [Symbol.iterator]() { + return this.entries(); + } + get [Symbol.toStringTag]() { + return 'FrailMap'; + } + toJSON() { + const json: Record = {}; + this.forEach((v, k) => { + json[k as string] = v; + }); + return json; + } +} diff --git a/packages/gqty/src/Helpers/InfiniteFrailMap.ts b/packages/gqty/src/Helpers/InfiniteFrailMap.ts new file mode 100644 index 000000000..89bced322 --- /dev/null +++ b/packages/gqty/src/Helpers/InfiniteFrailMap.ts @@ -0,0 +1,15 @@ +import { FrailMap } from './FrailMap'; + +export class InfiniteFrailMap extends FrailMap< + K, + V | InfiniteFrailMap> +> { + get(key: K): V | InfiniteFrailMap> { + const value = + super.get(key) ?? new InfiniteFrailMap>(); + + super.set(key, value); + + return value; + } +} diff --git a/packages/gqty/src/Helpers/deepCopy.ts b/packages/gqty/src/Helpers/deepCopy.ts new file mode 100644 index 000000000..1c889faec --- /dev/null +++ b/packages/gqty/src/Helpers/deepCopy.ts @@ -0,0 +1,4 @@ +import { parse, stringify } from 'flatted'; + +export const deepCopy = (value: T): Readonly => + Object.freeze(parse(stringify(value))); diff --git a/packages/gqty/src/Helpers/index.ts b/packages/gqty/src/Helpers/index.ts index 8d4093697..7646bd726 100644 --- a/packages/gqty/src/Helpers/index.ts +++ b/packages/gqty/src/Helpers/index.ts @@ -1,6 +1,8 @@ -export * from './selectFields'; -export type { HydrateCacheOptions } from './ssr'; -export * from './getFields'; export * from './casters'; +export * from './deepCopy'; +export * from './FrailMap'; +export * from './getFields'; export * from './prepass'; -export * from './types'; +export * from './select'; +export * from './selectFields'; +export * from './variables'; diff --git a/packages/gqty/src/Helpers/prefetch.ts b/packages/gqty/src/Helpers/prefetch.ts deleted file mode 100644 index 7fe870287..000000000 --- a/packages/gqty/src/Helpers/prefetch.ts +++ /dev/null @@ -1,41 +0,0 @@ -import type { InnerClientState } from '../Client/client'; -import type { SchedulerPromiseValue } from '../Scheduler'; - -export interface Prefetch< - GeneratedSchema extends { - query: object; - } -> { - (fn: (query: GeneratedSchema['query']) => TData): - | TData - | (Promise & { schedulerPromise: Promise }); -} - -export function createPrefetch< - GeneratedSchema extends { - query: object; - } ->( - query: GeneratedSchema['query'], - { scheduler }: InnerClientState -): Prefetch { - return function prefetch( - fn: (query: GeneratedSchema['query']) => TData - ): - | (Promise & { - schedulerPromise: Promise; - }) - | TData { - const existingData = fn(query); - - if (scheduler.resolving) { - return Object.assign( - scheduler.resolving.promise.then(() => prefetch(fn)), - { - schedulerPromise: scheduler.resolving.promise, - } - ); - } - return existingData; - }; -} diff --git a/packages/gqty/src/Helpers/prepass.ts b/packages/gqty/src/Helpers/prepass.ts index 0277ca4de..fcecb7ce6 100644 --- a/packages/gqty/src/Helpers/prepass.ts +++ b/packages/gqty/src/Helpers/prepass.ts @@ -1,3 +1,4 @@ +import { Selection } from '../Selection'; import { isObject } from '../Utils'; function getFirstNonNullValue(list: T[]): T | void { @@ -12,9 +13,31 @@ export interface PrepassObjKey { export function prepass( v: T, ...keys: Array> +): T; +export function prepass( + v: T, + selections: Set +): T; +export function prepass( + v: T, + ...keys: Array> | [Set] ): T { if (v == null) return v; + keys = + keys[0] instanceof Set + ? (keys = [...keys[0]].map((selection) => { + return selection.ancestry.map((s) => + s.input + ? { + field: `${s.key}`, + variables: s.input.values, + } + : `${s.key}` + ); + })) + : (keys as Array>); + for (const composedKeys of keys) { const separatedKeys = typeof composedKeys === 'string' ? composedKeys.split('.') : composedKeys; diff --git a/packages/gqty/src/Helpers/refetch.ts b/packages/gqty/src/Helpers/refetch.ts deleted file mode 100644 index eb7e03440..000000000 --- a/packages/gqty/src/Helpers/refetch.ts +++ /dev/null @@ -1,41 +0,0 @@ -import type { InnerClientState } from '../Client/client'; -import type { Resolvers } from '../Client/resolvers'; - -export function isFunction(v: T | (() => T)): v is () => T { - return typeof v === 'function'; -} - -export interface Refetch { - (refetchArg: T | (() => T)): Promise; -} - -export function createRefetch( - innerState: InnerClientState, - resolveSelections: Resolvers['resolveSelections'], - inlineResolved: Resolvers['inlineResolved'] -): Refetch { - const { accessorCache } = innerState; - - async function refetch(refetchArg: T | (() => T)) { - if (isFunction(refetchArg)) - return inlineResolved(refetchArg, { refetch: true }); - - if (accessorCache.isProxy(refetchArg)) { - const selectionSet = accessorCache.getSelectionSetHistory(refetchArg); - - if (selectionSet) { - await resolveSelections(selectionSet, undefined, { - ignoreResolveCache: true, - }); - } - return refetchArg; - } - - if (process.env.NODE_ENV !== 'production') { - console.warn('gqty: Invalid proxy to refetch!', refetchArg); - } - return refetchArg; - } - - return refetch; -} diff --git a/packages/gqty/src/Helpers/select.ts b/packages/gqty/src/Helpers/select.ts new file mode 100644 index 000000000..f97ad007a --- /dev/null +++ b/packages/gqty/src/Helpers/select.ts @@ -0,0 +1,35 @@ +import type { CacheNode } from '../Cache'; + +/** + * Similar to _.get() but dots goes into arrays, JSONata, JSONPath and JMESPath + * does similar things but overkill. + */ +export function select( + node: CacheNode, + path: string[], + /** + * Optional callback, invoked each time a path segment can be successfully + * traversed downwards. The callback can return a new node value to replace + * the current node, return `undefined` to essentially terminate the + * traversal. + */ + onNext?: (node: CacheNode, path: string[]) => CacheNode +): CacheNode { + const probedNode = onNext ? onNext(node, path) : node; + + if (path.length === 0) { + return node; + } + // Exit when there are still sub-paths but scalars are reached + else if (probedNode == null || typeof probedNode !== 'object') { + return undefined; + } + + if (Array.isArray(probedNode)) { + return probedNode.map((item) => select(item, path, onNext)); + } + + const [key, ...rest] = path; + + return select(probedNode[key], rest, onNext); +} diff --git a/packages/gqty/src/Helpers/selectFields.ts b/packages/gqty/src/Helpers/selectFields.ts index d7564ccb6..73dbc1fd9 100644 --- a/packages/gqty/src/Helpers/selectFields.ts +++ b/packages/gqty/src/Helpers/selectFields.ts @@ -1,4 +1,6 @@ -import { get, isObject, set } from '../Utils'; +import get from 'just-safe-get'; +import set from 'just-safe-set'; +import { isObject } from '../Utils'; export function selectFields( accessor: A, @@ -11,10 +13,12 @@ export function selectFields( return accessor.map((value) => selectFields(value, fields, recursionDepth) ) as A; + } else if (!isObject(accessor)) { + return accessor; + } else { + Reflect.get(accessor, '__typename'); } - if (!isObject(accessor)) return accessor; - if (fields.length === 0) { return {} as A; } @@ -50,6 +54,10 @@ export function selectFields( } return fields.reduce((acum, fieldName) => { + if (typeof fieldName === 'number') { + fieldName = fieldName.toString(); + } + const fieldValue = get(accessor, fieldName); if (fieldValue === undefined) return acum; diff --git a/packages/gqty/src/Helpers/ssr.ts b/packages/gqty/src/Helpers/ssr.ts deleted file mode 100644 index e6d43bfa3..000000000 --- a/packages/gqty/src/Helpers/ssr.ts +++ /dev/null @@ -1,126 +0,0 @@ -import type { ProxyAccessor } from '../Cache'; -import type { InnerClientState, Refetch } from '../Client/client'; -import type { SelectionsBackup } from '../Selection/SelectionManager'; -import { decycle, isEmptyObject, isPlainObject, retrocycle } from '../Utils'; - -export interface HydrateCacheOptions { - /** - * Cache snapshot, returned from `prepareRender` - */ - cacheSnapshot: string; - /** - * If it should refetch everything after - * - * Specify a number greater than `0` to delay the refetch that amount in ms - * - * @default - * false - */ - shouldRefetch?: boolean | number; -} - -export interface HydrateCache { - ({ cacheSnapshot, shouldRefetch }: HydrateCacheOptions): void; -} - -export interface PrepareRender { - (render: () => Promise | void): Promise<{ cacheSnapshot: string }>; -} - -export interface SSRHelpers { - hydrateCache: HydrateCache; - prepareRender: PrepareRender; -} - -export function createSSRHelpers({ - query, - refetch, - innerState, -}: { - query: ProxyAccessor; - refetch: Refetch; - innerState: InnerClientState; -}): SSRHelpers { - const hydrateCache = ({ - cacheSnapshot, - shouldRefetch = false, - }: HydrateCacheOptions) => { - try { - const recoveredCache = retrocycle<{ - cache?: Record; - normalizedCache?: Record; - selections?: SelectionsBackup; - }>(JSON.parse(cacheSnapshot)); - if ( - isPlainObject(recoveredCache) && - isPlainObject(recoveredCache.cache) - ) { - const { selections, cache } = recoveredCache; - - innerState.selectionManager.restore(selections); - - innerState.clientCache.mergeCache(cache, 'query'); - - if (shouldRefetch) { - setTimeout( - () => { - refetch(query).catch(console.error); - }, - typeof shouldRefetch === 'number' ? shouldRefetch : 0 - ); - } - } - } catch (err) { - console.error(err); - } - }; - - const prepareRender = async (render: () => Promise | unknown) => { - const interceptor = innerState.interceptorManager.createInterceptor(); - let prevIgnoreCache = innerState.allowCache; - try { - innerState.allowCache = false; - await render(); - } finally { - innerState.interceptorManager.removeInterceptor(interceptor); - innerState.allowCache = prevIgnoreCache; - } - - await Promise.all([ - ...innerState.scheduler.pendingSelectionsGroupsPromises.values(), - ]); - - const selections = innerState.selectionManager.backup(); - - const queryCache = innerState.clientCache.cache.query || {}; - - // We only want to pass the cache that is part of the selections made - // Not all the acumulated server cache - const cache: Record = {}; - for (const { - type, - // cachePath has always the form ["query", "user", "email"] - cachePath: [, queryPath], - } of interceptor.fetchSelections) { - // SelectionType.Query === 0 - if (type === 0) { - const value = queryCache[queryPath]; - if (value !== undefined) cache[queryPath] = value; - } - } - - return { - cacheSnapshot: JSON.stringify({ - ...decycle({ - cache: isEmptyObject(cache) ? undefined : cache, - }), - selections: selections[0].length ? selections : undefined, - }), - }; - }; - - return { - hydrateCache, - prepareRender, - }; -} diff --git a/packages/gqty/src/Helpers/track.ts b/packages/gqty/src/Helpers/track.ts deleted file mode 100644 index 0f8362479..000000000 --- a/packages/gqty/src/Helpers/track.ts +++ /dev/null @@ -1,184 +0,0 @@ -import { GQtyError } from '../Error'; -import { debounce } from '../Utils/debounce'; -import { isAnySelectionIncluded } from '../Utils/selectionsInclude'; - -import type { Selection } from '../Selection'; -import type { InnerClientState, SubscriptionsClient } from '../Client'; - -export type TrackCallType = 'initial' | 'cache_change'; - -export interface TrackCallInfo { - type: TrackCallType; -} - -export interface TrackOptions { - onError?: ((err: GQtyError) => void) | undefined; - - /** - * Refetch on initial call - */ - refetch?: boolean; -} - -export interface Track { - (callback: (info: TrackCallInfo) => TData, options?: TrackOptions): { - stop: () => void; - selections: Set; - data: { current: TData | undefined }; - }; -} - -export function createTracker( - innerState: InnerClientState, - subscriptionsClient: SubscriptionsClient | undefined -): { - track: Track; -} { - const { - interceptorManager: { createInterceptor, removeInterceptor }, - eventHandler, - scheduler, - clientCache, - } = innerState; - - function track( - callback: (info: TrackCallInfo) => TData, - { onError, refetch }: TrackOptions = {} - ): { - stop: () => void; - selections: Set; - data: { current: TData | undefined }; - } { - const trackerSelections = new Set(); - - let lastError: unknown; - function callOnError(err: unknown) { - // Don't repeat error calls with the same error instance - if (lastError && err === lastError) return; - lastError = err; - - onError && onError(GQtyError.create(err, callback)); - } - - const data = { current: undefined as TData | undefined }; - - function main(info: TrackCallInfo) { - const interceptor = createInterceptor(); - - interceptor.selectionAddListeners.add((selection) => { - trackerSelections.add(selection); - }); - - const shouldRefetch = refetch && info.type === 'initial'; - - try { - if (shouldRefetch) { - innerState.allowCache = false; - } - - Promise.resolve(callback(info)) - .then((value) => { - data.current = value; - }) - .catch(callOnError); - } catch (err) { - callOnError(err); - } finally { - if (shouldRefetch) { - innerState.allowCache = true; - } - - removeInterceptor(interceptor); - } - } - - const isNotifying = { current: false }; - const debouncedCacheChange = debounce(() => { - isNotifying.current = false; - main({ - type: 'cache_change', - }); - }, 10); - - const unsubErrors = - onError && - scheduler.errors.subscribeErrors((data) => { - switch (data.type) { - case 'new_error': { - if (isAnySelectionIncluded(data.selections, trackerSelections)) { - callOnError(data.newError); - } - return; - } - } - }); - - const unsubCache = eventHandler.onCacheChangeSubscribe(({ selection }) => { - if (isNotifying.current) return; - - if (trackerSelections.has(selection)) { - isNotifying.current = true; - debouncedCacheChange(); - } - }); - - const unsubFetch = eventHandler.onFetchSubscribe((promise) => { - promise.then(({ error, selections, executionResult }) => { - if ( - isNotifying.current || - !isAnySelectionIncluded(trackerSelections, selections) - ) - return; - - error && callOnError(error); - - if (executionResult?.data) { - isNotifying.current = true; - debouncedCacheChange(); - } - }); - }); - - const stopSubscriptions = - subscriptionsClient && - (() => { - subscriptionsClient - .unsubscribe(trackerSelections) - .then((operationsIds) => { - if (eventHandler.hasFetchSubscribers && operationsIds.length) { - const arraySelections = Array.from(trackerSelections); - for (const id of operationsIds) { - eventHandler.sendFetchPromise( - Promise.resolve({ - query: '', - variables: undefined, - cacheSnapshot: clientCache.cache, - selections: arraySelections, - type: 'subscription', - label: `[id=${id}] [unsubscribe]`, - }), - arraySelections - ); - } - } - }); - }); - - main({ - type: 'initial', - }); - - return { - stop() { - unsubCache(); - unsubFetch(); - unsubErrors?.(); - stopSubscriptions?.(); - }, - selections: trackerSelections, - data, - }; - } - - return { track }; -} diff --git a/packages/gqty/src/Helpers/types.ts b/packages/gqty/src/Helpers/types.ts deleted file mode 100644 index f13645ff2..000000000 --- a/packages/gqty/src/Helpers/types.ts +++ /dev/null @@ -1,5 +0,0 @@ -export type Variables any = never> = - Parameters[0]; - -export type Args any = never> = - Variables; diff --git a/packages/gqty/src/Helpers/useMetaStateHack.ts b/packages/gqty/src/Helpers/useMetaStateHack.ts new file mode 100644 index 000000000..fc9a99c7d --- /dev/null +++ b/packages/gqty/src/Helpers/useMetaStateHack.ts @@ -0,0 +1,51 @@ +import type { Selection } from '../Selection'; + +const retryEventListeners = new Set<(event: RetryEvent) => void>(); + +export type RetryEvent = { + readonly promise: Promise; + readonly selections: Set; + readonly isLastTry: boolean; +}; + +export const notifyRetry = ( + promise: Promise, + selections: Set, + isLastTry = false +) => { + for (const listener of retryEventListeners) { + listener({ promise, selections, isLastTry }); + } +}; + +export const subscribeRetry = (callback: (event: RetryEvent) => void) => { + retryEventListeners.add(callback); + + return () => { + retryEventListeners.delete(callback); + }; +}; + +const fetchEventListeners = new Set<(event: FetchEvent) => void>(); + +export type FetchEvent = { + readonly promise: Promise; + readonly selections: Set; +}; + +export const notifyFetch = ( + promise: Promise, + selections: Set +) => { + for (const listener of fetchEventListeners) { + listener({ promise, selections }); + } +}; + +export const subscribeFetch = (callback: (event: FetchEvent) => void) => { + fetchEventListeners.add(callback); + + return () => { + fetchEventListeners.delete(callback); + }; +}; diff --git a/packages/gqty/src/Helpers/variables.ts b/packages/gqty/src/Helpers/variables.ts new file mode 100644 index 000000000..46dfe9971 --- /dev/null +++ b/packages/gqty/src/Helpers/variables.ts @@ -0,0 +1 @@ +export type Variables = T extends (args: infer V) => any ? V : never; diff --git a/packages/gqty/src/Interceptor/index.ts b/packages/gqty/src/Interceptor/index.ts deleted file mode 100644 index 985aedf40..000000000 --- a/packages/gqty/src/Interceptor/index.ts +++ /dev/null @@ -1,116 +0,0 @@ -import type { Selection } from '../Selection'; - -export class Interceptor { - fetchSelections = new Set(); - listening = true; - selectionAddListeners = new Set<(selection: Selection) => void>(); - selectionCacheListeners = new Set<(selection: Selection) => void>(); - selectionCacheRefetchListeners = new Set<(selection: Selection) => void>(); - - addSelection(selection: Selection) { - if (!this.listening) return; - - this.fetchSelections.add(selection); - - for (const listener of this.selectionAddListeners) { - listener(selection); - } - } - - addSelectionCache(selection: Selection) { - if (!this.listening) return; - - for (const listener of this.selectionCacheListeners) { - listener(selection); - } - } - - addSelectionCacheRefetch(selection: Selection) { - if (!this.listening) return; - - for (const listener of this.selectionCacheRefetchListeners) { - listener(selection); - } - } - - removeSelections(selections: Set | Selection[]) { - for (const selection of selections) { - this.fetchSelections.delete(selection); - } - } -} - -export interface InterceptorManager { - interceptors: Set; - globalInterceptor: Interceptor; - createInterceptor: () => Interceptor; - removeInterceptor: (interceptor: Interceptor) => void; - addSelection: (selection: Selection) => void; - addSelectionCache: (selection: Selection) => void; - addSelectionCacheRefetch: (selection: Selection) => void; - addSelections: (selection: Selection[] | Set) => void; - removeSelections: (selections: Selection[] | Set) => void; -} - -export function createInterceptorManager(): InterceptorManager { - const interceptors = new Set(); - - const globalInterceptor = new Interceptor(); - interceptors.add(globalInterceptor); - - function createInterceptor() { - const interceptor = new Interceptor(); - interceptors.add(interceptor); - // console.debug('+ interceptor', interceptors.size); - return interceptor; - } - - function removeInterceptor(interceptor: Interceptor) { - interceptors.delete(interceptor); - // console.debug('- interceptor', interceptors.size); - } - - function addSelection(selection: Selection) { - for (const interceptor of interceptors) { - interceptor.addSelection(selection); - } - } - - function addSelectionCache(selection: Selection) { - for (const interceptor of interceptors) { - if (interceptor === globalInterceptor) continue; - - interceptor.addSelectionCache(selection); - } - } - - function addSelectionCacheRefetch(selection: Selection) { - for (const interceptor of interceptors) { - if (interceptor === globalInterceptor) continue; - - interceptor.addSelectionCacheRefetch(selection); - } - } - - function addSelections(selection: Selection[] | Set) { - selection.forEach(addSelection); - } - - function removeSelections(selections: Selection[] | Set) { - for (const interceptor of interceptors) { - interceptor.removeSelections(selections); - } - } - - return { - interceptors, - globalInterceptor, - createInterceptor, - removeInterceptor, - addSelection, - addSelectionCache, - addSelectionCacheRefetch, - addSelections, - removeSelections, - }; -} diff --git a/packages/gqty/src/Normalization/index.ts b/packages/gqty/src/Normalization/index.ts deleted file mode 100644 index 883bf6be7..000000000 --- a/packages/gqty/src/Normalization/index.ts +++ /dev/null @@ -1,343 +0,0 @@ -import type { CacheType } from '../Cache'; -import type { EventHandler } from '../Events'; -import { parseSchemaType, ScalarsEnumsHash, Schema, Type } from '../Schema'; -import type { Selection } from '../Selection'; -import { - deepAssign, - DeepPartial, - isObject, - isObjectWithType, - mergeWith, - ObjectWithType, - PlainObject, -} from '../Utils'; - -type MakeTypenamesNonNullable = { - [K in keyof Obj]: K extends '__typename' ? NonNullable : Obj[K]; -}; - -export interface NormalizationOptions< - ObjectTypesNames extends string = never, - ObjectTypes extends { - [P in ObjectTypesNames]: { - __typename?: P; - }; - } = never -> { - /** - * ### Custom object identifier. - * - * It gives an incoming object with it's ___typename_ and it should return: - * - * - A __string__ if successfully identified - * - '__null__' if it shouldn't be normalized - * - Or '__undefined__', to fallback to either default or custom keyFields - * - * @example - * identifier(obj) { - * switch (obj.__typename) { - * case "User": { - * if (obj.email) { - * return `${obj.__typename}${obj.email}` - * } - * return null; - * } - * default: { - * return; - * } - * } - * } - * - */ - identifier?: ( - obj: MakeTypenamesNonNullable> - ) => string | null | undefined | void; - /** - * ### Auto-fetch & object identifier customization - * - * Keep in mind that `gqty` already checks your schema and looks for the fields **id** or **__id** - * and it add thems **automatically**. - * - * Set the __id's__ of any object type in your schema. - * - * __IMPORTANT__: Please make sure to only put [`Scalars`](https://graphql.org/learn/schema/#scalar-types) - * without any variable needed as keyFields - * - * @example - * keyFields: { - * User: ["email"] - * } - */ - keyFields?: { - [P in ObjectTypesNames]?: - | Array> - | null - | undefined; - }; -} - -function toString(v: unknown): string | null { - switch (typeof v) { - case 'string': - return v; - case 'number': - case 'bigint': - return v + ''; - case 'boolean': - return v ? '1' : '0'; - case 'object': - return v && JSON.stringify(v); - default: - return null; - } -} - -export interface NormalizationHandler { - getId: (obj: ObjectWithType) => string | undefined | null; - getCacheFromSelection: ( - selection: Selection, - notFoundValue: NotFound, - cache: CacheType - ) => Value | NotFound; - scanNormalizedObjects: (obj: object) => void; - normalizedCache: Record; - onObjectMergeConflict: ( - currentValue: object, - incomingValue: object - ) => object | void; - schemaKeys: Record; -} - -export function createNormalizationHandler( - options: - | NormalizationOptions> - | undefined - | boolean, - eventHandler: EventHandler, - schema: Readonly, - scalarsEnumsHash: ScalarsEnumsHash -): NormalizationHandler | undefined { - if (!options) return; - - const { identifier, keyFields } = isObject(options) - ? options - : ({} as NormalizationOptions); - - const schemaKeys: Record = keyFields - ? Object.assign({}, keyFields) - : {}; - - const idSchemaKey: ['id'] = ['id']; - const _idSchemaKey: ['_id'] = ['_id']; - - function addIdIfValid( - idKey: string, - typeName: string, - schemaType: Record, - idsList: string[] - ) { - const type = schemaType[idKey] as Type | undefined; - if (!type || type.__args) return; - - const { pureType, isArray } = parseSchemaType(type.__type); - if (isArray || !scalarsEnumsHash[pureType]) return; - - schemaKeys[typeName] = idsList; - - return true; - } - - for (const [typeName, schemaType] of Object.entries(schema)) { - const existingKeyFields = schemaKeys[typeName]; - if ( - !isObject(schemaType) || - Array.isArray(existingKeyFields) || - existingKeyFields === null || - typeName === 'query' || - typeName === 'mutation' || - typeName === 'subscription' || - !schemaType.__typename - ) { - continue; - } - - addIdIfValid('id', typeName, schemaType, idSchemaKey) || - addIdIfValid('_id', typeName, schemaType, _idSchemaKey); - } - - function getId(obj: ObjectWithType): string | undefined | null { - if (identifier) { - const result = identifier(obj as never); - - if (result !== undefined) return result; - } - - const keys = schemaKeys[obj.__typename]; - - if (!keys) return; - - let id: string = ''; - - for (const key of keys) { - if (typeof key !== 'string') continue; - - const value = toString(obj[key]); - if (value !== null) id += value; - } - - return id && obj.__typename + id; - } - - const normalizedCache: Record = {}; - - const normalizedSelections = new Map>(); - - function getCacheFromSelection( - selection: Selection, - notFoundValue: NotFound, - cache: CacheType - ): Value | NotFound { - let container: PlainObject | undefined; - let containerKey: string | number | undefined; - - let currentValue: unknown = cache; - - let currentSelection: Selection; - - function getNormalized() { - let id: string | undefined | null; - if (isObjectWithType(currentValue) && (id = getId(currentValue))) { - let selectionsSet = normalizedSelections.get(id); - if (!selectionsSet) { - selectionsSet = new Set(); - normalizedSelections.set(id, selectionsSet); - } - - selectionsSet.add(currentSelection); - - let normalizedObject: PlainObject | undefined; - - if ( - (normalizedObject = normalizedCache[id]) && - normalizedObject !== (currentValue as unknown) - ) { - if (container && containerKey != null) { - container[containerKey] = normalizedObject; - } - - currentValue = normalizedObject; - } - } - } - - for (const selectionValue of selection.selectionsList) { - if (selectionValue.key === '$on') continue; - currentSelection = selectionValue; - const key = selectionValue.alias || selectionValue.key; - - if (isObject(currentValue)) { - getNormalized(); - - //@ts-expect-error - container = currentValue; - containerKey = key; - - currentValue = - //@ts-expect-error - currentValue[key]; - } else return notFoundValue; - } - - getNormalized(); - - return currentValue === undefined ? notFoundValue : (currentValue as Value); - } - - function scanNormalizedObjects(obj: object) { - const pendingObjects = new Set([obj]); - - for (const container of pendingObjects) { - for (const value of Object.values(container)) { - if (Array.isArray(value)) { - pendingObjects.add(value); - } else if (isObjectWithType(value)) { - const id = getId(value); - let data = value; - if (id) { - const currentValueNormalizedCache = normalizedCache[id]; - - if (currentValueNormalizedCache !== (value as unknown)) { - if (currentValueNormalizedCache) { - normalizedCache[id] = data = deepAssign( - {}, - [currentValueNormalizedCache, value], - (targetValue, sourceValue): object | void => { - if ( - Array.isArray(targetValue) && - Array.isArray(sourceValue) && - targetValue.length !== sourceValue.length - ) { - return sourceValue; - } - } - ); - } else { - normalizedCache[id] = value as any; - } - - if (eventHandler) { - const selections = normalizedSelections.get(id); - - if (selections) { - for (const selection of selections) { - eventHandler.sendCacheChange({ - data, - selection, - }); - } - } - } - } else continue; - } - - pendingObjects.add(value); - } - } - } - } - - function onObjectMergeConflict( - currentValue: object, - incomingValue: object - ): object | void { - if (isObjectWithType(incomingValue) && isObjectWithType(currentValue)) { - const idNewValue = getId(incomingValue); - if (!idNewValue) return; - - const idCurrentValue = getId(currentValue); - - if (idNewValue === idCurrentValue) { - const currentObject = normalizedCache[idNewValue]; - - if (currentObject !== (incomingValue as unknown)) { - return (normalizedCache[idNewValue] = mergeWith( - {}, - currentObject, - incomingValue, - onObjectMergeConflict - )); - } - return incomingValue; - } - } - } - - return { - getId, - getCacheFromSelection, - scanNormalizedObjects, - normalizedCache, - onObjectMergeConflict, - schemaKeys, - }; -} diff --git a/packages/gqty/src/QueryBuilder/buildQuery.ts b/packages/gqty/src/QueryBuilder/buildQuery.ts deleted file mode 100644 index cb4ba720f..000000000 --- a/packages/gqty/src/QueryBuilder/buildQuery.ts +++ /dev/null @@ -1,215 +0,0 @@ -import type { Selection } from '../Selection'; -import { set } from '../Utils'; -import { serializeVariables } from '../Utils/cachedJSON'; - -interface SelectionTree { - [P: string]: SelectionTree | true; -} - -const stringSelectionTree = (v: SelectionTree) => { - const treeEntries = Object.entries(v); - return treeEntries.reduce((acum, [key, value], index) => { - if (typeof value === 'object') { - acum += key + '{'; - - acum += stringSelectionTree(value); - - acum += '}'; - } else { - acum += key + (index !== treeEntries.length - 1 ? ' ' : ''); - } - return acum; - }, ''); -}; - -interface BuiltQuery { - query: string; - variables: Record | undefined; - cacheKey: string; -} - -export function createQueryBuilder() { - const queryCache: Record = {}; - - return function buildQuery( - selections: Set | Selection[], - { - type, - }: { - type: 'query' | 'mutation' | 'subscription'; - }, - normalization?: boolean, - isGlobalCache?: boolean - ): BuiltQuery { - let variableId = 1; - - const selectionTree: SelectionTree = {}; - const variablesMap = new Map(); - const variableTypes: Record = {}; - const variablesMapKeyValue: Record = {}; - const [{ operationName }] = selections; - - if (normalization) { - const selectionsSet = new Set(); - - for (const selection of selections) { - if (selection.cofetchSelections) { - for (const coFetchSelection of selection.cofetchSelections) { - selectionsSet.add(coFetchSelection); - } - } - - selectionsSet.add(selection); - } - selections = selectionsSet; - } - - let builtQuery: BuiltQuery | undefined; - let idAcum = operationName ?? ''; - - if (isGlobalCache) { - for (const { id } of selections) idAcum += id; - - if ((builtQuery = queryCache[idAcum])) return builtQuery; - } - - for (const { noIndexSelections } of selections) { - if (noIndexSelections[0]?.key !== type) { - throw new Error( - `Expected root selection of type "${type}", found "${noIndexSelections[0].key}".` - ); - } - - const selectionBranches: string[][] = []; - - function createSelectionBranch( - selections: readonly Selection[], - initialValue: string[] = [] - ) { - return selections.reduce( - (acum, { args, alias, key, argTypes, unions }, index) => { - if (key === '$on') return acum; - - const argsLength = args ? Object.keys(args).length : 0; - - const selectionKey = alias ? alias + ':' + key : key; - - let leafValue: string; - - if (args && argTypes && argsLength) { - leafValue = - selectionKey + - '(' + - Object.entries(args).reduce((acum, [key, value], index) => { - const variableMapKey = - argTypes[key] + '-' + key + '-' + JSON.stringify(value); - - variablesMapKeyValue[variableMapKey] = value; - - const variableMapValue = variablesMap.get(variableMapKey); - - if (variableMapValue) { - acum += key + ':$' + variableMapValue; - } else { - const newVariableValue = key + variableId++; - const newVariableType = argTypes[key]; - - variableTypes[newVariableValue] = newVariableType; - variablesMap.set(variableMapKey, newVariableValue); - - acum += key + ':$' + newVariableValue; - } - - if (index < argsLength - 1) { - acum += ' '; - } - - return acum; - }, '') + - ')'; - } else { - leafValue = selectionKey + ''; - } - - if (unions) { - for (const union of unions.slice(1)) { - const newAcum = [...acum, '...on ' + union, leafValue]; - - selectionBranches.push( - createSelectionBranch(selections.slice(index + 1), newAcum) - ); - } - - acum.push('...on ' + unions[0], leafValue); - } else { - acum.push(leafValue); - } - - return acum; - }, - initialValue - ); - } - - selectionBranches.push(createSelectionBranch(noIndexSelections)); - - for (const branch of selectionBranches) { - if (normalization) { - for (let i = 2; i < branch.length; ++i) { - const typenameBranch = branch.slice(0, i); - if (typenameBranch[typenameBranch.length - 1]?.startsWith('...')) { - continue; - } else typenameBranch.push('__typename'); - - set(selectionTree, typenameBranch, true); - } - } - - set(selectionTree, branch, true); - } - } - - let variables: Record | undefined; - - if (variablesMap.size) { - const variablesObj: Record = {}; - variables = variablesObj; - - variablesMap.forEach((value, key) => { - variablesObj[value] = variablesMapKeyValue[key]; - }); - } - - let query = stringSelectionTree(selectionTree); - - const variableTypesEntries = Object.entries(variableTypes); - - if (variableTypesEntries.length) { - query = query.replace( - type, - type + - '(' + - variableTypesEntries.reduce((acum, [variableName, type]) => { - acum += '$' + variableName + ':' + type; - return acum; - }, '') + - ')' - ); - } - - if (operationName) { - query = query.replace(type, type + ' ' + operationName); - } - - builtQuery = { - query, - variables, - cacheKey: - idAcum || query + (variables ? serializeVariables(variables) : ''), - }; - - if (isGlobalCache) queryCache[idAcum] = builtQuery; - - return builtQuery; - }; -} diff --git a/packages/gqty/src/QueryBuilder/index.ts b/packages/gqty/src/QueryBuilder/index.ts index 29b6a4304..47777ee6c 100644 --- a/packages/gqty/src/QueryBuilder/index.ts +++ b/packages/gqty/src/QueryBuilder/index.ts @@ -1 +1,159 @@ -export * from './buildQuery'; +import set from 'just-safe-set'; +import type { Cache } from '../Cache'; +import type { QueryPayload } from '../Schema'; +import type { Selection } from '../Selection'; +import { hash } from '../Utils'; + +export type QueryBuilderOptions = { + batchWindow: number; + batchStrategy: 'debounce' | 'throttle'; + cache: Cache; +}; + +export type BuiltQuery = QueryPayload<{ + type: 'query' | 'mutation' | 'subscription'; + hash: string; +}>; + +type SelectionTreeLeaf = Record; +type SelectionTreeNode = { + [key: string]: SelectionTreeNode | SelectionTreeLeaf; +}; +type SelectionTreeRoot = Record< + 'query' | 'mutation' | 'subscription', + SelectionTreeNode +>; + +type SelectionBranchEntry = [keyof SelectionTreeRoot, SelectionTreeNode]; + +const stringifySelectionTree = (tree: SelectionTreeNode): string => + Object.entries(tree) + .sort(([a], [b]) => a.localeCompare(b)) + .reduce((prev, [key, value]) => { + const query = + typeof value === 'object' + ? `${key}{${stringifySelectionTree(value as SelectionTreeNode)}}` + : key; + + // TODO: buildQuery.test.ts wants exact output of `graphql` parse, + // but this is not future proof and unnecessarily hits the performance. + if (!prev || prev.endsWith('}') || prev.endsWith('{')) { + return `${prev}${query}`; + } else { + return `${prev} ${query}`; + } + }, ''); + +export const buildQuery = ( + selections: Set, + operationName?: string +): BuiltQuery[] => { + const root = {} as SelectionTreeRoot; + const variables = new Map(); + const inputDedupe = new Map(); + + // TODO: Stablize variable names, maybe by sorting selections beforehand? + + for (const { ancestry } of selections) { + set( + root, + ancestry.reduce((prev, s) => { + if ( + typeof s.key === 'symbol' || + typeof s.key === 'number' || + s.key === '$on' + ) { + return prev; + } + + if (s.isUnion) { + return [...prev, `...on ${s.key}`]; + } + + const key = s.alias ? `${s.alias}:${s.key}` : s.key; + const input = s.input; + + if (input) { + if (!inputDedupe.has(input)) { + const queryInputs = Object.entries(input.values) + .map(([key, value]) => { + const variableName = hash((s.alias ?? s.key) + '_' + key).slice( + 0, + s.aliasLength + ); + + variables.set(`${variableName}`, { + value, + type: input.types[key], + }); + + return `${key}:$${variableName}`; + }) + .join(' '); + + inputDedupe.set(input, `${key}(${queryInputs})`); + } + + return [...prev, inputDedupe.get(input)!]; + } + + return [...prev, key]; + }, []), + true + ); + } + + // Split top level fields of subscriptions + const branches = Object.entries(root).reduce( + (prev, [key, value]) => { + if (key !== 'subscription') { + return [...prev, [key, value] as SelectionBranchEntry]; + } + + return [ + ...prev, + ...Object.entries(value).map( + ([topField, branch]) => ['subscription', { [topField]: branch }] + ), + ]; + }, + [] + ); + + return branches.map(([key, branch]) => { + const rootKey = key as keyof SelectionTreeRoot; + let query = stringifySelectionTree({ [rootKey]: branch }); + + // Query variables + if (variables.size > 0) { + query = query.replace( + rootKey, + `${rootKey}(${[...variables.entries()] + .sort(([a], [b]) => a.localeCompare(b)) + .map(([name, { type }]) => `$${name}:${type}`) + .join('')})` + ); + } + + // Operation name + if (operationName) { + query = query.replace(rootKey, `${rootKey} ${operationName}`); + } + + return { + query, + variables: + variables.size > 0 + ? [...variables].reduce>( + (prev, [key, { value }]) => ((prev[key] = value), prev), + {} + ) + : undefined, + operationName, + extensions: { + type: rootKey, + hash: hash({ query, variables }), // For query dedupe and cache keys + }, + }; + }); +}; diff --git a/packages/gqty/src/Scheduler/index.ts b/packages/gqty/src/Scheduler/index.ts deleted file mode 100644 index 959c9cb25..000000000 --- a/packages/gqty/src/Scheduler/index.ts +++ /dev/null @@ -1,263 +0,0 @@ -import type { GQtyError } from '../Error'; -import type { InterceptorManager } from '../Interceptor'; -import { Selection, SelectionType } from '../Selection'; -import { createDeferredPromise, DeferredPromise } from '../Utils'; -import { debounce } from '../Utils/debounce'; - -export type SchedulerPromiseValue = { - error?: GQtyError; - data?: unknown; - selections: Set; -}; -export type ResolvingLazyPromise = DeferredPromise; -export type ResolvedLazyPromise = Promise; -export type ResolveSubscriptionFn = ( - promise: ResolvedLazyPromise, - selection: Selection -) => void; -export type ErrorSubscriptionEvent = - | { - type: 'new_error'; - newError: GQtyError; - selections: Selection[]; - isLastTry: boolean; - } - | { - type: 'errors_clean'; - selectionsCleaned: Selection[]; - } - | { - type: 'retry'; - retryPromise: Promise; - selections: Set; - }; -export type ErrorSubscriptionFn = (event: ErrorSubscriptionEvent) => void; -export type IsFetchingSubscriptionFn = (isFetching: boolean) => void; - -export interface Scheduler { - resolving: DeferredPromise | null; - subscribeResolve: ( - fn: (promise: Promise, selection: Selection) => void - ) => () => void; - errors: { - map: Map; - subscribeErrors: (fn: ErrorSubscriptionFn) => () => void; - triggerError: ( - newError: GQtyError, - selections: Selection[], - isLastTry: boolean - ) => void; - removeErrors: (selectionsCleaned: Selection[]) => void; - retryPromise: ( - retryPromise: Promise, - selections: Set - ) => void; - }; - isFetching: boolean; - pendingSelectionsGroups: Set>; - pendingSelectionsGroupsPromises: Map< - Set, - Promise - >; - getResolvingPromise( - selections: Selection | Set - ): ResolvedLazyPromise | void; -} - -export const createScheduler = ( - { globalInterceptor }: InterceptorManager, - resolveSchedulerSelections: (selections: Set) => Promise, - catchSelectionsTimeMS: number -) => { - const resolveListeners = new Set(); - const notifyResolves = ( - promise: ResolvedLazyPromise, - selection: Selection - ) => { - for (const notify of resolveListeners) { - notify(promise, selection); - } - }; - - const errorsListeners = new Set(); - const errorsMap = new Map(); - const notifyErrors = (event: ErrorSubscriptionEvent) => { - for (const notify of errorsListeners) { - notify(event); - } - }; - - const pendingSelectionsGroups = new Set>(); - const pendingSelectionsGroupsPromises = new Map< - Set, - ResolvedLazyPromise - >(); - const selectionsOnTheFly = new Set(); - const selectionsWithFinalErrors = new Set(); - - const scheduler: Scheduler = { - resolving: null, - subscribeResolve: (fn) => { - resolveListeners.add(fn); - - return () => { - resolveListeners.delete(fn); - }; - }, - errors: { - map: errorsMap, - subscribeErrors: (fn) => { - errorsListeners.add(fn); - - return () => { - errorsListeners.delete(fn); - }; - }, - triggerError: (newError, selections, isLastTry) => { - if (!selections.length) return; - - for (const selection of selections) { - errorsMap.set(selection, newError); - } - - notifyErrors({ - type: 'new_error', - newError, - selections, - isLastTry, - }); - }, - removeErrors: (selectionsCleaned: Selection[]) => { - if (errorsMap.size === 0) return; - - for (const selection of selectionsCleaned) { - errorsMap.delete(selection); - selectionsWithFinalErrors.delete(selection); - } - - notifyErrors({ - type: 'errors_clean', - selectionsCleaned, - }); - }, - retryPromise: (retryPromise, selections) => { - pendingSelectionsGroups.add(selections); - pendingSelectionsGroupsPromises.set(selections, retryPromise); - - retryPromise.finally(() => { - pendingSelectionsGroups.delete(selections); - pendingSelectionsGroupsPromises.delete(selections); - }); - - notifyErrors({ - type: 'retry', - retryPromise, - selections, - }); - }, - }, - isFetching: false, - pendingSelectionsGroups, - pendingSelectionsGroupsPromises, - getResolvingPromise: (selections) => { - if (selections instanceof Selection) { - for (const [group, promise] of pendingSelectionsGroupsPromises) { - if (group.has(selections)) return promise; - } - } else { - for (const selection of selections) { - for (const [group, promise] of pendingSelectionsGroupsPromises) { - if (group.has(selection)) return promise; - } - } - } - - return; - }, - }; - - let resolvingPromise: ResolvingLazyPromise | null = null; - - const fetchSelections = debounce((lazyPromise: ResolvingLazyPromise) => { - resolvingPromise = null; - - selectionsOnTheFly.clear(); - pendingSelectionsGroups.delete(selectionsOnTheFly); - pendingSelectionsGroupsPromises.delete(selectionsOnTheFly); - - const selectionsToFetch = new Set(globalInterceptor.fetchSelections); - pendingSelectionsGroups.add(selectionsToFetch); - pendingSelectionsGroupsPromises.set(selectionsToFetch, lazyPromise.promise); - - resolveSchedulerSelections(selectionsToFetch).then( - () => { - pendingSelectionsGroups.delete(selectionsToFetch); - pendingSelectionsGroupsPromises.delete(selectionsToFetch); - if (scheduler.resolving === lazyPromise) { - scheduler.resolving = null; - } - - lazyPromise.resolve({ selections: selectionsToFetch }); - }, - (error) => { - pendingSelectionsGroups.delete(selectionsToFetch); - pendingSelectionsGroupsPromises.delete(selectionsToFetch); - if (scheduler.resolving === lazyPromise) { - scheduler.resolving = null; - } - - lazyPromise.resolve({ - error, - selections: selectionsToFetch, - }); - } - ); - }, catchSelectionsTimeMS); - - function addSelectionToScheduler(selection: Selection, notifyResolve = true) { - if (selection.type === SelectionType.Subscription) { - notifyResolve = false; - } - - { - const promise = scheduler.getResolvingPromise(selection); - if (notifyResolve && promise) { - notifyResolves(promise, selection); - } - } - - const lazyPromise = - resolvingPromise ?? createDeferredPromise(); - if (resolvingPromise === null) { - lazyPromise.promise.then(({ error }) => { - if (error) console.error(error); - }); - - resolvingPromise = lazyPromise; - scheduler.resolving = lazyPromise; - } - - pendingSelectionsGroups.add(selectionsOnTheFly); - selectionsOnTheFly.add(selection); - pendingSelectionsGroupsPromises.set( - selectionsOnTheFly, - lazyPromise.promise - ); - - if (notifyResolve) { - notifyResolves(lazyPromise.promise, selection); - } - - fetchSelections(lazyPromise); - } - - globalInterceptor.selectionAddListeners.add((selection) => { - addSelectionToScheduler(selection); - }); - - globalInterceptor.selectionCacheRefetchListeners.add((selection) => - addSelectionToScheduler(selection, false) - ); - - return scheduler; -}; diff --git a/packages/gqty/src/Schema/types.ts b/packages/gqty/src/Schema/types.ts index 79e7db36c..b96f75989 100644 --- a/packages/gqty/src/Schema/types.ts +++ b/packages/gqty/src/Schema/types.ts @@ -1,4 +1,5 @@ import type { ExecutionResult } from 'graphql'; +import memoize from 'just-memoize'; export interface Type { __args?: Record; @@ -6,10 +7,11 @@ export interface Type { } export const SchemaUnionsKey = Symbol('unionsKey'); -export interface Schema extends Record> { +export interface Schema + extends Record | undefined> { query: Record; - mutation: Record; - subscription: Record; + mutation?: Record; + subscription?: Record; [SchemaUnionsKey]?: Record; } @@ -22,13 +24,19 @@ export interface Scalars { export type ScalarsEnumsHash = Record; -export interface FetchOptions extends Omit {} +export type QueryFetcher> = ( + payload: QueryPayload, + fetchOptions?: Omit +) => Promise> | ExecutionResult; -export type QueryFetcher = ( - query: string, - variables: Record | undefined, - fetchOptions?: FetchOptions -) => Promise | ExecutionResult; +export type QueryPayload< + TExtension extends Record = Record +> = { + readonly query: string; + readonly variables?: Record; + readonly operationName?: string; + readonly extensions?: TExtension; +}; export interface ParseSchemaTypeInfo { pureType: string; @@ -45,46 +53,46 @@ export interface FieldDescription { } export type ArgsDescriptions = Record< - string, - Record - >; + string, + Record +>; -export function parseSchemaType(type: string, fieldDesc: FieldDescription | undefined = undefined): ParseSchemaTypeInfo { - let isArray = false; - let isNullable = true; - let hasDefaultValue = !!(fieldDesc && fieldDesc.defaultValue !== null); - let pureType = type; - let nullableItems = true; - if (pureType.endsWith('!')) { - isNullable = false; - pureType = pureType.slice(0, pureType.length - 1); - } - - if (pureType.startsWith('[')) { - pureType = pureType.slice(1, pureType.length - 1); - isArray = true; +export const parseSchemaType = memoize( + ( + type: string, + fieldDesc: FieldDescription | undefined = undefined + ): ParseSchemaTypeInfo => { + let isArray = false; + let isNullable = true; + let hasDefaultValue = !!(fieldDesc && fieldDesc.defaultValue !== null); + let pureType = type; + let nullableItems = true; if (pureType.endsWith('!')) { - nullableItems = false; + isNullable = false; pureType = pureType.slice(0, pureType.length - 1); } - } - return { - pureType, - isNullable, - hasDefaultValue, - isArray, - nullableItems, - }; -} + if (pureType.startsWith('[')) { + pureType = pureType.slice(1, pureType.length - 1); + isArray = true; + if (pureType.endsWith('!')) { + nullableItems = false; + pureType = pureType.slice(0, pureType.length - 1); + } + } -export type DeepPartial = T extends Function - ? T - : T extends Array - ? _DeepPartialArray - : T extends object - ? _DeepPartialObject - : T | undefined; + return { + pureType, + isNullable, + hasDefaultValue, + isArray, + nullableItems, + }; + } +); -interface _DeepPartialArray extends Array> {} -type _DeepPartialObject = { [P in keyof T]?: DeepPartial }; +export type GeneratedSchemaObject< + T extends Record = Record +> = T & { + __typename?: string; +}; diff --git a/packages/gqty/src/Selectable.ts b/packages/gqty/src/Selectable.ts new file mode 100644 index 000000000..3dc574a45 --- /dev/null +++ b/packages/gqty/src/Selectable.ts @@ -0,0 +1,12 @@ +import { type CacheDataContainer } from './Cache'; +import { type Selection } from './Selection'; +import { type Unsubscribe } from './Unsubscribe'; + +/** + * Containers that handles selections. + */ +export interface Selectable { + select(selection: Selection, cache?: CacheDataContainer): void; + + subscribeSelect(callback: Selectable['select']): Unsubscribe; +} diff --git a/packages/gqty/src/Selection/SelectionManager.ts b/packages/gqty/src/Selection/SelectionManager.ts deleted file mode 100644 index 0ad2cb1d8..000000000 --- a/packages/gqty/src/Selection/SelectionManager.ts +++ /dev/null @@ -1,182 +0,0 @@ -import { sha1 } from '@gqty/utils/sha1'; - -import { serializeVariables } from '../Utils/cachedJSON'; -import { Selection, SelectionConstructorArgs } from './selection'; - -export function separateSelectionTypes( - selections: Selection[] | Set -) { - /** Group selections by root type and operation names. */ - const selectionBranches = new Map(); - - for (const selection of selections) { - const { type, operationName } = selection; - const branchKey = `${type}.${operationName}`; - - if (!selectionBranches.has(branchKey)) { - selectionBranches.set(branchKey, []); - } - - selectionBranches.get(branchKey)!.push(selection); - } - - return [...selectionBranches.values()]; -} - -export interface GetSelection { - ( - options: Pick< - SelectionConstructorArgs, - 'key' | 'prevSelection' | 'args' | 'argTypes' | 'type' | 'unions' - > - ): Selection; -} - -export interface SelectionManager { - getSelection: GetSelection; - restore(backup: unknown): void; - backup(): SelectionsBackup; -} - -export type VariableHashTuple = [ - serializedVariables: string, - variablesStringId: string -]; -const selectionsBackupVersion = 'v1'; - -function isSelectionsBackup( - selectionsBackup?: unknown -): selectionsBackup is SelectionsBackup { - return ( - Array.isArray(selectionsBackup) && - Array.isArray(selectionsBackup[0]) && - selectionsBackup[1] === selectionsBackupVersion - ); -} - -export type SelectionsBackup = [VariableHashTuple[], string]; - -let uniqueSelectionId = 0; - -export function createSelectionManager(): SelectionManager { - const selectionCache = new Map< - /** - * cacheKey - */ - string, - Selection - >(); - - const stringsHash: Record = {}; - - let restoredBackup: SelectionsBackup | undefined; - - function getSerializedVariablesId(variables: Record) { - const serializedVariables = serializeVariables(variables); - - let hashId: string; - - if ((hashId = stringsHash[serializedVariables]) === undefined) { - hashId = stringsHash[serializedVariables] = sha1( - serializedVariables - ).slice(0, 5); - - if (restoredBackup) restoredBackup[0].push([serializedVariables, hashId]); - } - - return hashId; - } - - function restore(backup: unknown) { - if (!isSelectionsBackup(backup)) return; - - restoredBackup = backup; - - for (const [stringKey, hashIdValue] of backup[0]) { - stringsHash[stringKey] = hashIdValue; - } - } - - function backup(): SelectionsBackup { - if (restoredBackup) { - restoredBackup[0] = []; - - return restoredBackup; - } - - const backup: SelectionsBackup = [[], selectionsBackupVersion]; - - for (const serializedVariables in stringsHash) { - backup[0].push([serializedVariables, stringsHash[serializedVariables]]); - } - - return (restoredBackup = backup); - } - - function getVariableAlias( - key: string | number, - variables: Record, - variableTypes: Record - ) { - return ( - key + - '_' + - getSerializedVariablesId(variableTypes) + - '_' + - getSerializedVariablesId(variables) - ); - } - - function getSelection({ - key, - prevSelection, - args, - argTypes, - type, - unions, - }: Pick< - SelectionConstructorArgs, - 'key' | 'prevSelection' | 'args' | 'argTypes' | 'type' | 'unions' - >) { - let alias: string | undefined; - let cacheKey = key + ''; - if (args && argTypes) { - alias = getVariableAlias(key, args, argTypes); - cacheKey = alias; - } - - if (prevSelection) { - cacheKey = prevSelection.pathString + '.' + cacheKey; - } - - if (unions?.length) { - cacheKey += ';' + unions.join(';'); - } - - let selection = selectionCache.get(cacheKey); - - if (selection == null) { - selection = new Selection({ - key, - prevSelection, - args, - argTypes, - alias, - type, - unions, - id: ++uniqueSelectionId, - }); - selectionCache.set(cacheKey, selection); - } else if (args) { - selection.args = args; - } - - return selection; - } - - return { - getSelection, - restore, - backup, - }; -} diff --git a/packages/gqty/src/Selection/index.ts b/packages/gqty/src/Selection/index.ts index 39637841b..9b8c044f8 100644 --- a/packages/gqty/src/Selection/index.ts +++ b/packages/gqty/src/Selection/index.ts @@ -1,2 +1,165 @@ -export * from './selection'; -export type { SelectionManager } from './SelectionManager'; +import { GQtyError } from '../Error'; +import { hash } from '../Utils/hash'; + +const createSymbol = Symbol(); + +const aliasGenerator = { + seq: 0, + map: new WeakMap(), + hash, + get(key: string | number, input: Record) { + const hash = this.hash({ key, ...input }); + if (hash) return hash; + + const seq = this.map.get(input) ?? this.seq++; + + // Sane use cases shouldn't hit this + if (seq > Number.MAX_SAFE_INTEGER) { + throw new GQtyError(`selection alias fallback overflow`); + } + + this.map.set(input, seq); + + return `alias${seq}`; + }, +}; + +export type SelectionOptions = { + readonly alias?: string; + readonly aliasLength?: number; + readonly input?: SelectionInput; + readonly isUnion?: boolean; + readonly parent?: Selection; +}; + +export type SelectionInput = { + readonly types: Record; + readonly values: Record; +}; + +export type SelectionSnapshot = Array< + [string | number, SelectionOptions] | [string | number] +>; + +export class Selection { + readonly children = new Map(); + + constructor( + readonly key: string | number, + readonly options: SelectionOptions = {}, + token?: symbol + ) { + if (token !== createSymbol) { + throw new GQtyError(`Use Selection.createRoot() instead.`); + } + } + + get alias() { + return this.options.alias; + } + + get aliasLength(): number | undefined { + return this.options.aliasLength ?? this.parent?.aliasLength; + } + + get input() { + return this.options.input; + } + + /** Indicates current selection being a inteface/union key. */ + get isUnion() { + return this.options.isUnion ?? false; + } + + get parent() { + return this.options.parent; + } + + get root(): Selection { + return this.options.parent?.root ?? this; + } + + get cacheKeys(): string[] { + const keys = this.parent?.cacheKeys ?? []; + + if ( + typeof this.key === 'number' || + this.key === '$on' || + this.parent?.key === '$on' + ) { + return keys; + } + + return keys.concat(this.alias ?? this.key); + } + + /** The selection path from root the leaf as an array. */ + get ancestry() { + const ancestry: Selection[] = []; + let current: Selection | undefined = this; + + do { + ancestry.unshift(current); + } while ((current = current.parent)); + + return ancestry; + } + + static createRoot(key: string, options?: SelectionOptions) { + return new Selection(key, options, createSymbol); + } + + getChild(key: string | number, options?: SelectionOptions) { + const alias = + options?.alias ?? + (options?.input + ? aliasGenerator + .get(key, options.input) + .slice(0, options?.aliasLength ?? this.aliasLength) + : undefined); + const hashKey = alias ?? key.toString(); + + const selection = + this.children.get(hashKey) ?? + new Selection(key, { ...options, alias, parent: this }, createSymbol); + + this.children.set(hashKey, selection); + + return selection; + } + + getLeafNodes(this: Selection) { + const result = new Set(); + const stack = new Set([this]); + for (const selection of stack) { + if (selection.children.size === 0) { + result.add(selection); + } else { + for (const [, child] of selection.children) stack.add(child); + } + } + + return result; + } + + toJSON(): SelectionSnapshot { + return this.ancestry.map(({ key, isUnion, input, options }) => { + if (isUnion) { + return [key, { isUnion, ...options }]; + } else if (input) { + return [key, { input }]; + } else { + return [key]; + } + }); + } + + fromJSON(this: Selection, json: SelectionSnapshot) { + let node = this; + for (const [key, options] of json) { + node = node.getChild(key, options); + } + + return node; + } +} diff --git a/packages/gqty/src/Unsubscribe.ts b/packages/gqty/src/Unsubscribe.ts new file mode 100644 index 000000000..6daf8d0b6 --- /dev/null +++ b/packages/gqty/src/Unsubscribe.ts @@ -0,0 +1 @@ +export type Unsubscribe = () => void; diff --git a/packages/gqty/src/Utils/cachedJSON.ts b/packages/gqty/src/Utils/cachedJSON.ts deleted file mode 100644 index 2e6f73282..000000000 --- a/packages/gqty/src/Utils/cachedJSON.ts +++ /dev/null @@ -1,11 +0,0 @@ -const serializedVariablesCache = new WeakMap(); - -export function serializeVariables(variables: Record): string { - let serializedVariables: string; - if ((serializedVariables = serializedVariablesCache.get(variables)!)) { - return serializedVariables; - } - serializedVariables = JSON.stringify(variables); - serializedVariablesCache.set(variables, serializedVariables); - return serializedVariables; -} diff --git a/packages/gqty/src/Utils/cycle.ts b/packages/gqty/src/Utils/cycle.ts deleted file mode 100644 index 9878731b4..000000000 --- a/packages/gqty/src/Utils/cycle.ts +++ /dev/null @@ -1,170 +0,0 @@ -//@ts-nocheck - -/* - cycle.js - 2013-02-19 - - Public Domain. - - NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. - - This code should be minified before deployment. - See http://javascript.crockford.com/jsmin.html - - USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO - NOT CONTROL. -*/ - -/*jslint evil: true, regexp: true */ - -/*members $ref, apply, call, decycle, hasOwnProperty, length, prototype, push, - retrocycle, stringify, test, toString -*/ - -export function decycle(object: T): T { - 'use strict'; - - // Make a deep copy of an object or array, assuring that there is at most - // one instance of each object or array in the resulting structure. The - // duplicate references (which might be forming cycles) are replaced with - // an object of the form - // {$ref: PATH} - // where the PATH is a JSONPath string that locates the first occurance. - // So, - // var a = []; - // a[0] = a; - // return JSON.stringify(JSON.decycle(a)); - // produces the string '[{"$ref":"$"}]'. - - // JSONPath is used to locate the unique object. $ indicates the top level of - // the object or array. [NUMBER] or [STRING] indicates a child member or - // property. - - var objects = [], // Keep a reference to each unique object or array - paths = []; // Keep the path to each unique object or array - - return (function derez(value, path) { - // The derez recurses through the object, producing the deep copy. - - var i, // The loop counter - name, // Property name - nu; // The new object or array - - // typeof null === 'object', so go on if this value is really an object but not - // one of the weird builtin objects. - - if ( - typeof value === 'object' && - value !== null && - !(value instanceof Boolean) && - !(value instanceof Date) && - !(value instanceof Number) && - !(value instanceof RegExp) && - !(value instanceof String) - ) { - // If the value is an object or array, look to see if we have already - // encountered it. If so, return a $ref/path object. This is a hard way, - // linear search that will get slower as the number of unique objects grows. - - for (i = 0; i < objects.length; i += 1) { - if (objects[i] === value) { - return { $ref: paths[i] }; - } - } - - // Otherwise, accumulate the unique value and its path. - - objects.push(value); - paths.push(path); - - // If it is an array, replicate the array. - - if (Object.prototype.toString.apply(value) === '[object Array]') { - nu = []; - for (i = 0; i < value.length; i += 1) { - nu[i] = derez(value[i], path + '[' + i + ']'); - } - } else { - // If it is an object, replicate the object. - - nu = {}; - for (name in value) { - if (Object.prototype.hasOwnProperty.call(value, name)) { - nu[name] = derez( - value[name], - path + '[' + JSON.stringify(name) + ']' - ); - } - } - } - return nu; - } - return value; - })(object, '$'); -} - -export function retrocycle($: T) { - 'use strict'; - - // Restore an object that was reduced by decycle. Members whose values are - // objects of the form - // {$ref: PATH} - // are replaced with references to the value found by the PATH. This will - // restore cycles. The object will be mutated. - - // The eval function is used to locate the values described by a PATH. The - // root object is kept in a $ variable. A regular expression is used to - // assure that the PATH is extremely well formed. The regexp contains nested - // * quantifiers. That has been known to have extremely bad performance - // problems on some browsers for very long strings. A PATH is expected to be - // reasonably short. A PATH is allowed to belong to a very restricted subset of - // Goessner's JSONPath. - - // So, - // var s = '[{"$ref":"$"}]'; - // return JSON.retrocycle(JSON.parse(s)); - // produces an array containing a single element which is the array itself. - - var px = - /^\$(?:\[(?:\d+|\"(?:[^\\\"\u0000-\u001f]|\\([\\\"\/bfnrt]|u[0-9a-zA-Z]{4}))*\")\])*$/; - - (function rez(value) { - // The rez function walks recursively through the object looking for $ref - // properties. When it finds one that has a value that is a path, then it - // replaces the $ref object with a reference to the value that is found by - // the path. - - var i, item, name, path; - - if (value && typeof value === 'object') { - if (Object.prototype.toString.apply(value) === '[object Array]') { - for (i = 0; i < value.length; i += 1) { - item = value[i]; - if (item && typeof item === 'object') { - path = item.$ref; - if (typeof path === 'string' && px.test(path)) { - value[i] = eval(path); - } else { - rez(item); - } - } - } - } else { - for (name in value) { - if (typeof value[name] === 'object') { - item = value[name]; - if (item) { - path = item.$ref; - if (typeof path === 'string' && px.test(path)) { - value[name] = eval(path); - } else { - rez(item); - } - } - } - } - } - } - })($); - return $; -} diff --git a/packages/gqty/src/Utils/debounce.ts b/packages/gqty/src/Utils/debounce.ts deleted file mode 100644 index 0937df876..000000000 --- a/packages/gqty/src/Utils/debounce.ts +++ /dev/null @@ -1,21 +0,0 @@ -export function debounce( - fn: (...args: T) => void, - delay: number -) { - let timeout: NodeJS.Timeout | string | number | undefined = undefined; - - return function debounced(...args: Parameters) { - const execFetch = () => { - timeout = undefined; - fn(...args); - }; - if (timeout !== undefined) clearTimeout(timeout); - - if (delay < 0) { - execFetch(); - timeout = undefined; - } else { - timeout = setTimeout(execFetch, delay); - } - }; -} diff --git a/packages/gqty/src/Utils/hash.ts b/packages/gqty/src/Utils/hash.ts new file mode 100644 index 000000000..e2a771964 --- /dev/null +++ b/packages/gqty/src/Utils/hash.ts @@ -0,0 +1,9 @@ +import memoize from 'just-memoize'; +import objectHash from 'object-hash'; + +/** + * Memoized hash function, with a prefix to avoid starting with a number. + */ +export const hash = memoize((...args: unknown[]) => + objectHash(args, { unorderedObjects: false }).replace(/^(\d)/, 'a$1') +); diff --git a/packages/gqty/src/Utils/index.ts b/packages/gqty/src/Utils/index.ts index 6a3bf7c2e..2ea8babdc 100644 --- a/packages/gqty/src/Utils/index.ts +++ b/packages/gqty/src/Utils/index.ts @@ -1,13 +1,5 @@ -export const isInteger = (v: any): v is number => Number.isInteger(v); - -export function isEmptyObject(obj: object) { - for (var _i in obj) return false; - return true; -} - -export * from './debounce'; +export * from './hash'; export * from './object'; -export * from './cycle'; -export { mergeWith } from '@gqty/utils/mergeWith'; -export * from './selectionsInclude'; -export * from './promise'; +export * from './pick'; + +export const isInteger = (v: any): v is number => Number.isInteger(v); diff --git a/packages/gqty/src/Utils/object.ts b/packages/gqty/src/Utils/object.ts index 4993fc682..e7233a889 100644 --- a/packages/gqty/src/Utils/object.ts +++ b/packages/gqty/src/Utils/object.ts @@ -6,6 +6,11 @@ export const isObject = (v: unknown): v is object => export const isPlainObject = (v: unknown): v is PlainObject => isObject(v) && !Array.isArray(v); +export function isEmptyObject(obj: object) { + for (var _i in obj) return false; + return true; +} + export interface ObjectWithType extends Record { __typename: Typename; @@ -15,6 +20,9 @@ export const isObjectWithType = ( v: unknown ): v is T => isPlainObject(v) && typeof v.__typename === 'string'; +/** + * Similar to `just-extend(true, ...)` but circular references aware. + */ export function deepAssign( target: object, sources: (object | undefined | null)[], @@ -47,96 +55,3 @@ export function deepAssign( return target as T; } - -type SetGetPath = readonly (string | number)[] | string | number; - -function castPath(path: SetGetPath): readonly (string | number)[] { - return Array.isArray(path) ? path : (path + '').split('.'); -} - -export function set( - object: T, - path: SetGetPath, - value: unknown -) { - if (!isObject(object)) return object; - - path = castPath(path); - - const length = path.length; - const lastIndex = length - 1; - - let index = -1; - let nested: unknown = object; - - while (nested != null && ++index < length) { - const key = path[index] + ''; - let newValue = value; - - if (index != lastIndex) { - const objValue = - //@ts-expect-error - nested[key]; - newValue = undefined; - if (newValue === undefined) { - newValue = isObject(objValue) - ? objValue - : typeof path[index + 1] === 'number' - ? [] - : {}; - } - } - //@ts-expect-error - nested[key] = newValue; - - //@ts-expect-error - nested = nested[key]; - } - return object; -} - -export function get( - object: object | null | undefined, - path: SetGetPath -): Value | undefined; -export function get( - object: object | null | undefined, - path: SetGetPath, - defaultValue: DefaultValue -): Value | DefaultValue; -export function get( - object: object | null | undefined, - path: SetGetPath, - defaultValue?: DefaultValue -) { - path = castPath(path); - - let index = 0; - const length = path.length; - - while (object != null && index < length) { - object = - //@ts-expect-error - object[path[index++]]; - } - const value = - index && index === length - ? (object as unknown as Value) - : (defaultValue as DefaultValue); - return value === undefined ? defaultValue : value; -} - -export type DeepPartial = T extends Function - ? T - : T extends Array - ? _DeepPartialArray - : T extends object - ? _DeepPartialObject - : T | undefined; - -interface _DeepPartialArray extends Array> {} -type _DeepPartialObject = { [P in keyof T]?: DeepPartial }; - -export type NonNullableObject = { - [P in keyof T]-?: NonNullable; -}; diff --git a/packages/gqty/src/Utils/pick.ts b/packages/gqty/src/Utils/pick.ts new file mode 100644 index 000000000..706745b84 --- /dev/null +++ b/packages/gqty/src/Utils/pick.ts @@ -0,0 +1,29 @@ +import set from 'just-safe-set'; +import type { Selection } from '../Selection'; + +/** Similiar to the `select()` helper, but for accessor proxies. */ +export const pick = ( + schema: Record, + selections: Set +) => { + const result: Record = {}; + + for (const { ancestry } of selections) { + let node = schema; + for (const { key, input } of ancestry) { + if (node == null) break; + + if (input) { + node = node[key](input.values); + } else { + node = node[key]; + } + } + + if (node !== undefined) { + set(result, ancestry.map((s) => s.alias ?? s.key).join('.'), node); + } + } + + return result; +}; diff --git a/packages/gqty/src/Utils/promise.ts b/packages/gqty/src/Utils/promise.ts deleted file mode 100644 index a1d919afb..000000000 --- a/packages/gqty/src/Utils/promise.ts +++ /dev/null @@ -1,115 +0,0 @@ -export class PLazy extends Promise { - private _promise?: Promise; - - constructor( - private _executor: ( - resolve: (value: ValueType) => void, - reject: (err: unknown) => void - ) => void - ) { - super((resolve: (v?: any) => void) => resolve()); - } - - then: Promise['then'] = (onFulfilled, onRejected) => - (this._promise ||= new Promise(this._executor)).then( - onFulfilled, - onRejected - ); - - catch: Promise['catch'] = (onRejected) => - (this._promise ||= new Promise(this._executor)).catch(onRejected); - - finally: Promise['finally'] = (onFinally) => - (this._promise ||= new Promise(this._executor)).finally(onFinally); -} - -export function LazyPromise( - fn: () => Value | Promise -): Promise { - return new PLazy((resolve, reject) => { - try { - Promise.resolve(fn()).then(resolve, (err) => { - if (err instanceof Error && Error.captureStackTrace) - Error.captureStackTrace(err, LazyPromise); - - reject(err); - }); - } catch (err) { - if (err instanceof Error && Error.captureStackTrace) - Error.captureStackTrace(err, LazyPromise); - - reject(err); - } - }); -} - -export interface DeferredPromise { - promise: Promise; - resolve: (value: T) => void; - reject: (reason: unknown) => void; - - value: { - current?: PromiseSettledResult; - }; -} - -export function createDeferredPromise( - timeoutTime?: number -): DeferredPromise { - const resolve = (value: T) => { - timeout != null && clearTimeout(timeout); - - valueRef.current ||= { status: 'fulfilled', value }; - - middlePromiseResolve({ - value, - resolved: true, - }); - }; - - const reject = (err: unknown) => { - timeout != null && clearTimeout(timeout); - - valueRef.current ||= { status: 'rejected', reason: err }; - - middlePromiseResolve({ - value: err, - resolved: false, - }); - }; - - const valueRef: { current?: PromiseSettledResult } = {}; - - let middlePromiseResolve!: (value: { - value: unknown; - resolved: boolean; - }) => void; - const MiddlePromise = new Promise<{ - value: unknown; - resolved: boolean; - }>((resolve) => { - middlePromiseResolve = resolve; - }); - - const promise = LazyPromise(async () => { - const { resolved, value } = await MiddlePromise; - - if (resolved) return value as T; - - throw value; - }); - - let timeout: ReturnType | undefined; - if (timeoutTime != null) { - timeout = setTimeout(() => { - reject(Error(`Timed out after ${timeoutTime}ms.`)); - }, timeoutTime); - } - - return { - promise, - resolve, - reject, - value: valueRef, - }; -} diff --git a/packages/gqty/src/Utils/selectionsInclude.ts b/packages/gqty/src/Utils/selectionsInclude.ts deleted file mode 100644 index bed736f32..000000000 --- a/packages/gqty/src/Utils/selectionsInclude.ts +++ /dev/null @@ -1,50 +0,0 @@ -// These functions will eventually be removed from the React Package -// And re-use these - -import type { Selection } from '../Selection'; - -export type List = Set | Array; - -export function toSetIfNeeded(list: List): Set { - return Array.isArray(list) ? new Set(list) : list; -} - -export function isSelectionIncluded( - selection: Selection, - selectionList: List -) { - const setSelectionList = toSetIfNeeded(selectionList); - - if (setSelectionList.has(selection)) return true; - - for (const listValue of selectionList) { - if (setSelectionList.has(listValue)) return true; - } - - return false; -} - -export function isAnySelectionIncluded( - selectionsToCheck: List, - selectionsList: List -) { - const setSelectionList = toSetIfNeeded(selectionsList); - for (const selection of selectionsToCheck) { - if (isSelectionIncluded(selection, setSelectionList)) return true; - } - - return false; -} - -export function isAnySelectionIncludedInMatrix( - selectionsToCheck: List, - selectionsMatrix: List> -) { - const selectionsToCheckSet = toSetIfNeeded(selectionsToCheck); - - for (const group of selectionsMatrix) { - if (isAnySelectionIncluded(selectionsToCheckSet, group)) return true; - } - - return false; -} diff --git a/packages/gqty/src/index.ts b/packages/gqty/src/index.ts index a2197a3c0..d78f568cc 100644 --- a/packages/gqty/src/index.ts +++ b/packages/gqty/src/index.ts @@ -1,6 +1,7 @@ +export * from './Cache'; export * from './Client'; -export * from './Selection'; -export * from './Schema'; +export type { Client as GQtyClient } from './Client'; export * from './Error'; export * from './Helpers'; -export { debounce } from './Utils/debounce'; +export * from './Schema'; +export * from './Selection'; diff --git a/packages/gqty/test/FrailMap.test.ts b/packages/gqty/test/FrailMap.test.ts new file mode 100644 index 000000000..0cfed0de7 --- /dev/null +++ b/packages/gqty/test/FrailMap.test.ts @@ -0,0 +1,48 @@ +import { randomUUID } from 'crypto'; +import { FrailMap } from '../src/Helpers/FrailMap'; + +jest.setTimeout(1_000_000); + +describe('FrailMap', () => { + it.todo('should find a way to properly test GC in WeakRef'); + + xit('should triggers garbage collection', async () => { + const keys: string[] = []; + const map = new FrailMap>(); + + for (let i = 0; i < 100_000; i++) { + const key = randomUUID(); + const value: Record = { + [randomUUID()]: randomUUID(), + [randomUUID()]: randomUUID(), + [randomUUID()]: randomUUID(), + [randomUUID()]: randomUUID(), + [randomUUID()]: randomUUID(), + [randomUUID()]: randomUUID(), + [randomUUID()]: randomUUID(), + [randomUUID()]: randomUUID(), + [randomUUID()]: randomUUID(), + [randomUUID()]: randomUUID(), + [randomUUID()]: randomUUID(), + }; + + map.set(key, value); + + keys.push(key); + + // Give it some time for GC to happen. + if (i % 500 === 0) { + await new Promise((r) => setTimeout(r, 100)); + } + + // Trigger keys disposal + map.keys(); + + if (map.size < keys.length) { + break; + } + } + + expect(map.size).toBeLessThan(keys.length); + }); +}); diff --git a/packages/gqty/test/accessor.test.ts b/packages/gqty/test/accessor.test.ts index 1b314f55b..84fa80ba1 100644 --- a/packages/gqty/test/accessor.test.ts +++ b/packages/gqty/test/accessor.test.ts @@ -1,21 +1,26 @@ -import { waitForExpect } from 'test-utils'; -import { getArrayFields, SelectionType } from '../src'; -import type { CacheChangeEventData } from '../src/Events'; -import { createTestClient, Dog, expectConsoleWarn } from './utils'; +import { getArrayFields, GQtyError } from '../src'; +import { $meta, assignSelections, setCache } from '../src/Accessor'; +import { createTestClient, expectConsoleWarn, type Dog } from './utils'; + +test('legacy warning', async () => { + const { query } = await createTestClient(); + + expectConsoleWarn((n, message) => { + switch (n) { + case 1: + return expect(message).toMatchInlineSnapshot( + `"[GQty] global query, mutation and subscription is deprecated, please see the migration guide for scoped query."` + ); + default: + throw Error('Unexpected warn: ' + message); + } + }); + + query.hello; +}); describe('array accessors', () => { test('array query', async () => { - const { query, resolved } = await createTestClient(); - - const data = await resolved(() => { - const human = query.human(); - return human.sons.map((son) => { - return son.name; - }); - }); - - expect(data).toEqual(['default', 'default']); - expectConsoleWarn((n, message) => { switch (n) { case 1: @@ -27,6 +32,17 @@ describe('array accessors', () => { } }); + const { query, resolved } = await createTestClient(); + + const data = await resolved(() => { + const human = query.human(); + return human.sons.map((son) => { + return son.name; + }); + }); + + expect(data).toEqual(['default', 'default']); + const cachedDataHumanOutOfSize = await resolved(() => { const human = query.human(); return human.sons[2]; @@ -71,7 +87,18 @@ describe('accessor undefined paths', () => { }); test('intentionally manipulated schema', async () => { - const { query } = await createTestClient({ + expectConsoleWarn((n, message) => { + switch (n) { + case 1: + return expect(message).toMatchInlineSnapshot( + `"[gqty] Warning! No data requested."` + ); + default: + throw Error('Unexpected warn: ' + message); + } + }); + + const { query, resolved } = await createTestClient({ query: { other: { __type: 'error', @@ -80,201 +107,217 @@ describe('accessor undefined paths', () => { wrongroot: false as any, }); - expect(() => { - //@ts-expect-error - query.other; - }).toThrow('GraphQL Type not found: error'); - - expect( - //@ts-expect-error - query.wrongroot - ).toBe(undefined); + await expect(() => + resolved( + () => + // @ts-expect-error + query.other + ) + ).rejects.toEqual(new GQtyError(`GraphQL type not found: error`)); + + await expect( + resolved( + () => + // @ts-expect-error + query.wrongRoot + ) + ).resolves.toBe(undefined); }); }); describe('setCache', () => { test('expected functionality', async () => { - const { scheduler, query, mutation, setCache } = await createTestClient(); - - const humanQuery = query.human({ - name: 'aaa', - }); - - const name1 = humanQuery.name; - - expect(name1).toBe(undefined); - - expect(scheduler.resolving).toBeTruthy(); - await scheduler.resolving!.promise; - - const name2 = humanQuery.name; - - expect(name2).toBe('aaa'); - - const humanMutation = mutation.humanMutation({ - nameArg: 'zzz', - }); - - const name3 = humanMutation.name; - - expect(name3).toBe(undefined); - - expect(scheduler.resolving).toBeTruthy(); - await scheduler.resolving!.promise; - - const name4 = humanMutation.name; + const { + schema: { query, mutation }, + resolve, + } = await createTestClient(); - expect(name4).toBe('zzz'); + { + expect(query.human({ name: 'aaa' }).name).toBe(undefined); - expect(scheduler.resolving).toBe(null); + await resolve(({ query }) => { + query.human({ name: 'aaa' }).name; + }); + expect(query.human({ name: 'aaa' }).name).toBe('aaa'); + } - setCache(humanQuery, humanMutation); + { + expect(mutation.humanMutation({ nameArg: 'bbb' }).name).toBe(undefined); - expect(humanQuery.name).toBe(name4); + await resolve(({ mutation }) => { + mutation.humanMutation({ nameArg: 'bbb' }).name; + }); + expect(mutation.humanMutation({ nameArg: 'bbb' }).name).toBe('bbb'); + } - humanQuery.name = 'bbb'; + { + const humanQuery = query.human({ name: 'aaa' }); + const humanMutation = mutation.humanMutation({ nameArg: 'bbb' }); - expect(humanQuery.name).toBe('bbb'); + Object.assign(humanQuery, humanMutation); + expect(humanQuery.name).toBe('bbb'); - setCache( - humanQuery, - query.human({ - name: 'nnn', - }) - ); + humanQuery.name = 'ccc'; + expect(humanQuery.name).toBe('ccc'); - const name5 = humanQuery.name; + $meta(humanQuery)!.cache.data = {}; + Object.assign(humanQuery, query.human({ name: 'nnn' })); + expect(humanQuery.name).toBe(undefined); + } - expect(name5).toBe(undefined); + { + await resolve( + ({ query }) => { + query.human({ name: 'aaa' }).name; + }, + { cachePolicy: 'no-cache' } + ); - expect(scheduler.resolving).toBeTruthy(); - await scheduler.resolving!.promise; + const humanQuery = query.human({ name: 'aaa' }); + expect(humanQuery.name).toBe('aaa'); - await waitForExpect(() => { - const name6 = humanQuery.name; + humanQuery.sons[0] = { ...humanQuery }; + expect(humanQuery.sons[0].name).toBe('aaa'); - expect(name6).toBe('aaa'); - }, 1000); + humanQuery.name = 'bbb'; + expect(query.human({ name: 'aaa' }).name).toBe('bbb'); - humanQuery.sons[0] = humanQuery; + humanQuery.sons[0].name = 'ccc'; - expect(humanQuery.sons[0].name).toBe('aaa'); + expect(humanQuery.sons[0].name).toBe('ccc'); + expect(humanQuery.name).toBe('bbb'); - setCache( - query.human, - { - name: 'hhh', - }, - { - name: 'nnn', - } - ); + Object.assign(query.human({ name: 'hhh' }), { name: 'nnn' }); + expect(query.human({ name: 'hhh' }).name).toBe('nnn'); - expect( - query.human({ - name: 'hhh', - }).name - ).toBe('nnn'); + query.human().name = 'zzz'; + query.human().name = 'zzz'; - query.human().name = 'zzz'; + query.human().name = 'zzz'; - expect(query.human().name).toBe('zzz'); + expect(query.human().name).toBe('zzz'); + } }); test('with listeners', async () => { - const { setCache, query, eventHandler } = await createTestClient(); - - const eventListener1 = jest - .fn() - .mockImplementation(({ selection, data }: CacheChangeEventData) => { - expect(selection.type).toBe(SelectionType.Query); - expect(selection.key).toBe('hello'); - expect(data).toBe('12345'); + const { + schema: { query }, + subscribeLegacySelections: subscribeSelections, + } = await createTestClient(); + + { + const selections: Array<[string, any]> = []; + const mockedFn = jest.fn((selection, cache) => { + selections.push([selection.cacheKeys.join('.'), cache?.data]); }); - const unsubscribe = eventHandler.onCacheChangeSubscribe(eventListener1); + const unsubscribe = subscribeSelections(mockedFn); - try { query.hello = '12345'; - expect(eventListener1).toBeCalledTimes(1); + unsubscribe(); expect(query.hello).toBe('12345'); - } finally { - unsubscribe(); + expect(mockedFn).toBeCalledTimes(1); + expect(selections).toMatchInlineSnapshot(` + [ + [ + "query.hello", + "12345", + ], + ] + `); + expect(query).toMatchInlineSnapshot(` + { + "__typename": "Query", + "hello": "12345", + } + `); } - const eventListener2 = jest - .fn() - .mockImplementation(({ selection, data }: CacheChangeEventData) => { - expect(selection.type).toBe(SelectionType.Query); - expect(selection.key).toBe('query'); - expect(data).toStrictEqual({ hello: '6789' }); + { + const selections: Array<[string, any]> = []; + const mockedFn = jest.fn((selection, cache) => { + selections.push([selection.cacheKeys.join('.'), cache?.data]); }); - const unsubscribe2 = eventHandler.onCacheChangeSubscribe(eventListener2); + const unsubscribe = subscribeSelections(mockedFn); - try { - setCache(query, { hello: '6789' }); + Object.assign(query, { hello: '6789' }); - expect(eventListener2).toBeCalledTimes(1); + unsubscribe(); + expect(mockedFn).toBeCalledTimes(1); + expect(selections).toMatchInlineSnapshot(` + [ + [ + "query.hello", + "6789", + ], + ] + `); expect(query.hello).toBe('6789'); - } finally { - unsubscribe2(); + expect(query).toMatchInlineSnapshot(` + { + "__typename": "Query", + "hello": "6789", + } + `); } }); test('validation', async () => { - const { setCache, query } = await createTestClient(); + const { + schema: { query }, + } = await createTestClient(); expect(() => { - setCache((_args?: { a: string }) => {}, undefined, undefined); - }).toThrowError('Invalid gqty function'); + // @ts-expect-error + setCache((_args?: { a: string }) => {}, undefined); + }).toThrowError('Subject must be an accessor.'); expect(() => { - setCache( - (_args?: { a: string }) => {}, - () => {} - ); - }).toThrowError('Invalid arguments of type: ' + 'function'); + setCache(query, (() => {}) as any); + }).toThrowError( + 'Data must be a subset of the schema object, got type: ' + 'function' + ); expect(() => { - setCache((_args?: { a: string }) => {}, 123123 as any); - }).toThrowError('Invalid arguments of type: ' + 'number'); + setCache(query, 123123 as any); + }).toThrowError( + 'Data must be a subset of the schema object, got type: ' + 'number' + ); expect(() => { setCache({}, {}); - }).toThrowError('Invalid gqty proxy'); + }).toThrowError('Subject must be an accessor.'); expect(() => { - //@ts-expect-error + // @ts-expect-error query.human({ name: 'ñññ' }).sons['hello'] = null; - }).toThrowError('Invalid array assignation'); - - expect(() => { - //@ts-expect-error - query.human({ name: 'ñññ' }).zxc = null; - }).toThrowError('Invalid proxy assignation'); + }).toThrowError('Invalid array assignment.'); }); }); describe('assign selections', () => { test('expected usage', async () => { - const { query, scheduler, mutate, assignSelections } = - await createTestClient(); - - const human = query.human({ - name: 'A', - }); + const { + mutate, + resolve, + schema: { query }, + } = await createTestClient(); - human.name; - human.father.name; - human.father.father.name; - human.sons.map((son) => son.name); + await resolve(({ query }) => { + const human = query.human({ name: 'A' }); - await scheduler.resolving!.promise; + human.name; + human.father.name; + human.father.father.name; + human.father.name; + human.sons.map((son) => son.name); + }); + const human = query.human({ name: 'A' }); expect(human.name).toBe('A'); expect(human.father.name).toBeTruthy(); expect(human.father.father.name).toBeTruthy(); @@ -294,13 +337,10 @@ describe('assign selections', () => { }); expect(humanMutation.name).toBe('B'); - expect(humanMutation.father.name).toBeTruthy(); expect(human.father.name).toBeTruthy(); - expect(humanMutation.father.father.name).toBeTruthy(); expect(human.father.father.name).toBeTruthy(); - expect(humanMutation.sons.length).toBe(2); expect( humanMutation.sons.every((son) => typeof son.name === 'string') @@ -308,11 +348,7 @@ describe('assign selections', () => { }); test('Source proxy without selections warn in non-production env', async () => { - const { - query, - - assignSelections, - } = await createTestClient(); + const { query } = await createTestClient(); const human = query.human({ name: 'L', @@ -341,14 +377,14 @@ describe('assign selections', () => { }); test('null proxies', async () => { - const { assignSelections, query } = await createTestClient(); + const { query } = await createTestClient(); assignSelections(query, null); assignSelections(null, query); }); test('Invalid proxies', async () => { - const { assignSelections, query } = await createTestClient(); + const { query } = await createTestClient(); expect(() => { assignSelections({}, {}); @@ -367,7 +403,6 @@ describe('unions support', () => { await resolved(() => { return query.species.map((v) => { const onSpecies = v.$on; - const dogName = onSpecies.Dog?.name; const humanName = onSpecies.Human?.name; return { @@ -396,9 +431,9 @@ describe('unions support', () => { describe('mutate accessors', () => { test('works', async () => { - const { query, setCache, resolved } = await createTestClient(); + const { query, resolved } = await createTestClient(); - setCache(query.human, {}, { name: 'hello' }); + Object.assign(query.human(), { name: 'hello' }); const humanHello = query.human(); @@ -415,9 +450,19 @@ describe('mutate accessors', () => { ]; humanHello.dogs = newDogs; - expect(JSON.stringify(humanHello.dogs)).toBe( - '[{"__typename":"Dog","name":"zxc","owner":{"name":"hello","father":{"$ref":"$"}}}]' - ); + expect(humanHello.dogs).toMatchInlineSnapshot(` + [ + { + "__typename": "Dog", + "name": "zxc", + "owner": { + "dogs": [Circular], + "father": [Circular], + "name": "hello", + }, + }, + ] + `); const dogs = await resolved(() => { return getArrayFields(query.dogs, 'name'); @@ -433,67 +478,50 @@ describe('mutate accessors', () => { union: [], }); - expect(JSON.stringify(owner, null, 2)).toMatchInlineSnapshot( - ` - "{ + expect(owner).toMatchInlineSnapshot(` + { "__typename": "Human", "dogs": [ { "__typename": "Dog", "name": "zxc", "owner": { + "dogs": [ + [Circular], + ], + "father": [Circular], "name": "hello", - "father": [ - { - "$ref": "$" - } - ] - } - } + }, + }, ], "father": { - "name": "hello", - "father": { - "$ref": "$" - }, "dogs": [ { "__typename": "Dog", "name": "zxc", - "owner": { - "name": "hello", - "father": { - "$ref": "$[\\"dogs\\"]" - } - } - } - ] + "owner": [Circular], + }, + ], + "father": [Circular], + "name": "hello", }, "name": "ModifiedOwner", + "node": [], "sons": [ { - "name": "hello", - "father": { - "$ref": "$" - }, "dogs": [ { "__typename": "Dog", "name": "zxc", - "owner": { - "name": "hello", - "father": { - "$ref": "$[\\"dogs\\"]" - } - } - } - ] - } + "owner": [Circular], + }, + ], + "father": [Circular], + "name": "hello", + }, ], - "node": [], - "union": [] - }" - ` - ); + "union": [], + } + `); }); }); diff --git a/packages/gqty/test/buildQuery.test.ts b/packages/gqty/test/buildQuery.test.ts index 8353039cf..bc9fe5a13 100644 --- a/packages/gqty/test/buildQuery.test.ts +++ b/packages/gqty/test/buildQuery.test.ts @@ -2,250 +2,128 @@ import { parse, stripIgnoredCharacters as officialStripIgnoredCharacters, } from 'graphql'; - -import { createQueryBuilder } from '../src/QueryBuilder'; -import { Selection, SelectionType } from '../src/Selection'; - -const buildQuery = createQueryBuilder(); +import { buildQuery } from '../src/QueryBuilder'; +import { Selection } from '../src/Selection'; describe('buildQuery()', () => { it('should builds basic query', () => { - const baseSelection = new Selection({ - key: 'query', - type: SelectionType.Query, - id: 0, - }); - - const selectionA = new Selection({ - key: 'a', - prevSelection: baseSelection, - id: 1, - }); + const baseSelection = Selection.createRoot('query'); + const selectionA = baseSelection.getChild('a'); + const selectionB = baseSelection.getChild('b'); - const selectionB = new Selection({ - key: 'b', - prevSelection: baseSelection, - id: 2, - }); - - const { query, variables } = buildQuery([selectionA, selectionB], { - type: 'query', - }); + const [{ query, variables }] = buildQuery( + new Set([selectionA, selectionB]) + ); expect(query).toMatchInlineSnapshot(`"query{a b}"`); expect(variables).toBe(undefined); - - expect(() => { - parse(query); - }).not.toThrow(); - + expect(() => parse(query)).not.toThrow(); expect(officialStripIgnoredCharacters(query)).toBe(query); }); it('should builds deep query with unions', () => { - const baseSelection = new Selection({ - key: 'query', - type: SelectionType.Query, - id: 0, - }); - - const selectionA = new Selection({ - key: 'a', - prevSelection: baseSelection, - id: 1, - }); - - const selectionB = new Selection({ - key: 'b', - prevSelection: selectionA, - id: 2, - }); - - const selectionC = new Selection({ - key: 'c', - prevSelection: selectionB, - id: 3, - }); - - const selectionD = new Selection({ - key: 'd', - prevSelection: selectionC, - id: 4, - }); - - const selectionE1 = new Selection({ - key: 'a', - prevSelection: selectionD, - unions: ['val1', 'val2'], - id: 4, - }); - - const selectionE2 = new Selection({ - key: 'b', - prevSelection: selectionD, - unions: ['val1'], - id: 5, - }); - - const selectionF = new Selection({ - key: 'f', - prevSelection: selectionE1, - id: 6, - }); - - const { query, variables } = buildQuery([selectionE2, selectionF], { - type: 'query', - }); + const baseSelection = Selection.createRoot('query'); + const selectionD = baseSelection + .getChild('a') + .getChild('b') + .getChild('c') + .getChild('d'); + + const selectionD1 = selectionD.getChild('val1', { isUnion: true }); + const selectionD1B = selectionD1.getChild('b'); + const selectionD1A = selectionD1.getChild('a'); + const selectionD1AF = selectionD1A.getChild('f'); + + const selectionD2 = selectionD.getChild('val2', { isUnion: true }); + const selectionD2A = selectionD2.getChild('a'); + const selectionD2AF = selectionD2A.getChild('f'); + + const [{ query, variables }] = buildQuery( + new Set([selectionD1B, selectionD1AF, selectionD2AF]) + ); expect(query).toMatchInlineSnapshot( - `"query{a{b{c{d{...on val1{b a{f}}...on val2{a{f}}}}}}}"` + `"query{a{b{c{d{...on val1{a{f}b}...on val2{a{f}}}}}}}"` ); expect(variables).toBe(undefined); - - expect(() => { - parse(query); - }).not.toThrow(); - + expect(() => parse(query)).not.toThrow(); expect(officialStripIgnoredCharacters(query)).toBe(query); }); it('should queries with arguments', () => { - const baseSelection = new Selection({ - key: 'query', - type: SelectionType.Query, - id: 0, - }); - - const selectionA = new Selection({ - key: 'a', - prevSelection: baseSelection, - args: { - a: 1, - b: 1, - }, - argTypes: { - a: 'Int!', - b: 'String!', - }, + const baseSelection = Selection.createRoot('query'); + const selectionA = baseSelection.getChild('a', { alias: 'gqtyAlias_1', - id: 1, - }); - - const selectionB = new Selection({ - key: 'a_b', - prevSelection: selectionA, - id: 2, - }); - - const selectionC = new Selection({ - key: 'a_c', - prevSelection: selectionA, - id: 3, - }); - - const selectionD = new Selection({ - key: 'd', - prevSelection: baseSelection, - id: 4, + parent: baseSelection, + input: { + types: { + a: 'Int!', + b: 'String!', + }, + values: { + a: 1, + b: 1, + }, + }, }); + const selectionB = selectionA.getChild('a_b'); + const selectionC = selectionA.getChild('a_c'); + const selectionD = baseSelection.getChild('d'); - const { query, variables } = buildQuery( - [selectionB, selectionC, selectionD], - { - type: 'query', - } + const [{ query, variables }] = buildQuery( + new Set([selectionB, selectionC, selectionD]) ); expect(query).toMatchInlineSnapshot( - `"query($a1:Int!$b2:String!){gqtyAlias_1:a(a:$a1 b:$b2){a_b a_c}d}"` + `"query($a03b9b:Int!$ad2f8d:String!){d gqtyAlias_1:a(a:$a03b9b b:$ad2f8d){a_b a_c}}"` ); - - expect(() => { - parse(query); - }).not.toThrow(); - - expect(variables).toEqual({ a1: 1, b2: 1 }); - + expect(() => parse(query)).not.toThrow(); + expect(variables).toEqual({ a03b9b: 1, ad2f8d: 1 }); expect(officialStripIgnoredCharacters(query)).toBe(query); }); it('should build mutation with arguments', () => { - const baseSelection = new Selection({ - key: 'mutation', - type: SelectionType.Mutation, - id: 1, - }); - - const selectionA = new Selection({ - key: 'a', - prevSelection: baseSelection, - args: { - a: 1, - b: 1, - }, - argTypes: { - a: 'Int!', - b: 'String!', - }, + const baseSelection = Selection.createRoot('mutation'); + const selectionA = baseSelection.getChild('a', { alias: 'gqtyAlias_1', - id: 2, + parent: baseSelection, + input: { + values: { + a: 1, + b: 1, + }, + types: { + a: 'Int!', + b: 'String!', + }, + }, }); - const { query, variables } = buildQuery([selectionA], { - type: 'mutation', - }); + const [{ query, variables }] = buildQuery(new Set([selectionA])); expect(query).toMatchInlineSnapshot( - `"mutation($a1:Int!$b2:String!){gqtyAlias_1:a(a:$a1 b:$b2)}"` + `"mutation($a03b9b:Int!$ad2f8d:String!){gqtyAlias_1:a(a:$a03b9b b:$ad2f8d)}"` ); expect(() => { parse(query); }).not.toThrow(); - expect(variables).toEqual({ a1: 1, b2: 1 }); + expect(variables).toEqual({ a03b9b: 1, ad2f8d: 1 }); expect(officialStripIgnoredCharacters(query)).toBe(query); }); - it('should fails on mismatched selection type', () => { - const baseSelection = new Selection({ - key: 'mutation', - type: SelectionType.Query, - id: 0, - }); - - expect(() => { - buildQuery([baseSelection], { type: 'query' }); - }).toThrow('Expected root selection of type "query", found "mutation".'); - }); - it('should query with operation name', () => { - const baseSelection = new Selection({ - key: 'query', - type: SelectionType.Query, - id: 0, - }); + const baseSelection = Selection.createRoot('query'); + const selectionA = baseSelection.getChild('a'); - const selectionA = new Selection({ - key: 'a', - prevSelection: baseSelection, - id: 1, - operationName: 'TestQuery', - }); - - const { query } = buildQuery([selectionA], { - type: 'query', - }); + const [{ query }] = buildQuery(new Set([selectionA]), 'TestQuery'); expect(query).toMatchInlineSnapshot(`"query TestQuery{a}"`); - - expect(() => { - parse(query); - }).not.toThrow(); - + expect(() => parse(query)).not.toThrow(); expect(officialStripIgnoredCharacters(query)).toBe(query); }); }); diff --git a/packages/gqty/test/cache.test.ts b/packages/gqty/test/cache.test.ts index f4bcf41cd..f651ad8e1 100644 --- a/packages/gqty/test/cache.test.ts +++ b/packages/gqty/test/cache.test.ts @@ -1,219 +1,141 @@ import { assertIsDefined } from 'test-utils'; - -import { createAccessorCache, createCache } from '../src/Cache'; -import { EventHandler } from '../src/Events'; -import { createNormalizationHandler } from '../src/Normalization'; +import { $meta, createSchemaAccessor } from '../src/Accessor'; +import { createObjectAccessor } from '../src/Accessor/resolve'; +import { Cache, CacheRoot } from '../src/Cache'; import { Selection } from '../src/Selection'; -import { get } from '../src/Utils'; -import { createTestClient } from './utils'; - -describe('accessorCache', () => { - test('getAccessor', () => { - const cache = createAccessorCache(); - - const selection = new Selection({ - key: 'a', - id: 0, - }); - - const obj = cache.getAccessor(selection, null, () => { - return { - a: 1, - }; - }); - - expect(obj).toEqual({ - a: 1, - }); - const obj2 = cache.getAccessor(selection, null, () => { - throw Error("This shouldn't be called"); - }); - - expect(obj).toBe(obj2); - - const selectionFromCache = cache.getProxySelection(obj); - - expect(selectionFromCache).toBe(selection); - - assertIsDefined(selection); - - expect(selection.key).toBe('a'); - expect(selection.cachePath).toEqual(['a']); - expect(selection.pathString).toBe('a'); - - const isProxyFromCache = cache.isProxy(obj); - - expect(isProxyFromCache).toBe(true); - - expect(cache.isProxy({})).toBe(false); - }); - - test('getArrayAccessor', () => { - const cache = createAccessorCache(); - - const selection = new Selection({ - key: 'a', - id: 0, - }); - - const arrayValue = [123]; - - const obj = cache.getArrayAccessor(selection, arrayValue, () => { - return { - a: 1, - }; - }); +describe('Cache#dataAccessors', () => { + const mockContext = { + schema: { + query: { + __typename: { __type: 'String!' }, + a: { __type: 'String!' }, + b: { __type: 'B!' }, + }, + B: { + c: { __type: 'String!' }, + }, + }, + scalars: { String: true }, + depthLimit: 15, + select: () => {}, + subscribeSelect: () => () => {}, + dispose: () => {}, + subscribeDispose: () => () => {}, + notifyCacheUpdate: false, + shouldFetch: false, + hasCacheHit: false, + hasCacheMiss: false, + } as const; + + /** + * Before we figure out how to cache sub-selections for null values, caching + * accessors adds a lot of complixity with little performance gain. + * + * Skip this for now. + */ + it('should return the cached accessor', () => { + const cache = new Cache(); + const selection = Selection.createRoot('query').getChild('a'); + const cacheValue = { a: 1 }; + + const obj = cache.getAccessor(selection, () => + createObjectAccessor({ + cache: { + data: cacheValue, + expiresAt: Infinity, + swrBefore: 0, + }, + context: { ...mockContext, cache }, + selection, + type: { __type: 'query' }, + }) + ); - expect(obj).toEqual({ - a: 1, - }); + expect($meta(obj)).toBeDefined(); + expect($meta(obj)?.cache.data).toEqual({ a: 1 }); - const obj2 = cache.getArrayAccessor(selection, arrayValue, () => { + const obj2 = cache.getAccessor(selection, () => { throw Error("This shouldn't be called"); }); expect(obj).toBe(obj2); - - const selectionFromCache = cache.getProxySelection(obj); - - expect(selectionFromCache).toBe(selection); - assertIsDefined(selection); - expect(selection.key).toBe('a'); - expect(selection.cachePath).toEqual(['a']); - expect(selection.pathString).toBe('a'); - - const isProxyFromCache = cache.isProxy(obj); - - expect(isProxyFromCache).toBe(true); - - expect(cache.isProxy({})).toBe(false); + expect(selection.cacheKeys).toEqual(['query', 'a']); }); - test('getting selections history', () => { - const { - addSelectionToAccessorHistory, - getAccessor, - getSelectionSetHistory, - addAccessorChild, - } = createAccessorCache(); - - const rootAccessor = getAccessor( - new Selection({ - key: 'root', - id: 0, - }), - null, - () => { - return { - root: true, - }; - } - ); - - const selectionA = new Selection({ - key: 'a', - id: 1, - }); - - const accessorA = getAccessor(selectionA, null, () => { - return { - a: 1, - }; - }); - - addAccessorChild(rootAccessor, accessorA); - - const selectionB = new Selection({ - key: 'b', - id: 2, - }); - - const accessorB = getAccessor(selectionB, null, () => { - return { - b: 2, - }; + it('should make selections', () => { + const cache = new Cache(); + const schema = createSchemaAccessor<{ query: { b: { c: string } } }>({ + ...mockContext, + cache, + select(selection) { + selections.push(selection); + }, }); + const selections: Selection[] = []; - addAccessorChild(accessorA, accessorB); - - addSelectionToAccessorHistory(accessorA, selectionA); - - const selections1 = getSelectionSetHistory(accessorA)!; - - expect(selections1).toBeTruthy(); - - expect(selections1).toStrictEqual(new Set([selectionA])); - - addSelectionToAccessorHistory(accessorB, selectionB); - - const selections2 = getSelectionSetHistory(accessorB)!; - - expect(selections2).toBeTruthy(); - - expect(selections2).toStrictEqual(new Set([selectionB])); - - const selections3 = getSelectionSetHistory(accessorA)!; - - expect(selections3).toBeTruthy(); - - expect(selections3).toStrictEqual(new Set([selectionA, selectionB])); + schema.query.b.c; - const selections4 = getSelectionSetHistory(rootAccessor)!; - - expect(selections4).toBeTruthy(); - - expect(selections4).toStrictEqual(new Set([selectionA, selectionB])); + expect(selections.length).toBe(1); + expect(selections[0].cacheKeys.join('.')).toBe('query.b.c'); }); }); -describe('dataCache', () => { - test('works', () => { - const cache = createCache(); - - const selectionBase = new Selection({ - key: 'query', - id: 0, - }); - - const selection = new Selection({ - key: 'a', - prevSelection: selectionBase, - id: 1, - }); - - const dataEmpty = cache.getCacheFromSelection(selection); - +describe('Cache#data', () => { + const mockContext = { + schema: { + query: { + nullArray: { __type: '[String!]' }, + }, + }, + scalars: { String: true }, + depthLimit: 15, + select: () => {}, + subscribeSelect: () => () => {}, + dispose: () => {}, + subscribeDispose: () => () => {}, + notifyCacheUpdate: false, + shouldFetch: false, + hasCacheHit: false, + hasCacheMiss: false, + } as const; + + it('should work with selections', () => { + const cache = new Cache(); + const selectionBase = Selection.createRoot('query'); + const selection = selectionBase.getChild('a'); + + const dataEmpty = cache.get(selection.cacheKeys.join('.'))?.data; expect(dataEmpty).toBe(undefined); - cache.mergeCache( - { + cache.set({ + query: { a: 1, }, - 'query' - ); - - const data = cache.getCacheFromSelection(selection); + }); + const data = cache.get(selection.cacheKeys.join('.'))?.data; expect(data).toBe(1); }); - test('toJSON', async () => { - const { query, scheduler } = await createTestClient(); - - expect(JSON.stringify(query)).toBe('{}'); - - expect(JSON.stringify(query.nullArray)).toBe('[]'); + it('should be JSON serializable', async () => { + const cache = new Cache({ query: { nullArray: [] } }); + const { query } = createSchemaAccessor({ ...mockContext, cache }); - await scheduler.resolving?.promise; + expect(query).toMatchInlineSnapshot(` + { + "__typename": "Query", + } + `); + expect(query.nullArray).toMatchInlineSnapshot(`[]`); }); - test('merge works as it should with arrays', () => { - const { cache, mergeCache } = createCache(); + it('should merge on top-level keys', () => { + const cache = new Cache(); - function expectCacheToBe(v: typeof cache) { + function expectCacheToBe(v: CacheRoot) { try { expect(JSON.stringify(cache)).toBe(JSON.stringify(v)); } catch (err: any) { @@ -222,80 +144,55 @@ describe('dataCache', () => { } } - mergeCache( - { + cache.set({ + query: { other: 123, array1: [1, 2], - array2: [ - { - a: 1, - }, - ], + array2: [{ a: 1 }], }, - 'query' - ); + }); expectCacheToBe({ query: { other: 123, array1: [1, 2], - array2: [ - { - a: 1, - }, - ], + array2: [{ a: 1 }], }, }); - mergeCache( - { + cache.set({ + query: { array1: [3], }, - 'query' - ); + }); expectCacheToBe({ query: { other: 123, array1: [3], - array2: [ - { - a: 1, - }, - ], + array2: [{ a: 1 }], }, }); - mergeCache( - { - array2: [ - { - b: 2, - }, - ], + cache.set({ + query: { + array2: [{ b: 2 }], }, - 'query' - ); + }); expectCacheToBe({ query: { other: 123, array1: [3], - array2: [ - { - a: 1, - b: 2, - }, - ], + array2: [{ b: 2 }], }, }); - mergeCache( - { + cache.set({ + query: { array2: [], }, - 'query' - ); + }); expectCacheToBe({ query: { @@ -305,245 +202,360 @@ describe('dataCache', () => { }, }); - mergeCache( - { + cache.set({ + query: { array2: [ - { - c: 1, - }, - { - d: 1, - }, - { - e: 1, - }, + { __typename: 'c', c: 1 }, + { __typename: 'd', d: 1 }, + { __typename: 'e', e: 1 }, ], }, - 'query' - ); + }); expectCacheToBe({ query: { other: 123, array1: [3], array2: [ - { - c: 1, - }, - { - d: 1, - }, - { - e: 1, - }, + { __typename: 'c', c: 1 }, + { __typename: 'd', d: 1 }, + { __typename: 'e', e: 1 }, ], }, }); - mergeCache( - { + cache.set({ + query: { array1: null, }, - 'query' - ); + }); expectCacheToBe({ query: { other: 123, array1: null, array2: [ - { - c: 1, - }, - { - d: 1, - }, - { - e: 1, - }, + { __typename: 'c', c: 1 }, + { __typename: 'd', d: 1 }, + { __typename: 'e', e: 1 }, ], }, }); }); }); -describe('data normalization', () => { - test('should work', async () => { - const { cache, mergeCache, normalizedCache, getCacheFromSelection } = - createCache( - createNormalizationHandler( - true, - new EventHandler(), - { - mutation: {}, - query: {}, - subscription: {}, - a: { - __typename: { __type: 'String!' }, - id: { __type: 'Int!' }, - }, - }, - { - Int: true, - } - ) - ); +describe('Cache#normalization', () => { + it('should work', () => { + const cache = new Cache(undefined, { + maxAge: Infinity, + normalization: true, + }); - assertIsDefined(normalizedCache); + cache.set({ + query: { + a: { + __typename: 'A', + id: 1, + a: 1, + }, + }, + }); - function expectCacheToBe(v: typeof normalizedCache) { - try { - expect(JSON.stringify(cache)).toBe(JSON.stringify(v)); - } catch (err: any) { - Error.captureStackTrace(err, expectCacheToBe); - throw err; - } - } - function expectNormalizedCacheToBe(v: typeof normalizedCache) { - try { - expect(JSON.stringify(normalizedCache)).toBe(JSON.stringify(v)); - } catch (err: any) { - Error.captureStackTrace(err, expectNormalizedCacheToBe); - throw err; + expect(cache).toMatchInlineSnapshot(` + { + "normalized": { + "A:1": { + "__typename": "A", + "a": 1, + "id": 1, + }, + }, + "query": { + "a": { + "__ref": "A:1", + }, + }, } - } + `); - mergeCache( - { + // Should merge object on incoming superset. + cache.set({ + query: { a: { - __typename: 'a', + __typename: 'A', id: 1, - v: 1, + a: 1, + b: 2, }, }, - 'query' - ); - - expectNormalizedCacheToBe({ - a1: { - __typename: 'a', - id: 1, - v: 1, - }, }); - expectCacheToBe({ + expect(cache).toMatchInlineSnapshot(` + { + "normalized": { + "A:1": { + "__typename": "A", + "a": 1, + "b": 2, + "id": 1, + }, + }, + "query": { + "a": { + "__ref": "A:1", + }, + }, + } + `); + + cache.set({ query: { - a: { - __typename: 'a', + otherQuery: { + __typename: 'O', id: 1, - v: 1, + deep: { + __typename: 'A', + id: 1, + c: 3, + }, }, }, }); - mergeCache( + expect(cache).toMatchInlineSnapshot(` { + "normalized": { + "A:1": { + "__typename": "A", + "a": 1, + "b": 2, + "c": 3, + "id": 1, + }, + "O:1": { + "__typename": "O", + "deep": { + "__ref": "A:1", + }, + "id": 1, + }, + }, + "query": { + "a": { + "__ref": "A:1", + }, + "otherQuery": { + "__ref": "O:1", + }, + }, + } + `); + + const selection = Selection.createRoot('query').getChild('a'); + + expect(cache.get(selection.cacheKeys.join('.'))?.data) + .toMatchInlineSnapshot(` + { + "__typename": "A", + "a": 1, + "b": 2, + "c": 3, + "id": 1, + } + `); + }); +}); + +describe('Cache#subscribe', () => { + it('should notify direct subscribers', () => { + const cache = new Cache(); + const listener = jest.fn(); + const unsub = cache.subscribe(['query.a', 'query.b.a'], listener); + + cache.set({ query: { a: 1 } }); + cache.set({ query: { b: { a: 1 } } }); + + expect(listener).toHaveBeenCalledTimes(2); + + unsub(); + }); + + it('should notify normalized subscribers', () => { + const cache = new Cache(undefined, { + maxAge: Infinity, + normalization: true, + }); + const listener = jest.fn(); + const subs: Array<() => void> = []; + + cache.set({ + query: { a: { - __typename: 'a', + __typename: 'A', id: 1, - g: 2, + b: { __typename: 'B', id: 1 }, }, }, - 'query' - ); - - expectNormalizedCacheToBe({ - a1: { - __typename: 'a', - id: 1, - v: 1, - g: 2, - }, }); - expectCacheToBe({ + // Referencing a normalized object + subs.push(cache.subscribe(['query.a.__typename'], listener)); + + // Update normalized object from a different path + cache.set({ query: { - a: { - __typename: 'a', + b: { + __typename: 'B', id: 1, - v: 1, - g: 2, + a: { __typename: 'A', id: 1, a: 1 }, }, }, }); - mergeCache( - { - otherQuery: { - __typename: 'o', - deep: { - __typename: 'a', + expect(listener).toHaveBeenCalledWith({ + query: { + b: { + __typename: 'B', + id: 1, + a: expect.objectContaining({ + __typename: 'A', id: 1, - n: 3, - }, + a: 1, + // b: [Circular] + }), }, }, - 'query' - ); + }); - expectNormalizedCacheToBe({ - a1: { - __typename: 'a', - id: 1, - v: 1, - g: 2, - n: 3, + cache.set({ + query: { + c: { + a: { __typename: 'A', id: 1, a: 1, b: 2 }, + }, }, }); - const querySelection = new Selection({ - key: 'query', - id: 0, - }); - const aSelection = new Selection({ - key: 'a', - prevSelection: querySelection, - id: 1, + expect(listener).toHaveBeenCalledWith({ + query: { c: { a: { __typename: 'A', id: 1, a: 1, b: 2 } } }, }); - const aData = getCacheFromSelection(aSelection); + expect(listener).toHaveBeenCalledTimes(2); - expect(aData).toStrictEqual({ __typename: 'a', id: 1, v: 1, g: 2, n: 3 }); + subs.forEach((unsub) => unsub()); + }); - expect(get(cache, 'query.a')).toStrictEqual({ - __typename: 'a', - id: 1, - v: 1, - g: 2, - n: 3, + it('should work with arrays', () => { + const cache = new Cache({ + query: { + a: [1, 2, 3], + b: [ + { __typename: 'B', id: 1, a: 1 }, + { __typename: 'B', id: 2 }, + ], + }, }); + const listener = jest.fn(); - expect(normalizedCache['a1']).toStrictEqual({ - __typename: 'a', - id: 1, - v: 1, - g: 2, - n: 3, + cache.subscribe(['query.b.a'], listener); + cache.set({ + query: { + b: [{ __typename: 'B', id: 1, a: 2 }], + }, }); - expectCacheToBe({ - query: { - a: { - __typename: 'a', - id: 1, - v: 1, - g: 2, - n: 3, + expect(listener).toBeCalledTimes(1); + expect(cache).toMatchInlineSnapshot(` + { + "query": { + "a": [ + 1, + 2, + 3, + ], + "b": [ + { + "__typename": "B", + "a": 2, + "id": 1, + }, + ], }, - otherQuery: { - __typename: 'o', - deep: { - __typename: 'a', - id: 1, - n: 3, - }, + } + `); + }); + + it('should work with normalized arrays', () => { + const cache = new Cache( + { + query: { + a: [1, 2, 3], + b: [ + { __typename: 'B', id: 1, b: 1 }, + { __typename: 'B', id: 2, b: 2 }, + { __typename: 'B', id: 3, b: 3 }, + ], }, }, + { normalization: true } + ); + const listener = jest.fn(); + + cache.subscribe(['query.b.b'], listener); + + cache.set({ + query: { + c: { __typename: 'B', id: 2, b: 4 }, + }, }); - }); -}); -process.on('SIGTERM', () => { - console.log('CACHE TEST EXIT'); + expect(listener).toBeCalledTimes(1); + expect(listener).toHaveBeenCalledWith({ + query: { + c: { __typename: 'B', id: 2, b: 4 }, + }, + }); + + expect(cache).toMatchInlineSnapshot(` + { + "normalized": { + "B:1": { + "__typename": "B", + "b": 1, + "id": 1, + }, + "B:2": { + "__typename": "B", + "b": 4, + "id": 2, + }, + "B:3": { + "__typename": "B", + "b": 3, + "id": 3, + }, + }, + "query": { + "a": [ + 1, + 2, + 3, + ], + "b": [ + { + "__ref": "B:1", + }, + { + "__ref": "B:2", + }, + { + "__ref": "B:3", + }, + ], + "c": { + "__ref": "B:2", + }, + }, + } + `); + }); }); diff --git a/packages/gqty/test/client.test.ts b/packages/gqty/test/client.test.ts index ad4463eee..0e5d451d9 100644 --- a/packages/gqty/test/client.test.ts +++ b/packages/gqty/test/client.test.ts @@ -1,27 +1,228 @@ -import '../src/Client'; +import { Cache, GQtyError, prepass, type QueryPayload } from '../src'; +import { $meta } from '../src/Accessor'; +import { fetchSelections } from '../src/Client/resolveSelections'; +import { updateCaches } from '../src/Client/updateCaches'; +import { Selection } from '../src/Selection'; +import { createTestClient } from './utils'; -import { waitForExpect } from 'test-utils'; +describe('core#resolve', () => { + describe('fetchPolicy', () => { + it('default', async () => { + const { + resolve, + schema: { query }, + } = await createTestClient(undefined, undefined, undefined, { + cache: new Cache(undefined, { maxAge: 50 }), + }); -import { GQtyError, prepass, Selection } from '../src'; -import { createTestClient } from './utils'; + await expect( + resolve(({ query }) => query.nFetchCalls, { cachePolicy: 'default' }) + ).resolves.toBe(1); -describe('core', () => { - test('scheduler', async () => { - const { query } = await createTestClient(); + await expect( + resolve(({ query }) => query.nFetchCalls, { cachePolicy: 'default' }) + ).resolves.toBe(1); - expect(typeof query).toBe('object'); + await new Promise((resolve) => setTimeout(resolve, 150)); + + let promise: Promise | undefined; + resolve(({ query }) => query.nFetchCalls, { + awaitsFetch: false, + cachePolicy: 'default', + onFetch(p) { + promise = p; + }, + }); + expect(query.nFetchCalls).toBe(1); + await promise; + expect(query.nFetchCalls).toBe(2); + }); + + it('force-cache', async () => { + const { + resolve, + schema: { query }, + } = await createTestClient(undefined, undefined, undefined, { + cache: new Cache(undefined, { maxAge: 50, staleWhileRevalidate: 0 }), + }); + + await expect( + resolve( + ({ query }) => { + query.nFetchCalls; + return query.hello; + }, + { cachePolicy: 'default' } + ) + ).resolves.toBe('hello world'); + expect(query.nFetchCalls).toBe(1); + + await expect( + resolve( + ({ query }) => { + query.nFetchCalls; + return query.hello; + }, + { cachePolicy: 'force-cache' } + ) + ).resolves.toBe('hello world'); + expect(query.nFetchCalls).toBe(1); + + await new Promise((resolve) => setTimeout(resolve, 150)); + + expect(query.hello).toBe('hello world'); + await expect( + resolve( + ({ query }) => { + query.nFetchCalls; + return query.hello; + }, + { cachePolicy: 'force-cache' } + ) + ).resolves.toBe('hello world'); + expect(query.nFetchCalls).toBe(2); + }); + + it('no-cache', async () => { + const { resolve } = await createTestClient( + undefined, + undefined, + undefined, + { + cache: new Cache(undefined, { + maxAge: Infinity, + staleWhileRevalidate: 0, + }), + } + ); + + await expect( + resolve(({ query }) => query.nFetchCalls, { cachePolicy: 'default' }) + ).resolves.toBe(1); + + await expect( + resolve(({ query }) => query.nFetchCalls, { cachePolicy: 'no-cache' }) + ).resolves.toBe(2); + + await expect( + resolve(({ query }) => query.nFetchCalls, { cachePolicy: 'default' }) + ).resolves.toBe(2); + }); + + it('no-store', async () => { + const { + resolve, + schema: { query }, + } = await createTestClient(undefined, undefined, undefined, { + cache: new Cache(undefined, { + maxAge: Infinity, + staleWhileRevalidate: 0, + }), + }); + + await expect( + resolve(({ query }) => query.hello, { cachePolicy: 'no-store' }) + ).resolves.toBe('hello world'); + + expect(query.hello).toBeUndefined(); + }); + + /** + * When multiple tests are running, GC gets triggered more often and this + * randomly fails. Should work when run individually. + */ + xit('only-if-cached', async () => { + const { resolve } = await createTestClient( + undefined, + undefined, + undefined, + { + cache: new Cache(undefined, { + maxAge: 0, + staleWhileRevalidate: 0, + }), + } + ); + + await expect(() => + resolve(({ query }) => query.hello, { cachePolicy: 'only-if-cached' }) + ).rejects.toThrowError(new TypeError('Failed to fetch')); + + await expect(resolve(({ query }) => query.hello)).resolves.toBe( + 'hello world' + ); + + await expect( + resolve(({ query }) => query.hello, { cachePolicy: 'only-if-cached' }) + ).resolves.toBe('hello world'); + }); + }); + + it('subscriptions', async () => { + const { resolve } = await createTestClient(undefined, undefined, { + subscriptions: true, + }); + + const subPromise = resolve( + ({ subscription }) => subscription.newNotification + ); - expect(query.hello).toBe(undefined); + await new Promise((resolve) => setTimeout(resolve, 100)); - waitForExpect( - () => { - expect(query.hello).toBe('hello world'); - }, - 100, - 10 + await resolve(({ mutation }) => + mutation.sendNotification({ message: 'hello world' }) ); + + const data = await subPromise; + + expect(data).toEqual('hello world'); }); + it('handles errors', async () => { + const { resolve } = await createTestClient(); + + try { + await resolve(({ query }) => { + query.throw; + query.throw2; + }); + } catch (error) { + expect(error).toEqual( + Object.assign( + Error('GraphQL Errors, please check .graphQLErrors property'), + { + errors: [ + { + message: 'expected error', + locations: [{ line: 1, column: 7 }], + path: ['throw'], + }, + { + message: 'expected error 2', + locations: [{ line: 1, column: 13 }], + path: ['throw2'], + }, + ], + } + ) + ); + } + }); + + it('passes on query extensions', async () => { + const fetchHistory: QueryPayload[] = []; + const { resolve } = await createTestClient(undefined, (payload) => { + fetchHistory.push(payload); + return {}; + }); + + await resolve(({ query }) => query.hello, { extensions: { foo: 'bar' } }); + + expect(fetchHistory[0].extensions).toMatchObject({ foo: 'bar' }); + }); +}); + +describe('compat', () => { test('resolved', async () => { const { query, resolved } = await createTestClient(); @@ -39,11 +240,7 @@ describe('core', () => { expect(typeof query).toBe('object'); - await resolved(() => { - return query.hello; - }).then((value) => { - expect(value).toBe('hello world'); - }); + await expect(resolved(() => query.hello)).resolves.toBe('hello world'); const onCacheData = jest .fn() @@ -52,17 +249,10 @@ describe('core', () => { return true; }); - await resolved( - () => { - return query.hello; - }, - { - refetch: true, - onCacheData, - } - ).then((value) => { - expect(value).toBe('hello world'); - }); + + await expect( + resolved(() => query.hello, { refetch: true, onCacheData }) + ).resolves.toBe('hello world'); expect(onCacheData).toBeCalledTimes(1); @@ -73,17 +263,10 @@ describe('core', () => { return false; }); - await resolved( - () => { - return query.hello; - }, - { - refetch: true, - onCacheData: onCacheData2, - } - ).then((value) => { - expect(value).toBe('hello world'); - }); + + await expect( + resolved(() => query.hello, { refetch: true, onCacheData: onCacheData2 }) + ).resolves.toBe('hello world'); expect(onCacheData2).toBeCalledTimes(1); }); @@ -92,7 +275,7 @@ describe('core', () => { const fetchHistory: string[] = []; const { query, resolved } = await createTestClient( undefined, - async (query) => { + async ({ query }) => { fetchHistory.push(query); return {}; } @@ -112,14 +295,7 @@ describe('core', () => { }); test('resolved with unions', async () => { - const fetchHistory: string[] = []; - const { query, resolved } = await createTestClient( - undefined, - async (query) => { - fetchHistory.push(query); - return {}; - } - ); + const { query, resolved, queries } = await createTestClient(); await Promise.all([ resolved(() => { @@ -127,23 +303,18 @@ describe('core', () => { }), ]); - expect(fetchHistory).toEqual( + expect(queries).toMatchObject( expect.arrayContaining([ - expect.stringContaining('...on A{id a}...on B{id b}'), + expect.objectContaining({ + query: expect.stringContaining('...on A{a id}...on B{b id}'), + }), ]) ); }); test('inlineResolved with operationName', async () => { - const fetchHistory: string[] = []; - const { query, mutation, inlineResolved } = await createTestClient( - undefined, - async (query) => { - fetchHistory.push(query); - await new Promise((resolve) => setTimeout(resolve, 5)); - return { data: { query: 'hello' } }; - } - ); + const { query, mutation, inlineResolved, queries } = + await createTestClient(); await Promise.all([ inlineResolved(() => query.human({ name: 'John' }).__typename, { @@ -158,154 +329,141 @@ describe('core', () => { }), ]); - expect(fetchHistory).toEqual( - expect.arrayContaining([ - 'mutation TestMutation($nameArg1:String!){humanMutation_70c5e_90943:humanMutation(nameArg:$nameArg1){__typename id}}', - 'query TestQueryA($name1:String){human_b8c92_7a4a6:human(name:$name1){__typename id}}', - 'query TestQueryB{hello}', - ]) - ); + expect(queries.map(({ query }) => query)).toMatchInlineSnapshot(` + [ + "query TestQueryA($e8a374:String){a5b434:human(name:$e8a374){__typename}}", + "mutation TestMutation($ef3ee3:String!){a133ff:humanMutation(nameArg:$ef3ee3){__typename}}", + "query TestQueryB{hello}", + ] + `); }); -}); - -describe('resolved cache options', () => { - test('refetch', async () => { - const { query, resolved } = await createTestClient(); - const resolveFn = () => { - const human = query.human({ - name: 'a', - }); - return { - name: human.name, - nFetchCalls: query.nFetchCalls, + describe('resolved cache options', () => { + test('refetch', async () => { + const { query, resolved } = await createTestClient( + undefined, + undefined, + undefined, + { cache: new Cache(undefined, { maxAge: Infinity }) } + ); + const resolveFn = () => { + const human = query.human({ + name: 'a', + }); + return { + name: human.name, + nFetchCalls: query.nFetchCalls, + }; }; - }; - - const data = await resolved(resolveFn); - - expect(data.name).toBe('a'); - expect(data.nFetchCalls).toBe(1); - const cachedData = await resolved(resolveFn); - - expect(cachedData.name).toBe('a'); - expect(cachedData.nFetchCalls).toBe(1); - - const refetchedData = await resolved(resolveFn, { - refetch: true, - }); - expect(refetchedData.name).toBe('a'); - expect(refetchedData.nFetchCalls).toBe(2); - }); + { + const data = await resolved(resolveFn); - test('noCache', async () => { - const { query, resolved } = await createTestClient(); + expect(data.name).toBe('a'); + expect(data.nFetchCalls).toBe(1); + } - const resolveFn = () => { - const human = query.human({ - name: 'a', - }); - return { - name: human.name, - nFetchCalls: query.nFetchCalls, - }; - }; + { + const data = await resolved(resolveFn); - const data = await resolved(resolveFn); + expect(data.name).toBe('a'); + expect(data.nFetchCalls).toBe(1); + } - expect(data.name).toBe('a'); - expect(data.nFetchCalls).toBe(1); + { + const data = await resolved(resolveFn, { refetch: true }); - const nonCachedData = await resolved(resolveFn, { - noCache: true, + expect(data.name).toBe('a'); + expect(data.nFetchCalls).toBe(2); + } }); - expect(nonCachedData.name).toBe('a'); - expect(nonCachedData.nFetchCalls).toBe(2); - - const cachedData = await resolved(resolveFn); - - expect(cachedData.name).toBe('a'); - expect(cachedData.nFetchCalls).toBe(1); - }); -}); - -describe('resolved fetch options', () => { - test('fetch options are passed to query fetcher', async () => { - expect.assertions(2); - const { resolved, query } = await createTestClient( - undefined, - (query, variables, fetchOptions) => { - expect({ query, variables, fetchOptions }).toStrictEqual({ - fetchOptions: { - mode: 'cors', - credentials: 'include', - }, - query: 'query{hello}', - variables: undefined, + test('noCache', async () => { + const { query, resolved } = await createTestClient( + undefined, + undefined, + undefined, + { cache: new Cache(undefined, { maxAge: Infinity }) } + ); + const resolveFn = () => { + const human = query.human({ + name: 'a', }); return { - data: { - hello: 'Hello World', - }, + name: human.name, + nFetchCalls: query.nFetchCalls, }; + }; + + { + const data = await resolved(resolveFn); + + expect(data.name).toBe('a'); + expect(data.nFetchCalls).toBe(1); } - ); - expect( - await resolved( - () => { - return query.hello; - }, - { - fetchOptions: { - mode: 'cors', - credentials: 'include', - }, - } - ) - ).toBe('Hello World'); - }); -}); + { + const data = await resolved(resolveFn, { noCache: true }); -describe('error handling', () => { - test('resolved single throws', async () => { - const { query, resolved } = await createTestClient(); + expect(data.name).toBe('a'); + expect(data.nFetchCalls).toBe(2); + } - await resolved( - () => { - query.throw; - }, { - retry: false, + const data = await resolved(resolveFn); + + expect(data.name).toBe('a'); + expect(data.nFetchCalls).toBe(1); } - ) - .then(() => { - throw Error("Shouldn't reach here"); - }) - .catch((err) => { - if (!(err instanceof Error)) throw Error('Incompatible error type'); - - expect(err).toEqual( - Object.assign(Error('expected error'), { - locations: [{ line: 1, column: 7 }], - path: ['throw'], - }) - ); - }); + }); }); - test('resolved multiple throws, with shorter error for production', async () => { - const { query, resolved } = await createTestClient(); + describe('resolved fetch options', () => { + test('fetch options are passed to query fetcher', async () => { + expect.assertions(2); + + const { resolved, query } = await createTestClient( + undefined, + async ({ query, variables }, fetchOptions) => { + expect({ query, variables, fetchOptions }).toStrictEqual({ + fetchOptions: { + mode: 'cors', + credentials: 'include', + }, + query: 'query{hello}', + variables: undefined, + }); + return { + data: { + hello: 'Hello World', + }, + }; + } + ); - const prevProcessEnv = process.env.NODE_ENV; + expect( + await resolved( + () => { + return query.hello; + }, + { + fetchOptions: { + mode: 'cors', + credentials: 'include', + }, + } + ) + ).toBe('Hello World'); + }); + }); + + describe('error handling', () => { + test('resolved single throws', async () => { + const { query, resolved } = await createTestClient(); - try { await resolved( () => { query.throw; - query.throw2; }, { retry: false, @@ -318,9 +476,76 @@ describe('error handling', () => { if (!(err instanceof Error)) throw Error('Incompatible error type'); expect(err).toEqual( - Object.assign( - Error('GraphQL Errors, please check .graphQLErrors property'), - { + Object.assign(Error('expected error'), { + locations: [{ line: 1, column: 7 }], + path: ['throw'], + }) + ); + }); + }); + + test('resolved multiple throws, with shorter error for production', async () => { + const { query, resolved } = await createTestClient(); + + const prevProcessEnv = process.env.NODE_ENV; + + try { + await resolved( + () => { + query.throw; + query.throw2; + }, + { + retry: false, + } + ) + .then(() => { + throw Error("Shouldn't reach here"); + }) + .catch((err) => { + if (!(err instanceof Error)) throw Error('Incompatible error type'); + + expect(err).toEqual( + Object.assign( + Error('GraphQL Errors, please check .graphQLErrors property'), + { + errors: [ + { + message: 'expected error', + locations: [{ line: 1, column: 7 }], + path: ['throw'], + }, + { + message: 'expected error 2', + locations: [{ line: 1, column: 13 }], + path: ['throw2'], + }, + ], + } + ) + ); + }); + + process.env.NODE_ENV = 'production'; + + await resolved( + () => { + query.throw; + query.throw2; + }, + { + noCache: true, + retry: false, + } + ) + .then(() => { + throw Error("Shouldn't reach here"); + }) + .catch((err) => { + if (!(err instanceof Error)) throw Error('Incompatible error type'); + + expect(err).toEqual( + Object.assign(Error('GraphQL Errors'), { errors: [ { message: 'expected error', @@ -333,162 +558,96 @@ describe('error handling', () => { path: ['throw2'], }, ], - } - ) - ); - }); - - process.env.NODE_ENV = 'production'; - - await resolved( - () => { - query.throw; - query.throw2; - }, - { - noCache: true, - retry: false, - } - ) - .then(() => { - throw Error("Shouldn't reach here"); - }) - .catch((err) => { - if (!(err instanceof Error)) throw Error('Incompatible error type'); - - expect(err).toEqual( - Object.assign(Error('GraphQL Errors'), { - errors: [ - { - message: 'expected error', - locations: [{ line: 1, column: 7 }], - path: ['throw'], - }, - { - message: 'expected error 2', - locations: [{ line: 1, column: 13 }], - path: ['throw2'], - }, - ], - }) - ); - }); - } finally { - process.env.NODE_ENV = prevProcessEnv; - } - }); - - test('scheduler logs to console', async () => { - const { query } = await createTestClient(undefined, undefined, undefined, { - retry: false, + }) + ); + }); + } finally { + process.env.NODE_ENV = prevProcessEnv; + } }); - const logErrorSpy = jest - .spyOn(global.console, 'error') - .mockImplementation((message) => { - expect(message).toEqual( - Object.assign(Error('expected error'), { - locations: [{ line: 1, column: 7 }], - path: ['throw'], - }) - ); + test('network error', async () => { + const { query, resolved } = await createTestClient(undefined, () => { + throw Error('expected network error'); }); - try { - query.throw; + try { + await resolved(() => query.hello); - await waitForExpect( - () => { - expect(logErrorSpy).toBeCalledTimes(1); - }, - 100, - 5 - ); - } finally { - logErrorSpy.mockRestore(); - } - }); - - test('network error', async () => { - const { query, resolved } = await createTestClient(undefined, () => { - throw Error('expected network error'); + throw Error("shouldn't reach here"); + } catch (err: any) { + expect(err.message).toBe('expected network error'); + } }); - try { - await resolved(() => query.hello); + test('unexpected network error type', async () => { + const { query, resolved } = await createTestClient(undefined, () => { + throw 12345; + }); - throw Error("shouldn't reach here"); - } catch (err: any) { - expect(err.message).toBe('expected network error'); - } - }); + try { + await resolved(() => query.hello); - test('not expect network error type', async () => { - const { query, resolved } = await createTestClient(undefined, () => { - throw 12345; + throw Error("shouldn't reach here"); + } catch (err) { + expect(err).toStrictEqual(GQtyError.create(12345)); + } }); - - try { - await resolved(() => query.hello); - - throw Error("shouldn't reach here"); - } catch (err) { - expect(err).toStrictEqual(GQtyError.create(12345)); - } }); -}); -describe('mutation', () => { - test('mutation usage', async () => { - const { mutation, resolved } = await createTestClient(); + describe('mutation', () => { + test('mutation usage', async () => { + const { mutation, resolved } = await createTestClient(); - const data = await resolved(() => { - return mutation.sendNotification({ - message: 'hello world', + const data = await resolved(() => { + return mutation.sendNotification({ + message: 'hello world', + }); }); - }); - expect(data).toBe(true); + expect(data).toBe(true); + }); }); -}); -describe('custom query fetcher', () => { - test('empty data', async () => { - const { query, resolved } = await createTestClient( - undefined, - (_query, _variables) => { - return {}; - } - ); + describe('custom query fetcher', () => { + test('empty data', async () => { + const { query, resolved } = await createTestClient( + undefined, + async (_query, _variables) => ({}) + ); - const data = await resolved(() => { - return query.hello; + const data = await resolved(() => { + return query.hello; + }); + expect(data).toBe(undefined); }); - expect(data).toBe(undefined); }); -}); - -describe('buildAndFetchSelections', () => { - test('works with included cache', async () => { - const { buildAndFetchSelections, cache } = await createTestClient(); - const QuerySelection = new Selection({ - key: 'query', - id: 0, - }); + describe('fetchSelections', () => { + test('works with included cache', async () => { + const { + schema: { query }, + } = await createTestClient(); - const HelloSelection = new Selection({ - key: 'hello', - prevSelection: QuerySelection, - id: 1, - }); + const cache = $meta(query)?.context.cache!; - await buildAndFetchSelections([HelloSelection], 'query'); + await fetchSelections( + new Set([Selection.createRoot('query').getChild('hello')]), + { + cache, + fetchOptions: { + fetcher: async () => ({ data: { hello: 'hello world' } }), + }, + } + ).then((results) => { + updateCaches(results, [cache], { skipNotify: false }); + }); - expect(cache).toStrictEqual({ - query: { - hello: 'hello world', - }, + expect(cache.toJSON()).toMatchObject({ + query: { + hello: 'hello world', + }, + }); }); }); }); diff --git a/packages/gqty/test/events.test.ts b/packages/gqty/test/events.test.ts deleted file mode 100644 index f6f07b0c3..000000000 --- a/packages/gqty/test/events.test.ts +++ /dev/null @@ -1,117 +0,0 @@ -import { GraphQLError, stripIgnoredCharacters } from 'graphql'; - -import { GQtyError, Selection, SelectionType } from '../src'; -import type { CacheChangeEventData, FetchEventData } from '../src/Events'; -import { createTestClient } from './utils'; - -describe('fetch events', () => { - test('successful query', async () => { - const { eventHandler, query, resolved, cache } = await createTestClient(); - - const onFetchData = jest - .fn() - .mockImplementation(async (dataPromise: Promise) => { - const { - executionResult, - cacheSnapshot, - query, - selections, - type, - variables, - error, - } = await dataPromise; - - expect(cache).toStrictEqual(cacheSnapshot); - - expect(stripIgnoredCharacters(query)).toBe('query{hello}'); - - expect(selections.length).toBe(1); - expect(selections[0].key).toBe('hello'); - expect(selections[0].type).toBe(SelectionType.Query); - expect(type).toBe('query'); - expect(variables).toBe(undefined); - expect(error).toBe(undefined); - - expect(executionResult?.data?.hello).toBe('hello world'); - }); - - const unsubscribe = eventHandler.onFetchSubscribe(onFetchData); - - try { - const dataPromise = resolved(() => { - return query.hello; - }); - expect(onFetchData).toBeCalledTimes(1); - - const data = await dataPromise; - - expect(data).toBe('hello world'); - } finally { - unsubscribe(); - } - }); - - test('error query', async () => { - const { eventHandler, query, resolved } = await createTestClient(); - - const onFetchData = jest - .fn() - .mockImplementation(async (dataPromise: Promise) => { - const { executionResult, error, query } = await dataPromise; - - expect(executionResult?.data).toBe(undefined); - - expect(error).toStrictEqual( - new GQtyError('expected error', { - graphQLErrors: [new GraphQLError('expected error')], - }) - ); - - expect(stripIgnoredCharacters(query)).toBe('query{throw}'); - }); - - const unsubscribe = eventHandler.onFetchSubscribe(onFetchData); - - try { - const dataPromise = resolved(() => { - return query.throw; - }); - expect(onFetchData).toBeCalledTimes(1); - - const data = await dataPromise.catch(() => {}); - - expect(data).toBe(undefined); - } finally { - unsubscribe(); - } - }); -}); - -describe('cache changes events', () => { - test('on cache change', async () => { - const { eventHandler } = await createTestClient(); - - const selectionA = new Selection({ - key: 'asd', - id: 0, - }); - const onCacheChangeFn = jest - .fn() - .mockImplementation(async ({ data, selection }: CacheChangeEventData) => { - expect(data).toBe(123); - expect(selection).toBe(selectionA); - }); - - const unsubscribe = eventHandler.onCacheChangeSubscribe(onCacheChangeFn); - - try { - eventHandler.sendCacheChange({ - selection: selectionA, - data: 123, - }); - expect(onCacheChangeFn).toBeCalledTimes(1); - } finally { - unsubscribe(); - } - }); -}); diff --git a/packages/gqty/test/helpers.test.ts b/packages/gqty/test/helpers.test.ts index faaa42576..158574ee9 100644 --- a/packages/gqty/test/helpers.test.ts +++ b/packages/gqty/test/helpers.test.ts @@ -1,4 +1,5 @@ import { + Cache, castNotSkeleton, castNotSkeletonDeep, getArrayFields, @@ -6,10 +7,11 @@ import { prepass, selectFields, } from '../src'; +import { $meta } from '../src/Accessor'; import { createTestClient, expectConsoleWarn } from './utils'; describe('selectFields', () => { - test('recursive *, depth 1', async () => { + it('recursive *, depth 1', async () => { const { query, resolved } = await createTestClient(); const data = await resolved(() => { @@ -49,7 +51,7 @@ describe('selectFields', () => { `); }); - test('recursive *, depth 2', async () => { + it('recursive *, depth 2', async () => { const { query, resolved } = await createTestClient(); const data = await resolved(() => { @@ -86,7 +88,7 @@ describe('selectFields', () => { null, ], "father": null, - "id": "2", + "id": "4", "name": "default", "node": [ null, @@ -135,7 +137,7 @@ describe('selectFields', () => { null, ], "father": null, - "id": "2", + "id": "4", "name": "default", "node": [ null, @@ -160,7 +162,7 @@ describe('selectFields', () => { null, ], "father": null, - "id": "2", + "id": "4", "name": "default", "node": [ null, @@ -1119,27 +1121,21 @@ describe('selectFields', () => { describe('refetch function', () => { test('refetch works', async () => { - const { query, refetch, scheduler } = await createTestClient(); + const { query, refetch, resolved } = await createTestClient(); const a = query.hello; expect(a).toBe(undefined); - expect(scheduler.resolving).toBeTruthy(); - - await scheduler.resolving!.promise; + await resolved(() => query.hello); const a2 = query.hello; - expect(scheduler.resolving).toBe(null); - expect(a2).toBe('hello world'); - const a3Promise = refetch(() => query.hello); - - expect(scheduler.resolving).toBeTruthy(); + await expect(refetch(() => query.hello)).resolves.toBe('hello world'); - const a3 = await a3Promise; + const a3 = query.hello; expect(a3).toBe(a2); }); @@ -1177,7 +1173,12 @@ describe('refetch function', () => { }); test('refetch proxy selections', async () => { - const { query, resolved, refetch, cache } = await createTestClient(); + const { + query, + resolved, + refetch, + schema: cache, + } = await createTestClient(); const time1 = await resolved(() => query.time); @@ -1236,7 +1237,7 @@ describe('refetch function', () => { test('refetch proxy selections with invalid proxy', async () => { const spy = jest.spyOn(console, 'warn').mockImplementation((message) => { - expect(message).toBe('gqty: Invalid proxy to refetch!'); + expect(message).toBe('[gqty] Invalid proxy to refetch!'); }); const prevNODE_ENV = process.env.NODE_ENV; @@ -1264,25 +1265,27 @@ describe('refetch function', () => { describe('get fields', () => { test('getFields works', async () => { - const { query, scheduler, accessorCache } = await createTestClient(); + const { resolved, query } = await createTestClient( + undefined, + undefined, + undefined, + { cache: new Cache(undefined, { normalization: false }) } + ); - const humanProxy = getFields(query.human(), 'name'); + await resolved(() => { + const humanProxy = getFields(query.human(), 'name', 'id'); - expect(accessorCache.isProxy(humanProxy)).toBe(true); + expect($meta(humanProxy)).toBeDefined(); + }); - await scheduler.resolving!.promise; + const humanProxy = query.human(); expect(humanProxy.id).toBe('1'); - expect(humanProxy.name).toBe('default'); - const human2 = query.human({ - name: 'other', - }); - - getFields(human2); + await resolved(() => getFields(query.human({ name: 'other' }))); - await scheduler.resolving!.promise; + const human2 = query.human({ name: 'other' }); expect(JSON.stringify(human2)).toMatchInlineSnapshot( `"{"__typename":"Human","id":"2","name":"other"}"` @@ -1292,15 +1295,15 @@ describe('get fields', () => { }); test('getArrayFields works', async () => { - const { query, scheduler, accessorCache } = await createTestClient(); + const { resolved, query } = await createTestClient(); const dogsArrayProxy = getArrayFields(query.dogs, 'name'); - expect(accessorCache.isProxy(dogsArrayProxy)).toBe(true); + expect($meta(dogsArrayProxy)).toBeDefined(); - await scheduler.resolving!.promise; - - expect(query.dogs.map((v) => v.name).join(',')).toBe('a,b'); + await expect( + resolved(() => query.dogs.map((v) => v.name).join(',')) + ).resolves.toBe('a,b'); expect(getArrayFields(null)).toBe(null); @@ -1315,13 +1318,16 @@ describe('get fields', () => { describe('prefetch', () => { test('returns promise only data not found', async () => { - const { prefetch } = await createTestClient(); + const { prefetch } = await createTestClient( + undefined, + undefined, + undefined, + { cache: new Cache(undefined, { maxAge: 100 }) } + ); - const resultPromise = prefetch((query) => { - return query.time; - }); + const resultPromise = prefetch((query) => query.time); - expect(resultPromise instanceof Promise).toBeTruthy(); + expect(resultPromise).toBeInstanceOf(Promise); const result = await resultPromise; expect(typeof result).toBe('string'); diff --git a/packages/gqty/test/interceptor.test.ts b/packages/gqty/test/interceptor.test.ts deleted file mode 100644 index 599dbfe85..000000000 --- a/packages/gqty/test/interceptor.test.ts +++ /dev/null @@ -1,170 +0,0 @@ -import { createInterceptorManager, Interceptor } from '../src/Interceptor'; -import { Selection } from '../src/Selection'; - -describe('base interceptor', () => { - test('fetchSelections', async () => { - const interceptor = new Interceptor(); - - const selectionA = new Selection({ - key: 'a', - id: 0, - }); - - const interceptPromiseA = new Promise((resolve, reject) => { - const timeout = setTimeout( - reject, - 500, - Error("Intercept listener didn't work!") - ); - - interceptor.selectionAddListeners.add((selectionArg) => { - expect(selectionArg).toBe(selectionA); - clearTimeout(timeout); - resolve(); - }); - }); - - interceptor.addSelection(selectionA); - - await interceptPromiseA; - - expect(interceptor.fetchSelections.has(selectionA)).toBe(true); - - const selectionB = new Selection({ - key: 'b', - id: 1, - }); - - interceptor.listening = false; - - const interceptPromiseB = new Promise((resolve, reject) => { - const timeout = setTimeout(resolve, 500); - - interceptor.selectionAddListeners.add((_selectionArg) => { - clearTimeout(timeout); - reject(Error("It shouldn't have received the selection it!")); - }); - }); - - interceptor.addSelection(selectionB); - - await interceptPromiseB; - - expect(interceptor.fetchSelections.has(selectionB)).toBe(false); - - interceptor.removeSelections([selectionA]); - - expect(interceptor.fetchSelections.has(selectionA)).toBe(false); - }); - - test('selections cache events', async () => { - const interceptor = new Interceptor(); - - const selectionA = new Selection({ - key: 'a', - id: 0, - }); - - const interceptPromiseA = new Promise((resolve, reject) => { - const timeout = setTimeout( - reject, - 500, - Error("Intercept listener didn't work!") - ); - - interceptor.selectionCacheListeners.add((selectionArg) => { - expect(selectionArg).toBe(selectionA); - clearTimeout(timeout); - resolve(); - }); - }); - - interceptor.addSelectionCache(selectionA); - - await interceptPromiseA; - - expect(interceptor.fetchSelections.has(selectionA)).toBe(false); - - const selectionB = new Selection({ - key: 'b', - id: 1, - }); - - interceptor.listening = false; - - const interceptPromiseB = new Promise((resolve, reject) => { - const timeout = setTimeout(resolve, 500); - - interceptor.selectionCacheListeners.add((_selectionArg) => { - clearTimeout(timeout); - reject(Error("It shouldn't have received the selection it!")); - }); - }); - - interceptor.addSelectionCache(selectionB); - - await interceptPromiseB; - - expect(interceptor.fetchSelections.has(selectionB)).toBe(false); - - interceptor.removeSelections([selectionA]); - - expect(interceptor.fetchSelections.has(selectionA)).toBe(false); - }); -}); - -describe('interceptorManager', () => { - test('works', () => { - const manager = createInterceptorManager(); - - const tempInterceptor = manager.createInterceptor(); - - const selectionA = new Selection({ - key: 'a', - id: 0, - }); - - manager.addSelection(selectionA); - - expect(tempInterceptor.fetchSelections.has(selectionA)).toBe(true); - expect(manager.globalInterceptor.fetchSelections.has(selectionA)).toBe( - true - ); - - const selectionB = new Selection({ - key: 'b', - id: 1, - }); - - manager.removeInterceptor(tempInterceptor); - manager.addSelection(selectionB); - - expect(tempInterceptor.fetchSelections.has(selectionB)).toBe(false); - expect(manager.globalInterceptor.fetchSelections.has(selectionB)).toBe( - true - ); - - const selectionC = new Selection({ - key: 'c', - id: 0, - }); - - manager.addSelections([selectionC]); - - expect(manager.globalInterceptor.fetchSelections.has(selectionC)).toBe( - true - ); - - manager.removeSelections([selectionA, selectionB, selectionC]); - - expect(manager.globalInterceptor.fetchSelections.has(selectionA)).toBe( - false - ); - expect(manager.globalInterceptor.fetchSelections.has(selectionB)).toBe( - false - ); - expect(manager.globalInterceptor.fetchSelections.has(selectionC)).toBe( - false - ); - }); -}); diff --git a/packages/gqty/test/interfaces-unions.test.ts b/packages/gqty/test/interfaces-unions.test.ts index f92813bf8..e93f1e6f5 100644 --- a/packages/gqty/test/interfaces-unions.test.ts +++ b/packages/gqty/test/interfaces-unions.test.ts @@ -1,10 +1,11 @@ -import { createTestClient, TestClient } from './utils'; +import { Cache } from 'gqty'; +import { createTestClient } from './utils'; const testClientPromise = createTestClient(undefined, undefined, undefined, { - normalization: true, + cache: new Cache(undefined, { normalization: true }), }); -let testClient: TestClient; +let testClient: Awaited; beforeAll(async () => { testClient = await testClientPromise; }); @@ -123,10 +124,10 @@ describe('interfaces and unions', () => { expect(queries).toMatchInlineSnapshot(` [ { - "query": "query($type1:NodeType!){node_6c4a1_78028:node(type:$type1){__typename id ...on A{id a}...on B{id b}}}", + "query": "query($a18aa4:NodeType!){a0b55f:node(type:$a18aa4){__typename ...on A{a}...on B{b}id}}", "result": { "data": { - "node_6c4a1_78028": { + "a0b55f": { "__typename": "A", "a": 1, "id": "1", @@ -134,7 +135,7 @@ describe('interfaces and unions', () => { }, }, "variables": { - "type1": "A", + "a18aa4": "A", }, }, ] @@ -148,7 +149,12 @@ describe('interfaces and unions', () => { }); test('deep', async () => { - const { resolved, query, queries } = await createTestClient(); + const { resolved, query, queries } = await createTestClient( + undefined, + undefined, + undefined, + { cache: new Cache(undefined, { normalization: true }) } + ); const nodeResult = await resolved(() => { const nodeA = query.node({ @@ -181,10 +187,10 @@ describe('interfaces and unions', () => { expect(queries).toMatchInlineSnapshot(` [ { - "query": "query($type1:NodeType!){node_6c4a1_78028:node(type:$type1){__typename id ...on A{id a node{__typename id ...on A{id node{__typename id ...on C{id node{__typename id ...on A{id}}}}}}}...on B{id b}}}", + "query": "query($a18aa4:NodeType!){a0b55f:node(type:$a18aa4){__typename ...on A{a node{__typename ...on A{id node{__typename ...on C{node{__typename ...on A{id}id}}id}}id}}...on B{b}id}}", "result": { "data": { - "node_6c4a1_78028": { + "a0b55f": { "__typename": "A", "a": 1, "id": "1", @@ -200,7 +206,7 @@ describe('interfaces and unions', () => { }, }, "variables": { - "type1": "A", + "a18aa4": "A", }, }, ] diff --git a/packages/gqty/test/persistence.test.ts b/packages/gqty/test/persistence.test.ts index e4ed614ee..244bcf086 100644 --- a/packages/gqty/test/persistence.test.ts +++ b/packages/gqty/test/persistence.test.ts @@ -1,11 +1,117 @@ -import { createTestClient, sleep } from './utils'; +import { Cache } from '../src/Cache'; +import { defaultNormalizationHandler } from '../src/Cache/normalization'; +import { + exportCacheSnapshot, + importCacheSnapshot, +} from '../src/Cache/persistence'; +import { createTestClient, expectConsoleWarn, sleep } from './utils'; + +describe('Cache#persistence', () => { + it('should restore circular normalied snapshot', () => { + const cache = importCacheSnapshot( + { + normalized: { + 'A:1': { __typename: 'A', id: '1', b: { __ref: 'B:1' } }, + 'B:1': { __typename: 'B', id: '1', a: { __ref: 'A:1' } }, + }, + query: { + a: { __ref: 'A:1' }, + b: { c: 1 }, + }, + }, + defaultNormalizationHandler + ); + + expect(cache).toMatchInlineSnapshot(` + { + "normalizedObjects": { + "A:1": { + "__typename": "A", + "b": { + "__typename": "B", + "a": [Circular], + "id": "1", + }, + "id": "1", + }, + "B:1": { + "__typename": "B", + "a": { + "__typename": "A", + "b": [Circular], + "id": "1", + }, + "id": "1", + }, + }, + "query": { + "a": { + "__typename": "A", + "b": { + "__typename": "B", + "a": [Circular], + "id": "1", + }, + "id": "1", + }, + "b": { + "c": 1, + }, + }, + } + `); + + const snapshot = exportCacheSnapshot(cache, defaultNormalizationHandler); + + expect(snapshot).toMatchInlineSnapshot(` + { + "normalized": { + "A:1": { + "__typename": "A", + "b": { + "__ref": "B:1", + }, + "id": "1", + }, + "B:1": { + "__typename": "B", + "a": { + "__ref": "A:1", + }, + "id": "1", + }, + }, + "query": { + "a": { + "__ref": "A:1", + }, + "b": { + "c": 1, + }, + }, + } + `); + }); + + it('should persist data snapshots', () => { + const snapshot = { query: { __typename: 'a', id: 1 } }; + + const normie = new Cache(snapshot, { normalization: true }); + expect(JSON.stringify(normie)).toMatchInlineSnapshot( + `"{"query":{"__ref":"a:1"},"normalized":{"a:1":{"__typename":"a","id":1}}}"` + ); + + const hippie = new Cache(snapshot); + expect(JSON.stringify(hippie)).toMatchInlineSnapshot( + `"{"query":{"__typename":"a","id":1}}"` + ); + }); +}); test('basic functionality', async () => { const client1 = await createTestClient(); - expect(client1.backupPersistence()).toMatchInlineSnapshot( - `"{"cache":{},"selections":[[],"v1"]}"` - ); + expect(client1.persist()).toStrictEqual({}); await client1.resolved( () => @@ -14,29 +120,16 @@ test('basic functionality', async () => { }).name ); - const dataBackup1 = client1.backupPersistence(); + const dataBackup1 = client1.persist(); - expect(dataBackup1).toMatchInlineSnapshot( - `"{"cache":{"query":{"human_b8c92_a6118":{"__typename":"Human","id":"1","name":"asd"}}},"selections":[[],"v1"]}"` + expect(JSON.stringify(dataBackup1)).toMatchInlineSnapshot( + `"{"query":{"a7b306":{"__typename":"Human","id":"1","name":"asd"}}}"` ); const client2 = await createTestClient(); - expect(client2.restorePersistence(dataBackup1)).toBe(true); - - expect(client2.cache).toMatchInlineSnapshot(` - { - "query": { - "human_b8c92_a6118": { - "__typename": "Human", - "id": "1", - "name": "asd", - }, - }, - } - `); - - expect(client2.backupPersistence()).toBe(dataBackup1); + expect(client2.restore(dataBackup1)).toBe(true); + expect(client2.persist()).toStrictEqual(dataBackup1); expect( client1.query.human({ @@ -63,7 +156,7 @@ test('basic functionality', async () => { ).toBe('1'); await client2 - .restorePersistence(async () => { + .restoreAsync(async () => { await sleep(200); throw Error(); }) @@ -72,7 +165,7 @@ test('basic functionality', async () => { }); await client2 - .restorePersistence(async () => { + .restoreAsync(async () => { await sleep(200); return dataBackup1; }) @@ -84,9 +177,31 @@ test('basic functionality', async () => { test('version check', async () => { const client1 = await createTestClient(); - const emptyPersistenceV1 = client1.backupPersistence('v1'); - expect(emptyPersistenceV1).toMatchInlineSnapshot( - `"{"version":"v1","cache":{},"selections":[[],"v1"]}"` + expectConsoleWarn((n, message) => { + switch (n) { + case 1: + expect(message).toMatchInlineSnapshot( + `"[GQty] Cache version mismatch, ignored."` + ); + break; + case 2: + expect(message).toMatchInlineSnapshot( + `"[GQty] Cache version mismatch, ignored."` + ); + break; + case 3: + expect(message).toMatchInlineSnapshot( + `"[GQty] Cache version mismatch, ignored."` + ); + break; + default: + throw Error('Unexpected warn: ' + message); + } + }); + + const emptyPersistenceV1 = client1.persist('v1'); + expect(JSON.stringify(emptyPersistenceV1)).toMatchInlineSnapshot( + `"{"version":"v1"}"` ); await client1.resolved( @@ -102,41 +217,39 @@ test('version check', async () => { }).name ).toBe('asd'); - const cacheBackupv1 = client1.backupPersistence('v1'); + const cacheBackupv1 = client1.persist('v1'); - expect(cacheBackupv1).toMatchInlineSnapshot( - `"{"version":"v1","cache":{"query":{"human_b8c92_a6118":{"__typename":"Human","id":"1","name":"asd"}}},"selections":[[],"v1"]}"` + expect(JSON.stringify(cacheBackupv1)).toMatchInlineSnapshot( + `"{"query":{"a7b306":{"__typename":"Human","id":"1","name":"asd"}},"version":"v1"}"` ); const client2 = await createTestClient(); - const emptyPersistenceV2 = client2.backupPersistence('v2'); + const emptyPersistenceV2 = client2.persist('v2'); - expect(emptyPersistenceV2).toMatchInlineSnapshot( - `"{"version":"v2","cache":{},"selections":[[],"v1"]}"` + expect(JSON.stringify(emptyPersistenceV2)).toMatchInlineSnapshot( + `"{"version":"v2"}"` ); - expect(client2.restorePersistence(cacheBackupv1, 'v2')).toBe(false); + expect(client2.restore(cacheBackupv1, 'v2')).toBe(false); - expect(client2.backupPersistence('v2')).toBe(emptyPersistenceV2); + expect(client2.persist('v2')).toStrictEqual(emptyPersistenceV2); - const wrongBackupVersion = client2.backupPersistence(123 as any); + const wrongBackupVersion = client2.persist(123 as any); - expect(wrongBackupVersion).toMatchInlineSnapshot( - `"{"version":123,"cache":{},"selections":[[],"v1"]}"` + expect(JSON.stringify(wrongBackupVersion)).toMatchInlineSnapshot( + `"{"version":123}"` ); - expect(client2.restorePersistence(wrongBackupVersion, 123 as any)).toBe( - false - ); + expect(client2.restore(wrongBackupVersion, 123 as any)).toBe(false); - expect(client2.restorePersistence(emptyPersistenceV2)).toBe(false); + expect(client2.restore(emptyPersistenceV2)).toBe(false); - expect(client2.restorePersistence('[]')).toBe(false); + expect(client2.restore('[]' as any)).toBe(false); - expect(client2.backupPersistence('v2')).toBe(emptyPersistenceV2); + expect(client2.persist('v2')).toStrictEqual(emptyPersistenceV2); - expect(client2.restorePersistence(emptyPersistenceV2, 'v2')).toBe(true); + expect(client2.restore(emptyPersistenceV2, 'v2')).toBe(true); - expect(client2.backupPersistence('v2')).toBe(emptyPersistenceV2); + expect(client2.persist('v2')).toStrictEqual(emptyPersistenceV2); }); diff --git a/packages/gqty/test/playground.test.ts b/packages/gqty/test/playground.test.ts index 53252ca47..4c136fab0 100644 --- a/packages/gqty/test/playground.test.ts +++ b/packages/gqty/test/playground.test.ts @@ -1,14 +1,20 @@ -import { selectFields } from '../src'; +import { Cache, selectFields } from '../src'; +import { assignSelections, setCache } from '../src/Accessor'; import { createTestClient } from './utils'; -test('ok', () => { +it('ok', () => { expect(1).toBe(1); }); -describe.skip('playground', () => { +describe('playground', () => { test('cache manipulation', async () => { - const { query, scheduler, resolved, setCache, cache } = - await createTestClient(); + const { + query, + resolved, + schema: cache, + } = await createTestClient(undefined, undefined, undefined, { + cache: new Cache(undefined, { normalization: true }), + }); await resolved(() => query.human().sons.map((v) => selectFields(v))); @@ -21,83 +27,74 @@ describe.skip('playground', () => { }); expect(humanA.name).toBe('asd'); - expect(scheduler.resolving).toBe(null); - setCache( - query.human, - { name: 'zxc' }, - { - name: 'tyu', - } - ); + setCache(query.human({ name: 'zxc' }), { + name: 'tyu', + }); const humanB = query.human({ name: 'zxc', }); - expect(scheduler.resolving).toBe(null); - expect(humanB.name).toBe('tyu'); - expect(scheduler.resolving).toBe(null); - query.human().sons = []; const xd = (query.hello = 'XDXD'); expect(xd).toBe('XDXD'); - expect(scheduler.resolving).toBe(null); - const hello = query.hello; expect(hello).toBe('XDXD'); expect(query.human().sons).toEqual([]); - expect(scheduler.resolving).toBe(null); - - expect(cache).toStrictEqual({ - query: { - hello: 'XDXD', - human0: { - sons: [], - }, - human1: { - name: 'asd', - }, - human2: { - name: 'tyu', - }, - }, - }); + expect(JSON.stringify(cache)).toMatchInlineSnapshot( + `"{"query":{"human":{"__ref":"Human:1"},"hello":"XDXD"},"normalized":{"Human:1":{"__typename":"Human","dogs":[{"__typename":"Dog"},{"__typename":"Dog"}],"father":{"__typename":"Human"},"id":"1","name":"default","node":[{"__typename":"A"},{"__typename":"B"},{"__typename":"C"}],"nullFather":null,"sons":[],"union":[{"__typename":"A"},{"__typename":"B"},{"__typename":"C"}]}}}"` + ); setCache(query, { hello: 'ppp', }); - expect(cache).toStrictEqual({ - query: { - hello: 'ppp', - }, - }); + expect(JSON.stringify(query)).toMatchInlineSnapshot(`"{"hello":"ppp"}"`); }); test('assignSelections', async () => { - const { assignSelections, query, scheduler, cache, mutate, setCache } = - await createTestClient(); + const { + query, + schema: cache, + resolve, + mutate, + } = await createTestClient(undefined, undefined, undefined, { + cache: new Cache(undefined, { normalization: true }), + }); + + await resolve(({ query }) => query.human({ name: 'asd' }).name); const human = query.human({ name: 'asd', }); - human.name; - - await scheduler.resolving!.promise; - expect(human.name).toBe('asd'); - expect(cache).toStrictEqual({ query: { human0: { name: 'asd' } } }); + expect(cache).toMatchInlineSnapshot(` + { + "normalized": { + "Human:1": { + "__typename": "Human", + "id": "1", + "name": "asd", + }, + }, + "query": { + "a7b306": { + "__ref": "Human:1", + }, + }, + } + `); const humanMutation = await mutate((mutation) => { const humanMutation = mutation.humanMutation({ @@ -109,11 +106,6 @@ describe.skip('playground', () => { setCache(human, humanMutation); - expect(cache).toStrictEqual({ - query: { human0: { name: 'zxc' } }, - mutation: { humanMutation0: { name: 'zxc' } }, - }); - expect(human.name).toBe('zxc'); expect(humanMutation.name).toBe('zxc'); }); diff --git a/packages/gqty/test/scheduler.test.ts b/packages/gqty/test/scheduler.test.ts deleted file mode 100644 index 8cb84829d..000000000 --- a/packages/gqty/test/scheduler.test.ts +++ /dev/null @@ -1,300 +0,0 @@ -import { waitForExpect } from 'test-utils'; - -import { GQtyError } from '../src'; -import { createInterceptorManager } from '../src/Interceptor'; -import { createScheduler } from '../src/Scheduler'; -import { Selection } from '../src/Selection'; -import { createDeferredPromise } from '../src/Utils'; -import { createTestClient } from './utils'; - -test('scheduler works with globalInterceptor', async () => { - const interceptorManager = createInterceptorManager(); - - const resolveAllSelections = jest.fn(() => { - return new Promise((resolve) => setTimeout(resolve, 500)); - }); - - createScheduler(interceptorManager, resolveAllSelections, 10); - - const selection = new Selection({ - key: 'a', - id: 0, - }); - - interceptorManager.addSelection(selection); - - expect( - interceptorManager.globalInterceptor.fetchSelections.has(selection) - ).toBe(true); - - await waitForExpect( - () => { - expect(resolveAllSelections).toBeCalledTimes(1); - }, - 15, - 1 - ); - - interceptorManager.addSelection( - new Selection({ - key: 'b', - id: 1, - }) - ); - - await waitForExpect( - () => { - expect(resolveAllSelections).toBeCalledTimes(2); - }, - 15, - 1 - ); -}); - -test('scheduler resolve subscriptions', async () => { - const interceptorManager = createInterceptorManager(); - - const fetchedSelections = new Set(); - - let fetchCalls = 0; - - const ExpectedError = Error('expected'); - - const resolveAllSelections = jest.fn(async () => { - fetchCalls += 1; - - if (fetchCalls >= 3) throw ExpectedError; - - interceptorManager.globalInterceptor.fetchSelections.forEach((s) => - fetchedSelections.add(s) - ); - interceptorManager.globalInterceptor.removeSelections( - interceptorManager.globalInterceptor.fetchSelections - ); - }); - - const scheduler = createScheduler( - interceptorManager, - resolveAllSelections, - 10 - ); - - let subscriptionCalls = 0; - const subscribePromise = new Promise<() => void>((resolve, reject) => { - const unsubscribe = scheduler.subscribeResolve((promise) => { - subscriptionCalls += 1; - promise.then(() => { - resolve(unsubscribe); - }, reject); - }); - }); - expect(subscriptionCalls).toBe(0); - expect(scheduler.resolving).toBe(null); - - const selectionA = new Selection({ - key: 'a', - id: 0, - }); - interceptorManager.globalInterceptor.addSelection(selectionA); - expect(scheduler.resolving).toBeTruthy(); - - waitForExpect(() => { - expect(subscriptionCalls).toBe(1); - }, 5); - expect(fetchCalls).toBe(0); - - const unsubscribe = await subscribePromise; - - expect(scheduler.resolving).toBe(null); - - expect(fetchCalls).toBe(1); - - expect(fetchedSelections.has(selectionA)).toBeTruthy(); - - unsubscribe(); - - const selectionB = new Selection({ - key: 'b', - id: 1, - }); - interceptorManager.globalInterceptor.addSelection(selectionB); - - expect(subscriptionCalls).toBe(1); - - expect(fetchCalls).toBe(1); - expect(scheduler.resolving).toBeTruthy(); - await scheduler.resolving!.promise; - - expect(fetchCalls).toBe(2); - - expect(fetchedSelections.has(selectionB)).toBeTruthy(); - - const selectionC = new Selection({ - key: 'c', - id: 2, - }); - const selectionD = new Selection({ - key: 'd', - id: 3, - }); - - const spy = jest.spyOn(console, 'error').mockImplementationOnce((err) => { - expect(err).toBe(ExpectedError); - }); - - try { - interceptorManager.globalInterceptor.addSelection(selectionC); - interceptorManager.globalInterceptor.addSelection(selectionD); - - expect(scheduler.resolving).toBeTruthy(); - - const result = await scheduler.resolving!.promise; - - expect(result?.error).toBe(ExpectedError); - - expect(spy).toBeCalledTimes(1); - } finally { - spy.mockRestore(); - } -}); - -describe('retry', () => { - test('works on third try', async () => { - const { - query, - scheduler: { errors: schedulerErrors }, - } = await createTestClient(); - - const readyPromise = createDeferredPromise(); - let callNumber = 0; - - const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(); - const unsubscribe = schedulerErrors.subscribeErrors((data) => { - callNumber++; - - try { - switch (callNumber) { - case 1: { - expect('newError' in data).toBeTruthy(); - if ('newError' in data) { - expect(data.newError.message).toBe('try again, throwTry=1'); - } - break; - } - case 2: { - expect('retryPromise' in data).toBeTruthy(); - if ('retryPromise' in data) { - data.retryPromise - .then(({ error }) => { - expect(error instanceof GQtyError).toBeTruthy(); - if (error) { - expect(error.message).toBe('try again, throwTry=2'); - } - }) - .catch(readyPromise.reject); - } - break; - } - case 3: { - expect('newError' in data).toBeTruthy(); - if ('newError' in data) { - expect(data.newError.message).toBe('try again, throwTry=2'); - } - break; - } - case 4: { - expect('retryPromise' in data).toBeTruthy(); - if ('retryPromise' in data) { - data.retryPromise - .then(({ data }) => { - callNumber++; - expect(data).toEqual({ throwUntilThirdTry: true }); - readyPromise.resolve(); - }) - .catch(readyPromise.reject); - } - break; - } - case 5: { - expect('selectionsCleaned' in data).toBeTruthy(); - if ('selectionsCleaned' in data) { - expect(data.selectionsCleaned.length).toBe(1); - expect(data.selectionsCleaned[0].pathString).toBe( - 'query.throwUntilThirdTry' - ); - } - break; - } - default: - throw Error("shouldn't reach"); - } - } catch (err) { - readyPromise.reject(err); - } - }); - try { - const firstTry = query.throwUntilThirdTry; - - expect(firstTry).toBe(undefined); - - await readyPromise.promise; - expect(callNumber).toBe(6); - } finally { - consoleErrorSpy.mockRestore(); - unsubscribe(); - } - }); - - test('errors always', async () => { - const { - query, - scheduler: { errors: schedulerErrors }, - } = await createTestClient(undefined, undefined, undefined, { - retry: { - maxRetries: 3, - retryDelay: 50, - }, - }); - - const readyPromise = createDeferredPromise(); - - let callNumber = 0; - - const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(); - const unsubscribe = schedulerErrors.subscribeErrors((data) => { - const currentCallNumber = ++callNumber; - - if (callNumber % 2 === 0) { - expect('retryPromise' in data).toBeTruthy(); - if ('retryPromise' in data) { - data.retryPromise - .then(({ error }) => { - if (currentCallNumber === 6 && callNumber === 7) - readyPromise.resolve(); - - expect(error instanceof GQtyError).toBeTruthy(); - if (error) { - expect(error.message).toBe('expected error'); - } - }) - .catch(readyPromise.reject); - } - } else { - expect('newError' in data).toBeTruthy(); - if ('newError' in data) { - expect(data.newError.message).toBe('expected error'); - } - } - }); - try { - query.throw; - - await readyPromise.promise; - - expect(callNumber).toBe(7); - } finally { - unsubscribe(); - consoleErrorSpy.mockRestore(); - } - }, 10000); -}); diff --git a/packages/gqty/test/selection.test.ts b/packages/gqty/test/selection.test.ts index cb935e885..1e10f66f8 100644 --- a/packages/gqty/test/selection.test.ts +++ b/packages/gqty/test/selection.test.ts @@ -1,121 +1,112 @@ -import { SelectionType } from '../src/Selection/selection'; -import { - createSelectionManager, - separateSelectionTypes, -} from '../src/Selection/SelectionManager'; +import { buildQuery } from 'gqty/QueryBuilder'; +import { Selection } from '../src/Selection'; describe('selection creation', () => { - const manager = createSelectionManager(); - test('selection with manager and separating types', () => { - const selectionA = manager.getSelection({ - key: 'a', - type: SelectionType.Mutation, - }); + const mutationRoot = Selection.createRoot('mutation'); + const selectionA = mutationRoot.getChild('a'); - expect(selectionA.key).toBe('a'), expect(selectionA.alias).toBe(undefined); - expect(selectionA.type).toBe(SelectionType.Mutation); + expect(selectionA.key).toBe('a'); + expect(selectionA.alias).toBe(undefined); + expect(selectionA.root.key).toBe('mutation'); - expect(selectionA.args).toBe(undefined); - expect(selectionA.argTypes).toBe(undefined); - expect(selectionA.noIndexSelections).toEqual([selectionA]); + expect(selectionA.input?.values).toBe(undefined); + expect(selectionA.input?.types).toBe(undefined); + expect(selectionA.ancestry).toEqual([mutationRoot, selectionA]); - expect(selectionA.cachePath).toEqual(['a']); - expect(selectionA.pathString).toBe('a'); + expect(selectionA.cacheKeys).toEqual(['mutation', 'a']); - const selectionB = manager.getSelection({ - key: 'b', - prevSelection: selectionA, - }); + const selectionB = selectionA.getChild('b'); expect(selectionB.key).toBe('b'); - expect(selectionB.type).toBe(SelectionType.Mutation); + expect(selectionB.root.key).toBe('mutation'); - expect(selectionB.noIndexSelections).toEqual([selectionA, selectionB]); - expect(selectionB.cachePath).toEqual(['a', 'b']); - expect(selectionB.pathString).toBe('a.b'); + expect(selectionB.ancestry).toEqual([mutationRoot, selectionA, selectionB]); + expect(selectionB.cacheKeys).toEqual(['mutation', 'a', 'b']); - const selectionC = manager.getSelection({ - key: 0, - prevSelection: selectionB, - }); + const selectionC = selectionB.getChild(0); - expect(selectionC.noIndexSelections).toEqual(selectionB.noIndexSelections); + expect(selectionC.cacheKeys).toEqual(selectionB.cacheKeys); - const selectionD = manager.getSelection({ - key: 'd', - prevSelection: selectionC, - args: { - a: 1, - }, - argTypes: { - a: 'Int!', + const selectionD = selectionC.getChild('d', { + input: { + types: { a: 'Int!' }, + values: { a: 1 }, }, }); - expect(selectionD.cachePath).toEqual(['a', 'b', 0, 'd_3153c_9f89c']); - expect(selectionD.pathString).toBe('a.b.0.d_3153c_9f89c'); - expect(selectionD.alias).toBe('d_3153c_9f89c'); + expect(selectionD.ancestry.map((s) => s.alias ?? s.key)).toEqual([ + 'mutation', + 'a', + 'b', + 0, + 'a07b4', + ]); + expect(selectionD.alias).toBe('a07b4'); - const repeatSelectionD = manager.getSelection({ - key: 'd', - prevSelection: selectionC, - args: { - a: 1, - }, - argTypes: { - a: 'Int!', + const repeatSelectionD = selectionC.getChild('d', { + input: { + types: { a: 'Int!' }, + values: { a: 1 }, }, }); - expect(repeatSelectionD.cachePath).toEqual(['a', 'b', 0, 'd_3153c_9f89c']); - expect(repeatSelectionD.pathString).toBe('a.b.0.d_3153c_9f89c'); - expect(repeatSelectionD.alias).toBe('d_3153c_9f89c'); + expect(repeatSelectionD.ancestry.map((s) => s.alias ?? s.key)).toEqual([ + 'mutation', + 'a', + 'b', + 0, + 'a07b4', + ]); + expect(repeatSelectionD.alias).toBe('a07b4'); - const selectionE = manager.getSelection({ - key: 'e', - prevSelection: selectionD, - }); + const selectionE = selectionD.getChild('e'); - expect(selectionE.cachePath).toEqual(['a', 'b', 0, 'd_3153c_9f89c', 'e']); - expect(selectionE.pathString).toBe('a.b.0.d_3153c_9f89c.e'); + expect(selectionE.ancestry.map((s) => s.alias ?? s.key)).toEqual([ + 'mutation', + 'a', + 'b', + 0, + 'a07b4', + 'e', + ]); - const selectionF = manager.getSelection({ - key: 'f', - }); + const selectionF = Selection.createRoot('f'); - const selectionG = manager.getSelection({ - key: 'g', - type: SelectionType.Subscription, - }); + const selectionG = Selection.createRoot('subscription').getChild('g'); - expect(selectionF.cachePath).toEqual(['f']); - expect(selectionF.pathString).toBe('f'); + expect(selectionF.cacheKeys).toEqual(['f']); expect( - separateSelectionTypes([ - selectionA, - selectionB, - selectionC, - selectionD, - selectionE, - selectionD, - repeatSelectionD, - selectionF, - selectionG, - ]) - ).toEqual([ - [ - selectionA, - selectionB, - selectionC, - selectionD, - selectionE, - selectionD, - repeatSelectionD, - ], - [selectionF], - [selectionG], - ]); + buildQuery( + new Set([ + selectionA, + selectionB, + selectionC, + selectionD, + selectionE, + selectionD, + repeatSelectionD, + selectionF, + selectionG, + ]) + ).length + ).toEqual(3); + }); + + fit('should descend aliasLength from root', () => { + const selectionA = Selection.createRoot('a', { aliasLength: 2 }).getChild( + 'b', + { input: { types: { a: 'Int!' }, values: { a: 1 } } } + ); + + expect(selectionA.alias?.length).toBe(2); + + const selectionB = Selection.createRoot('a', { + aliasLength: Infinity, + }).getChild('b', { input: { types: { a: 'Int!' }, values: { a: 1 } } }); + + // Future proof: object-hash defaults to SHA1, check against that or above. + expect(selectionB.alias?.length).toBeGreaterThanOrEqual(40); }); }); diff --git a/packages/gqty/test/ssr.test.tsx b/packages/gqty/test/ssr.test.tsx index 777495715..a131e98b5 100644 --- a/packages/gqty/test/ssr.test.tsx +++ b/packages/gqty/test/ssr.test.tsx @@ -1,14 +1,13 @@ import React from 'react'; import { renderToString } from 'react-dom/server'; -import semver from 'semver'; import { waitForExpect } from 'test-utils'; - +import { $meta } from '../src/Accessor'; +import { GQtyError } from '../src/Error'; import { createTestClient } from './utils'; describe('server side rendering', () => { test('expected usage works', async () => { - const { hydrateCache, prepareRender, query, setCache, scheduler } = - await createTestClient(); + const { hydrateCache, prepareRender, query } = await createTestClient(); const TestComponent = () => { return ( @@ -23,15 +22,12 @@ describe('server side rendering', () => { renderToString(); }); - expect(scheduler.resolving).toBe(null); - const time0 = query.time; - expect(scheduler.resolving).toBe(null); expect(time0).toBeTruthy(); - // We simulate the difference in server-client resetting the cache - setCache(query, null); + // We simulate the difference in server-client by resetting the cache + $meta(query)!.cache.data = {}; hydrateCache({ cacheSnapshot, @@ -51,8 +47,6 @@ describe('server side rendering', () => { expect(page).toContain(time1); - expect(scheduler.resolving).toBe(null); - await waitForExpect( () => { expect(query.time).not.toBe(time1); @@ -108,35 +102,19 @@ describe('server side rendering', () => { test('invalid cache snapshot', async () => { const { hydrateCache } = await createTestClient(); - const errorSpy = jest - .spyOn(console, 'error') - .mockImplementation((message) => { - expect(message).toEqual( - SyntaxError( - semver.gt(process.version, '19.0.0') - ? `Unexpected token 'i', "invalid" is not valid JSON` - : `Unexpected token i in JSON at position 0` - ) - ); - }); - - hydrateCache({ - cacheSnapshot: 'invalid', - }); - - expect(errorSpy).toBeCalledTimes(1); - - errorSpy.mockRestore(); + expect(() => hydrateCache({ cacheSnapshot: 'invalid' })).toThrow( + new GQtyError('Unrecognized snapshot format.') + ); }); test('empty cache snapshot', async () => { - const { hydrateCache, cache } = await createTestClient(); + const { hydrateCache, schema: cache } = await createTestClient(); const cacheSnapshot1 = JSON.stringify(cache); - hydrateCache({ - cacheSnapshot: JSON.stringify({}), - }); + expect(() => hydrateCache({ cacheSnapshot: JSON.stringify({}) })).toThrow( + new GQtyError('Unrecognized snapshot format.') + ); const cacheSnapshot2 = JSON.stringify(cache); @@ -148,6 +126,6 @@ describe('server side rendering', () => { const { cacheSnapshot } = await prepareRender(() => {}); - expect(cacheSnapshot).toBe(JSON.stringify({})); + expect(cacheSnapshot).toStrictEqual([{}]); }); }); diff --git a/packages/gqty/test/subscriptions.test.ts b/packages/gqty/test/subscriptions.test.ts index bdad6742f..1ba1d41c7 100644 --- a/packages/gqty/test/subscriptions.test.ts +++ b/packages/gqty/test/subscriptions.test.ts @@ -1,47 +1,122 @@ -import { waitForExpect } from 'test-utils'; -import { createDeferredPromise } from '../src/Utils'; +import createDeferredPromise from 'p-defer'; import { createTestClient } from './utils'; -test('subscriptions with scheduler', async () => { - const { subscription, mutation, scheduler } = await createTestClient( - undefined, - undefined, - { +describe('core#resolve', () => { + it('should receive subscription data', async () => { + const { resolve } = await createTestClient(undefined, undefined, { subscriptions: true, - } - ); + }); + + const [data] = await Promise.all([ + (async () => { + return resolve(({ subscription }) => subscription.newNotification); + })(), + (async () => { + await new Promise((r) => setTimeout(r, 1000)); + await resolve(({ mutation }) => + mutation.sendNotification({ + message: 'THIS_IS_A_MESSAGE', + }) + ); + })(), + ]); + + expect(data).toStrictEqual('THIS_IS_A_MESSAGE'); + }); +}); + +describe('core#subscribe', () => { + it('should receive query changes', async () => { + const { subscribe, resolve } = await createTestClient( + undefined, + undefined, + { subscriptions: true } + ); + const receivedData: any[] = []; - subscription.newNotification; + let refetched = false; - await scheduler.resolving!.promise; + for await (const data of subscribe(({ query }) => query.nFetchCalls)) { + receivedData.push(data); - mutation.sendNotification({ - message: 'THIS_IS_A_MESSAGE', + if (!refetched) { + refetched = true; + await resolve(({ query }) => query.nFetchCalls, { + cachePolicy: 'no-cache', + }); + } else { + break; + } + } + + expect(receivedData).toStrictEqual([1, 2]); }); - await scheduler.resolving!.promise; + it('should work with mutations and subscriptions', async () => { + const { subscribe, resolve } = await createTestClient( + undefined, + undefined, + { subscriptions: true } + ); + const receivedData: any[] = []; - await waitForExpect(() => { - expect(subscription.newNotification).toBe('THIS_IS_A_MESSAGE'); - }, 1000); -}); + await Promise.all([ + (async () => { + for await (const data of subscribe( + ({ subscription }) => subscription.newNotification + )) { + receivedData.push(data); + if (receivedData.length === 2) return; + } + })(), + (async () => { + await new Promise((r) => setTimeout(r, 100)); + await resolve( + ({ mutation }) => mutation.sendNotification({ message: 'aaa' }), + { cachePolicy: 'no-cache' } + ); + await resolve( + ({ mutation }) => mutation.sendNotification({ message: 'bbb' }), + { cachePolicy: 'no-cache' } + ); + })(), + ]); -test('subscriptions with resolved', async () => { - const { resolved, subscription, mutate, subscriptionsClient } = - await createTestClient(undefined, undefined, { + expect(receivedData).toMatchObject(['aaa', 'bbb']); + }); + + it('should be abortable mid-flight', async () => { + const { subscribe } = await createTestClient(undefined, undefined, { subscriptions: true, }); - const unsubscribePromise = createDeferredPromise<() => Promise>(); + for await (const _ of subscribe( + ({ subscription }) => subscription.newNotification, + { + onSubscribe(unsubscribe) { + unsubscribe(); + }, + } + )) { + // no-op + } + }, 1000); +}); - const dataPromise = createDeferredPromise(); +describe('legacy subscriptions', () => { + test('subscriptions with resolved', async () => { + const { resolved, subscription, mutate } = await createTestClient( + undefined, + undefined, + { subscriptions: true } + ); - try { - await resolved( - () => { - return subscription.newNotification; - }, - { + const unsubscribePromise = createDeferredPromise<() => Promise>(); + const dataPromise = createDeferredPromise(); + let unsubscribe: (() => Promise) | undefined; + + try { + await resolved(() => subscription.newNotification, { onSubscription(event) { unsubscribePromise.resolve(event.unsubscribe); @@ -50,131 +125,140 @@ test('subscriptions with resolved', async () => { if (event.data) dataPromise.resolve(event.data); break; } - case 'with-errors': + case 'with-errors': { console.error(event.error); unsubscribePromise.reject(event.error); dataPromise.reject(event.error); throw event.error; + } } }, - } - ); + }); - await unsubscribePromise.promise; + await unsubscribePromise.promise; - await mutate( - (mutation) => { - return mutation.sendNotification({ - message: 'OK', - }); - }, - { - onComplete(data) { - expect(data).toBe(true); + await new Promise((r) => setTimeout(r, 10)); + + await mutate( + (mutation) => { + return mutation.sendNotification({ + message: 'OK', + }); }, - } - ); + { + onComplete(data) { + expect(data).toBe(true); + }, + } + ); - await dataPromise.promise.then((data) => expect(data).toBe('OK')); - } finally { - await Promise.allSettled([ - unsubscribePromise.promise.then((v) => v()), - subscriptionsClient?.close(), - ]); - } -}, 5000); + await dataPromise.promise.then((data) => expect(data).toBe('OK')); + } finally { + await Promise.allSettled([ + unsubscribePromise.promise.then((v) => v()), + unsubscribe?.(), + ]); + } + }, 5000); -test('multiple subscriptions with resolved', async () => { - const { resolved, subscription, mutate, subscriptionsClient } = - await createTestClient(undefined, undefined, { - subscriptions: true, - }); + test('multiple subscriptions with resolved', async () => { + const { resolved, subscription, mutate } = await createTestClient( + undefined, + undefined, + { subscriptions: true } + ); - const unsubscribePromise = createDeferredPromise<() => Promise>(); + const unsubscribePromise = createDeferredPromise(); - const dataPromise = createDeferredPromise<[string, string]>(); - let data1Done = false; - const data2Promise = createDeferredPromise<[string, string]>(); + const dataPromise = createDeferredPromise<[string, string]>(); + let data1Done = false; + const data2Promise = createDeferredPromise<[string, string]>(); - try { - await resolved( - () => { - return { - newHumanName: subscription.newHuman.name, - newDogName: subscription.newDog.name, - }; - }, - { - onSubscription(event) { - unsubscribePromise.resolve(event.unsubscribe); + const unsubscribers = new Set<() => Promise>(); - switch (event.type) { - case 'data': { - if (data1Done) { - data2Promise.resolve([ - event.data.newHumanName, - event.data.newDogName, - ]); - } else { - data1Done = true; - dataPromise.resolve([ - event.data.newHumanName, - event.data.newDogName, - ]); + try { + await resolved( + () => { + return { + newHumanName: subscription.newHuman.name, + newDogName: subscription.newDog.name, + }; + }, + { + onSubscription(event) { + unsubscribers.add(event.unsubscribe); + + switch (event.type) { + case 'start': { + unsubscribePromise.resolve(); + break; } + case 'data': { + if (data1Done) { + data2Promise.resolve([ + event.data.newHumanName, + event.data.newDogName, + ]); + } else { + data1Done = true; + dataPromise.resolve([ + event.data.newHumanName, + event.data.newDogName, + ]); + } - break; + break; + } + case 'with-errors': + console.error(event.error); + unsubscribePromise.reject(event.error); + dataPromise.reject(event.error); + data2Promise.reject(event.error); + throw event.error; } - case 'with-errors': - console.error(event.error); - unsubscribePromise.reject(event.error); - dataPromise.reject(event.error); - data2Promise.reject(event.error); - throw event.error; - } - }, - } - ); + }, + } + ); - await unsubscribePromise.promise; + await unsubscribePromise.promise; - await mutate( - (mutation) => { - return mutation.humanMutation({ - nameArg: 'new_human', - }).name; - }, - { - onComplete(data) { - expect(data).toBe('new_human'); + await new Promise((r) => setTimeout(r, 10)); + + await mutate( + (mutation) => { + return mutation.humanMutation({ + nameArg: 'new_human', + }).name; }, - } - ); + { + onComplete(data) { + expect(data).toBe('new_human'); + }, + } + ); - await dataPromise.promise.then((data) => - expect(data).toStrictEqual(['new_human', undefined]) - ); + await dataPromise.promise.then((data) => + expect(data).toStrictEqual(['new_human', undefined]) + ); - await mutate( - (mutation) => { - return mutation.createDog({ - name: 'new_dog', - }).name; - }, - { - onComplete(data) { - expect(data).toBe('new_dog'); + await mutate( + (mutation) => { + return mutation.createDog({ + name: 'new_dog', + }).name; }, - } - ); + { + onComplete(data) { + expect(data).toBe('new_dog'); + }, + } + ); - await data2Promise.promise.then((data) => - expect(data).toStrictEqual(['new_human', 'new_dog']) - ); - } finally { - await Promise.allSettled([ - unsubscribePromise.promise.then((v) => v()), - subscriptionsClient!.close(), - ]); - } -}, 5000); + await data2Promise.promise.then((data) => + expect(data).toStrictEqual(['new_human', 'new_dog']) + ); + } finally { + unsubscribers.forEach((v) => v()); + } + }, 5000); +}); diff --git a/packages/gqty/test/tsconfig.json b/packages/gqty/test/tsconfig.json index 34441f2c6..486625850 100644 --- a/packages/gqty/test/tsconfig.json +++ b/packages/gqty/test/tsconfig.json @@ -1,8 +1,6 @@ { "extends": "../tsconfig.json", "compilerOptions": { - "target": "es2019", - "module": "commonjs", "strict": true, "esModuleInterop": true, "jsx": "react", diff --git a/packages/gqty/test/utils.ts b/packages/gqty/test/utils.ts index 9ae3cbdab..fc6409b81 100644 --- a/packages/gqty/test/utils.ts +++ b/packages/gqty/test/utils.ts @@ -1,40 +1,18 @@ +import { createClient as createWsClient } from 'graphql-ws'; +import PLazy from 'p-lazy'; import { createTestApp, gql, TestApp } from 'test-utils'; - +import { type PartialDeep } from 'type-fest'; +import { WebSocket } from 'ws'; +import { loadOrGenerateConfig } from '../../cli/src/config'; import { generate } from '../../cli/src/generate'; -import { createSubscriptionsClient } from '../../subscriptions/src/index'; -import { - ClientOptions, - createClient, - DeepPartial, - QueryFetcher, - Schema, - SchemaUnionsKey, - SubscriptionsClient, - GQtyClient, -} from '../src'; +import { Cache, QueryFetcher, Schema, SchemaUnionsKey } from '../src'; +import { ClientOptions, createClient as createGQtyClient } from '../src/Client'; import { deepAssign } from '../src/Utils'; -import { gqtyConfigPromise } from '../../cli/src/config'; - afterAll(async () => { - await gqtyConfigPromise; + await loadOrGenerateConfig({ writeConfigFile: true }); }); -type ObjectTypesNames = 'Human' | 'Query' | 'Mutation' | 'Subscription'; - -type ObjectTypes = { - Human: Human; - Query: { - __typename: 'Query'; - }; - Mutation: { - __typename: 'Mutation'; - }; - Subscription: { - __typename: 'Subscription'; - }; -}; - export type Maybe = T | null; export type Human = { __typename: 'Human'; @@ -149,7 +127,7 @@ export interface TestClientConfig { subscriptions?: boolean; } -export type TestClient = GQtyClient & { +export type TestClient = ReturnType & { client: TestApp; queries: { query: string; @@ -158,11 +136,11 @@ export type TestClient = GQtyClient & { }; export const createTestClient = async ( - addedToGeneratedSchema?: DeepPartial, + addedToGeneratedSchema?: PartialDeep, queryFetcher?: QueryFetcher, config?: TestClientConfig, - clientConfig: Partial> = {} -): Promise => { + { cache = new Cache(), ...clientConfig }: Partial = {} +) => { let dogId = 0; const dogs: { name: string; id: number }[] = [ { @@ -552,7 +530,7 @@ export const createTestClient = async ( ); if (queryFetcher == null) { - queryFetcher = async (query, variables) => { + queryFetcher = async ({ query, variables }) => { const index = queries.push({ query, @@ -569,29 +547,33 @@ export const createTestClient = async ( }; } - let subscriptionsClient: SubscriptionsClient | undefined; - - subscriptionsClient = config?.subscriptions - ? createSubscriptionsClient({ - wsEndpoint: client.endpoint.replace('http:', 'ws:'), - reconnect: false, + const subscriptionsClient = config?.subscriptions + ? createWsClient({ + lazy: true, + retryAttempts: 0, + url: client.endpoint.replace('http:', 'ws:'), + webSocketImpl: WebSocket, }) : undefined; subscriptionsClient && TeardownPromises.push( - LazyPromise(() => { - subscriptionsClient!.close(); + new PLazy((resolve) => { + resolve(subscriptionsClient.terminate()); }) ); const testClient = Object.assign( - createClient({ - schema: deepAssign(generatedSchema, [addedToGeneratedSchema]) as Schema, - scalarsEnumsHash, - queryFetcher, - subscriptionsClient, + createGQtyClient({ + cache, ...clientConfig, + schema: deepAssign(generatedSchema, [addedToGeneratedSchema]) as Schema, + fetchOptions: { + ...clientConfig.fetchOptions, + fetcher: queryFetcher, + subscriber: subscriptionsClient, + }, + scalars: scalarsEnumsHash, }), { client, @@ -618,46 +600,3 @@ export function expectConsoleWarn( return { spy, consoleWarn }; } - -export class PLazy extends Promise { - private _promise?: Promise; - - constructor( - private _executor: ( - resolve: (value: ValueType) => void, - reject: (err: unknown) => void - ) => void - ) { - super((resolve: (v?: any) => void) => resolve()); - } - - then: Promise['then'] = (onFulfilled, onRejected) => - (this._promise ||= new Promise(this._executor)).then( - onFulfilled, - onRejected - ); - - catch: Promise['catch'] = (onRejected) => - (this._promise ||= new Promise(this._executor)).catch(onRejected); - - finally: Promise['finally'] = (onFinally) => - (this._promise ||= new Promise(this._executor)).finally(onFinally); -} - -export function LazyPromise( - fn: () => Value | Promise -): Promise { - return new PLazy((resolve, reject) => { - try { - Promise.resolve(fn()).then(resolve, (err) => { - if (err instanceof Error) Error.captureStackTrace(err, LazyPromise); - - reject(err); - }); - } catch (err) { - if (err instanceof Error) Error.captureStackTrace(err, LazyPromise); - - reject(err); - } - }); -} diff --git a/packages/logger/CHANGELOG.md b/packages/logger/CHANGELOG.md index 0cd0e94a8..54f3f2d29 100644 --- a/packages/logger/CHANGELOG.md +++ b/packages/logger/CHANGELOG.md @@ -1,5 +1,11 @@ # @gqty/logger +## 3.0.0-alpha.0 + +### Patch Changes + +- Upgraded to gqty@3.0.0-alpha.0 + ## 2.0.2 ### Patch Changes @@ -69,10 +75,13 @@ ### Patch Changes -- af6a437: - Rename `gqtyConfig` to `GQtyConfig` (so it's consistent with the new logo) +- af6a437: - Rename `gqtyConfig` to `GQtyConfig` (so it's consistent with the + new logo) - Rename `gqtyError` to `GQtyError` - - Remove `endpoint` option from the configuration, and instead always defaults to introspection one - - It's confusing why theres two of them, and the user can change it later by modifying the file anyway + - Remove `endpoint` option from the configuration, and instead always defaults + to introspection one + - It's confusing why theres two of them, and the user can change it later by + modifying the file anyway - Updated dependencies [4a3d5ef] - Updated dependencies [af6a437] - gqty@2.0.13 diff --git a/packages/logger/package.json b/packages/logger/package.json index 93fab19ae..df1982439 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -8,13 +8,18 @@ }, "license": "MIT", "author": "PabloSzx ", + "maintainers": [ + "Vicary Archangel " + ], "sideEffects": false, "exports": { ".": { + "types": "./dist/index.d.ts", "require": "./dist/index.js", "import": "./dist/index.mjs" }, "./*": { + "types": "./dist/*.d.ts", "require": "./dist/*.js", "import": "./dist/*.mjs" } @@ -38,23 +43,21 @@ "test:watch": "jest --watch" }, "dependencies": { - "prettier": "^2.8.6" + "prettier": "^3.0.1" }, "devDependencies": { "@size-limit/preset-small-lib": "^8.2.4", "@types/node": "^18.15.5", - "@types/prettier": "^2.7.2", - "bob-esbuild-cli": "^4.0.0", + "bob-esbuild-cli": "5.0.0-alpha-227aebc.0", "esbuild": "^0.17.12", - "gqty": "workspace:^2.3.0", + "gqty": "workspace:^", "jest": "^29.5.0", "size-limit": "^8.2.4", - "test-utils": "workspace:^0.1.0", - "tslib": "^2.5.0", - "typescript": "^4.9.5" + "test-utils": "workspace:^", + "tslib": "^2.5.0" }, "peerDependencies": { - "gqty": "workspace:^2.0.2" + "gqty": "workspace:^" }, "engines": { "node": "^12.20.0 || >=14.13.0" diff --git a/packages/logger/src/index.ts b/packages/logger/src/index.ts index f52d93222..befd93cd2 100644 --- a/packages/logger/src/index.ts +++ b/packages/logger/src/index.ts @@ -1,15 +1,21 @@ -import parserJSON from 'prettier/parser-babel.js'; -import parserGraphQL from 'prettier/parser-graphql.js'; -import prettier from 'prettier/standalone.js'; +import type { DebugEvent, GQtyClient } from 'gqty'; +import * as prettierBabel from 'prettier/plugins/babel'; +import * as prettierEstree from 'prettier/plugins/estree'; +import * as prettierGraphQL from 'prettier/plugins/graphql'; +import { format as prettierFormat } from 'prettier/standalone'; import { serializeError } from './serializeError'; -import type { GQtyClient } from 'gqty'; -import type { FetchEventData } from 'gqty/Events'; - -function parseGraphQL(query: string) { - return prettier.format(query, { +async function parseGraphQL(query: string) { + return await prettierFormat(query, { parser: 'graphql', - plugins: [parserGraphQL], + plugins: [prettierBabel, prettierGraphQL], + }); +} + +async function parseJSON(value: unknown) { + return await prettierFormat(JSON.stringify(value), { + parser: 'json', + plugins: [prettierBabel, prettierEstree], }); } @@ -62,47 +68,44 @@ export function createLogger( options.showSelections ??= true; options.stringifyJSON ??= false; - const stringifyJSONIfEnabled = (v: T) => { - if (options.stringifyJSON) { - return prettier.format(JSON.stringify(v), { - parser: 'json', - plugins: [parserJSON], - }); + const stringifyJSONIfEnabled = async (v: T) => { + if (options.stringifyJSON && v) { + return parseJSON(v); } return v; }; - const eventHandler = client.eventHandler; - let idMapper = 0; const QueryIdMapper: Record = {}; - async function onFetch(dataPromise: Promise) { + async function onFetch({ + cache, + label, + request: { query, variables, operationName, extensions }, + result, + result: { error } = {}, + selections, + }: DebugEvent) { const startTime = Date.now(); - - const { - query, - variables, - error, - selections, - executionResult, - cacheSnapshot, - type, - label, - } = await dataPromise; - + const fetchTime = startTime - startTime; // [ ] Implement an actual timer const queryId = (QueryIdMapper[query] ||= ++idMapper); - const fetchTime = Date.now() - startTime; - console.groupCollapsed( ...format( ['GraphQL ', 'color: gray'], - [type + ' ', `color: ${error ? 'red' : '#03A9F4'}; font-weight: bold`], + [ + extensions?.type + (operationName ? ` (${operationName})` : ' '), + `color: ${error ? 'red' : '#03A9F4'}; font-weight: bold`, + ], ['ID ' + queryId + ' ', 'color: green'], ...(label ? [[label + ' ', 'color: green']] : []), [`(${fetchTime}ms)`, 'color: gray'], - [` ${selections.length} selections`, 'color: gray'], + [ + ` ${ + new Set([...selections].map((s) => s.root.getLeafNodes())).size + } selections`, + 'color: gray', + ], error && [ 'FAILED', @@ -125,59 +128,55 @@ export function createLogger( if (variables) { console.log( ...format(['Variables', 'color: #25e1e1']), - stringifyJSONIfEnabled(variables) + await stringifyJSONIfEnabled(variables) ); } - console.log(...format([parseGraphQL(query)])); + console.log(...format([await parseGraphQL(query)])); console.groupEnd(); } if (error) { console.error(...format(['Error', headerStyles]), serializeError(error)); - } else if (executionResult) { + } else if (result) { console.log( ...format(['Result', headerStyles]), - stringifyJSONIfEnabled(executionResult) + await stringifyJSONIfEnabled(result) ); } if (options.showSelections) { console.groupCollapsed(...format(['Selections', headerStyles])); - selections.forEach( - ({ id, cachePath, key, pathString, alias, argTypes, args, unions }) => { - console.log( - stringifyJSONIfEnabled({ - id, - cachePath, - key, - pathString, - alias, - argTypes, - args, - unions, - }) - ); - } - ); + for (const { key, cacheKeys, alias, input, isUnion } of selections) { + console.log( + await stringifyJSONIfEnabled({ + key, + cacheKeys: cacheKeys.join('.'), + alias, + input, + isUnion, + }) + ); + } console.groupEnd(); } if (options.showCache) { console.log( ...format(['Cache snapshot', headerStyles]), - stringifyJSONIfEnabled(cacheSnapshot) + await stringifyJSONIfEnabled(cache?.toJSON()) ); - console.groupEnd(); } + + console.groupEnd(); } /** * Start logging, it returns the "stop" function */ function start() { - const unsubscribe = eventHandler.onFetchSubscribe(onFetch); + const unsubscribe = client.subscribeDebugEvents(onFetch); return unsubscribe; } diff --git a/packages/logger/test/index.test.ts b/packages/logger/test/index.test.ts index a14f81086..9423949e5 100644 --- a/packages/logger/test/index.test.ts +++ b/packages/logger/test/index.test.ts @@ -1,4 +1,4 @@ -import { createClient } from 'gqty'; +import { Cache, createClient } from 'gqty'; import { createTestApp, gql } from 'test-utils'; import { createLogger } from '../src'; @@ -31,6 +31,7 @@ describe('logger', () => { mutation: {}; subscription: {}; }>({ + cache: new Cache(), schema: { mutation: {}, query: { @@ -46,12 +47,14 @@ describe('logger', () => { }, subscription: {}, }, - scalarsEnumsHash: { + scalars: { String: true, Boolean: true, }, - queryFetcher: (query, variables) => - testAppPromise.then((v) => v.query(query, { variables })), + fetchOptions: { + fetcher: ({ query, variables }) => + testAppPromise.then((v) => v.query(query, { variables })), + }, }); test('default options', async () => { @@ -67,9 +70,9 @@ describe('logger', () => { const spyError = jest.spyOn(console, 'error').mockImplementation(); try { - const dataPromise = gqtyClient.resolved(() => { - return gqtyClient.query.hello({ hello: 'hello' }); - }); + const dataPromise = gqtyClient.resolve(({ query }) => + query.hello({ hello: 'hello' }) + ); const data = await dataPromise; @@ -81,9 +84,7 @@ describe('logger', () => { expect(data).toBe('hello world'); - const errorPromise = gqtyClient.resolved(() => { - return gqtyClient.query.throw; - }); + const errorPromise = gqtyClient.resolve(({ query }) => query.throw); await errorPromise.catch(() => {}); diff --git a/packages/logger/test/tsconfig.json b/packages/logger/test/tsconfig.json index 34441f2c6..b5f92e578 100644 --- a/packages/logger/test/tsconfig.json +++ b/packages/logger/test/tsconfig.json @@ -1,14 +1,12 @@ { "extends": "../tsconfig.json", "compilerOptions": { - "target": "es2019", - "module": "commonjs", - "strict": true, + "declaration": false, "esModuleInterop": true, "jsx": "react", - "declaration": false, - "noEmit": true + "noEmit": true, + "strict": true }, - "include": ["**/*.ts", "**/*.tsx"], - "exclude": [] + "exclude": [], + "include": ["**/*.ts", "**/*.tsx"] } diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index f4404c779..364a46ef8 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -10,7 +10,9 @@ ### Minor Changes -- 6ced359: New "$state.error" property in "useQuery" which gives the last scheduler Error, for more in-depth error management it's still recommended to use `useMetaState` hook +- 6ced359: New "$state.error" property in "useQuery" which gives the last + scheduler Error, for more in-depth error management it's still recommended to + use `useMetaState` hook Closes [#111](https://github.com/gqty-dev/gqty/issues/111) @@ -31,7 +33,8 @@ ### Major Changes - 3586c45: Remove undocumented "buildSelections" -- 3586c45: Change previous unstable `Unions` support with new `"$on"` property with support for both `Unions` & `Interfaces` +- 3586c45: Change previous unstable `Unions` support with new `"$on"` property + with support for both `Unions` & `Interfaces` ### Patch Changes @@ -51,7 +54,8 @@ ### Minor Changes -- d3d0d38: [useTransactionQuery] add "pollInBackground" and default-disable background polling +- d3d0d38: [useTransactionQuery] add "pollInBackground" and default-disable + background polling ### Patch Changes @@ -73,7 +77,7 @@ ### Patch Changes - 3f08372: publish fork -- 184a074: fix update loop https://github.com/PabloSzx/gqty/pull/223 +- 184a074: fix update loop - Updated dependencies [3f08372] - gqty@2.0.15 @@ -82,10 +86,13 @@ ### Patch Changes - 4a3d5ef: fix useQuery's prepare update -- af6a437: - Rename `gqtyConfig` to `GQtyConfig` (so it's consistent with the new logo) +- af6a437: - Rename `gqtyConfig` to `GQtyConfig` (so it's consistent with the + new logo) - Rename `gqtyError` to `GQtyError` - - Remove `endpoint` option from the configuration, and instead always defaults to introspection one - - It's confusing why theres two of them, and the user can change it later by modifying the file anyway + - Remove `endpoint` option from the configuration, and instead always defaults + to introspection one + - It's confusing why theres two of them, and the user can change it later by + modifying the file anyway - 4a3d5ef: fix args state usePaginatedQuery - 4a3d5ef: detach react default retry in useMutation - Updated dependencies [4a3d5ef] diff --git a/packages/react/package.json b/packages/react/package.json index de305de36..cccef3c2b 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -8,13 +8,18 @@ }, "license": "MIT", "author": "PabloSzx ", + "maintainers": [ + "Vicary Archangel " + ], "sideEffects": false, "exports": { ".": { + "types": "./dist/index.d.ts", "require": "./dist/index.js", "import": "./dist/index.mjs" }, "./*": { + "types": "./dist/*.d.ts", "require": "./dist/*.js", "import": "./dist/*.mjs" } @@ -30,6 +35,7 @@ "analyze": "size-limit --why", "build": "bob-esbuild build", "dev": "bob-esbuild watch", + "lint": "eslint src/**/*.{ts,tsx}", "prepare": "bob-esbuild build", "postpublish": "gh-release", "size": "size-limit", @@ -38,61 +44,94 @@ "test": "jest", "test:watch": "jest --watch" }, + "eslintConfig": { + "env": { + "node": true + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:eslint-plugin-you-dont-need-lodash-underscore/compatible" + ], + "parser": "@typescript-eslint/parser", + "plugins": [ + "@typescript-eslint" + ], + "ignorePatterns": "**/*.js" + }, + "eslintIgnore": [ + "node_modules" + ], + "engines": { + "node": "^12.20.0 || >=14.13.0" + }, + "publishConfig": { + "directory": "dist" + }, + "size-limit": [ + { + "path": "dist/gqty-react.cjs.production.min.js", + "limit": "10 KB" + }, + { + "path": "dist/gqty-react.esm.js", + "limit": "10 KB" + } + ], "dependencies": { - "react-ssr-prepass": "^1.5.0" + "@react-hookz/web": "^23.0.0", + "multidict": "^1.0.6", + "p-debounce": "^4.0.0", + "p-defer": "^3.0.0", + "react-ssr-prepass": "^1.5.0", + "use-sync-external-store": "^1.2.0" }, "devDependencies": { "@size-limit/preset-small-lib": "^8.2.4", "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^12.1.5", - "@testing-library/react-hooks": "^8.0.1", - "@types/jest": "^29.5.0", - "@types/lodash": "^4.14.191", - "@types/node": "^18.15.5", - "@types/react": "^17.0.53", - "@types/react-dom": "^18.0.11", - "bob-esbuild-cli": "^4.0.0", - "esbuild": "^0.17.12", - "gqty": "workspace:^2.3.0", + "@testing-library/react": "^14.0.0", + "@types/jest": "^29.5.1", + "@types/lodash-es": "^4.17.7", + "@types/node": "^18.16.3", + "@types/react": "^18.2.0", + "@types/react-dom": "^18.2.1", + "@types/use-sync-external-store": "^0.0.3", + "@typescript-eslint/eslint-plugin": "^5.59.2", + "@typescript-eslint/parser": "^5.59.2", + "bob-esbuild-cli": "5.0.0-alpha-227aebc.0", + "esbuild": "^0.17.18", + "eslint": "^8.39.0", + "eslint-plugin-you-dont-need-lodash-underscore": "^6.12.0", + "gqty": "workspace:^", "graphql": "^16.6.0", + "graphql-sse": "^2.1.1", + "graphql-ws": "^5.12.1", "jest": "^29.5.0", "jest-environment-jsdom": "^29.5.0", - "react": "^17.0.2", - "react-dom": "^17.0.2", - "react-test-renderer": "^17.0.2", + "lodash-es": "^4.17.21", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-test-renderer": "^18.2.0", "regenerator-runtime": "^0.13.11", "size-limit": "^8.2.4", - "test-utils": "workspace:^0.1.0", + "test-utils": "workspace:^", "tslib": "^2.5.0", - "typescript": "^4.9.5" + "type-fest": "^3.9.0" }, "peerDependencies": { - "gqty": "workspace:^2.0.4", + "gqty": "workspace:^", "graphql": "*", - "react": ">=16.14.0" + "graphql-sse": "^2.1.0", + "graphql-ws": "^5.11.3", + "react": "^16.14.0 || ^17 || ^18", + "react-dom": "^16.14.0 || ^17 || ^18" }, "peerDependenciesMeta": { - "graphql": { + "graphql-sse": { "optional": true }, - "react": { + "graphql-ws": { "optional": true } - }, - "engines": { - "node": "^12.20.0 || >=14.13.0" - }, - "publishConfig": { - "directory": "dist" - }, - "size-limit": [ - { - "path": "dist/gqty-react.cjs.production.min.js", - "limit": "10 KB" - }, - { - "path": "dist/gqty-react.esm.js", - "limit": "10 KB" - } - ] + } } diff --git a/packages/react/src/ModifiedSet.ts b/packages/react/src/ModifiedSet.ts new file mode 100644 index 000000000..b561c5494 --- /dev/null +++ b/packages/react/src/ModifiedSet.ts @@ -0,0 +1,26 @@ +/** A Set that tracks the last added value. */ +export default class ModifiedSet extends Set { + #lastAdded: T | undefined; + + add(value: T): this { + if (!super.has(value)) { + this.#lastAdded = value; + } + + return super.add(value); + } + + clear(): void { + this.#lastAdded = undefined; + + return super.clear(); + } + + /** + * Only changes when the last call to `.add()` is a new value had not been + * added yet. + */ + get lastAdded() { + return this.#lastAdded; + } +} diff --git a/packages/react/src/client.ts b/packages/react/src/client.ts index d4ad11036..d3f9932be 100644 --- a/packages/react/src/client.ts +++ b/packages/react/src/client.ts @@ -1,35 +1,40 @@ -import { createUseMetaState, UseMetaState } from './meta/useMetaState'; -import { createUseMutation, UseMutation } from './mutation/useMutation'; -import { createGraphqlHOC, GraphQLHOC } from './query/hoc'; -import { createPrepareQuery, PrepareQuery } from './query/preparedQuery'; +import { + $meta, + type BaseGeneratedSchema, + type GQtyClient, + type RetryOptions, +} from 'gqty'; +import { getActivePromises } from 'gqty/Cache/query'; +import { type LegacyFetchPolicy } from './common'; +import { createUseMetaState, type UseMetaState } from './meta/useMetaState'; +import { createUseMutation, type UseMutation } from './mutation/useMutation'; +import { createGraphqlHOC, type GraphQLHOC } from './query/hoc'; +import { createPrepareQuery, type PrepareQuery } from './query/preparedQuery'; import { createUseLazyQuery, - LazyFetchPolicy, - UseLazyQuery, + type LazyFetchPolicy, + type UseLazyQuery, } from './query/useLazyQuery'; -import { createUseQuery, UseQuery } from './query/useQuery'; -import { createUseRefetch, UseRefetch } from './query/useRefetch'; +import { + createUsePaginatedQuery, + type PaginatedQueryFetchPolicy, + type UsePaginatedQuery, +} from './query/usePaginatedQuery'; +import { createUseQuery, type UseQuery } from './query/useQuery'; +import { createUseRefetch, type UseRefetch } from './query/useRefetch'; import { createUseTransactionQuery, - UseTransactionQuery, + type UseTransactionQuery, } from './query/useTransactionQuery'; import { createSSRHelpers, - PrepareReactRender, - UseHydrateCache, + type PrepareReactRender, + type UseHydrateCache, } from './ssr/ssr'; import { createUseSubscription, - UseSubscription, + type UseSubscription, } from './subscription/useSubscription'; - -import type { GQtyClient, RetryOptions } from 'gqty'; -import type { FetchPolicy } from './common'; -import { - createUsePaginatedQuery, - PaginatedQueryFetchPolicy, - UsePaginatedQuery, -} from './query/usePaginatedQuery'; import type { ReactClientOptionsWithDefaults } from './utils'; export interface ReactClientDefaults { @@ -102,7 +107,7 @@ export interface ReactClientDefaults { * * @default "cache-first" */ - transactionFetchPolicy?: FetchPolicy; + transactionFetchPolicy?: LegacyFetchPolicy; /** * Define default 'fetchPolicy' hooks behaviour * @@ -160,98 +165,88 @@ export interface CreateReactClientOptions { defaults?: ReactClientDefaults; } -export interface ReactClient< - GeneratedSchema extends { - query: object; - mutation: object; - subscription: object; - } -> { - useQuery: UseQuery; - useRefetch: UseRefetch; - useLazyQuery: UseLazyQuery; - useTransactionQuery: UseTransactionQuery; - usePaginatedQuery: UsePaginatedQuery; - useMutation: UseMutation; +export interface ReactClient { + useQuery: UseQuery; + useRefetch: UseRefetch; + useLazyQuery: UseLazyQuery; + useTransactionQuery: UseTransactionQuery; + usePaginatedQuery: UsePaginatedQuery; + useMutation: UseMutation; graphql: GraphQLHOC; state: { isLoading: boolean }; prepareReactRender: PrepareReactRender; useHydrateCache: UseHydrateCache; useMetaState: UseMetaState; - useSubscription: UseSubscription; - prepareQuery: PrepareQuery; + useSubscription: UseSubscription; + prepareQuery: PrepareQuery; } -export function createReactClient< - GeneratedSchema extends { - query: object; - mutation: object; - subscription: object; - } ->( - client: GQtyClient, - optsCreate: CreateReactClientOptions = {} -): ReactClient { - const { suspense = false } = (optsCreate.defaults ||= {}); - - const { - transactionFetchPolicy = 'cache-first', - lazyFetchPolicy = 'network-only', - staleWhileRevalidate = false, - retry = true, - lazyQuerySuspense = false, - transactionQuerySuspense = suspense, - mutationSuspense = false, - preparedSuspense = suspense, - refetchAfterHydrate = false, - paginatedQueryFetchPolicy = 'cache-first', - paginatedQuerySuspense = suspense, - } = optsCreate.defaults; - - const defaults: ReactClientOptionsWithDefaults['defaults'] = { - transactionFetchPolicy, - lazyFetchPolicy, - staleWhileRevalidate, - suspense, - retry, - lazyQuerySuspense, - transactionQuerySuspense, - mutationSuspense, - preparedSuspense, - refetchAfterHydrate, - paginatedQueryFetchPolicy, - paginatedQuerySuspense, +export function createReactClient( + client: GQtyClient, + { + defaults: { + suspense = false, + transactionFetchPolicy = 'cache-first', + lazyFetchPolicy = 'network-only', + staleWhileRevalidate = false, + retry = true, + lazyQuerySuspense = false, + transactionQuerySuspense = suspense, + mutationSuspense = false, + preparedSuspense = suspense, + refetchAfterHydrate = false, + paginatedQueryFetchPolicy = 'cache-first', + paginatedQuerySuspense = suspense, + } = {}, + ...options + }: CreateReactClientOptions = {} +): ReactClient { + const opts: ReactClientOptionsWithDefaults = { + ...options, + defaults: { + transactionFetchPolicy, + lazyFetchPolicy, + staleWhileRevalidate, + suspense, + retry, + lazyQuerySuspense, + transactionQuerySuspense, + mutationSuspense, + preparedSuspense, + refetchAfterHydrate, + paginatedQueryFetchPolicy, + paginatedQuerySuspense, + }, }; - const opts: ReactClientOptionsWithDefaults = Object.assign({}, optsCreate, { - defaults, - }); - const { prepareReactRender, useHydrateCache } = createSSRHelpers( client, opts ); + // useTransactionQuery needs this + const useQuery = createUseQuery(client, opts); + return { - useQuery: createUseQuery(client, opts), + useQuery, useRefetch: createUseRefetch(client, opts), - useLazyQuery: createUseLazyQuery(client, opts), - useTransactionQuery: createUseTransactionQuery( - client, - opts - ), - usePaginatedQuery: createUsePaginatedQuery(client, opts), - useMutation: createUseMutation(client, opts), + useLazyQuery: createUseLazyQuery(client, opts), + useTransactionQuery: createUseTransactionQuery(useQuery, opts), + usePaginatedQuery: createUsePaginatedQuery(client, opts), + useMutation: createUseMutation(client, opts), graphql: createGraphqlHOC(client, opts), state: { get isLoading() { - return client.scheduler.resolving !== null; + const cache = $meta(client.schema.query)?.context.cache; + const promises = cache && getActivePromises(cache); + + return (promises?.length ?? 0) > 0; }, }, prepareReactRender, useHydrateCache, - useMetaState: createUseMetaState(client), - useSubscription: createUseSubscription(client, opts), - prepareQuery: createPrepareQuery(client, opts), + useMetaState: createUseMetaState(), + useSubscription: createUseSubscription(client), + prepareQuery: createPrepareQuery(client, opts), }; } diff --git a/packages/react/src/common.ts b/packages/react/src/common.ts index 428e62381..ccedd9b40 100644 --- a/packages/react/src/common.ts +++ b/packages/react/src/common.ts @@ -1,225 +1,65 @@ import { + $meta, + GQtyError, + Selection, castNotSkeleton, castNotSkeletonDeep, getArrayFields, getFields, - GQtyError, prepass, - ResolveOptions, selectFields, - Selection, + type FetchOptions, } from 'gqty'; -import type { ProxyAccessor } from 'gqty/Cache'; -import type { EventHandler } from 'gqty/Events'; -import type { InterceptorManager } from 'gqty/Interceptor'; -import type { Scheduler } from 'gqty/Scheduler'; import * as React from 'react'; -export function useOnFirstMount(fn: () => void) { - const isFirstMount = React.useRef(true); - if (isFirstMount.current) { - isFirstMount.current = false; - fn(); - } -} - export const IS_BROWSER = typeof window !== 'undefined'; export const useIsomorphicLayoutEffect = IS_BROWSER ? React.useLayoutEffect : React.useEffect; -export function useForceUpdate({ doTimeout }: { doTimeout?: boolean } = {}) { - const [, update] = React.useReducer((num) => (num + 1) % 1_000_000, 0); - const wasCalled = React.useRef(false); - - React.useEffect(() => { - wasCalled.current = false; - }); - - return React.useMemo(() => { - return Object.assign( - () => { - if (wasCalled.current) return; - wasCalled.current = true; - if (doTimeout) { - setTimeout(update, 0); - } else { - Promise.resolve().then(update); - } - }, - { wasCalled } - ); - }, [update, wasCalled, doTimeout]); -} - -const InitSymbol: any = Symbol(); - -export function useLazyRef(initialValFunc: () => T) { - const ref: React.MutableRefObject = React.useRef(InitSymbol); - if (ref.current === InitSymbol) { - ref.current = initialValFunc(); - } - return ref; -} - -export const useUpdateEffect: typeof React.useEffect = (effect, deps) => { - const firstEffectCall = React.useRef(true); - - React.useEffect(() => { - if (firstEffectCall.current) { - firstEffectCall.current = false; - } else return effect(); - }, deps); -}; - -export function useIsRendering() { - const isRendering = React.useRef(true); - isRendering.current = true; - - useIsomorphicLayoutEffect(() => { - isRendering.current = false; - }); - - return isRendering; -} - -export function useIsMounted() { - const isMounted = React.useRef(true); - - useIsomorphicLayoutEffect(() => { - isMounted.current = true; - - return () => { - isMounted.current = false; - }; - }, []); - - return isMounted; -} - -export function useDeferDispatch void>( - dispatchFn: F -) { - const isMounted = useIsMounted(); - const isRendering = useIsRendering(); - - const pendingDispatch = React.useRef void> | false>(false); - - React.useEffect(() => { - if (pendingDispatch.current) { - for (const fn of pendingDispatch.current) { - fn(); - } - pendingDispatch.current = false; - } - }); - - return React.useCallback( - (...args: any[]) => { - if (isRendering.current) { - if (pendingDispatch.current) { - pendingDispatch.current.push(() => { - if (isMounted.current) dispatchFn(...args); - }); - } - pendingDispatch.current = [ - () => { - if (isMounted.current) dispatchFn(...args); - }, - ]; - } else if (isMounted.current) { - dispatchFn(...args); - } - }, - [dispatchFn, isRendering, pendingDispatch, isMounted] - ) as F; -} - -export type FetchPolicy = +export type LegacyFetchPolicy = | 'cache-and-network' | 'cache-first' | 'network-only' | 'no-cache'; -const noCacheResolveOptions: ResolveOptions = { - noCache: true, +export const legacyFetchPolicyMap: Record< + LegacyFetchPolicy, + FetchOptions['cachePolicy'] +> = { + 'cache-first': 'force-cache', + 'network-only': 'no-cache', + 'cache-and-network': 'default', + 'no-cache': 'no-store', }; -const refetchResolveOptions: ResolveOptions = { - refetch: true, -}; - -const emptyResolveOptions: ResolveOptions = {}; +export const translateFetchPolicy = ( + fetchPolicy: LegacyFetchPolicy +): FetchOptions['cachePolicy'] => + legacyFetchPolicyMap[fetchPolicy] ?? 'default'; -export function fetchPolicyDefaultResolveOptions( - fetchPolicy: FetchPolicy | undefined -): ResolveOptions { - switch (fetchPolicy) { - case 'no-cache': { - return noCacheResolveOptions; - } - case 'cache-and-network': - case 'network-only': { - return refetchResolveOptions; - } - case 'cache-first': - default: { - return emptyResolveOptions; - } - } -} +export type SelectionsOrProxy = (Selection | T)[]; -export type BuildSelections = (Selection | T)[]; +export const useExtractedSelections = ( + input?: SelectionsOrProxy +): Set => { + const [selections] = React.useState(() => new Set()); -export function useBuildSelections( - argSelections: BuildSelections | null | undefined, - getProxySelection: (proxy: ProxyAccessor) => Selection | undefined, - caller: Function -) { - const buildSelections = React.useCallback( - (selectionsSet: Set) => { - selectionsSet.clear(); - - if (!argSelections) return; - - try { - for (const filterValue of argSelections) { - let selection: Selection | undefined; - if (filterValue instanceof Selection) { - selectionsSet.add(filterValue); - } else if ((selection = getProxySelection(filterValue))) { - selectionsSet.add(selection); - } - } - } catch (err) { - if (err instanceof Error && Error.captureStackTrace!) { - Error.captureStackTrace(err, caller); - } - - throw err; - } - }, - [argSelections] - ); - - const [selections] = React.useState(() => { - const selectionsSet = new Set(); - - buildSelections(selectionsSet); + React.useEffect(() => { + selections.clear(); - return selectionsSet; - }); + if (input === undefined) return; - useUpdateEffect(() => { - buildSelections(selections); - }, [buildSelections, selections]); + for (const it of input) { + (it instanceof Selection ? it : $meta(it)?.selection) + ?.getLeafNodes() + .forEach((selection) => selections.add(selection)); + } + }, [input, input?.length]); - return { - selections, - hasSpecifiedSelections: argSelections != null, - }; -} + return selections; +}; export type List = Set | Array; @@ -267,244 +107,9 @@ export function isAnySelectionIncludedInMatrix( return false; } -function initSelectionsState() { - return new Set(); -} - -export function useSelectionsState() { - const [selections] = React.useState(initSelectionsState); - - return selections; -} - -export function useSubscribeCacheChanges({ - selections, - eventHandler, - onChange, - shouldSubscribe = true, -}: { - selections: Set; - eventHandler: EventHandler; - onChange: () => void; - shouldSubscribe?: boolean; -}) { - const onChangeCalled = React.useRef(false); - useIsomorphicLayoutEffect(() => { - onChangeCalled.current = false; - }); - - useIsomorphicLayoutEffect(() => { - if (!shouldSubscribe) return; - - let isMounted = true; - const unsubscribeFetch = eventHandler.onFetchSubscribe( - (fetchPromise, promiseSelections) => { - if ( - onChangeCalled.current || - !promiseSelections.some((selection) => selections.has(selection)) - ) { - return; - } - - onChangeCalled.current = true; - fetchPromise.then( - () => { - if (isMounted) Promise.resolve(fetchPromise).then(onChange); - }, - () => {} - ); - } - ); - - const unsubscribeCache = eventHandler.onCacheChangeSubscribe( - ({ selection }) => { - if (isMounted && !onChangeCalled.current && selections.has(selection)) { - onChangeCalled.current = true; - Promise.resolve().then(onChange); - } - } - ); - - return () => { - isMounted = false; - unsubscribeFetch(); - unsubscribeCache(); - }; - }, [shouldSubscribe, selections, eventHandler, onChange]); -} - -function hasEnabledStaleWhileRevalidate( - staleWhileRevalidate: boolean | object | number | string | null -) { - return typeof staleWhileRevalidate === 'boolean' - ? staleWhileRevalidate - : true; -} - -export function useInterceptSelections({ - interceptorManager: { - globalInterceptor, - createInterceptor, - removeInterceptor, - }, - staleWhileRevalidate = false, - scheduler, - eventHandler, - onError, - updateOnFetchPromise, -}: { - staleWhileRevalidate: boolean | object | number | string | null; - interceptorManager: InterceptorManager; - scheduler: Scheduler; - eventHandler: EventHandler; - onError: OnErrorHandler | undefined; - updateOnFetchPromise?: boolean; -}) { - const enabledStaleWhileRevalidate = - hasEnabledStaleWhileRevalidate(staleWhileRevalidate); - const cacheRefetchSelections = enabledStaleWhileRevalidate - ? new Set() - : null; - const fetchingPromise = React.useRef | null>(null); - const forceUpdate = useDeferDispatch(useForceUpdate()); - const interceptor = createInterceptor(); - const selections = useSelectionsState(); - - interceptor.selectionCacheRefetchListeners.add((selection) => { - if (cacheRefetchSelections) { - cacheRefetchSelections.add(selection); - } - - selections.add(selection); - }); - - useIsomorphicLayoutEffect(() => { - if (enabledStaleWhileRevalidate && cacheRefetchSelections?.size) { - for (const selection of cacheRefetchSelections) { - globalInterceptor.addSelectionCacheRefetch(selection); - } - } - }, [staleWhileRevalidate, enabledStaleWhileRevalidate]); - - interceptor.selectionAddListeners.add((selection) => { - selections.add(selection); - }); - - interceptor.selectionCacheListeners.add((selection) => { - selections.add(selection); - }); - - const deferredCall = React.useRef<(() => void) | null>(null); - - React.useEffect(() => { - if (deferredCall.current) { - deferredCall.current(); - deferredCall.current = null; - } - }); - - const isRendering = useIsRendering(); - - const unsubscribeResolve = scheduler.subscribeResolve( - (promise, selection) => { - if ( - fetchingPromise.current === null && - deferredCall.current === null && - selections.has(selection) - ) { - const newPromise = new Promise((resolve) => { - promise.then(({ error }) => { - fetchingPromise.current = null; - if (error && onError) onError(error); - - Promise.resolve().then(forceUpdate); - - resolve(); - }); - }); - - fetchingPromise.current = newPromise; - - if (updateOnFetchPromise) { - if (enabledStaleWhileRevalidate && isRendering.current) { - deferredCall.current = forceUpdate; - } else { - deferredCall.current = null; - forceUpdate(); - } - } - } - } - ); - - function unsubscribe() { - unsubscribeResolve(); - removeInterceptor(interceptor); - } - - Promise.resolve().then(unsubscribe); - - useSubscribeCacheChanges({ - selections, - eventHandler, - onChange() { - if (!fetchingPromise.current) forceUpdate(); - }, - }); - - return { - fetchingPromise, - selections, - unsubscribe, - }; -} - -export function useSuspensePromise(optsRef: { - current: { suspense?: boolean }; -}) { - let [promise, setPromiseState] = React.useState | void>(); - - const isMounted = useIsMounted(); - - const setPromise = React.useCallback< - (promise: Promise, inlineThrow?: boolean) => void - >( - (newPromise, inlineThrow) => { - if (promise || !optsRef.current.suspense || !isMounted.current) return; - - function clearPromise() { - if (isMounted.current) setPromiseState(); - } - - const promiseValue = (promise = newPromise.then( - clearPromise, - clearPromise - )); - - setPromiseState(promiseValue); - - if (inlineThrow) throw promiseValue; - }, - [setPromiseState, optsRef] - ); - - if (promise) throw promise; - - return setPromise; -} - export type OnErrorHandler = (error: GQtyError) => void; -export interface CoreHelpers { - prepass: typeof prepass; - getFields: typeof getFields; - getArrayFields: typeof getArrayFields; - selectFields: typeof selectFields; - castNotSkeleton: typeof castNotSkeleton; - castNotSkeletonDeep: typeof castNotSkeletonDeep; -} - -export const coreHelpers: CoreHelpers = { +export const coreHelpers = { prepass, getFields, getArrayFields, @@ -519,7 +124,7 @@ export function uniqBy( ): TNode[] { const uniqList = new Map(); for (const value of list) { - let key: unknown = cb ? cb(value) : value; + const key: unknown = cb ? cb(value) : value; if (uniqList.has(key)) continue; uniqList.set(key, value); @@ -543,31 +148,3 @@ export function sortBy( return orderedList; } - -export const useIsWindowVisible = ({ lazy }: { lazy?: boolean } = {}) => { - const [isVisible, setIsVisible] = React.useState(true); - const ref = React.useRef(true); - - React.useEffect(() => { - const onVisibilityChange = () => { - const isVisible = document.visibilityState === 'visible'; - ref.current = isVisible; - !lazy && setIsVisible(isVisible); - }; - - onVisibilityChange(); - - document.addEventListener('visibilitychange', onVisibilityChange); - - return () => { - document.removeEventListener('visibilitychange', onVisibilityChange); - }; - }, [setIsVisible, lazy]); - - return React.useMemo(() => { - return { - isVisible, - ref, - }; - }, [isVisible, ref]); -}; diff --git a/packages/react/src/index.tsx b/packages/react/src/index.tsx index 1ca183162..582a89c5c 100644 --- a/packages/react/src/index.tsx +++ b/packages/react/src/index.tsx @@ -1,6 +1,6 @@ export * from './client'; export { coreHelpers, sortBy, uniqBy } from './common'; -export type { CoreHelpers, FetchPolicy, OnErrorHandler } from './common'; +export type { LegacyFetchPolicy, OnErrorHandler } from './common'; export type { MetaState, UseMetaState, @@ -13,8 +13,8 @@ export type { } from './mutation/useMutation'; export type { GraphQLHOC, GraphQLHOCOptions } from './query/hoc'; export type { - PreparedQuery, PrepareQuery, + PreparedQuery, UsePreparedQueryOptions, } from './query/preparedQuery'; export type { diff --git a/packages/react/src/memoryStore.ts b/packages/react/src/memoryStore.ts new file mode 100644 index 000000000..32d6a07de --- /dev/null +++ b/packages/react/src/memoryStore.ts @@ -0,0 +1,23 @@ +/** + * An in-memory store for useSyncExternalStore. + */ +export const createMemoryStore = (initialValue: T) => { + let state = Object.freeze({ ...initialValue }); + const listeners = new Set<() => void>(); + + return { + add: (value: Partial) => { + state = Object.freeze({ ...state, ...value }); + listeners.forEach((listener) => listener()); + }, + get: () => state, + set: (value: T) => { + state = Object.freeze({ ...value }); + listeners.forEach((listener) => listener()); + }, + subscribe: (listener: () => void) => { + listeners.add(listener); + return () => listeners.delete(listener); + }, + }; +}; diff --git a/packages/react/src/meta/useMetaState.ts b/packages/react/src/meta/useMetaState.ts index d3ef21b05..581054b3d 100644 --- a/packages/react/src/meta/useMetaState.ts +++ b/packages/react/src/meta/useMetaState.ts @@ -1,17 +1,9 @@ -import type { GQtyClient, GQtyError, Selection } from 'gqty'; -import type { SchedulerPromiseValue } from 'gqty/Scheduler'; +import { useRerender } from '@react-hookz/web'; +import { GQtyError, Selection, useMetaStateHack } from 'gqty'; import * as React from 'react'; -import { - BuildSelections, - isAnySelectionIncluded, - isAnySelectionIncludedInMatrix, - isSelectionIncluded, - useBuildSelections, - useIsomorphicLayoutEffect, -} from '../common'; -import { areArraysEqual } from '../utils'; +import { useExtractedSelections, type SelectionsOrProxy } from '../common'; -export interface UseMetaStateOptions { +export interface UseMetaStateOptions { onStartFetching?: () => void; onDoneFetching?: () => void; onError?: (data: { @@ -20,10 +12,10 @@ export interface UseMetaStateOptions { isLastTry: boolean; }) => void; onRetry?: (data: { - retryPromise: Promise; + retryPromise: Promise; selections: Set; }) => void; - filterSelections?: BuildSelections; + filterSelections?: SelectionsOrProxy; } export interface MetaState { @@ -32,206 +24,79 @@ export interface MetaState { } export interface UseMetaState { - (opts?: UseMetaStateOptions): MetaState; + (opts?: UseMetaStateOptions): MetaState; } -export function createUseMetaState(client: GQtyClient) { - const scheduler = client.scheduler; +export function createUseMetaState() { + const useMetaState: UseMetaState = ({ + onStartFetching, + onDoneFetching, + onError, + onRetry, + filterSelections, + } = {}) => { + const targetSelections = useExtractedSelections(filterSelections); - const { - accessorCache: { getProxySelection }, - } = client; + const [promises] = React.useState(() => new Set>()); + const [errors] = React.useState(() => new Set()); + const render = useRerender(); - const errorsMap = scheduler.errors.map; - - const defaultEmptyOpts = {}; - - const useMetaState: UseMetaState = function useMetaState( - opts: UseMetaStateOptions = defaultEmptyOpts - ) { - const { - hasSpecifiedSelections: hasFilterSelections, - selections: selectionsToFilter, - } = useBuildSelections( - opts.filterSelections, - getProxySelection, - useMetaState - ); - - const [promisesInFly] = React.useState(() => { - return new Set>(); - }); - - const isMountedRef = React.useRef(true); React.useEffect(() => { - return () => { - isMountedRef.current = false; - }; - }, []); - - const getState = React.useCallback( - (isMounted: { current: boolean } = isMountedRef): MetaState => { - let isFetching: boolean; - if (scheduler.pendingSelectionsGroups.size) { - if (hasFilterSelections) { - isFetching = isAnySelectionIncludedInMatrix( - selectionsToFilter, - scheduler.pendingSelectionsGroups - ); - } else { - isFetching = true; - } - - if (isFetching && scheduler.pendingSelectionsGroupsPromises.size) { - Promise.all( - scheduler.pendingSelectionsGroupsPromises.values() - ).finally(() => setStateIfChanged(isMounted)); + return useMetaStateHack.subscribeFetch(({ promise, selections }) => { + if (targetSelections.size > 0) { + for (const selection of targetSelections) { + if (selections.has(selection)) return; } - } else { - isFetching = false; - } - - let errors: GQtyError[] | undefined; - - if (hasFilterSelections) { - const errorsSet = new Set(); - - selectionsToFilter.forEach((selection) => { - const error = errorsMap.get(selection); - - if (error) errorsSet.add(error); - }); - - if (errorsSet.size) errors = Array.from(errorsSet); - } else if (errorsMap.size) { - errors = Array.from(new Set(errorsMap.values())); } - return errors ? { isFetching, errors } : { isFetching }; - }, - [hasFilterSelections, selectionsToFilter] - ); - - const setStateIfChanged = React.useCallback( - function setStateIfChanged(isMounted: { current: boolean }) { - if (!isMounted.current) return; + promises.add(promise); - const prevState = stateRef.current; - - const newState = getState(isMounted); - - if ( - prevState.isFetching !== newState.isFetching || - !areArraysEqual(prevState.errors, newState.errors) - ) { - stateRef.current = newState; - setTimeout(() => { - if (isMounted.current) setState(newState); - }, 0); + if (promises.size === 0) { + errors.clear(); + onStartFetching?.(); + render(); } - }, - [] - ); - - const [state, setState] = React.useState(getState); - - const stateRef = React.useRef(state); - stateRef.current = state; - - const optsRef = React.useRef(opts); - optsRef.current = opts; - useIsomorphicLayoutEffect(() => { - const isMounted = { current: true }; - - const unsubscribeIsFetching = scheduler.subscribeResolve( - (promise, selection) => { - if (promisesInFly.has(promise)) return; - - if ( - hasFilterSelections && - !isSelectionIncluded(selection, selectionsToFilter) - ) { - return; - } - - if (promisesInFly.size === 0) optsRef.current.onStartFetching?.(); - - promisesInFly.add(promise); - - setStateIfChanged(isMounted); - - promise.then(() => { - promisesInFly.delete(promise); - - if (promisesInFly.size === 0) optsRef.current.onDoneFetching?.(); - - setStateIfChanged(isMounted); + promise + .catch((error) => { + const newError = GQtyError.create(error); + errors.add(newError); + onError?.({ + newError, + selections: [...selections], + isLastTry: true, + }); + }) + .finally(() => { + promises.delete(promise); + + if (promises.size === 0) { + onDoneFetching?.(); + render(); + } }); - } - ); + }); + }, []); - const unsubscribeErrors = scheduler.errors.subscribeErrors((data) => { - switch (data.type) { - case 'new_error': { - if (hasFilterSelections) { - if (isAnySelectionIncluded(selectionsToFilter, data.selections)) - optsRef.current.onError?.({ - newError: data.newError, - selections: data.selections, - isLastTry: data.isLastTry, - }); - else return; - } else { - optsRef.current.onError?.({ - newError: data.newError, - selections: data.selections, - isLastTry: data.isLastTry, - }); - } - break; - } - case 'retry': { - if (hasFilterSelections) { - if (isAnySelectionIncluded(selectionsToFilter, data.selections)) { - optsRef.current.onRetry?.({ - retryPromise: data.retryPromise, - selections: data.selections, - }); - data.retryPromise.finally(() => { - setTimeout(() => { - setStateIfChanged(isMounted); - }, 0); - }); - } - } else { - optsRef.current.onRetry?.({ - retryPromise: data.retryPromise, - selections: data.selections, - }); - data.retryPromise.finally(() => { - setTimeout(() => { - setStateIfChanged(isMounted); - }, 0); - }); - } - break; - } - case 'errors_clean': { + React.useEffect(() => { + return useMetaStateHack.subscribeRetry(({ promise, selections }) => { + if (targetSelections.size > 0) { + for (const selection of targetSelections) { + if (selections.has(selection)) return; } } - setStateIfChanged(isMounted); + onRetry?.({ + retryPromise: promise, + selections, + }); }); + }, []); - return () => { - isMounted.current = false; - unsubscribeIsFetching(); - unsubscribeErrors(); - }; - }, [getState, hasFilterSelections, setState, optsRef, selectionsToFilter]); - - return state; + return Object.freeze({ + isFetching: promises.size > 0, + errors: [...errors], + }); }; return useMetaState; diff --git a/packages/react/src/mutation/useMutation.ts b/packages/react/src/mutation/useMutation.ts index 89e124c37..9d8151599 100644 --- a/packages/react/src/mutation/useMutation.ts +++ b/packages/react/src/mutation/useMutation.ts @@ -1,17 +1,19 @@ -import { doRetry, GQtyClient, GQtyError, RetryOptions } from 'gqty'; -import * as React from 'react'; - import { - OnErrorHandler, - useDeferDispatch, - useSuspensePromise, -} from '../common'; -import type { ReactClientOptionsWithDefaults } from '../utils'; + GQtyError, + type BaseGeneratedSchema, + type GQtyClient, + type RetryOptions, +} from 'gqty'; +import * as React from 'react'; +import { type OnErrorHandler } from '../common'; +import { type ReactClientOptionsWithDefaults } from '../utils'; export interface UseMutationOptions { - noCache?: boolean; + onComplete?: (data: TData) => Promise | void; + /** @deprecated Use onComplete instead. */ onCompleted?: (data: TData) => void; onError?: OnErrorHandler; + operationName?: string; /** * Retry behaviour * @@ -22,255 +24,145 @@ export interface UseMutationOptions { * Refetch specific queries after mutation completion. * * You can give functions or parts of the schema to be refetched + * + * @deprecated */ refetchQueries?: unknown[]; /** * Await refetch resolutions before calling the mutation actually complete + * + * @deprecated */ awaitRefetchQueries?: boolean; - /** - * Enable suspense behavior - */ - suspense?: boolean; + /** Skip the cache update after a successful fetch. */ + noCache?: boolean; /** * Activate special handling of non-serializable variables, * for example, files uploading * * @default false + * @deprecated */ nonSerializableVariables?: boolean; + /** + * Enable suspense behavior + */ + suspense?: boolean; + /** + * extension object that allows user to pass custom data to the query fetcher. + */ + extensions?: Record; } -export interface UseMutationState { - data: TData | undefined; +export type UseMutationState = { error?: GQtyError; isLoading: boolean; -} - -type UseMutationReducerAction = - | { type: 'success'; data: TData } - | { type: 'failure'; error: GQtyError } - | { type: 'loading' }; - -function UseMutationReducer( - state: UseMutationState, - action: UseMutationReducerAction -): UseMutationState { - switch (action.type) { - case 'loading': { - if (state.isLoading) return state; - return { - data: state.data, - isLoading: true, - }; - } - case 'success': { - return { - data: action.data, - isLoading: false, - }; - } - case 'failure': { - return { - data: state.data, - isLoading: false, - error: action.error, - }; - } - } -} - -function InitUseMutationReducer(): UseMutationState { - return { - data: undefined, - isLoading: false, - }; -} +}; -export interface UseMutation< - GeneratedSchema extends { - mutation: object; - } -> { - ( - mutationFn?: (mutation: GeneratedSchema['mutation'], args: TArgs) => TData, +export interface UseMutation { + ( + fn: (mutation: NonNullable, args: TArgs) => TData, options?: UseMutationOptions ): readonly [ - ( - ...opts: undefined extends TArgs - ? [ - { - fn?: ( - mutation: GeneratedSchema['mutation'], - args: TArgs - ) => TData; - args?: TArgs; - }? - ] - : [ - { - fn?: ( - mutation: GeneratedSchema['mutation'], - args: TArgs - ) => TData; - args: TArgs; - } - ] - ) => Promise, - UseMutationState + (options?: { fn?: typeof fn; args: TArgs }) => Promise, + UseMutationState & { data?: TData } ]; } -export function createUseMutation< - GeneratedSchema extends { - mutation: object; - query: object; - subscription: object; - } ->( - client: GQtyClient, +export const createUseMutation = ( + { resolve, refetch }: GQtyClient, { - defaults: { mutationSuspense: defaultSuspense }, + defaults: { mutationSuspense: defaultSuspense, retry: defaultRetry }, }: ReactClientOptionsWithDefaults -) { - const { resolved, refetch } = client; - const clientMutation: GeneratedSchema['mutation'] = client.mutation; - - const useMutation: UseMutation = function useMutation< - TData, - TArgs = undefined - >( - mutationFn?: (mutation: typeof clientMutation, args: TArgs) => TData, - opts: UseMutationOptions = {} - ): readonly [ - ({ - fn, - args, - }?: { - fn?: (mutation: GeneratedSchema['mutation'], args: TArgs) => TData; - args?: TArgs; - }) => Promise, - UseMutationState - ] { - const optsRef = React.useRef(opts); - optsRef.current = Object.assign({}, opts); - optsRef.current.suspense ??= defaultSuspense; - - const setSuspensePromise = useSuspensePromise(optsRef); - - const [state, dispatchReducer] = React.useReducer( - UseMutationReducer, - undefined, - InitUseMutationReducer - ) as [ - UseMutationState, - React.Dispatch> - ]; - const dispatch = useDeferDispatch(dispatchReducer); - - const fnRef = React.useRef(mutationFn); - fnRef.current = mutationFn; - - const callRefetchQueries = - React.useCallback((): Promise | void => { - const { refetchQueries, awaitRefetchQueries } = optsRef.current; - - if (refetchQueries?.length) { - const refetchPromise = Promise.all( - refetchQueries.map((v) => refetch(v)) - ).catch((err) => { - dispatch({ - type: 'failure', - error: GQtyError.create(err, useMutation), - }); - }); - - if (awaitRefetchQueries) return refetchPromise; - } - }, [optsRef, dispatch]); +) => { + const useMutation: UseMutation = ( + mutationFn: ( + mutation: NonNullable, + args: TArgs + ) => TData, + { + onCompleted, + onComplete = onCompleted, + onError, + retry = defaultRetry, + refetchQueries = [], + awaitRefetchQueries, + suspense = defaultSuspense, + noCache = false, + extensions, + }: UseMutationOptions> = {} + ) => { + const [state, setState] = React.useState<{ + data?: TData; + error?: GQtyError; + promise?: Promise; + }>({}); + + if (suspense) { + if (state.promise) throw state.promise; + if (state.error) throw state.error; + } const mutate = React.useCallback( - function mutateFn({ - fn: fnArg, + async ({ + fn = mutationFn, args, - }: { fn?: typeof mutationFn; args?: any } = {}) { - dispatch({ type: 'loading' }); - - const refFn = fnRef.current; - - const functionResolve = fnArg - ? () => fnArg(clientMutation, args) - : refFn - ? () => refFn(clientMutation, args) - : (() => { - throw new GQtyError( - 'You have to specify a function to be resolved', - { - caller: mutateFn, - } - ); - })(); - - return resolved(functionResolve, { - noCache: optsRef.current.noCache, - refetch: true, - nonSerializableVariables: optsRef.current.nonSerializableVariables, - }).then( - async (data) => { - const refetchingQueries = callRefetchQueries(); - if (refetchingQueries) await refetchingQueries; - - optsRef.current.onCompleted?.(data); - dispatch({ - type: 'success', - data, - }); + }: { fn?: typeof mutationFn; args?: TArgs } = {}) => { + if (!fn) { + throw new GQtyError(`Please specify a mutation function.`); + } - return data; - }, - (err: unknown) => { - const error = GQtyError.create(err, useMutation); - optsRef.current.onError?.(error); - dispatch({ - type: 'failure', - error, - }); + try { + const promise = resolve( + ({ mutation }) => { + if (mutation === undefined) { + throw new GQtyError(`Mutation is not defined in the schema.`); + } - throw error; - } - ); - }, - [optsRef, fnRef, dispatch, callRefetchQueries] - ); + return fn(mutation, args as TArgs); + }, + { + cachePolicy: noCache ? 'no-store' : 'no-cache', + retryPolicy: retry, + extensions, + } + ).then((data) => { + const refetches = refetchQueries.map((v) => refetch(v)); - const { retry = false } = opts; + return awaitRefetchQueries + ? Promise.all(refetches).then(() => data) + : data; + }) as Promise; - return React.useMemo(() => { - const fn: typeof mutate = retry - ? (...args: any[]) => { - const promise = mutate(...args).catch((err) => { - doRetry(retry, { - onRetry: () => { - const promise = mutate(...args).then(() => {}); + setState({ promise }); - setSuspensePromise(promise); + const data = await promise; - return promise; - }, - }); + await onComplete?.(data); + setState({ data }); - throw err; - }); + return data; + } catch (e) { + const error = GQtyError.create(e); - setSuspensePromise(promise); + onError?.(error); + setState({ error }); - return promise; - } - : mutate; + throw error; + } + }, + [mutationFn, noCache, retry, refetchQueries, awaitRefetchQueries] + ); - return [fn, state]; - }, [state, mutate, retry, optsRef, setSuspensePromise]); + return Object.freeze([ + mutate, + Object.freeze({ + data: state.data, + error: state.error, + isLoading: state.promise !== undefined, + }), + ]); }; return useMutation; -} +}; diff --git a/packages/react/src/query/hoc.tsx b/packages/react/src/query/hoc.tsx index 363d49472..8b92c68af 100644 --- a/packages/react/src/query/hoc.tsx +++ b/packages/react/src/query/hoc.tsx @@ -1,16 +1,14 @@ +import { useRerender } from '@react-hookz/web'; import type { GQtyClient } from 'gqty'; import * as React from 'react'; -import { OnErrorHandler, useInterceptSelections } from '../common'; +import type { OnErrorHandler } from '../common'; import type { ReactClientOptionsWithDefaults } from '../utils'; export interface GraphQLHOCOptions { - suspense?: - | boolean - | { - fallback: React.SuspenseProps['fallback']; - }; - staleWhileRevalidate?: boolean; onError?: OnErrorHandler; + operationName?: string; + staleWhileRevalidate?: boolean; + suspense?: boolean | { fallback: React.SuspenseProps['fallback'] }; } export interface GraphQLHOC { @@ -21,12 +19,9 @@ export interface GraphQLHOC { } export function createGraphqlHOC( - { scheduler, eventHandler, interceptorManager }: GQtyClient, + { createResolver, subscribeLegacySelections }: GQtyClient, { - defaults: { - suspense: defaultSuspense, - staleWhileRevalidate: defaultStaleWhileRevalidate, - }, + defaults: { suspense: defaultSuspense, retry }, }: ReactClientOptionsWithDefaults ) { const graphql: GraphQLHOC = function graphql

( @@ -34,55 +29,67 @@ export function createGraphqlHOC( displayName?: string; }, { - suspense = defaultSuspense, - staleWhileRevalidate = defaultStaleWhileRevalidate, onError, + operationName, + staleWhileRevalidate, + suspense = defaultSuspense, }: GraphQLHOCOptions = {} ) { const withGraphQL: { (props: P): React.ReactElement | null; displayName: string; } = function WithGraphQL(props): React.ReactElement | null { - const { fetchingPromise, unsubscribe } = useInterceptSelections({ - interceptorManager, - eventHandler, - scheduler, - staleWhileRevalidate, - onError, + const { + accessor: { query, mutation, subscription }, + context, + resolve, + } = createResolver({ operationName, retryPolicy: retry }); + const unsubscribe = subscribeLegacySelections((selection, cache) => { + context.select(selection, cache); }); + const render = useRerender(); + React.useEffect(render, [staleWhileRevalidate]); - let returnValue: React.ReactElement | null = null; + let elm: React.ReactElement | null = null; try { - returnValue = component(props) ?? null; + elm = component({ ...props, query, mutation, subscription }); } finally { unsubscribe(); } - if (suspense && fetchingPromise.current) { - function Suspend() { - if (!fetchingPromise.current) return null; + if (!context.shouldFetch) { + return elm; + } + + const promise = resolve().finally(render); - throw fetchingPromise.current; - } - const value = ( - <> - {returnValue} - - + if (onError) { + promise.catch(onError); + } + + if (suspense === true) { + throw promise; + } else if (typeof suspense === 'object') { + const Suspender: React.FunctionComponent = () => { + if (!promise) return null; + + throw promise; + }; + + return ( + + + {elm} + ); - if (typeof suspense === 'object') { - return React.createElement(React.Suspense, { - fallback: suspense.fallback, - children: value, - }); - } - return value; } - return returnValue; + + return elm; }; + withGraphQL.displayName = `GraphQLComponent(${ component?.displayName || component?.name || 'Anonymous' - })${Date.now}`; + })${Date.now()}`; return withGraphQL; }; diff --git a/packages/react/src/query/preparedQuery.ts b/packages/react/src/query/preparedQuery.ts index c38367793..ffb1a9829 100644 --- a/packages/react/src/query/preparedQuery.ts +++ b/packages/react/src/query/preparedQuery.ts @@ -1,195 +1,164 @@ -import type { GQtyClient, GQtyError } from 'gqty'; -import type { SchedulerPromiseValue } from 'gqty/Scheduler'; - -import { - useForceUpdate, - useIsMounted, - useIsomorphicLayoutEffect, -} from '../common'; +import { GQtyError, type BaseGeneratedSchema, type GQtyClient } from 'gqty'; +import { useSyncExternalStore } from 'use-sync-external-store/shim/index.js'; + +import { createMemoryStore } from '../memoryStore'; import type { ReactClientOptionsWithDefaults } from '../utils'; export interface UsePreparedQueryOptions { suspense?: boolean; } +export type TQueryFunction< + TSchema extends BaseGeneratedSchema, + TArgs = Record | undefined, + TData = unknown +> = (query: TSchema['query'], args: TArgs) => TData; + export interface PreparedQuery< - GeneratedSchema extends { - query: object; - }, - TFunction extends (query: GeneratedSchema['query'], args: any) => any + TSchema extends BaseGeneratedSchema, + TFunction extends TQueryFunction > { - preload( - ...[args]: undefined extends Parameters['1'] - ? [Parameters['1']?] - : [Parameters['1']] - ): Promise>; - refetch( - ...[args]: undefined extends Parameters['1'] - ? [Parameters['1']?] - : [Parameters['1']] - ): Promise>; - usePrepared(opts?: UsePreparedQueryOptions): { - data: ReturnType | undefined; - error?: GQtyError | undefined; - isLoading: boolean; - isRefetching: boolean; - called: boolean; - }; + preload: PreloadFn; + refetch: RefetchFn; + usePrepared: UsePreparedHook; callback: TFunction; } -export interface PrepareQuery< - GeneratedSchema extends { - query: object; - } -> { - any>( - fn: TFunction - ): PreparedQuery; +export type PreloadFn< + TSchema extends BaseGeneratedSchema, + TFunction extends TQueryFunction +> = (args?: Parameters[1]) => Promise>; + +export type RefetchFn< + TSchema extends BaseGeneratedSchema, + TFunction extends TQueryFunction +> = (args?: Parameters[1]) => Promise>; + +export type UsePreparedHook< + TSchema extends BaseGeneratedSchema, + TFunction extends TQueryFunction +> = ( + options?: UsePreparedQueryOptions +) => PreparedQueryState>; + +export type PreparedQueryState = { + data?: TData; + error?: GQtyError; + promise?: Promise; + isLoading: boolean; + isRefetching: boolean; + called: boolean; +}; + +export interface PrepareQuery { + >(fn: TFunction): PreparedQuery< + TSchema, + TFunction + >; } -export function createPrepareQuery< - GeneratedSchema extends { - query: object; - mutation: object; - subscription: object; - } ->( - { prefetch, query, refetch: refetchClient }: GQtyClient, +export function createPrepareQuery( + { prefetch, query, refetch: clientRefetch }: GQtyClient, { defaults: { preparedSuspense: defaultSuspense }, }: ReactClientOptionsWithDefaults ) { - const emptyDataSymbol = Symbol(); - - const prepareQuery: PrepareQuery = function prepareQuery< - TFunction extends (query: GeneratedSchema['query'], args: any) => any - >(fn: TFunction): PreparedQuery { - const state: { - data: ReturnType | typeof emptyDataSymbol; - error?: GQtyError; - isLoading: boolean; - isRefetching: boolean; - called: boolean; - } = { - data: emptyDataSymbol, + const prepareQuery: PrepareQuery = (fn) => { + type TFunction = typeof fn; + type TData = ReturnType; + + const store = createMemoryStore>({ + called: false, isLoading: false, isRefetching: false, - called: false, - }; + }); + + const preload: PreloadFn = async (args) => { + store.set({ + data: undefined, + error: undefined, + promise: undefined, + called: true, + isLoading: true, + isRefetching: false, + }); + + const promise = prefetch((query) => fn(query, args)) as + | Promise + | TData; + + if (promise instanceof Promise) { + store.add({ promise }); + } - let promiseOnTheFly: - | (Promise> & { - schedulerPromise: Promise; - }) - | undefined; - - const subscribers = new Set<() => void>(); - - function updateSubs() { - setTimeout(() => { - if (subscribers.size) { - for (const cb of subscribers) cb(); - } - }, 0); - } - - async function refetch( - ...[args]: undefined extends Parameters['1'] - ? [Parameters['1']?] - : [Parameters['1']] - ): Promise> { - state.called = true; - state.isLoading = true; - state.isRefetching = true; - updateSubs(); try { - await refetchClient(() => - fn(query, args as Parameters['1']) - ); - - return await preload( - //@ts-ignore - args - ); - } finally { - state.isLoading = false; - state.isRefetching = false; + const data = await promise; + + store.add({ + data, + promise: undefined, + isLoading: false, + }); + + return data; + } catch (error) { + store.add({ + error: GQtyError.create(error), + promise: undefined, + isLoading: false, + }); + + throw error; } - } - - async function preload( - ...[args]: undefined extends Parameters['1'] - ? [Parameters['1']?] - : [Parameters['1']] - ): Promise> { - state.called = true; - state.isLoading = true; + }; + + const refetch: RefetchFn = async (args) => { + store.set({ + data: undefined, + error: undefined, + promise: undefined, + called: true, + isLoading: false, + isRefetching: true, + }); + + const promise = clientRefetch(() => fn(query, args)) as Promise; + + store.add({ promise }); + try { - const result = prefetch( - (query) => - fn( - query, - args as Parameters['1'] - ) as ReturnType - ); - - if (result instanceof Promise) { - promiseOnTheFly = result; - updateSubs(); - result.schedulerPromise.then(({ error }) => { - if (error) { - state.error = error; - } else { - delete state.error; - } - }); - const data = (state.data = await result); - - if (promiseOnTheFly === result) promiseOnTheFly = undefined; - - return data; - } else { - delete state.error; - } - - return (state.data = result); - } finally { - state.isLoading = false; - updateSubs(); + const data = await promise; + + store.add({ + data, + promise: undefined, + isRefetching: false, + }); + + return data; + } catch (error) { + store.add({ + error: GQtyError.create(error), + promise: undefined, + isRefetching: false, + }); + + throw error; } - } + }; - function usePrepared({ + const usePrepared: UsePreparedHook = ({ suspense = defaultSuspense, - }: UsePreparedQueryOptions = {}) { - const isMounted = useIsMounted(); + } = {}) => { + const state = useSyncExternalStore(store.subscribe, store.get); - const forceUpdate = useForceUpdate(); - - if (promiseOnTheFly) { - const promise = promiseOnTheFly.then(() => { - if (isMounted.current) forceUpdate(); - }); - if (suspense) throw promise; + if (suspense) { + if (state.promise) throw state.promise; + if (state.error) throw state.error; } - useIsomorphicLayoutEffect(() => { - let isMounted = true; - const cb = () => isMounted && forceUpdate(); - subscribers.add(cb); - - return () => { - isMounted = false; - subscribers.delete(cb); - }; - }, [forceUpdate]); - - return { - ...state, - data: state.data !== emptyDataSymbol ? state.data : undefined, - }; - } + return state; + }; return { preload, diff --git a/packages/react/src/query/useLazyQuery.ts b/packages/react/src/query/useLazyQuery.ts index c549f5fcb..0efccf180 100644 --- a/packages/react/src/query/useLazyQuery.ts +++ b/packages/react/src/query/useLazyQuery.ts @@ -1,16 +1,18 @@ -import { doRetry, GQtyClient, GQtyError, RetryOptions } from 'gqty'; +import { + GQtyError, + type BaseGeneratedSchema, + type GQtyClient, + type RetryOptions, +} from 'gqty'; import * as React from 'react'; - import { - FetchPolicy, - fetchPolicyDefaultResolveOptions, - OnErrorHandler, - useDeferDispatch, - useSuspensePromise, + translateFetchPolicy, + type LegacyFetchPolicy, + type OnErrorHandler, } from '../common'; import type { ReactClientOptionsWithDefaults } from '../utils'; -export type LazyFetchPolicy = Exclude; +export type LazyFetchPolicy = Exclude; export interface UseLazyQueryOptions { onCompleted?: (data: TData) => void; @@ -18,6 +20,7 @@ export interface UseLazyQueryOptions { fetchPolicy?: LazyFetchPolicy; retry?: RetryOptions; suspense?: boolean; + operationName?: string; } export interface UseLazyQueryState { @@ -25,13 +28,14 @@ export interface UseLazyQueryState { error?: GQtyError; isLoading: boolean; isCalled: boolean; + promise?: Promise; } type UseLazyQueryReducerAction = | { type: 'cache-found'; data: TData } | { type: 'success'; data: TData } | { type: 'failure'; error: GQtyError } - | { type: 'loading' }; + | { type: 'loading'; promise: Promise }; function UseLazyQueryReducer( state: UseLazyQueryState, @@ -44,6 +48,7 @@ function UseLazyQueryReducer( data: state.data, isLoading: true, isCalled: true, + promise: action.promise, }; } case 'success': { @@ -79,13 +84,9 @@ function InitUseLazyQueryReducer(): UseLazyQueryState { }; } -export interface UseLazyQuery< - GeneratedSchema extends { - query: object; - } -> { +export interface UseLazyQuery { ( - queryFn: (query: GeneratedSchema['query'], args: TArgs) => TData, + fn: (query: GeneratedSchema['query'], args: TArgs) => TData, options?: UseLazyQueryOptions ): readonly [ ( @@ -95,6 +96,7 @@ export interface UseLazyQuery< fn?: (query: GeneratedSchema['query'], args: TArgs) => TData; args?: TArgs; fetchPolicy?: LazyFetchPolicy; + operationName?: string; }? ] : [ @@ -102,6 +104,7 @@ export interface UseLazyQuery< fn?: (query: GeneratedSchema['query'], args: TArgs) => TData; args: TArgs; fetchPolicy?: LazyFetchPolicy; + opertionName?: string; } ] ) => Promise, @@ -109,14 +112,8 @@ export interface UseLazyQuery< ]; } -export function createUseLazyQuery< - GeneratedSchema extends { - query: object; - mutation: object; - subscription: object; - } ->( - client: GQtyClient, +export function createUseLazyQuery( + { resolve }: GQtyClient, { defaults: { retry: defaultRetry, @@ -125,23 +122,28 @@ export function createUseLazyQuery< }, }: ReactClientOptionsWithDefaults ) { - const { resolved } = client; - const clientQuery: GeneratedSchema['query'] = client.query; - - const useLazyQuery: UseLazyQuery = function useLazyQuery< - TData, - TArgs = undefined - >( - fn: (query: typeof clientQuery, args: TArgs) => TData, - opts: UseLazyQueryOptions = {} - ): readonly [ - (callbackArgs?: { - fn?: (query: GeneratedSchema['query'], args: TArgs) => TData; + const useLazyQuery: UseLazyQuery = ( + fn, + { + onCompleted, + onError, + fetchPolicy: hookDefaultFetchPolicy = defaultFetchPolicy, + retry = defaultRetry, + suspense = defaultSuspense, + operationName: defaultOperationName, + } = {} + ) => { + type TCallback = typeof fn; + type TArgs = Parameters[1]; + type TData = ReturnType; + type TCallbackArgs = { + fn?: TCallback; args?: TArgs; - }) => Promise, - UseLazyQueryState - ] { - const [state, dispatchReducer] = React.useReducer( + fetchPolicy?: LazyFetchPolicy; + operationName?: string; + }; + + const [state, dispatch] = React.useReducer( UseLazyQueryReducer, undefined, InitUseLazyQueryReducer @@ -149,128 +151,63 @@ export function createUseLazyQuery< UseLazyQueryState, React.Dispatch> ]; - const dispatch = useDeferDispatch(dispatchReducer); - - const stateRef = React.useRef(state); - stateRef.current = state; - - const fnRef = React.useRef(fn); - fnRef.current = fn; - - const optsRef = React.useRef(opts); - optsRef.current = Object.assign({}, opts); - optsRef.current.suspense ??= defaultSuspense; - - const setSuspensePromise = useSuspensePromise(optsRef); - const queryFn = React.useCallback( - function callback( - callbackArgs: { - fn?: typeof fn; - args?: any; - fetchPolicy?: LazyFetchPolicy; - } = {} - ) { - dispatch({ - type: 'loading', - }); - - const { - fn: fnArg, - args, - fetchPolicy = optsRef.current.fetchPolicy ?? defaultFetchPolicy, - } = callbackArgs; - - const refFn = fnRef.current; - - const functionResolve = fnArg - ? () => fnArg(clientQuery, args) - : refFn - ? () => refFn(clientQuery, args) - : (() => { - throw new GQtyError( - 'You have to specify a function to be resolved', - { - caller: callback, - } - ); - })(); - - const resolveOptions = fetchPolicyDefaultResolveOptions(fetchPolicy); + if (suspense) { + if (state.promise) throw state.promise; + if (state.error) throw state.error; + } - return resolved(functionResolve, { - ...resolveOptions, - onCacheData(data): boolean { - switch (fetchPolicy) { - case 'cache-and-network': { - dispatch({ - type: 'cache-found', - data, - }); - stateRef.current.data = data; - return true; - } - default: - return false; + return React.useMemo(() => { + const fetchQuery = async ({ + fn: resolveFn = fn, + args, + fetchPolicy = hookDefaultFetchPolicy, + operationName = defaultOperationName, + }: TCallbackArgs = {}) => { + let innerFetchPromise: Promise | undefined; + + try { + const fetchPromise = resolve( + ({ query }) => resolveFn(query, args as TArgs), + { + awaitsFetch: false, + cachePolicy: translateFetchPolicy(fetchPolicy), + onFetch(promise) { + innerFetchPromise = promise as Promise; + }, + retryPolicy: retry, + operationName, } - }, - }).then( - (data) => { - optsRef.current.onCompleted?.(data); - dispatch({ - type: 'success', - data, - }); - return data; - }, - (err) => { - const error = GQtyError.create(err, useLazyQuery); - optsRef.current.onError?.(error); - dispatch({ - type: 'failure', - error, - }); - - throw error; - } - ); - }, - [fnRef, dispatch, optsRef] - ); - - const { retry = defaultRetry } = opts; + ).then((data) => { + const typedData = data as TData; - return React.useMemo(() => { - const fn: typeof queryFn = retry - ? (...args) => { - const promise = queryFn(...args).catch((err) => { - doRetry(retry, { - onRetry: () => { - const promise = queryFn(...args).then(() => {}); + if (fetchPolicy === 'cache-and-network') { + dispatch({ type: 'cache-found', data: typedData }); + } - setSuspensePromise(promise); + return innerFetchPromise ?? typedData; + }); - return promise; - }, - }); + dispatch({ type: 'loading', promise: fetchPromise }); - throw err; - }); + const data = await fetchPromise; - setSuspensePromise(promise); + onCompleted?.(data); + dispatch({ type: 'success', data }); - return promise; - } - : (...args: any[]) => { - const promise = queryFn(...args); + return data; + } catch (error) { + const typedError = GQtyError.create(error); - setSuspensePromise(promise); + onError?.(typedError); + dispatch({ type: 'failure', error: typedError }); - return promise; - }; + throw error; + } + }; - return [fn, state]; - }, [state, queryFn, retry, optsRef, setSuspensePromise]); + return Object.freeze([fetchQuery, state]); + }, [fn, onCompleted, onError, retry]); }; return useLazyQuery; diff --git a/packages/react/src/query/usePaginatedQuery.ts b/packages/react/src/query/usePaginatedQuery.ts index 98c823e26..733bc815d 100644 --- a/packages/react/src/query/usePaginatedQuery.ts +++ b/packages/react/src/query/usePaginatedQuery.ts @@ -1,20 +1,21 @@ -import type { GQtyClient } from 'gqty'; +import { + GQtyError, + type BaseGeneratedSchema, + type GQtyClient, + type RetryOptions, +} from 'gqty'; import * as React from 'react'; - import { coreHelpers, - CoreHelpers, - FetchPolicy, sortBy, + translateFetchPolicy, uniqBy, - useSelectionsState, - useSubscribeCacheChanges, - useSuspensePromise, + type LegacyFetchPolicy, } from '../common'; -import type { ReactClientOptionsWithDefaults } from '../utils'; +import { type ReactClientOptionsWithDefaults } from '../utils'; export type PaginatedQueryFetchPolicy = Extract< - FetchPolicy, + LegacyFetchPolicy, 'cache-first' | 'cache-and-network' | 'network-only' >; @@ -41,9 +42,12 @@ export interface UsePaginatedQueryOptions { /** * Fetch Policy behavior * - * If using `cache-and-network` and `merge`, we recomend using the `uniqBy` helper included inside the `merge` parameters. + * If using `cache-and-network` and `merge`, we recomend using the `uniqBy` + * helper included inside the `merge` parameters. */ fetchPolicy?: PaginatedQueryFetchPolicy; + operationName?: string; + retry?: RetryOptions; /** * Skip initial query call * @@ -74,11 +78,13 @@ export interface UsePaginatedQueryData { * * If new args are not specified, the previous or initial args are used * - * In the second parameter you can override the `"fetchPolicy"`, for example you can set it to `"network-only"` to do a refetch. + * In the second parameter you can override the `"fetchPolicy"`, for example + * you can set it to `"network-only"` to do a refetch. */ fetchMore: ( /** - * Optional new args. It can receive a function that receives the previous data/args and returns the new args, or the new args directly + * Optional new args. It can receive a function that receives the previous + * data/args and returns the new args, or the new args directly * * If not specified or `undefined`, the previous or initial args are used. */ @@ -91,75 +97,6 @@ export interface UsePaginatedQueryData { */ fetchPolicy?: PaginatedQueryFetchPolicy ) => Promise | TData; - /** - * Has the function been called - */ - called: boolean; -} - -interface UsePaginatedQueryState { - data: TData | undefined; - args: TArgs; - isLoading: boolean; - called: boolean; -} - -type UsePaginatedQueryReducerAction = - | { - type: 'loading'; - } - | { - type: 'cache_found'; - payload: TData; - } - | { - type: 'data'; - payload: TData; - }; - -function UsePaginatedQueryReducer( - state: UsePaginatedQueryState, - action: UsePaginatedQueryReducerAction -): UsePaginatedQueryState { - switch (action.type) { - case 'loading': { - if (state.isLoading) return state; - return { - ...state, - isLoading: true, - called: true, - }; - } - case 'cache_found': { - return { - data: action.payload, - args: state.args, - isLoading: true, - called: true, - }; - } - case 'data': { - return { - data: action.payload, - args: state.args, - isLoading: false, - called: true, - }; - } - default: - return state; - } -} - -function InitUsePaginatedQueryReducer( - opts: UsePaginatedQueryOptions -): UsePaginatedQueryState { - return { - data: undefined, - args: opts.initialArgs, - isLoading: !opts.skip, - called: false, - }; } export interface FetchMoreCallbackArgs { @@ -167,202 +104,226 @@ export interface FetchMoreCallbackArgs { existingArgs: TArgs; } -export interface UsePaginatedQuery< - GeneratedSchema extends { - query: object; - mutation: object; - subscription: object; - } -> { +export interface UsePaginatedQuery { | string | number | null>( fn: ( - query: GeneratedSchema['query'], + query: TSchema['query'], args: TArgs, - helpers: CoreHelpers + helpers: typeof coreHelpers ) => TData, options: UsePaginatedQueryOptions ): UsePaginatedQueryData; } -export function createUsePaginatedQuery< - GeneratedSchema extends { - query: object; - mutation: object; - subscription: object; - } ->( - { - query: clientQuery, - inlineResolved, - eventHandler, - }: GQtyClient, - { - defaults: { - paginatedQueryFetchPolicy: defaultFetchPolicy, - paginatedQuerySuspense: defaultSuspense, - }, - }: ReactClientOptionsWithDefaults -): UsePaginatedQuery { - function usePaginatedQuery< - TData, - TArgs extends Record | string | number | null - >( - fn: (query: typeof clientQuery, args: TArgs, helpers: CoreHelpers) => TData, - opts: UsePaginatedQueryOptions - ): UsePaginatedQueryData { - const fnRef = React.useRef(fn); - fnRef.current = fn; +export const createUsePaginatedQuery = + ( + { createResolver, resolve }: GQtyClient, + { + defaults: { + paginatedQueryFetchPolicy: defaultFetchPolicy, + paginatedQuerySuspense: defaultSuspense, + }, + }: ReactClientOptionsWithDefaults + ): UsePaginatedQuery => + ( + fn, + { + initialArgs, + fetchPolicy: hookFetchPolicy = defaultFetchPolicy, + merge, + retry, + skip = false, + suspense = defaultSuspense, + operationName, + } + ) => { + type TCallback = typeof fn; + type TArgs = Parameters[1]; + type TData = ReturnType; + + const { + accessor: { query }, + context, + selections, + } = React.useMemo( + () => + createResolver({ + cachePolicy: translateFetchPolicy(hookFetchPolicy), + operationName, + retryPolicy: retry, + }), + [hookFetchPolicy, operationName, retry] + ); - const optsRef = React.useRef(opts); - optsRef.current = Object.assign({}, opts); + // Debounce to skip one render on mount, when the cache is already fresh. + const [state, setState] = React.useState<{ + data?: TData; + args: TArgs; + promise?: Promise; + error?: GQtyError; + }>({ + args: initialArgs, + }); - optsRef.current.fetchPolicy ??= defaultFetchPolicy; - optsRef.current.suspense ??= defaultSuspense; + if (suspense) { + if (state.promise) throw state.promise; + if (state.error) throw state.error; + } - const [state, dispatch] = React.useReducer( - UsePaginatedQueryReducer, - opts, - InitUsePaginatedQueryReducer - ) as [ - UsePaginatedQueryState, - React.Dispatch> - ]; + const mergeData = React.useCallback( + (incoming: TData) => + merge?.({ + data: { + existing: state.data, + incoming, + }, + uniqBy, + sortBy, + }) ?? incoming, + [merge] + ); - const selections = useSelectionsState(); + const fetchData = React.useCallback( + async ( + args: TArgs, + fetchPolicy: PaginatedQueryFetchPolicy = hookFetchPolicy + ) => { + const promise = resolve(({ query }) => fn(query, args, coreHelpers), { + cachePolicy: translateFetchPolicy(fetchPolicy), + operationName, + retryPolicy: retry, + onSelect(selection, cache) { + context.select(selection, cache); + }, + }) as Promise; - const stateRef = React.useRef(state); - stateRef.current = state; + if (!context.shouldFetch) { + state.data = mergeData(fn(query, args, coreHelpers)); - const setSuspensePromise = useSuspensePromise(optsRef); + return state.data; + } - const isMerging = React.useRef(0); + if (hookFetchPolicy === 'cache-and-network' && context.hasCacheHit) { + state.data = mergeData(fn(query, args, coreHelpers)); + } - const fetchMore = React.useCallback( - ( - newArgs?: - | ((data: FetchMoreCallbackArgs) => TArgs) - | TArgs, - fetchPolicy: PaginatedQueryFetchPolicy = optsRef.current.fetchPolicy || - defaultFetchPolicy - ) => { - function mergeData(incomingData: TData) { - let mergeResult: TData | void | undefined; + state.promise = promise; - if (optsRef.current.merge) { - const params: UsePaginatedQueryMergeParams = { - data: { - incoming: incomingData, - existing: stateRef.current.data, - }, - uniqBy, - sortBy, - }; - try { - ++isMerging.current; - mergeResult = optsRef.current.merge(params); - } finally { - Promise.resolve().then(() => --isMerging.current); - } + promise.finally(() => { + if (state.promise === promise) { + state.promise = undefined; } + }); - return mergeResult === undefined ? incomingData : mergeResult; - } - - let args: TArgs = - newArgs !== undefined - ? typeof newArgs === 'function' - ? (stateRef.current.args = ( - newArgs as ( - data: FetchMoreCallbackArgs - ) => TArgs - )({ - existingData: stateRef.current.data, - existingArgs: stateRef.current.args, - })) - : (stateRef.current.args = newArgs) - : stateRef.current.args; - - const resolvedFn = () => fnRef.current(clientQuery, args, coreHelpers); + return promise; + }, + [ + context, + coreHelpers, + fn, // fn almost guaranteed to change on every render + hookFetchPolicy, + mergeData, + operationName, + query, + retry, + ] + ); - const refetch = fetchPolicy !== 'cache-first'; + // Call it once on first render + React.useState(() => { + if (skip) return setState(({ args }) => ({ args })); - let incomingData = inlineResolved(resolvedFn, { - onSelection(selection) { - selections.add(selection); - }, - refetch, - onCacheData(data) { - if (fetchPolicy === 'cache-and-network') { - const payload = mergeData(data); + const promise = fetchData(initialArgs); - stateRef.current.data = payload; - dispatch({ - type: 'cache_found', - payload, - }); - } + promise + .then( + (data) => { + setTimeout(() => { + setState(({ args }) => ({ args, data })); + }, 1000); }, + (error) => { + setState(({ args }) => ({ + args, + error: GQtyError.create(error), + })); + } + ) + .finally(() => { + context.shouldFetch = false; }); - if (incomingData instanceof Promise) { - dispatch({ - type: 'loading', - }); - - return incomingData.then((incomingData) => { - const payload = mergeData(incomingData); - stateRef.current.data = payload; - - dispatch({ - type: 'data', - payload, - }); - return payload; - }); + if (context.shouldFetch) { + if (suspense) { + throw promise; + } else { + setState(({ args }) => ({ args, promise })); } + } + }); - const payload = mergeData(incomingData); - stateRef.current.data = payload; + // Re-render when normalized objects are updated, also resubscribe on + // selection change to pick up newly fetched normalized objects. + React.useEffect(() => { + if (skip || selections.size === 0) return; - dispatch({ - type: 'data', - payload, - }); - return payload; - }, - [stateRef, fnRef, dispatch, optsRef, setSuspensePromise] - ); + return context.cache.subscribe( + [...selections].map((s) => s.cacheKeys.join('.')), + () => setState((state) => ({ ...state })) + ); + }, [selections.size]); - useSubscribeCacheChanges({ - selections, - eventHandler, - onChange() { - if (isMerging.current) return; + const fetchMore = React.useCallback( + async ( + newArgs?: + | ((data: FetchMoreCallbackArgs) => TArgs) + | TArgs, + fetchPolicy?: PaginatedQueryFetchPolicy + ) => { + const currentArgs = + typeof newArgs === 'function' + ? newArgs({ existingData: state.data, existingArgs: state.args }) + : newArgs ?? state.args; - fetchMore(undefined, 'cache-first'); - }, - }); + try { + const promise = fetchData(currentArgs, fetchPolicy); + // setState((state) => ({ ...state, promise })); - if (!state.called && !opts.skip) { - state.called = true; - const result = fetchMore(); + const data = await promise.then(mergeData); + setState(({ args }) => ({ args, data })); - if (result instanceof Promise) { - const catchedPromise = result.catch(console.error); - if (state.data === undefined) { - Promise.resolve().then(() => { - setSuspensePromise(catchedPromise); - }); - } - } - } + return data; + } catch (e) { + const error = GQtyError.create(e); + setState(({ args }) => ({ args, error })); - return React.useMemo(() => { - return Object.assign(state, { - fetchMore, - }); - }, [state, fetchMore]); - } + throw error; + } + }, + [fetchData] + ); - return usePaginatedQuery; -} + // Subscribe to cache change + React.useEffect(() => { + return context.cache.subscribe( + [...selections].map((s) => s.cacheKeys.join('.')), + () => { + setState((state) => ({ + ...state, + data: fn(query, state.args, coreHelpers), + })); + } + ); + }, [fn, state, selections.size]); + + return React.useMemo( + () => + Object.freeze({ + args: state.args, + data: state.data, + fetchMore, + isLoading: state.promise !== undefined, + }), + [state.args, state.data, fetchMore, state.promise] + ); + }; diff --git a/packages/react/src/query/useQuery.ts b/packages/react/src/query/useQuery.ts index a7ebaa74c..2cc14bd99 100644 --- a/packages/react/src/query/useQuery.ts +++ b/packages/react/src/query/useQuery.ts @@ -1,14 +1,28 @@ -import { GQtyClient, GQtyError, prepass, SelectionType } from 'gqty'; -import * as React from 'react'; - import { - IS_BROWSER, - OnErrorHandler, - useForceUpdate, - useInterceptSelections, - useIsomorphicLayoutEffect, + useIntervalEffect, + usePrevious, + useRerender, + useUpdateEffect, +} from '@react-hookz/web'; +import { + GQtyError, + prepass, + type BaseGeneratedSchema, + type GQtyClient, + type RetryOptions, +} from 'gqty'; +import { MultiDict } from 'multidict'; +import { useCallback, useEffect, useMemo, useState } from 'react'; +import ModifiedSet from '../ModifiedSet'; +import { + translateFetchPolicy, + type LegacyFetchPolicy, + type OnErrorHandler, } from '../common'; -import type { ReactClientOptionsWithDefaults } from '../utils'; +import { useOnlineEffect } from '../useOnlineEffect'; +import { useRenderSession } from '../useRenderSession'; +import { useWindowFocusEffect } from '../useWindowFocusEffect'; +import { type ReactClientOptionsWithDefaults } from '../utils'; export interface UseQueryPrepareHelpers< GeneratedSchema extends { @@ -18,26 +32,33 @@ export interface UseQueryPrepareHelpers< readonly prepass: typeof prepass; readonly query: GeneratedSchema['query']; } -export interface UseQueryOptions< - GeneratedSchema extends { - query: object; - } = never -> { +export interface UseQueryOptions { + cachePolicy?: RequestCache; + extensions?: Record; + fetchInBackground?: boolean; + fetchPolicy?: LegacyFetchPolicy; + notifyOnNetworkStatusChange?: boolean; onError?: OnErrorHandler; - prepare?: (helpers: UseQueryPrepareHelpers) => void; + operationName?: string; + prepare?: (helpers: UseQueryPrepareHelpers) => void; + refetchInterval?: number; + refetchOnReconnect?: boolean; + refetchOnRender?: boolean; refetchOnWindowVisible?: boolean; + retry?: RetryOptions; + retryPolicy?: RetryOptions; staleWhileRevalidate?: boolean | object | number | string | null; suspense?: boolean; + __experimentalGreedyFetch?: boolean; } export interface UseQueryState { - /** - * Useful for `Non-Suspense` usage. - */ + /** Useful for `Non-Suspense` usage. */ readonly isLoading: boolean; /** - * Latest scheduler Error, for more in-depth error management use `useMetaState` hook + * Latest scheduler Error, for more in-depth error management use + * `useMetaState` hook */ error?: GQtyError; } @@ -47,146 +68,346 @@ export type Writeable = { -readonly [P in keyof T]: T[P] }; export type UseQueryReturnValue = GeneratedSchema['query'] & { $state: UseQueryState; - $refetch: () => Promise | void; + $refetch: ( + /** + * Hard refetch, ignoring current cache freshness. + * + * @default true + */ + ignoreCache?: boolean + ) => Promise; }; + export interface UseQuery { ( options?: UseQueryOptions ): UseQueryReturnValue; } -export function createUseQuery< - GeneratedSchema extends { - query: object; - mutation: object; - subscription: object; - } ->( - { - scheduler, - eventHandler, - interceptorManager, - query, - buildAndFetchSelections, - }: GQtyClient, +export const createUseQuery = ( + client: GQtyClient, { defaults: { suspense: defaultSuspense, staleWhileRevalidate: defaultStaleWhileRevalidate, + retry: defaultRetry, }, }: ReactClientOptionsWithDefaults -) { - const errorsMap = scheduler.errors.map; - const getLastError = () => Array.from(errorsMap.values()).pop(); - const prepareHelpers: UseQueryPrepareHelpers = { - prepass, - query, - }; +): UseQuery => { + type ResolverParts = ReturnType; + + const cofetchingResolvers = new MultiDict(); + + // We keep track of the whole stack of resolvers ever created before a fetch + // happens. When the current cache has normalization disabled, and a fetch + // affects an existing cache key at the same time, all selections made in + // other contexts will also be included. + const resolverStack = new ModifiedSet(); - const useQuery: UseQuery = function useQuery({ + return ({ + extensions, + fetchInBackground = false, + fetchPolicy, + cachePolicy = translateFetchPolicy(fetchPolicy ?? 'cache-first'), + suspense = defaultSuspense, + notifyOnNetworkStatusChange = !suspense, onError, + operationName, prepare, - refetchOnWindowVisible = false, + refetchInterval, + refetchOnReconnect = true, + refetchOnRender = true, + refetchOnWindowVisible = true, + retry = defaultRetry, + retryPolicy = retry, staleWhileRevalidate = defaultStaleWhileRevalidate, - suspense = defaultSuspense, - } = {}) { - const [$state] = React.useState( - (): Writeable => ({ - get isLoading() { - return fetchingPromise.current !== null; + __experimentalGreedyFetch, + } = {}) => { + const render = useRerender(); + const renderSession = useRenderSession(); + + renderSession.set('isRendering', true); + + const resolver = useMemo(() => { + const resolver = client.createResolver({ + cachePolicy, + extensions, + operationName, + retryPolicy, + onSelect() { + // Stick these resolvers together, their selections will be fetched + // when either one of them requires a fetch. + const currentResolver = resolverStack.lastAdded; + if (currentResolver && currentResolver !== resolver) { + cofetchingResolvers.set(currentResolver, resolver); + } + + // Any selections happening will have this resolver stacked. When a + // fetch happens without cache normalization, all stacked resovlers + // with selections sharing common cache keys are also included. + resolverStack.add(resolver); + + // Trigger a fetch when selections are made outside of the rendering + // phase, such as event listeners or polling. + if (!renderSession.get('isRendering')) { + refetch({ skipPrepass: true }); + } + // Clears previous selections if the current render is not triggered + // by a fetch, because it implies a user-triggered state change where + // old query inputs may be stale. Only clear selections once right + // when the first selection is made. + else if ( + !renderSession.get('postFetch') && + !renderSession.get('postFetchSelectionCleared') + ) { + renderSession.set('postFetchSelectionCleared', true); + + selections.clear(); + } }, - error: getLastError(), - }) - ); - const { fetchingPromise, selections } = useInterceptSelections({ - staleWhileRevalidate, - eventHandler, - interceptorManager, - scheduler, - onError, - updateOnFetchPromise: true, - }); + }); + + return resolver; + }, [cachePolicy, operationName, retryPolicy]); + + const { + accessor: { query }, + accessor, + context, + resolve, + selections, + } = resolver; + + const [state, setState] = useState<{ + error?: GQtyError; + promise?: Promise; + }>({}); + // With `prepare`, selections are only collected within the provided + // function. Accessing other properties in the proxy should not trigger + // further fetches. if (prepare) { - try { - prepare(prepareHelpers); - } catch (err) { - if (err instanceof Error && Error.captureStackTrace!) { - Error.captureStackTrace(err, useQuery); - } - throw err; + context.shouldFetch = false; + + prepare({ prepass, query }); + + // When using prepare with suspense, the promise should be thrown + // immediately. + if (context.shouldFetch && suspense) { + throw client.resolve(({ query }) => prepare({ prepass, query }), { + cachePolicy, + operationName, + retryPolicy, + }); } } - useIsomorphicLayoutEffect( + if (suspense) { + if (state.error) throw state.error; + + // Prevents excessive suspense fallback, throws only on empty cache. + if (state.promise && !context.hasCacheHit) throw state.promise; + } + + useEffect( () => - scheduler.errors.subscribeErrors((ev) => { - switch (ev.type) { - case 'errors_clean': - case 'new_error': { - $state.error = getLastError(); + context.cache.subscribe( + [...selections].map((s) => s.cacheKeys.join('.')), + render + ), + [render, selections.size] + ); + + const refetch = useCallback( + async (options?: { ignoreCache?: boolean; skipPrepass?: boolean }) => { + if (state.promise !== undefined) { + return; + } + + if ( + !fetchInBackground && + globalThis.document?.visibilityState === 'hidden' + ) { + return; + } + + // Run the current selection again to make sure cache freshness. + if (!options?.skipPrepass) { + prepass(accessor, selections); + } + + if (options?.ignoreCache === true) { + context.shouldFetch = true; + } + + if (!context.shouldFetch) { + return; + } + + try { + // Forcibly includes all resolvers in the same render when one of them + // requires a fetch. + if (__experimentalGreedyFetch) { + for (const stackResolver of resolverStack) { + cofetchingResolvers.set(resolver, stackResolver); } } - }), - [] - ); - if (fetchingPromise.current && suspense) { - throw fetchingPromise.current; - } + // Stitch stacked selections what shared the same cache key, even if + // those selections don't need fetching. Because without normalization + // they will be overwritten by this fetch. + // [ ] There is one overfetch triggered by parallel renders that I + // cannot eliminate right now. Deferring to future me. + if (!client.cache.normalizationOptions) { + for (const { + cacheKeys: [subType, subField], + } of selections) { + if (subType !== 'query') { + continue; + } + + for (const stackResolver of resolverStack) { + if (stackResolver === resolver) { + continue; + } + + for (const { + cacheKeys: [objType, objField], + } of stackResolver.selections) { + if (subType == objType && subField == objField) { + cofetchingResolvers.set(resolver, stackResolver); + + continue; + } + } + } + } + } + + // Sticky co-fetching selections is only needed when more than one + // active context are making selections in one component. This usually + // happens with mixed usage of useQuery and other query methods. + const pendingPromises = [...(cofetchingResolvers.get(resolver) ?? [])] + .map(async ({ context, resolve }) => { + context.shouldFetch = true; + + return resolve(); + }) + .concat(resolve()); + + const promise = Promise.all(pendingPromises); + + // Mutex lock, prevents multiple refetches from happening at the + // same time, without triggering a render. + state.promise = promise; - const forceUpdate = useForceUpdate(); - const refetch = async ({ force = false }: { force?: boolean } = {}) => { - if (!force && fetchingPromise.current) { - return fetchingPromise.current; + if (!context.hasCacheHit && notifyOnNetworkStatusChange) { + setState({ promise }); + } + + // Let the fetch happen. + await promise; + } catch (e) { + const error = GQtyError.create(e); + + onError?.(error); + setState({ error }); + } finally { + context.shouldFetch = false; + context.hasCacheHit = false; + context.hasCacheMiss = false; + context.notifyCacheUpdate = cachePolicy !== 'default'; + state.promise = undefined; + + // Release co-fetching context, dropping reference to the last + // resolver created in current render to prevent it from affecting the + // next render. + resolverStack.clear(); + cofetchingResolvers.delete(resolver); + + renderSession.set('postFetch', true); + + // Trigger a post-fetch render, keeps the error if caught. + setState(({ error }) => ({ error })); + } + }, + [ + cachePolicy, + context.shouldFetch, + fetchInBackground, + operationName, + selections, + ] + ); + + // context.shouldFetch only changes during component render, which happens + // after this hook is called. A useEffect hook that runs every render + // triggers a post-render check. + useEffect(() => { + if (!refetchOnRender) { + return; } - const promise = buildAndFetchSelections( - Array.from(selections).filter((v) => v.type === SelectionType.Query), - 'query' - ); - fetchingPromise.current = promise; - forceUpdate(); + refetch({ skipPrepass: true }); + }); - await promise; + // refetchInterval + useIntervalEffect(() => { + refetch(); + }, refetchInterval); - if (fetchingPromise.current === promise) { - fetchingPromise.current = null; - forceUpdate(); + // refetchOnReconnect + useOnlineEffect(() => { + if (!refetchOnReconnect) { + return; } - }; - useIsomorphicLayoutEffect(() => { - if (!refetchOnWindowVisible || !IS_BROWSER) return; + refetch(); + }, [refetchOnReconnect]); - const refetches = () => refetch(); + // A rerender should be enough to trigger a soft check, fetch will + // happen if any of the accessed cache value is stale. + useWindowFocusEffect(() => { + if (!refetchOnWindowVisible) { + return; + } - window.addEventListener('visibilitychange', refetches); - window.addEventListener('focus', refetches); + refetch(); + }); - return () => { - window.removeEventListener('visibilitychange', refetches); - window.removeEventListener('focus', refetches); - }; - }, [refetchOnWindowVisible]); + // Legacy staleWhileRevalidate + const swrDiff = usePrevious(staleWhileRevalidate); + useUpdateEffect(() => { + if (!staleWhileRevalidate || Object.is(staleWhileRevalidate, swrDiff)) { + return; + } - return React.useMemo(() => { - return new Proxy>( - { - $state, - $refetch: refetch, - }, + refetch({ ignoreCache: true }); + }, [refetch, swrDiff]); + + return useMemo(() => { + return new Proxy( + Object.freeze({ + $refetch: (ignoreCache = true) => refetch({ ignoreCache }), + $state: Object.freeze({ + isLoading: state.promise !== undefined, + error: state.error, + }), + }), { - set(_, key, value) { - return Reflect.set(query, key, value); - }, - get(target, key) { - return Reflect.get(target, key) ?? Reflect.get(query, key); - }, + get: (target, key, proxy) => + Reflect.get(target, key, proxy) ?? + Reflect.get( + prepare && cachePolicy !== 'no-store' + ? // Using global schema accessor prevents the second pass fetch + // essentially let `prepare` decides what data to fetch, data + // placeholder will always render in case of a cache miss. + client.schema.query + : query, + key + ), } ); - }, [$state]); + }, [query, refetch, state]); }; - - return useQuery; -} +}; diff --git a/packages/react/src/query/useRefetch.ts b/packages/react/src/query/useRefetch.ts index 83c43d861..857dc6bd5 100644 --- a/packages/react/src/query/useRefetch.ts +++ b/packages/react/src/query/useRefetch.ts @@ -1,172 +1,120 @@ import { - doRetry, - GQtyClient, GQtyError, - RetryOptions, - SelectionType, + Selection, + type BaseGeneratedSchema, + type GQtyClient, + type RetryOptions, } from 'gqty'; import * as React from 'react'; -import { useIsomorphicLayoutEffect, useSelectionsState } from '../common'; -import type { ReactClientOptionsWithDefaults } from '../utils'; +import { type ReactClientOptionsWithDefaults } from '../utils'; interface UseRefetchState { isLoading: boolean; error?: GQtyError; -} - -type UseRefetchReducerAction = - | { type: 'loading' } - | { type: 'done' } - | { type: 'error'; error: GQtyError }; - -function UseRefetchReducer( - state: UseRefetchState, - action: UseRefetchReducerAction -): UseRefetchState { - switch (action.type) { - case 'loading': { - if (state.isLoading) return state; - - return { isLoading: true }; - } - case 'done': { - return { isLoading: false }; - } - case 'error': { - return { isLoading: false, error: action.error }; - } - } + startWatching: () => void; + stopWatching: () => void; } export interface UseRefetchOptions { notifyOnNetworkStatusChange?: boolean; - startWatching?: boolean; + operationName?: string; retry?: RetryOptions; + startWatching?: boolean; + suspense?: boolean; } -export interface UseRefetch { +export interface UseRefetch { (refetchOptions?: UseRefetchOptions): (( - refetchArg?: T | (() => T) + refetchArg?: T | ((query: TSchema['query']) => T) ) => Promise) & UseRefetchState; } -export function createUseRefetch( - client: GQtyClient, +export const createUseRefetch = ( + client: GQtyClient, { defaults: { retry: defaultRetry } }: ReactClientOptionsWithDefaults -) { - const { interceptorManager, buildAndFetchSelections, refetch } = client; - - const useRefetch: UseRefetch = function useRefetch( - refetchOptions - ): ((refetchArg?: T | (() => T)) => Promise) & - UseRefetchState { - const [options] = React.useState(() => ({ - notifyOnNetworkStatusChange: true, - startWatching: true, - retry: defaultRetry, - ...refetchOptions, - })); - - const [innerState] = React.useState(() => ({ - watching: options.startWatching, - startWatching() { - this.watching = true; - }, - stopWatching() { - this.watching = false; - }, - })); - - const selections = useSelectionsState(); - const [state, dispatch] = React.useReducer( - UseRefetchReducer, - undefined, - () => ({ isLoading: false }) +) => { + const useRefetch: UseRefetch = ({ + notifyOnNetworkStatusChange = true, + operationName, + startWatching = true, + retry = defaultRetry, + suspense = false, + } = {}) => { + const [state, setState] = React.useState<{ + error?: GQtyError; + promise?: Promise; + }>(); + const watchingRef = React.useRef(startWatching); + const [selections] = React.useState(() => new Set()); + + // All selections from this component down the rendering tree, this almost + // 100% guaranteed to be more than necessary as a refetch. This is necessary + // as long as useRefetch() exists as a separate hook, and accepts no + // parameters as one of the overloads. React provides no way to identify a + // component and potentially gain access to the SchemaContext from other + // query hooks. + const [unsubscribeSelections] = React.useState(() => + client.subscribeLegacySelections((selection) => { + if (watchingRef.current && selection.root.key === 'query') { + selections.add(selection); + } + }) ); + React.useEffect(() => unsubscribeSelections, [unsubscribeSelections]); - const interceptor = interceptorManager.createInterceptor(); - - setTimeout(() => { - interceptorManager.removeInterceptor(interceptor); - }, 0); - - useIsomorphicLayoutEffect(() => { - interceptorManager.removeInterceptor(interceptor); - }); - - interceptor.selectionAddListeners.add((selection) => { - if (!innerState.watching) return; - - selections.add(selection); - }); - - interceptor.selectionCacheListeners.add((selection) => { - if (!innerState.watching) return; - - selections.add(selection); - }); + if (suspense) { + if (state?.promise) throw state?.promise; + if (state?.error) throw state?.error; + } - const refetchCallback = React.useCallback( - async ( - proxyOrFn?: T | (() => T) + const refetch = React.useCallback( + async ( + fnArg?: T | ((query: TSchema['query']) => T) ): Promise => { - if (options.notifyOnNetworkStatusChange) { - dispatch({ type: 'loading' }); - } + const promise = (() => { + if (fnArg) return client.refetch(fnArg); - try { - const refetchData = proxyOrFn - ? await refetch(proxyOrFn) - : await (async () => { - const selectionsToRefetch = Array.from(selections).filter( - (v) => v.type === SelectionType.Query - ); - if ( - process.env.NODE_ENV !== 'production' && - selectionsToRefetch.length === 0 - ) { - console.warn('Warning! No selections available to refetch!'); - } - - return buildAndFetchSelections(selectionsToRefetch, 'query'); - })(); + const { context, resolve } = client.createResolver({ + retryPolicy: retry, + operationName, + }); - dispatch({ type: 'done' }); + selections.forEach((selection) => { + context.select(selection); + }); - return refetchData; - } catch (err) { - const error = GQtyError.create(err, useRefetch); + return resolve() as Promise; + })(); - dispatch({ type: 'error', error }); + setState({ promise }); - throw error; + try { + return (await promise) as T; + } catch (error) { + const theError = GQtyError.create(error); + setState({ error: theError }); + throw theError; } }, - [selections, dispatch, options] + [notifyOnNetworkStatusChange, operationName, retry] ); - const { retry } = options; - - return React.useMemo(() => { - const fn = refetchCallback.bind(undefined); - const returnValue: ReturnType = Object.assign( - retry - ? async (...args: any[]): Promise => { - try { - return await fn(...args); - } catch (err) { - doRetry(retry, { onRetry: () => fn(...args) }); - throw err; - } - } - : fn, - state - ); - - return returnValue; - }, [refetchCallback, state, retry]); + return React.useMemo( + () => + Object.assign(refetch, { + isLoading: state?.promise !== undefined, + error: state?.error, + startWatching: () => { + watchingRef.current = true; + }, + stopWatching: () => { + watchingRef.current = false; + }, + }), + [] + ); }; return useRefetch; -} +}; diff --git a/packages/react/src/query/useTransactionQuery.ts b/packages/react/src/query/useTransactionQuery.ts index f5c4f8152..835aa9be7 100644 --- a/packages/react/src/query/useTransactionQuery.ts +++ b/packages/react/src/query/useTransactionQuery.ts @@ -1,104 +1,27 @@ +import { useUpdateEffect } from '@react-hookz/web'; import { - doRetry, - GQtyClient, - GQtyError, - ResolveOptions, - RetryOptions, + type BaseGeneratedSchema, + type GQtyError, + type RetryOptions, } from 'gqty'; -import * as React from 'react'; - import { - FetchPolicy, - fetchPolicyDefaultResolveOptions, - OnErrorHandler, - useDeferDispatch, - useIsWindowVisible, - useSelectionsState, - useSubscribeCacheChanges, - useSuspensePromise, - useUpdateEffect, + translateFetchPolicy, + type LegacyFetchPolicy, + type OnErrorHandler, } from '../common'; import type { ReactClientOptionsWithDefaults } from '../utils'; +import type { UseQuery } from './useQuery'; export interface UseTransactionQueryState { - data: TData | undefined; + data?: TData; error?: GQtyError; isLoading: boolean; isCalled: boolean; } -type UseTransactionQueryReducerAction = - | { type: 'cache-found'; data: TData } - | { type: 'success'; data: TData } - | { type: 'failure'; error: GQtyError } - | { type: 'loading' } - | { - type: 'done'; - }; - -function UseTransactionQueryReducer( - state: UseTransactionQueryState, - action: UseTransactionQueryReducerAction -): UseTransactionQueryState { - switch (action.type) { - case 'loading': { - if (state.isLoading) return { ...state }; - return { - data: state.data, - isLoading: true, - isCalled: true, - }; - } - case 'success': { - return { - data: action.data, - isLoading: false, - isCalled: true, - }; - } - case 'cache-found': { - return { - data: action.data, - isLoading: state.isLoading, - isCalled: true, - }; - } - case 'failure': { - return { - data: state.data, - isLoading: false, - error: action.error, - isCalled: true, - }; - } - case 'done': { - if (state.isLoading) { - return { - data: state.data, - isLoading: false, - isCalled: true, - }; - } - return state; - } - } -} - -function InitUseTransactionQueryReducer({ - skip, -}: UseTransactionQueryOptions< - TData, - TVariables ->): UseTransactionQueryState { - return { - data: undefined, - isLoading: skip ? false : true, - isCalled: false, - }; -} - export type UseTransactionQueryOptions = { - fetchPolicy?: FetchPolicy; + cachePolicy?: RequestCache; + fetchPolicy?: LegacyFetchPolicy; skip?: boolean; /** * Frequency in milliseconds of polling/refetch of the query @@ -116,31 +39,18 @@ export type UseTransactionQueryOptions = { onError?: OnErrorHandler; retry?: RetryOptions; suspense?: boolean; -} & (TVariables extends undefined - ? { variables?: TVariables } - : { variables: TVariables }); + operationName?: string; +}; -export interface UseTransactionQuery< - GeneratedSchema extends { - query: object; - } -> { +export interface UseTransactionQuery { ( - fn: (query: GeneratedSchema['query'], variables: TVariables) => TData, - ...[queryOptions]: undefined extends TVariables - ? [UseTransactionQueryOptions?] - : [UseTransactionQueryOptions] + fn: (query: TSchema['query'], variables?: TVariables) => TData, + options?: UseTransactionQueryOptions ): UseTransactionQueryState; } -export function createUseTransactionQuery< - GeneratedSchema extends { - query: object; - mutation: object; - subscription: object; - } ->( - client: GQtyClient, +export function createUseTransactionQuery( + useQuery: UseQuery, { defaults: { transactionFetchPolicy: defaultFetchPolicy, @@ -149,314 +59,65 @@ export function createUseTransactionQuery< }, }: ReactClientOptionsWithDefaults ) { - const { resolved, eventHandler, refetch } = client; - const clientQuery: GeneratedSchema['query'] = client.query; - - const useTransactionQuery: UseTransactionQuery = - function useTransactionQuery( - fn: (query: typeof clientQuery, variables: TVariables) => TData, - ...[queryOptions]: undefined extends TVariables - ? [UseTransactionQueryOptions?] - : [UseTransactionQueryOptions] - ) { - const rejectedPromise = React.useRef(); - - if (rejectedPromise.current) throw rejectedPromise.current; - - const opts = Object.assign({}, queryOptions); - - opts.fetchPolicy ??= defaultFetchPolicy; - opts.retry ??= defaultRetry; - opts.suspense ??= defaultSuspense; - - opts.notifyOnNetworkStatusChange ??= true; - - const optsRef = React.useRef(opts); - optsRef.current = opts; - - const setSuspensePromise = useSuspensePromise(optsRef); - - const { skip, pollInterval = 0, fetchPolicy, variables } = opts; - - const isWindowVisible = useIsWindowVisible({ - lazy: true, - }); - - const selections = useSelectionsState(); - - const resolveOptions = React.useMemo>(() => { - return fetchPolicyDefaultResolveOptions(fetchPolicy); - }, [fetchPolicy]); - - const [state, dispatchReducer] = React.useReducer( - UseTransactionQueryReducer, - opts, - InitUseTransactionQueryReducer - ) as [ - UseTransactionQueryState, - React.Dispatch> - ]; - const dispatch = useDeferDispatch(dispatchReducer); - - const stateRef = React.useRef(state); - stateRef.current = state; - - const fnRef = React.useRef(fn); - fnRef.current = fn; - - const isFetching = React.useRef(false); - - const pendingPromise = React.useRef>(); - - const queryCallback = React.useCallback( - ( - resolveOptsArg: Omit< - ResolveOptions, - 'onSelection' | 'onCacheData' - > = {}, - fetchPolicyArg: FetchPolicy | undefined = fetchPolicy, - cacheChangeCall?: boolean - ) => { - if (skip) { - return Promise.resolve( - dispatch({ - type: 'done', - }) - ); - } - - stateRef.current.isCalled = true; - - const fn = () => - fnRef.current(clientQuery, optsRef.current.variables!); - - stateRef.current.isLoading = false; - - let instaResolved = false; - const promise = resolved(fn, { - ...resolveOptions, - ...resolveOptsArg, - onSelection(selection) { - selections.add(selection); - }, - onEmptyResolve() { - instaResolved = true; - }, - onCacheData(data): boolean { - switch (fetchPolicyArg) { - case 'cache-and-network': { - stateRef.current.isLoading = true; - dispatch({ - type: 'cache-found', - data, - }); - stateRef.current.data = data; - return true; - } - case 'cache-first': { - instaResolved = true; - - if (cacheChangeCall) { - dispatch({ - type: 'success', - data, - }); - } - - stateRef.current.data = data; - return false; - } - default: { - return true; - } - } - }, - onNoCacheFound() { - isFetching.current = true; - dispatch({ - type: 'loading', - }); - stateRef.current.isLoading = true; - }, - }).then( - (data) => { - pendingPromise.current = undefined; - optsRef.current.onCompleted?.(data); - isFetching.current = false; - if ( - stateRef.current.isLoading || - stateRef.current.data !== data - ) { - dispatch({ - type: 'success', - data, - }); - stateRef.current.data = data; - } - stateRef.current.isLoading = false; - }, - (err: unknown) => { - pendingPromise.current = undefined; - isFetching.current = false; - const error = GQtyError.create(err, useTransactionQuery); - optsRef.current.onError?.(error); - dispatch({ - type: 'failure', - error, - }); - stateRef.current.error = error; - stateRef.current.isLoading = false; - - return error; - } - ); - - if (instaResolved) return; - - pendingPromise.current = promise; - return promise; - }, - [fetchPolicy, skip, stateRef, resolveOptions, fnRef, dispatch, optsRef] - ); - - const serializedVariables = React.useMemo(() => { - return variables ? JSON.stringify(variables) : ''; - }, [variables]); - - const queryCallbackWithPromise = React.useCallback( - (inlineCall?: boolean) => { - if (skip) return; - - const promise = queryCallback()?.then((result) => { - if (result instanceof GQtyError) { - if (optsRef.current.retry) { - doRetry(optsRef.current.retry, { - async onRetry() { - const retryPromise = queryCallback({ - refetch: true, - })?.then((result) => { - if (result instanceof GQtyError) throw result; - }); - - if (retryPromise) { - setSuspensePromise(retryPromise); - - await retryPromise; - } - }, - }); - } else if (optsRef.current.suspense) { - throw result; - } - } - }); - - if (promise) { - if (inlineCall) { - Promise.resolve().then(() => { - setSuspensePromise(promise); - }); - } else { - setSuspensePromise(promise); - } - } - }, - [queryCallback, skip, setSuspensePromise, optsRef] - ); - - if (!state.isCalled && !skip) { - queryCallbackWithPromise(true); + const useTransactionQuery: UseTransactionQuery = ( + fn, + { + fetchPolicy = defaultFetchPolicy, + cachePolicy = translateFetchPolicy(fetchPolicy), + notifyOnNetworkStatusChange = true, + onCompleted, + onError, + operationName, + pollInBackground = false, + pollInterval, + retry = defaultRetry, + skip = false, + suspense = defaultSuspense, + variables, + } = {} + ) => { + const query = useQuery({ + cachePolicy, + fetchInBackground: pollInBackground, + notifyOnNetworkStatusChange, + operationName, + prepare: ({ query }) => (skip ? undefined : fn(query, variables)), + refetchInterval: pollInterval, + refetchOnReconnect: false, + refetchOnRender: false, + refetchOnWindowVisible: false, + retry, + suspense, + }); + + useUpdateEffect(() => { + const { + $state: { isLoading, error }, + } = query; + + if (!isLoading && !error) { + onCompleted?.(fn(query, variables)); } + }, [query.$state.isLoading]); - useUpdateEffect(() => { - queryCallbackWithPromise(); - }, [queryCallbackWithPromise, serializedVariables]); - - React.useEffect(() => { - if (skip || pollInterval <= 0) return; - - let isMounted = true; - - const interval = setInterval(() => { - if (isFetching.current) return; - - // Skip polling while on background - if ( - !optsRef.current.pollInBackground && - !isWindowVisible.ref.current - ) { - return; - } - - isFetching.current = true; - - if (isMounted && optsRef.current.notifyOnNetworkStatusChange) - dispatch({ - type: 'loading', - }); - - const fn = () => - fnRef.current(clientQuery, optsRef.current.variables!); - - (resolveOptions.noCache - ? resolved(fn, resolveOptions) - : refetch(fn) - ).then( - (data) => { - pendingPromise.current = undefined; - isFetching.current = false; - if (isMounted) - dispatch({ - type: 'success', - data, - }); - }, - (err) => { - pendingPromise.current = undefined; - isFetching.current = false; - if (isMounted) - dispatch({ - type: 'failure', - error: GQtyError.create(err, useTransactionQuery), - }); - } - ); - }, pollInterval); + useUpdateEffect(() => { + if (query.$state.error) { + onError?.(query.$state.error); + } + }, [query.$state.error]); - return () => { - isMounted = false; - clearInterval(interval); + return skip + ? { + isCalled: false, + isLoading: false, + } + : { + data: fn(query, variables), + isCalled: true, + isLoading: query.$state.isLoading, + error: query.$state.error, }; - }, [ - pollInterval, - skip, - resolveOptions, - optsRef, - fnRef, - dispatch, - isFetching, - isWindowVisible, - ]); - - useSubscribeCacheChanges({ - selections, - eventHandler, - shouldSubscribe: fetchPolicy !== 'no-cache', - onChange() { - if (pendingPromise.current) return; - - queryCallback( - { - refetch: false, - }, - 'cache-first', - true - ); - }, - }); - - return state; - }; + }; return useTransactionQuery; } diff --git a/packages/react/src/ssr/ssr.ts b/packages/react/src/ssr/ssr.ts index 35a686b51..d2e69401a 100644 --- a/packages/react/src/ssr/ssr.ts +++ b/packages/react/src/ssr/ssr.ts @@ -1,9 +1,13 @@ -import type { GQtyClient, HydrateCacheOptions } from 'gqty'; -import * as React from 'react'; -import { useOnFirstMount } from '../common'; -import { getDefault, ReactClientOptionsWithDefaults } from '../utils'; +import { + type BaseGeneratedSchema, + type GQtyClient, + type LegacyHydrateCacheOptions, +} from 'gqty'; +import { useEffect, useMemo, type ReactNode } from 'react'; +import { getDefault, type ReactClientOptionsWithDefaults } from '../utils'; -export interface UseHydrateCacheOptions extends Partial { +export interface UseHydrateCacheOptions + extends Partial { /** * Cache snapshot, returned from `prepareReactRender` */ @@ -21,7 +25,7 @@ export interface UseHydrateCacheOptions extends Partial { * Props with `cacheSnapshot` that would be returned from `prepareReactRender` */ export type PropsWithServerCache< - T extends Record = {} + T extends Record = Record > = { /** * Cache snapshot, returned from `prepareReactRender` @@ -34,33 +38,36 @@ export interface UseHydrateCache { } export interface PrepareReactRender { - (element: React.ReactNode): Promise<{ + (element: ReactNode): Promise<{ cacheSnapshot: string; }>; } -export function createSSRHelpers( - client: GQtyClient, +const IS_SERVER = typeof window === 'undefined'; + +export function createSSRHelpers( + { hydrateCache, prepareRender, query, refetch }: GQtyClient, { defaults: { refetchAfterHydrate } }: ReactClientOptionsWithDefaults ) { const prepareReactRender: PrepareReactRender = - async function prepareReactRender(element: React.ReactNode) { + async function prepareReactRender(element: ReactNode) { const ssrPrepass = getDefault(await import('react-ssr-prepass')); - return client.prepareRender(() => ssrPrepass(element)); + return prepareRender(() => ssrPrepass(element)); }; const useHydrateCache: UseHydrateCache = function useHydrateCache({ cacheSnapshot, shouldRefetch = refetchAfterHydrate, }: UseHydrateCacheOptions) { - useOnFirstMount(() => { - if (cacheSnapshot) { - client.hydrateCache({ cacheSnapshot, shouldRefetch: false }); + useMemo(() => { + if (!IS_SERVER && cacheSnapshot) { + hydrateCache({ cacheSnapshot, shouldRefetch: false }); } - }); - React.useEffect(() => { - if (shouldRefetch) { - client.refetch(client.query).catch(console.error); + }, [cacheSnapshot]); + + useEffect(() => { + if (!IS_SERVER && shouldRefetch) { + refetch(query).catch(console.error); } }, [shouldRefetch]); }; diff --git a/packages/react/src/subscription/useSubscription.ts b/packages/react/src/subscription/useSubscription.ts index ca50088c6..07b669cf1 100644 --- a/packages/react/src/subscription/useSubscription.ts +++ b/packages/react/src/subscription/useSubscription.ts @@ -1,112 +1,65 @@ -import type { GQtyClient } from 'gqty'; - -import { - isAnySelectionIncluded, - useForceUpdate, - useIsomorphicLayoutEffect, - useSelectionsState, -} from '../common'; -import type { ReactClientOptionsWithDefaults } from '../utils'; - -export interface UseSubscription< - GeneratedSchema extends { - subscription: object; - } -> { - (): GeneratedSchema['subscription']; -} - -export function createUseSubscription< - GeneratedSchema extends { - query: object; - mutation: object; - subscription: object; - } ->( - client: GQtyClient, - _opts: ReactClientOptionsWithDefaults -): UseSubscription { - const { - interceptorManager: { createInterceptor, removeInterceptor }, - subscriptionsClient, - eventHandler, - scheduler, - } = client; - const clientSubscription: GeneratedSchema['subscription'] = - client.subscription; - - const useSubscription: UseSubscription = - function useSubscription() { - const forceUpdate = useForceUpdate({ - doTimeout: true, - }); - const hookSelections = useSelectionsState(); - - const interceptor = createInterceptor(); - - Promise.resolve(interceptor).then(removeInterceptor); - - interceptor.selectionAddListeners.add((selection) => { - if (selection.type === 2) hookSelections.add(selection); - }); - - useIsomorphicLayoutEffect(() => { - removeInterceptor(interceptor); - }); - - useIsomorphicLayoutEffect(() => { - if (!subscriptionsClient) return; - - let isMounted = true; - - const unsubscribeCache = eventHandler.onCacheChangeSubscribe( - ({ selection }) => { - if (!isMounted || forceUpdate.wasCalled.current) return; - - if (hookSelections.has(selection)) forceUpdate(); - } - ); - - const unsubErrors = scheduler.errors.subscribeErrors((data) => { - if ( - isMounted && - data.type === 'new_error' && - !forceUpdate.wasCalled.current && - isAnySelectionIncluded(data.selections, hookSelections) - ) { - forceUpdate(); +import { useRerender, useThrottledCallback } from '@react-hookz/web'; +import { GQtyError, type BaseGeneratedSchema, type GQtyClient } from 'gqty'; +import { useEffect, useMemo, useState } from 'react'; + +export type UseSubscription = ( + options?: UseSubscriptionOptions +) => NonNullable; + +export type UseSubscriptionOptions = { + onError?: (error: GQtyError) => void; + operationName?: string; + /** + * Throttle delay for each re-redner, prevents busy subscriptions from + * hanging the UI. + */ + renderThrottleDelay?: number; +}; + +export function createUseSubscription({ + createResolver, +}: GQtyClient) { + const useSubscription: UseSubscription = ({ + onError, + operationName, + renderThrottleDelay = 100, + } = {}) => { + const { + accessor: { subscription }, + subscribe, + selections, + } = useMemo(() => createResolver({ operationName }), [operationName]); + + const render = useRerender(); + const throttledRender = useThrottledCallback( + render, + [render], + renderThrottleDelay + ); + const [error, setError] = useState(); + if (error) throw error; + + useEffect(() => { + return subscribe({ + onNext: () => throttledRender(), + onError(error) { + const theError = GQtyError.create(error); + + if (onError) { + onError(theError); + } else { + setError(theError); } - }); + }, + }); + }, [onError, selections, selections.size]); - return () => { - isMounted = false; - unsubErrors(); - unsubscribeCache(); - subscriptionsClient - .unsubscribe(hookSelections) - .then((operationsIds) => { - if (eventHandler.hasFetchSubscribers && operationsIds.length) { - const arraySelections = Array.from(hookSelections); - for (const id of operationsIds) { - eventHandler.sendFetchPromise( - Promise.resolve({ - query: '', - variables: undefined, - cacheSnapshot: client.cache, - selections: arraySelections, - type: 'subscription', - label: `[id=${id}] [unsubscribe]`, - }), - arraySelections - ); - } - } - }); - }; - }, [hookSelections, forceUpdate]); + if (!subscription) { + throw new GQtyError(`Subscription is not defined in the schema.`); + } - return clientSubscription; - }; + return subscription; + }; return useSubscription; } diff --git a/packages/react/src/useOnlineEffect.ts b/packages/react/src/useOnlineEffect.ts new file mode 100644 index 000000000..9037189b1 --- /dev/null +++ b/packages/react/src/useOnlineEffect.ts @@ -0,0 +1,14 @@ +import { useEffect, type DependencyList } from 'react'; + +export const useOnlineEffect = ( + fn: (...args: unknown[]) => unknown, + deps?: DependencyList +) => { + useEffect(() => { + globalThis.addEventListener?.('online', fn); + + return () => { + globalThis.removeEventListener?.('online', fn); + }; + }, deps); +}; diff --git a/packages/react/src/useRenderSession.ts b/packages/react/src/useRenderSession.ts new file mode 100644 index 000000000..15caab666 --- /dev/null +++ b/packages/react/src/useRenderSession.ts @@ -0,0 +1,19 @@ +import { useEffect, useRef } from 'react'; + +export type Options = { + onClear?: (map: Map) => void; +}; + +/** + * Returns a map with its value cleared after each render, useful for + * render-sensitive state managements. + */ +export const useRenderSession = ({ + onClear = (map) => map.clear(), +}: Options = {}) => { + const mapRef = useRef(new Map()); + + useEffect(() => onClear(mapRef.current)); + + return mapRef.current; +}; diff --git a/packages/react/src/useThrottledAsync.ts b/packages/react/src/useThrottledAsync.ts new file mode 100644 index 000000000..e6c207df8 --- /dev/null +++ b/packages/react/src/useThrottledAsync.ts @@ -0,0 +1,152 @@ +import { useSyncedRef } from '@react-hookz/web'; +import { useMemo, useRef, useState } from 'react'; + +export type AsyncStatus = 'loading' | 'success' | 'error' | 'not-executed'; + +export type AsyncState = + | { + status: 'not-executed'; + error: undefined; + result: Result; + } + | { + status: 'success'; + error: undefined; + result: Result; + } + | { + status: 'error'; + error: Error; + result: Result; + } + | { + status: AsyncStatus; + error: Error | undefined; + result: Result; + }; + +export interface UseAsyncActions { + /** + * Reset state to initial. + */ + reset: () => void; + /** + * Execute the async function manually. + */ + execute: (...args: Args) => Promise; +} + +export interface UseAsyncMeta { + /** + * Latest promise returned from the async function. + */ + promise: Promise | undefined; + /** + * List of arguments applied to the latest async function invocation. + */ + lastArgs: Args | undefined; +} + +/** + * **Modified version of `useAsync` in `@react-hookz/web`** + * + * Tracks the result and errors of the provided async function and provides + * handles to control its execution. + * + * Skips executions when an active promise is already in place. + * + * @param asyncFn Function that returns a promise. + * @param initialValue Value that will be set on initialisation before the async + * function is executed. + */ +export function useThrottledAsync( + asyncFn: (...params: Args) => Promise, + initialValue: Result +): [ + AsyncState, + UseAsyncActions, + UseAsyncMeta +]; +export function useThrottledAsync( + asyncFn: (...params: Args) => Promise, + initialValue?: Result +): [ + AsyncState, + UseAsyncActions, + UseAsyncMeta +]; +export function useThrottledAsync( + asyncFn: (...params: Args) => Promise, + initialValue?: Result +): [ + AsyncState, + UseAsyncActions, + UseAsyncMeta +] { + const [state, setState] = useState>({ + status: 'not-executed', + error: undefined, + result: initialValue, + }); + const promiseRef = useRef>(); + const argsRef = useRef(); + + const methods = useSyncedRef({ + execute: (...params: Args) => { + if (promiseRef.current) return promiseRef.current; + + argsRef.current = params; + const promise = asyncFn(...params); + promiseRef.current = promise; + + setState((s) => ({ ...s, status: 'loading' })); + + promise + .then( + (result) => { + if (promise === promiseRef.current) { + setState((s) => ({ + ...s, + status: 'success', + error: undefined, + result, + })); + } + }, + (error: Error) => { + if (promise === promiseRef.current) { + setState((s) => ({ ...s, status: 'error', error })); + } + } + ) + .finally(() => { + if (promise === promiseRef.current) { + promiseRef.current = undefined; + } + }); + + return promise; + }, + reset: () => { + setState({ + status: 'not-executed', + error: undefined, + result: initialValue, + }); + promiseRef.current = undefined; + argsRef.current = undefined; + }, + }); + + return [ + state, + useMemo( + () => ({ + execute: (...args: Args) => methods.current.execute(...args), + reset: () => methods.current.reset(), + }), + [] + ), + { promise: promiseRef.current, lastArgs: argsRef.current }, + ]; +} diff --git a/packages/react/src/useWindowFocusEffect.ts b/packages/react/src/useWindowFocusEffect.ts new file mode 100644 index 000000000..99b400839 --- /dev/null +++ b/packages/react/src/useWindowFocusEffect.ts @@ -0,0 +1,26 @@ +import { useEffect, type DependencyList } from 'react'; + +export type UseFocusChangeEffectOptions = { + enabled?: boolean; +}; + +export const useWindowFocusEffect = ( + fn: (...args: unknown[]) => unknown, + deps: DependencyList = [] +) => { + useEffect(() => { + const visibilityChangeFn = () => { + if (globalThis.document?.visibilityState === 'visible') { + fn(); + } + }; + + globalThis.addEventListener?.('visibilitychange', visibilityChangeFn); + globalThis.addEventListener?.('focus', visibilityChangeFn); + + return () => { + globalThis.removeEventListener?.('visibilitychange', visibilityChangeFn); + globalThis.removeEventListener?.('focus', visibilityChangeFn); + }; + }, deps.concat(fn)); +}; diff --git a/packages/react/test/graphqlHOC.test.tsx b/packages/react/test/graphqlHOC.test.tsx index 433c21045..1b49f11a9 100644 --- a/packages/react/test/graphqlHOC.test.tsx +++ b/packages/react/test/graphqlHOC.test.tsx @@ -7,14 +7,7 @@ import { createReactTestClient } from './utils'; test('Basic Non-Suspense', async () => { const { query, graphql } = await createReactTestClient(); - const Comp = graphql( - () => { - return

{query.hello}

; - }, - { - suspense: false, - } - ); + const Comp = graphql(() =>

{query.hello}

, { suspense: false }); const { container } = render(); diff --git a/packages/react/test/tsconfig.json b/packages/react/test/tsconfig.json index 34441f2c6..b5f92e578 100644 --- a/packages/react/test/tsconfig.json +++ b/packages/react/test/tsconfig.json @@ -1,14 +1,12 @@ { "extends": "../tsconfig.json", "compilerOptions": { - "target": "es2019", - "module": "commonjs", - "strict": true, + "declaration": false, "esModuleInterop": true, "jsx": "react", - "declaration": false, - "noEmit": true + "noEmit": true, + "strict": true }, - "include": ["**/*.ts", "**/*.tsx"], - "exclude": [] + "exclude": [], + "include": ["**/*.ts", "**/*.tsx"] } diff --git a/packages/react/test/useMutation.test.tsx b/packages/react/test/useMutation.test.tsx new file mode 100644 index 000000000..390eca90a --- /dev/null +++ b/packages/react/test/useMutation.test.tsx @@ -0,0 +1,110 @@ +import { act, renderHook, waitFor } from '@testing-library/react'; +import { createReactTestClient } from './utils'; + +describe('useMutation', () => { + it('should mutate without suspense', async () => { + const { useMutation } = await createReactTestClient(); + const { result } = renderHook(() => { + return useMutation((mutation, { name }: { name: string }) => { + const human = mutation.humanMutation({ nameArg: name }); + + return { + id: human.id, + name: human.name, + }; + }); + }); + + await act(() => result.current[0]({ args: { name: 'John Doe' } })); + + await waitFor(() => expect(result.current[1].data).toBeDefined()); + + expect(result.current[1]).toMatchInlineSnapshot(` + { + "data": { + "id": "1", + "name": "John Doe", + }, + "error": undefined, + "isLoading": false, + } + `); + }); + + it('should mutate with suspense', async () => { + const { useMutation } = await createReactTestClient(); + const { result } = renderHook(() => { + return useMutation( + (mutation, { name }: { name: string }) => { + const human = mutation.humanMutation({ nameArg: name }); + + return { + id: human.id, + name: human.name, + }; + }, + { suspense: true } + ); + }); + + await act(() => result.current[0]({ args: { name: 'Jane Doe' } })); + + await waitFor(() => expect(result.current[1].data).toBeDefined()); + + expect(result.current[1]).toMatchInlineSnapshot(` + { + "data": { + "id": "1", + "name": "Jane Doe", + }, + "error": undefined, + "isLoading": false, + } + `); + }); + + it('should update contents of useQuery via normalized cache', async () => { + const { useQuery, useMutation } = await createReactTestClient(); + const q = renderHook(() => { + const human = useQuery().human({ name: 'Uno' }); + + return { + id: human.id, + name: human.name, + }; + }); + + const m = renderHook(() => { + return useMutation( + (mutation, args: { name: string; newName: string }) => { + const human = mutation.renameHuman(args); + + return { + id: human.id, + name: human.name, + }; + } + ); + }); + + await waitFor(() => expect(q.result.current.name).toStrictEqual('Uno')); + + await act(() => + m.result.current[0]({ args: { name: 'Uno', newName: 'Dos' } }) + ); + + await waitFor(() => expect(q.result.current.name).toStrictEqual('Dos')); + + await act(() => + m.result.current[0]({ args: { name: 'Dos', newName: 'Tres' } }) + ); + + await waitFor(() => expect(q.result.current.name).toStrictEqual('Tres')); + + await act(() => + m.result.current[0]({ args: { name: 'Tres', newName: 'Cuatro' } }) + ); + + await waitFor(() => expect(q.result.current.name).toStrictEqual('Cuatro')); + }); +}); diff --git a/packages/react/test/useQuery.test.tsx b/packages/react/test/useQuery.test.tsx index a22cba78a..b4b62fe1c 100644 --- a/packages/react/test/useQuery.test.tsx +++ b/packages/react/test/useQuery.test.tsx @@ -1,11 +1,12 @@ -import { renderHook } from '@testing-library/react-hooks'; +import { act, renderHook, waitFor } from '@testing-library/react'; +import { type QueryPayload } from 'gqty'; import { createReactTestClient } from './utils'; describe('useQuery', () => { - it('should fetch without suspense', async () => { + test('should fetch without suspense', async () => { const { useQuery } = await createReactTestClient(); - const { result, waitFor } = renderHook(() => { + const { result } = renderHook(() => { const query = useQuery({ suspense: false }); return { @@ -16,52 +17,72 @@ describe('useQuery', () => { expect(result.current.hello).toBe(undefined); - await waitFor(() => result.current.$state.isLoading === true); - - expect(result.current.hello).toBe(undefined); - - await waitFor(() => result.current.$state.isLoading === false); - - expect(result.current.hello).toBe('hello world'); + await waitFor(() => expect(result.current.hello).toBe('hello world')); }); - it('should $refetch', async () => { + test('should $refetch', async () => { const { useQuery } = await createReactTestClient(); - const { result, waitFor } = renderHook(() => { + const { result } = renderHook(() => { const query = useQuery({ suspense: false }); return { - hello: query.hello, + time: query.time, $state: query.$state, $refetch: query.$refetch, }; }); - await waitFor(() => result.current.$state.isLoading === true); - await waitFor(() => result.current.$state.isLoading === false); + expect(result.current.time).toBe(undefined); + + await waitFor(() => expect(result.current.time).not.toBeUndefined()); - result.current.$refetch(); + const time = result.current.time; - await waitFor(() => result.current.$state.isLoading === true); - await waitFor(() => result.current.$state.isLoading === false); + await act(async () => { + await result.current.$refetch(); + await new Promise((r) => setTimeout(r, 500)); + }); - expect(result.current.hello).toBe('hello world'); + await waitFor(() => expect(result.current.time).not.toBe(time)); }); it('should fetch with suspense', async () => { const { useQuery } = await createReactTestClient(); - const { result, waitForNextUpdate } = renderHook(() => { - const query = useQuery({ suspense: true }); - - return query.hello; - }); + const { result } = renderHook(() => useQuery({ suspense: true }).hello); expect(result.current).toBe(undefined); - await waitForNextUpdate(); + await waitFor(() => expect(result.current).toStrictEqual('hello world')); + }); + + it('should pass extentions to query fetcher', async () => { + const fetchHistory: QueryPayload[] = []; + const { useQuery } = await createReactTestClient( + undefined, + async (payload) => { + fetchHistory.push(payload); + return {}; + } + ); + + renderHook(() => { + const query = useQuery({ + extensions: { foo: 'bar' }, + }); + + return query.hello; + }); - expect(result.current).toBe('hello world'); + await waitFor(() => + expect(fetchHistory).toMatchObject( + expect.arrayContaining([ + expect.objectContaining({ + extensions: expect.objectContaining({ foo: 'bar' }), + }), + ]) + ) + ); }); }); diff --git a/packages/react/test/utils.ts b/packages/react/test/utils.ts index 49ee2ed56..5f521c548 100644 --- a/packages/react/test/utils.ts +++ b/packages/react/test/utils.ts @@ -1,33 +1,19 @@ import '@testing-library/jest-dom/extend-expect'; -import { merge } from 'lodash'; -import { createTestApp, gql } from 'test-utils'; -import { generate } from '../../cli/src/generate'; import { + Cache, ClientOptions, createClient, - DeepPartial, QueryFetcher, Schema, SchemaUnionsKey, -} from '../../gqty/src/index'; -import { createSubscriptionsClient } from '../../subscriptions/src/index'; +} from 'gqty'; +import { createClient as createSubscriptionsClient } from 'graphql-ws'; +import { merge } from 'lodash-es'; +import { createTestApp, gql } from 'test-utils'; +import { type PartialDeep } from 'type-fest'; +import { generate } from '../../cli/src/generate'; import { createReactClient } from '../src'; -type ObjectTypesNames = 'Human' | 'Query' | 'Mutation' | 'Subscription'; - -type ObjectTypes = { - Human: Human; - Query: { - __typename: 'Query'; - }; - Mutation: { - __typename: 'Mutation'; - }; - Subscription: { - __typename: 'Subscription'; - }; -}; - export type Maybe = T | null; export type Human = { __typename: 'Human'; @@ -72,10 +58,10 @@ export interface TestClientConfig { } export const createReactTestClient = async ( - addedToGeneratedSchema?: DeepPartial, + addedToGeneratedSchema?: PartialDeep, queryFetcher?: QueryFetcher, config?: TestClientConfig, - clientConfig: Partial> = {} + clientConfig: Partial = {} ) => { let dogId = 0; const dogs: { name: string; id: number }[] = [ @@ -90,7 +76,7 @@ export const createReactTestClient = async ( ]; let humanId = 0; const humanIds: Record = {}; - const createHuman = (name: string = 'default') => { + const createHuman = (name = 'default') => { return { id: (humanIds[name] ??= ++humanId), name, @@ -120,6 +106,7 @@ export const createReactTestClient = async ( type Mutation { sendNotification(message: String!): Boolean! humanMutation(nameArg: String!): Human + renameHuman(name: String!, newName: String!): Human } type Subscription { newNotification: String! @@ -168,10 +155,10 @@ export const createReactTestClient = async ( return null; }, async throw() { - throw Error('expected error'); + throw new Error('expected error'); }, async throw2() { - throw Error('expected error 2'); + throw new Error('expected error 2'); }, time() { return new Date().toISOString(); @@ -199,6 +186,19 @@ export const createReactTestClient = async ( humanMutation(_root, { nameArg }: { nameArg: string }) { return createHuman(nameArg); }, + renameHuman( + _root, + { name, newName }: { name: string; newName: string } + ) { + if (!humanIds[name]) { + throw new Error(`Human ${name} not found`); + } + + humanIds[newName] = humanIds[name]; + delete humanIds[name]; + + return createHuman(newName); + }, }, Subscription: { newNotification: { @@ -252,17 +252,18 @@ export const createReactTestClient = async ( ); if (queryFetcher == null) { - queryFetcher = (query, variables) => { + queryFetcher = ({ query, variables, operationName }) => { return client.query(query, { variables, + operationName, }); }; } const subscriptionsClient = config?.subscriptions ? createSubscriptionsClient({ - wsEndpoint: client.endpoint.replace('http:', 'ws:'), - reconnect: false, + url: client.endpoint.replace('http:', 'ws:'), + retryAttempts: 0, }) : undefined; @@ -284,6 +285,7 @@ export const createReactTestClient = async ( mutation: { sendNotification(args: { message: string }): boolean; humanMutation: (args?: { nameArg?: string }) => Human; + renameHuman: (args: { name: string; newName: string }) => Human; }; subscription: { newNotification: string | null | undefined; @@ -291,16 +293,21 @@ export const createReactTestClient = async ( }; const core = Object.assign( - createClient({ + createClient({ + cache: new Cache(undefined, { + maxAge: 0, + staleWhileRevalidate: 5 * 60 * 1000, + normalization: true, + }), schema: merge(generatedSchema, [addedToGeneratedSchema]) as Schema, - scalarsEnumsHash, - queryFetcher, - subscriptionsClient, + scalars: scalarsEnumsHash, + fetchOptions: { + fetcher: queryFetcher, + subscriber: subscriptionsClient, + }, ...clientConfig, }), - { - client, - } + { client } ); const react = createReactClient(core, { diff --git a/packages/subscriptions/CHANGELOG.md b/packages/subscriptions/CHANGELOG.md index 608d9c673..17d54a41e 100644 --- a/packages/subscriptions/CHANGELOG.md +++ b/packages/subscriptions/CHANGELOG.md @@ -1,5 +1,11 @@ # @gqty/subscriptions +## 3.0.0-alpha.0 + +### Patch Changes + +- Upgraded to gqty@3.0.0-alpha.0 + ## 2.0.1 ### Patch Changes @@ -42,10 +48,13 @@ ### Patch Changes -- af6a437: - Rename `gqtyConfig` to `GQtyConfig` (so it's consistent with the new logo) +- af6a437: - Rename `gqtyConfig` to `GQtyConfig` (so it's consistent with the + new logo) - Rename `gqtyError` to `GQtyError` - - Remove `endpoint` option from the configuration, and instead always defaults to introspection one - - It's confusing why theres two of them, and the user can change it later by modifying the file anyway + - Remove `endpoint` option from the configuration, and instead always defaults + to introspection one + - It's confusing why theres two of them, and the user can change it later by + modifying the file anyway - Updated dependencies [4a3d5ef] - Updated dependencies [af6a437] - gqty@2.0.13 diff --git a/packages/subscriptions/package.json b/packages/subscriptions/package.json index 8b5bbe758..d484026d4 100644 --- a/packages/subscriptions/package.json +++ b/packages/subscriptions/package.json @@ -10,10 +10,12 @@ "sideEffects": false, "exports": { ".": { + "types": "./dist/index.d.ts", "require": "./dist/index.js", "import": "./dist/index.mjs" }, "./*": { + "types": "./dist/*.d.ts", "require": "./dist/*.js", "import": "./dist/*.mjs" } @@ -38,18 +40,17 @@ "ws": "^8.13.0" }, "devDependencies": { - "@types/node": "^18.15.5", + "@types/node": "^18.15.1", "@types/ws": "^8.5.4", - "bob-esbuild-cli": "^4.0.0", - "esbuild": "^0.17.12", - "gqty": "workspace:^2.3.0", + "bob-esbuild-cli": "5.0.0-alpha-227aebc.0", + "esbuild": "^0.17.10", + "gqty": "workspace:^", "graphql": "^16.6.0", - "test-utils": "workspace:^0.1.0", - "tslib": "^2.5.0", - "typescript": "^4.9.5" + "test-utils": "workspace:^", + "tslib": "^2.5.0" }, "peerDependencies": { - "gqty": "workspace:^2.0.0", + "gqty": "workspace:^", "graphql": "*" }, "peerDependenciesMeta": { diff --git a/packages/subscriptions/src/index.ts b/packages/subscriptions/src/index.ts index c2b7cfcc8..886b1d4c5 100644 --- a/packages/subscriptions/src/index.ts +++ b/packages/subscriptions/src/index.ts @@ -1,14 +1,13 @@ import { GQtyError, - Selection, - SubscribeEvents, - SubscriptionsClient, + type LegacySelection as Selection, + type LegacySubscribeEvents as SubscribeEvents, + type LegacySubscriptionsClient as SubscriptionsClient, } from 'gqty'; - import { Client, - ClientOptions, - OperationCallback, + type ClientOptions, + type OperationCallback, } from './subscription/client'; export interface SubscriptionsClientOptions extends ClientOptions { @@ -26,27 +25,16 @@ type SubContext = { export function createSubscriptionsClient({ wsEndpoint, - ...opts + ...options }: SubscriptionsClientOptions): SubscriptionsClient { - const urlPromise = Promise.resolve( - typeof wsEndpoint === 'string' ? wsEndpoint : wsEndpoint() - ); - - let wsClientValue: Client | undefined; - - const wsClientPromise: Promise = new Promise((resolve, reject) => { - urlPromise - .then((url) => { - const client = new Client(url, { - ...opts, - }); - wsClientValue = client; - resolve(client); - }) - .catch(reject); - }); - - const SubscriptionsSelections: Map> = new Map(); + const wsClient = + typeof wsEndpoint === 'string' + ? new Client(wsEndpoint, options) + : Promise.resolve() + .then(wsEndpoint) + .then((wsEndpoint) => new Client(wsEndpoint, options)); + + const subscriptionsSelections: Map> = new Map(); const eventsReference = new WeakMap< ((ctx: SubContext) => SubscribeEvents) | SubscribeEvents, @@ -62,13 +50,14 @@ export function createSubscriptionsClient({ operationId, selections, }; - if (wsClientValue) { - return execSubscribe(wsClientValue); - } else { - return wsClientPromise.then((wsSubClient) => - execSubscribe(wsSubClient) - ); - } + + wsClient; + + return wsClient instanceof Promise + ? Promise.resolve() + .then(() => wsClient) + .then(execSubscribe) + : execSubscribe(wsClient); function execSubscribe( wsSubClient: Client @@ -86,7 +75,7 @@ export function createSubscriptionsClient({ onStart?.(); break; case 'complete': - SubscriptionsSelections.delete(operationId); + subscriptionsSelections.delete(operationId); onComplete?.(); break; default: @@ -124,9 +113,9 @@ export function createSubscriptionsClient({ function returnSub(operationId: string) { const unsubscribe = async () => { await wsSubClient.unsubscribe(operationId); - SubscriptionsSelections.delete(operationId); + subscriptionsSelections.delete(operationId); }; - SubscriptionsSelections.set(operationId, new Set(selections)); + subscriptionsSelections.set(operationId, new Set(selections)); return { unsubscribe, @@ -136,20 +125,19 @@ export function createSubscriptionsClient({ } }, async unsubscribe(selections) { - const wsClient = wsClientValue || (await wsClientPromise); - + const client = await wsClient; let promises: Promise[] = []; const operationIds: string[] = []; checkOperations: for (const [ operationId, operationSelections, - ] of SubscriptionsSelections.entries()) { + ] of subscriptionsSelections.entries()) { for (const selection of selections) { if (operationSelections.has(selection)) { operationIds.push(operationId); - promises.push(wsClient.unsubscribe(operationId)); - SubscriptionsSelections.delete(operationId); + promises.push(client.unsubscribe(operationId)); + subscriptionsSelections.delete(operationId); continue checkOperations; } } @@ -160,25 +148,19 @@ export function createSubscriptionsClient({ return operationIds; }, async close() { - const wsClient = wsClientValue || (await wsClientPromise); - - wsClient.close(); + const client = await wsClient; + client.close(); }, - setConnectionParams(connectionParams, restartClient) { - if (wsClientValue) { - wsClientValue.connectionInitPayload = connectionParams; - if (restartClient && wsClientValue.socket) { - wsClientValue.close(true); - } - } else { - wsClientPromise - .then((wsClient) => { - wsClient.connectionInitPayload = connectionParams; - if (restartClient && wsClient.socket) { - wsClient.close(true); - } - }) - .catch(console.error); + async setConnectionParams(connectionParams, restartClient) { + const client = await wsClient; + + client.connectionInitPayload = + typeof connectionParams === 'function' + ? await connectionParams() + : connectionParams; + + if (restartClient && client.socket) { + client.close(true); } }, }; diff --git a/packages/subscriptions/src/subscription/client.ts b/packages/subscriptions/src/subscription/client.ts index 72df0e33a..e48a02e65 100644 --- a/packages/subscriptions/src/subscription/client.ts +++ b/packages/subscriptions/src/subscription/client.ts @@ -2,8 +2,11 @@ import type { GraphQLError } from 'graphql'; import WebSocket from 'isomorphic-ws'; - -import { createDeferredPromise, DeferredPromise, GQLResponse } from '../utils'; +import { + createDeferredPromise, + type DeferredPromise, + type GQLResponse, +} from '../utils'; import { GQL_COMPLETE, GQL_CONNECTION_ACK, diff --git a/packages/subscriptions/test/tsconfig.json b/packages/subscriptions/test/tsconfig.json index ac7849a7a..f1c6f045d 100644 --- a/packages/subscriptions/test/tsconfig.json +++ b/packages/subscriptions/test/tsconfig.json @@ -1,15 +1,15 @@ { "compilerOptions": { - "target": "es2019", - "module": "commonjs", - "strict": true, + "baseUrl": ".", "esModuleInterop": true, "jsx": "react", - "baseUrl": ".", + "module": "commonjs", "paths": { "gqty": ["../../gqty/src/index.ts"], "gqty/*": ["../../gqty/src/*"] - } + }, + "strict": true, + "target": "es2019" }, "include": ["**/*.ts", "**/*.tsx"] } diff --git a/packages/utils/CHANGELOG.md b/packages/utils/CHANGELOG.md deleted file mode 100644 index 6b7c6124e..000000000 --- a/packages/utils/CHANGELOG.md +++ /dev/null @@ -1,11 +0,0 @@ -# @gqty/utils - -## 1.0.0 - -### Major Changes - -- 59d38ad: New gqty/utils package with bundled version of "sha1" package - -### Minor Changes - -- 6ecd2b0: New "@gqty/utils/mergeWith" with bundled lodash mergedWith function diff --git a/packages/utils/build.ts b/packages/utils/build.ts deleted file mode 100644 index f2bfcbc56..000000000 --- a/packages/utils/build.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { buildTsc } from 'bob-esbuild'; -import { writePackageJson } from 'bob-esbuild/config/packageJson'; -import pkg from './package.json'; - -await buildTsc(); - -await writePackageJson({ - packageJson: pkg, - distDir: 'dist', - skipValidate: true, -}); diff --git a/packages/utils/lib/mergeWith.ts b/packages/utils/lib/mergeWith.ts deleted file mode 100644 index 07221d159..000000000 --- a/packages/utils/lib/mergeWith.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as mergeWith } from 'lodash-es/mergeWith.js'; diff --git a/packages/utils/lib/sha1.ts b/packages/utils/lib/sha1.ts deleted file mode 100644 index c6142faf5..000000000 --- a/packages/utils/lib/sha1.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as sha1 } from 'sha1'; diff --git a/packages/utils/package.json b/packages/utils/package.json deleted file mode 100644 index e19009465..000000000 --- a/packages/utils/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "@gqty/utils", - "version": "1.0.0", - "exports": { - "./*": { - "types": "./dist/*.d.ts", - "require": "./dist/*.js", - "import": "./dist/*.mjs" - } - }, - "files": [ - "dist" - ], - "scripts": { - "build": "concurrently pnpm:build:sha1 pnpm:build:merge pnpm:build:ts", - "build:merge": "concurrently pnpm:build:merge:*", - "build:merge:cjs": "esbuild --bundle --format=cjs --target=es2020 --platform=node --minify-syntax --minify-identifiers --outfile=dist/mergeWith.js lib/mergeWith.ts", - "build:merge:esm": "esbuild --bundle --format=esm --target=es2020 --platform=node --minify-syntax --minify-identifiers --outfile=dist/mergeWith.mjs lib/mergeWith.ts", - "build:sha1": "concurrently pnpm:build:sha1:*", - "build:sha1:cjs": "esbuild --bundle --format=cjs --target=es2020 --platform=node --minify-syntax --minify-identifiers --outfile=dist/sha1.js lib/sha1.ts", - "build:sha1:esm": "esbuild --bundle --format=esm --target=es2020 --platform=node --minify-syntax --minify-identifiers --outfile=dist/sha1.mjs lib/sha1.ts", - "build:ts": "bob-tsm build.ts", - "prepare": "pnpm build" - }, - "devDependencies": { - "@types/lodash-es": "^4.17.7", - "@types/sha1": "1.1.3", - "lodash-es": "^4.17.21", - "sha1": "1.1.1" - }, - "publishConfig": { - "directory": "dist" - } -} diff --git a/packages/utils/src/mergeWith.ts b/packages/utils/src/mergeWith.ts deleted file mode 100644 index dc193ffbb..000000000 --- a/packages/utils/src/mergeWith.ts +++ /dev/null @@ -1,43 +0,0 @@ -type MergeWithCustomizer = { - bivariantHack( - value: any, - srcValue: any, - key: string, - object: any, - source: any - ): any; -}['bivariantHack']; - -export declare function mergeWith( - object: TObject, - source: TSource, - customizer: MergeWithCustomizer -): TObject & TSource; -export declare function mergeWith( - object: TObject, - source1: TSource1, - source2: TSource2, - customizer: MergeWithCustomizer -): TObject & TSource1 & TSource2; -export declare function mergeWith( - object: TObject, - source1: TSource1, - source2: TSource2, - source3: TSource3, - customizer: MergeWithCustomizer -): TObject & TSource1 & TSource2 & TSource3; -export declare function mergeWith< - TObject, - TSource1, - TSource2, - TSource3, - TSource4 ->( - object: TObject, - source1: TSource1, - source2: TSource2, - source3: TSource3, - source4: TSource4, - customizer: MergeWithCustomizer -): TObject & TSource1 & TSource2 & TSource3 & TSource4; -export declare function mergeWith(object: any, ...otherArgs: any[]): any; diff --git a/packages/utils/src/sha1.ts b/packages/utils/src/sha1.ts deleted file mode 100644 index 47ba5c874..000000000 --- a/packages/utils/src/sha1.ts +++ /dev/null @@ -1,36 +0,0 @@ -// Type definitions for sha1 1.1 -// Project: https://github.com/pvorb/node-sha1 -// Definitions by: Bill Sourour -// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped - -/** - * js function for hashing messages with SHA1 - * - * @param message - a string or buffer to hash - * @param options - an options object - * @returns the resultant SHA1 hash of the given message - */ -export declare function sha1( - message: string | Buffer, - options?: Sha1AsStringOptions -): string; -export declare function sha1( - message: string | Buffer, - options?: Sha1AsBytesOptions -): Uint8Array; -export declare function sha1( - message: string | Buffer, - options?: Sha1Options -): string | Uint8Array; - -interface Sha1AsStringOptions { - asBytes?: false | undefined; - asString?: boolean | undefined; -} - -interface Sha1AsBytesOptions { - asBytes: true; - asString?: false | undefined; -} - -type Sha1Options = Sha1AsStringOptions | Sha1AsBytesOptions; diff --git a/patches/use-sync-external-store@1.2.0.patch b/patches/use-sync-external-store@1.2.0.patch new file mode 100644 index 000000000..b3455cb0e --- /dev/null +++ b/patches/use-sync-external-store@1.2.0.patch @@ -0,0 +1,25 @@ +diff --git a/package.json b/package.json +index 7006692030f37a5ae24eced61b61c6357c5bb034..39416e1933f8c39b5bc9794fbf00fb1f20804868 100644 +--- a/package.json ++++ b/package.json +@@ -17,6 +17,20 @@ + "shim/", + "cjs/" + ], ++ "exports": { ++ ".": "./index.js", ++ "./index": "./index.js", ++ "./index.native": "./index.native.js", ++ "./with-selector": "./with-selector.js", ++ "./shim": "./shim/index.js", ++ "./shim/index": "./shim/index.js", ++ "./shim/index.native": "./shim/index.native.js", ++ "./shim/with-selector": "./shim/with-selector.js", ++ "./shim/*": "./shim/*", ++ "./cjs/*": "./cjs/*", ++ "./src/*": "./src/*", ++ "./package.json": "./package.json" ++ }, + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 76b273da8..092841084 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,959 +1,881 @@ -lockfileVersion: 5.4 +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false overrides: - trim@<0.0.3: '>=0.0.3' - glob-parent@<5.1.2: '>=5.1.2' - undici: 5.7.0 - mermaid@<8.13.8: '>=8.13.8' '@braintree/sanitize-url@<6.0.0': '>=6.0.0' + d3-color@<3.1.0: '>=3.1.0' dset@<3.1.2: '>=3.1.2' - mermaid@>=8.0.0 <9.1.2: '>=9.1.2' + glob-parent@<5.1.2: '>=5.1.2' mdx-mermaid@<1.3.0: '>=1.3.0' - d3-color@<3.1.0: '>=3.1.0' + '@manypkg/get-packages': ^1.1.3 + mermaid@<8.13.8: '>=8.13.8' + mermaid@>=8.0.0 <9.1.2: '>=9.1.2' + trim@<0.0.3: '>=0.0.3' + undici: 5.7.0 + +patchedDependencies: + use-sync-external-store@1.2.0: + hash: zifctuasxutqued7wp7lp4536i + path: patches/use-sync-external-store@1.2.0.patch importers: .: - specifiers: - '@changesets/apply-release-plan': ^6.1.3 - '@changesets/assemble-release-plan': ^5.2.3 - '@changesets/cli': ^2.26.0 - '@changesets/config': ^2.3.0 - '@changesets/read': ^0.5.9 - '@manypkg/get-packages': ^1.1.3 - '@types/node': ^18.15.5 - bob-esbuild: ^4.0.3 - bob-esbuild-cli: ^4.0.0 - bob-ts: ^4.1.1 - bob-tsm: ^1.1.2 - bufferutil: ^4.0.7 - chalk: ^5.2.0 - changesets-github-release: ^0.1.0 - concurrently: ^7.6.0 - esbuild: ^0.17.12 - globby: ^13.1.3 - graphql: ^16.6.0 - husky: ^8.0.3 - jest: ^29.5.0 - open: ^8.4.2 - prettier: ^2.8.6 - pretty-quick: ^3.1.3 - rimraf: ^4.4.0 - semver: ^7.3.8 - ts-jest: ^29.0.5 - ts-node: ^10.9.1 - tslib: ^2.5.0 - typescript: ^4.9.5 - utf-8-validate: ^6.0.3 - wait-on: ^7.0.1 - devDependencies: - '@changesets/apply-release-plan': 6.1.3 - '@changesets/assemble-release-plan': 5.2.3 - '@changesets/cli': 2.26.0 - '@changesets/config': 2.3.0 - '@changesets/read': 0.5.9 - '@manypkg/get-packages': 1.1.3 - '@types/node': 18.15.5 - bob-esbuild: 4.0.3_zofgjzmca2gwtey4x4go3tg4j4 - bob-esbuild-cli: 4.0.0_bob-esbuild@4.0.3 - bob-ts: 4.1.1_egtog7kfy74nw7rr3bmqx36oni - bob-tsm: 1.1.2_zofgjzmca2gwtey4x4go3tg4j4 - bufferutil: 4.0.7 - chalk: 5.2.0 - changesets-github-release: 0.1.0 - concurrently: 7.6.0 - esbuild: 0.17.12 - globby: 13.1.3 - graphql: 16.6.0 - husky: 8.0.3 - jest: 29.5.0_757mb262zsxkcnuknwfdsckmku - open: 8.4.2 - prettier: 2.8.6 - pretty-quick: 3.1.3_prettier@2.8.6 - rimraf: 4.4.0 - semver: 7.3.8 - ts-jest: 29.0.5_kxkw7io5lipdvgpiby7d7545le - ts-node: 10.9.1_345kigqis4fipgyy5xb3ndshmq - tslib: 2.5.0 - typescript: 4.9.5 - utf-8-validate: 6.0.3 - wait-on: 7.0.1 - - examples/ez: - specifiers: - '@gqty/cli': workspace:^3.3.0 - '@graphql-ez/fastify': ^0.12.0 - '@graphql-ez/fastify-testing': ^0.4.0 - '@graphql-ez/plugin-altair': ^0.11.0 - '@graphql-ez/plugin-codegen': ^0.8.0 - '@graphql-ez/plugin-schema': ^0.9.0 - '@graphql-typed-document-node/core': ^3.2.0 - '@types/lodash': ^4.14.191 - '@types/node': ^18.15.5 - '@types/randomstring': ^1.1.8 - bob-tsm: ^1.1.2 - esbuild: ^0.17.12 - fastify: ^4.11.0 - gqty: workspace:^2.3.0 - graphql: ^16.6.0 - graphql-ez: ^0.16.0 - jest: ^29.5.0 - lodash: ^4.17.21 - randomstring: ^1.2.3 - test-utils: workspace:^0.1.0 - typescript: ^4.9.5 - dependencies: - '@gqty/cli': link:../../packages/cli - '@graphql-ez/fastify': 0.12.0_orbaahc6eekuqylvdxzf34kuru - '@graphql-ez/fastify-testing': 0.4.0_zow4snlfvwzlxlnfckljwyv4aa - '@graphql-ez/plugin-altair': 0.11.0_ybhfgsau5tg5dsvtpo567urcge - '@graphql-ez/plugin-codegen': 0.8.0_ybhfgsau5tg5dsvtpo567urcge - '@graphql-ez/plugin-schema': 0.9.0_ybhfgsau5tg5dsvtpo567urcge - '@graphql-typed-document-node/core': 3.2.0_graphql@16.6.0 - fastify: 4.11.0 - gqty: link:../../packages/gqty - graphql: 16.6.0 - graphql-ez: 0.16.0_cqyb4buyc4habqgvcucexr22xm - lodash: 4.17.21 - randomstring: 1.2.3 - test-utils: link:../../internal/test-utils - devDependencies: - '@types/lodash': 4.14.191 - '@types/node': 18.15.5 - '@types/randomstring': 1.1.8 - bob-tsm: 1.1.2_zofgjzmca2gwtey4x4go3tg4j4 - esbuild: 0.17.12 - jest: 29.5.0_@types+node@18.15.5 - typescript: 4.9.5 - - examples/ez-react-next: - specifiers: - '@gqty/cli': workspace:^3.3.0 - '@gqty/logger': workspace:^2.0.2 - '@gqty/react': workspace:^2.1.1 - '@graphql-ez/nextjs': ^0.11.0 - '@graphql-ez/plugin-codegen': ^0.8.0 - '@graphql-ez/plugin-graphiql': ^0.12.0 - '@graphql-ez/plugin-schema': ^0.9.0 - '@types/node': ^18.15.5 - '@types/react': ^17.0.53 - '@types/react-dom': ^18.0.11 - concurrently: ^7.6.0 - esbuild: ^0.17.12 - gqty: workspace:^2.3.0 - graphql: ^16.6.0 - graphql-ez: ^0.16.0 - next: ^12.3.4 - open-cli: ^7.2.0 - react: ^17.0.2 - react-dom: ^17.0.2 - typescript: ^4.9.5 - wait-on: ^7.0.1 - dependencies: - '@gqty/logger': link:../../packages/logger - '@gqty/react': link:../../packages/react - '@graphql-ez/nextjs': 0.11.0_c5xlb76vribzm5vdd4qmd4rlja - '@graphql-ez/plugin-codegen': 0.8.0_ybhfgsau5tg5dsvtpo567urcge - '@graphql-ez/plugin-graphiql': 0.12.0_ybhfgsau5tg5dsvtpo567urcge - '@graphql-ez/plugin-schema': 0.9.0_ybhfgsau5tg5dsvtpo567urcge - gqty: link:../../packages/gqty - graphql: 16.6.0 - graphql-ez: 0.16.0_cqyb4buyc4habqgvcucexr22xm - next: 12.3.4_sfoxds7t5ydpegc3knd667wn6m - react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 devDependencies: - '@gqty/cli': link:../../packages/cli - '@types/node': 18.15.5 - '@types/react': 17.0.53 - '@types/react-dom': 18.0.11 - concurrently: 7.6.0 - esbuild: 0.17.12 - open-cli: 7.2.0 - typescript: 4.9.5 - wait-on: 7.0.1 - - examples/github: - specifiers: - '@gqty/cli': workspace:^3.3.0 - '@types/node': ^18.15.5 - dotenv: ^16.0.3 - esbuild: ^0.17.12 - gqty: workspace:^2.3.0 - isomorphic-unfetch: ^4.0.2 - jest: ^29.5.0 - test-utils: workspace:^0.1.0 - typescript: ^4.9.5 - dependencies: - '@gqty/cli': link:../../packages/cli - dotenv: 16.0.3 - gqty: link:../../packages/gqty - test-utils: link:../../internal/test-utils + '@changesets/apply-release-plan': + specifier: ^6.1.3 + version: 6.1.3 + '@changesets/assemble-release-plan': + specifier: ^5.2.3 + version: 5.2.3 + '@changesets/changelog-github': + specifier: ^0.4.8 + version: 0.4.8 + '@changesets/cli': + specifier: ^2.26.0 + version: 2.26.0 + '@changesets/config': + specifier: ^2.3.0 + version: 2.3.0 + '@changesets/read': + specifier: ^0.5.9 + version: 0.5.9 + '@manypkg/get-packages': + specifier: ^1.1.3 + version: 1.1.3 + '@types/node': + specifier: ^18.15.5 + version: 18.19.6 + bob-esbuild: + specifier: 5.0.0-alpha-227aebc.0 + version: 5.0.0-alpha-227aebc.0(esbuild@0.18.20)(typescript@5.3.3) + bob-esbuild-cli: + specifier: 5.0.0-alpha-227aebc.0 + version: 5.0.0-alpha-227aebc.0(bob-esbuild@5.0.0-alpha-227aebc.0) + bob-ts: + specifier: 5.0.0-alpha-227aebc.0 + version: 5.0.0-alpha-227aebc.0(@types/node@18.19.6)(esbuild@0.18.20)(typescript@5.3.3) + bob-tsm: + specifier: 2.0.0-alpha-227aebc.0 + version: 2.0.0-alpha-227aebc.0(esbuild@0.18.20)(typescript@5.3.3) + bufferutil: + specifier: ^4.0.7 + version: 4.0.7 + chalk: + specifier: ^5.2.0 + version: 5.2.0 + changesets-github-release: + specifier: ^0.1.0 + version: 0.1.0 + concurrently: + specifier: ^7.6.0 + version: 7.6.0 + esbuild: + specifier: ^0.18.17 + version: 0.18.20 + globby: + specifier: ^13.1.3 + version: 13.1.3 + husky: + specifier: ^8.0.3 + version: 8.0.3 + jest: + specifier: ^29.5.0 + version: 29.5.0(@types/node@18.19.6)(ts-node@10.9.1) + open: + specifier: ^8.4.2 + version: 8.4.2 + prettier: + specifier: ^2.8.6 + version: 2.8.6 + pretty-quick: + specifier: ^3.1.3 + version: 3.1.3(prettier@2.8.6) + rimraf: + specifier: ^4.4.0 + version: 4.4.0 + semver: + specifier: ^7.3.8 + version: 7.5.4 + ts-jest: + specifier: ^29.1.0 + version: 29.1.1(@babel/core@7.23.7)(esbuild@0.18.20)(jest@29.5.0)(typescript@5.3.3) + ts-node: + specifier: ^10.9.1 + version: 10.9.1(@types/node@18.19.6)(typescript@5.3.3) + tslib: + specifier: ^2.5.0 + version: 2.5.0 + typescript: + specifier: ^5.0.4 + version: 5.3.3 + utf-8-validate: + specifier: ^6.0.3 + version: 6.0.3 + wait-on: + specifier: ^7.0.1 + version: 7.0.1 + + examples/gnt: + dependencies: + '@gqty/logger': + specifier: workspace:^ + version: link:../../packages/logger/dist + '@gqty/react': + specifier: workspace:^ + version: link:../../packages/react/dist + gqty: + specifier: workspace:^ + version: link:../../packages/gqty/dist + graphql: + specifier: ^16.7.1 + version: 16.8.1 + next: + specifier: 13.4.12 + version: 13.4.12(@babel/core@7.23.7)(react-dom@18.2.0)(react@18.2.0) + react: + specifier: ^18.2.0 + version: 18.2.0 + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) devDependencies: - '@types/node': 18.15.5 - esbuild: 0.17.12 - isomorphic-unfetch: 4.0.2 - jest: 29.5.0_@types+node@18.15.5 - typescript: 4.9.5 + '@next/bundle-analyzer': + specifier: ^13.4.12 + version: 13.5.6(bufferutil@4.0.7)(utf-8-validate@5.0.10) + '@types/node': + specifier: 20.4.5 + version: 20.4.5 + '@types/react': + specifier: 18.2.17 + version: 18.2.17 + '@types/react-dom': + specifier: 18.2.7 + version: 18.2.7 + autoprefixer: + specifier: 10.4.14 + version: 10.4.14(postcss@8.4.21) + eslint: + specifier: 8.46.0 + version: 8.46.0 + eslint-config-next: + specifier: 13.3.0 + version: 13.3.0(eslint@8.46.0)(typescript@5.3.3) + postcss: + specifier: 8.4.21 + version: 8.4.21 + tailwindcss: + specifier: ^3.3.3 + version: 3.4.1(ts-node@10.9.1) + typescript: + specifier: ^5.0.4 + version: 5.3.3 + utf-8-validate: + specifier: ^5.0.2 + version: 5.0.10 examples/react: - specifiers: - '@chakra-ui/react': ^1.8.9 - '@emotion/react': ^11.10.6 - '@emotion/styled': ^11.10.6 - '@faker-js/faker': ^7.6.0 - '@fastify/nextjs': ^9.2.0 - '@gqty/cli': workspace:^3.3.0 - '@gqty/logger': workspace:^2.0.2 - '@gqty/react': workspace:^2.1.1 - '@gqty/subscriptions': workspace:^2.0.1 - '@graphql-ez/fastify': ^0.12.0 - '@graphql-ez/plugin-altair': ^0.11.0 - '@graphql-ez/plugin-codegen': ^0.8.0 - '@graphql-ez/plugin-dataloader': ^0.8.0 - '@graphql-ez/plugin-schema': ^0.9.0 - '@graphql-ez/plugin-upload': ^0.8.0 - '@graphql-ez/plugin-websockets': ^0.11.0 - '@react-native-async-storage/async-storage': ^1.17.12 - '@types/extract-files': ^8.1.1 - '@types/graphql-upload': ^16.0.0 - '@types/lodash': ^4.14.191 - '@types/node': ^18.15.5 - '@types/react': ^17.0.53 - '@types/react-dom': ^18.0.11 - bob-tsm: ^1.1.2 - concurrently: ^7.6.0 - cross-env: ^7.0.3 - date-fns: ^2.29.3 - esbuild: ^0.17.12 - extract-files: 13.0.0 - fastify: ^4.11.0 - framer-motion: ^6.5.1 - gqty: workspace:^2.3.0 - graphql: ^16.6.0 - graphql-ez: ^0.16.0 - graphql-upload: ^16.0.2 - jest: ^29.5.0 - localforage: ^1.10.0 - lodash: ^4.17.21 - ms: ^3.0.0-canary.1 - next: ^12.3.4 - node-json-db: ^2.1.5 - open: ^8.4.2 - open-cli: ^7.2.0 - react: ^17.0.2 - react-dom: ^17.0.2 - react-error-boundary: ^3.1.4 - react-intersection-observer: ^9.4.3 - react-ssr-prepass: ^1.5.0 - react-use: ^17.4.0 - serialize-error: ^11.0.0 - typescript: ^4.9.5 - use-error-boundary: ^2.0.6 - wait-on: ^7.0.1 - dependencies: - '@chakra-ui/react': 1.8.9_pizuovw4rxklnfeqfejc6mp34q - '@emotion/react': 11.10.6_h7fc2el62uaa77gho3xhys6ola - '@emotion/styled': 11.10.6_7hisdke2c3hq4r3q5z4dcdhmzi - '@faker-js/faker': 7.6.0 - '@gqty/cli': link:../../packages/cli - '@gqty/logger': link:../../packages/logger - '@gqty/react': link:../../packages/react - '@gqty/subscriptions': link:../../packages/subscriptions - '@graphql-ez/fastify': 0.12.0_orbaahc6eekuqylvdxzf34kuru - '@graphql-ez/plugin-altair': 0.11.0_ybhfgsau5tg5dsvtpo567urcge - '@graphql-ez/plugin-codegen': 0.8.0_ybhfgsau5tg5dsvtpo567urcge - '@graphql-ez/plugin-dataloader': 0.8.0_4khj4v5e4vfkswp32g74ajok3i - '@graphql-ez/plugin-schema': 0.9.0_ybhfgsau5tg5dsvtpo567urcge - '@graphql-ez/plugin-upload': 0.8.0_kjoqpzaqt57iapo3yu2w2aeoce - '@graphql-ez/plugin-websockets': 0.11.0_ybhfgsau5tg5dsvtpo567urcge - '@react-native-async-storage/async-storage': 1.17.12 - '@types/extract-files': 8.1.1 - date-fns: 2.29.3 - extract-files: 13.0.0 - fastify: 4.11.0 - framer-motion: 6.5.1_sfoxds7t5ydpegc3knd667wn6m - gqty: link:../../packages/gqty - graphql: 16.6.0 - graphql-ez: 0.16.0_cqyb4buyc4habqgvcucexr22xm - graphql-upload: 16.0.2_graphql@16.6.0 - localforage: 1.10.0 - lodash: 4.17.21 - ms: 3.0.0-canary.1 - next: 12.3.4_sfoxds7t5ydpegc3knd667wn6m - node-json-db: 2.1.5 - open: 8.4.2 - react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 - react-error-boundary: 3.1.4_react@17.0.2 - react-intersection-observer: 9.4.3_react@17.0.2 - react-ssr-prepass: 1.5.0_react@17.0.2 - react-use: 17.4.0_sfoxds7t5ydpegc3knd667wn6m - serialize-error: 11.0.0 - use-error-boundary: 2.0.6_sfoxds7t5ydpegc3knd667wn6m - devDependencies: - '@fastify/nextjs': 9.2.0_next@12.3.4 - '@types/graphql-upload': 16.0.0 - '@types/lodash': 4.14.191 - '@types/node': 18.15.5 - '@types/react': 17.0.53 - '@types/react-dom': 18.0.11 - bob-tsm: 1.1.2_zofgjzmca2gwtey4x4go3tg4j4 - concurrently: 7.6.0 - cross-env: 7.0.3 - esbuild: 0.17.12 - jest: 29.5.0_@types+node@18.15.5 - open-cli: 7.2.0 - typescript: 4.9.5 - wait-on: 7.0.1 - - examples/vite-example: - specifiers: - '@gqty/cli': workspace:^3.3.0 - '@gqty/react': workspace:^2.1.1 - '@types/node': ^18.15.5 - '@types/react': ^17.0.53 - '@types/react-dom': ^18.0.11 - '@vitejs/plugin-react-refresh': ^1.3.6 - esbuild: ^0.17.12 - gqty: workspace:^2.3.0 - react: ^17.0.2 - react-dom: ^17.0.2 - typescript: ^4.9.5 - vite: ^4.2.1 - dependencies: - '@gqty/cli': link:../../packages/cli - '@gqty/react': link:../../packages/react - gqty: link:../../packages/gqty - react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 - devDependencies: - '@types/node': 18.15.5 - '@types/react': 17.0.53 - '@types/react-dom': 18.0.11 - '@vitejs/plugin-react-refresh': 1.3.6 - esbuild: 0.17.12 - typescript: 4.9.5 - vite: 4.2.1_@types+node@18.15.5 - - integration/graphql-17: - specifiers: - '@gqty/cli': workspace:^3.3.0 - '@graphql-ez/fastify': ^0.12.0 - '@graphql-ez/fastify-testing': ^0.4.0 - '@graphql-typed-document-node/core': ^3.2.0 - '@types/node': ^18.15.5 - ava: ^5.2.0 - bob-tsm: ^1.1.2 - c8: ^7.13.0 - esbuild: ^0.17.12 - fastify: ^4.11.0 - gqty: workspace:^2.3.0 - graphql: 17.0.0-alpha.2 - graphql-ez: ^0.16.0 - typescript: ^4.9.5 + dependencies: + '@chakra-ui/react': + specifier: ^1.8.9 + version: 1.8.9(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(@types/react@17.0.53)(framer-motion@6.5.1)(react-dom@17.0.2)(react@17.0.2) + '@emotion/react': + specifier: ^11.10.6 + version: 11.10.6(@types/react@17.0.53)(react@17.0.2) + '@emotion/styled': + specifier: ^11.10.6 + version: 11.10.6(@emotion/react@11.10.6)(@types/react@17.0.53)(react@17.0.2) + '@envelop/core': + specifier: ^3.0.6 + version: 3.0.6 + '@faker-js/faker': + specifier: ^7.6.0 + version: 7.6.0 + '@gqty/cli': + specifier: workspace:^ + version: link:../../packages/cli/dist + '@gqty/logger': + specifier: workspace:^ + version: link:../../packages/logger/dist + '@gqty/react': + specifier: workspace:^ + version: link:../../packages/react/dist + '@gqty/subscriptions': + specifier: workspace:^ + version: link:../../packages/subscriptions/dist + '@graphql-ez/fastify': + specifier: ^0.12.0 + version: 0.12.0(@types/node@18.19.6)(fastify@4.25.2)(graphql-ez@0.16.0)(graphql@16.8.1) + '@graphql-ez/plugin-altair': + specifier: ^0.11.0 + version: 0.11.0(@types/node@18.19.6)(graphql-ez@0.16.0)(graphql@16.8.1) + '@graphql-ez/plugin-codegen': + specifier: ^0.8.0 + version: 0.8.0(@types/node@18.19.6)(graphql-ez@0.16.0)(graphql@16.8.1) + '@graphql-ez/plugin-dataloader': + specifier: ^0.8.0 + version: 0.8.0(@envelop/core@3.0.6)(graphql-ez@0.16.0)(graphql@16.8.1) + '@graphql-ez/plugin-schema': + specifier: ^0.9.0 + version: 0.9.0(@types/node@18.19.6)(graphql-ez@0.16.0)(graphql@16.8.1) + '@graphql-ez/plugin-upload': + specifier: ^0.8.0 + version: 0.8.0(@types/graphql-upload@16.0.0)(@types/node@18.19.6)(graphql-ez@0.16.0)(graphql-upload@13.0.0)(graphql@16.8.1) + '@graphql-ez/plugin-websockets': + specifier: ^0.11.0 + version: 0.11.0(@types/node@18.19.6)(bufferutil@4.0.7)(graphql-ez@0.16.0)(graphql@16.8.1)(utf-8-validate@6.0.3) + '@react-hookz/web': + specifier: ^22.0.0 + version: 22.0.0(react-dom@17.0.2)(react@17.0.2) + date-fns: + specifier: ^2.29.3 + version: 2.29.3 + extract-files: + specifier: ^13.0.0 + version: 13.0.0 + fastify: + specifier: ^4.15.0 + version: 4.25.2 + framer-motion: + specifier: ^6.5.1 + version: 6.5.1(react-dom@17.0.2)(react@17.0.2) + gqty: + specifier: workspace:^ + version: link:../../packages/gqty/dist + graphql: + specifier: ^16.6.0 + version: 16.8.1 + graphql-ez: + specifier: ^0.16.0 + version: 0.16.0(@types/node@18.19.6)(graphql@16.8.1) + graphql-upload: + specifier: ^13.0.0 + version: 13.0.0(graphql@16.8.1) + ms: + specifier: ^2.1.3 + version: 2.1.3 + next: + specifier: ^12.3.4 + version: 12.3.4(@babel/core@7.23.7)(react-dom@17.0.2)(react@17.0.2) + node-json-db: + specifier: ^2.1.5 + version: 2.1.5 + react: + specifier: ^17.0.2 + version: 17.0.2 + react-dom: + specifier: ^17.0.2 + version: 17.0.2(react@17.0.2) + react-intersection-observer: + specifier: ^9.4.3 + version: 9.4.3(react@17.0.2) + serialize-error: + specifier: ^11.0.0 + version: 11.0.0 devDependencies: - '@gqty/cli': file:packages/cli_graphql@17.0.0-alpha.2 - '@graphql-ez/fastify': 0.12.0_sjoruv57pci442joaaplrlyrfa - '@graphql-ez/fastify-testing': 0.4.0_ea5semnvare4dczwxuvgvhhrim - '@graphql-typed-document-node/core': 3.2.0_graphql@17.0.0-alpha.2 - '@types/node': 18.15.5 - ava: 5.2.0 - bob-tsm: 1.1.2_zofgjzmca2gwtey4x4go3tg4j4 - c8: 7.13.0 - esbuild: 0.17.12 - fastify: 4.11.0 - gqty: file:packages/gqty_graphql@17.0.0-alpha.2 - graphql: 17.0.0-alpha.2 - graphql-ez: 0.16.0_ddkhnomv6qakhz4wmciki3kakm - typescript: 4.9.5 - dependenciesMeta: + '@babel/core': + specifier: ^7.21.0 + version: 7.23.7 + '@babel/preset-env': + specifier: ^7.20.2 + version: 7.23.8(@babel/core@7.23.7) + '@fastify/nextjs': + specifier: ^9.2.0 + version: 9.2.0(next@12.3.4) + '@types/extract-files': + specifier: ^8.1.1 + version: 8.1.1 + '@types/graphql-upload': + specifier: ^16.0.0 + version: 16.0.0 + '@types/lodash': + specifier: ^4.14.191 + version: 4.14.191 + '@types/node': + specifier: ^18.15.5 + version: 18.19.6 + '@types/react': + specifier: ^17.0.53 + version: 17.0.53 + '@types/react-dom': + specifier: ^18.0.11 + version: 18.2.7 + bob-tsm: + specifier: 2.0.0-alpha-227aebc.0 + version: 2.0.0-alpha-227aebc.0(esbuild@0.17.19)(typescript@5.3.3) + concurrently: + specifier: ^7.6.0 + version: 7.6.0 + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + esbuild: + specifier: ^0.17.12 + version: 0.17.19 + jest: + specifier: ^29.5.0 + version: 29.5.0(@types/node@18.19.6)(ts-node@10.9.1) + open-cli: + specifier: ^7.2.0 + version: 7.2.0 + wait-on: + specifier: ^7.0.1 + version: 7.0.1 + + examples/vite-react: + dependencies: '@gqty/cli': - injected: true + specifier: workspace:^ + version: link:../../packages/cli/dist + '@gqty/react': + specifier: workspace:^ + version: link:../../packages/react/dist gqty: - injected: true + specifier: workspace:^ + version: link:../../packages/gqty/dist + react: + specifier: ^18.2.0 + version: 18.2.0 + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) + devDependencies: + '@types/node': + specifier: ^18.15.11 + version: 18.19.6 + '@types/react': + specifier: ^18.2.0 + version: 18.2.17 + '@types/react-dom': + specifier: ^18.0.11 + version: 18.2.7 + '@vitejs/plugin-react-refresh': + specifier: ^1.3.6 + version: 1.3.6 + esbuild: + specifier: ^0.17.12 + version: 0.17.19 + vite: + specifier: ^4.2.1 + version: 4.2.1(@types/node@18.19.6) internal/test-utils: - specifiers: - '@graphql-ez/fastify': ^0.12.0 - '@graphql-ez/fastify-testing': ^0.4.0 - '@graphql-ez/plugin-codegen': ^0.8.0 - '@graphql-ez/plugin-schema': ^0.9.0 - '@graphql-ez/plugin-websockets': ^0.11.0 - '@jest/types': ^29.5.0 - '@rollup/plugin-babel': ^6.0.3 - '@types/jest': ^29.5.0 - '@types/node': ^18.15.5 - '@types/randomstring': ^1.1.8 - bob-esbuild-cli: ^4.0.0 - bob-ts: ^4.1.1 - concurrently: ^7.6.0 - cross-env: ^7.0.3 - esbuild: ^0.17.12 - fastify: ^4.11.0 - graphql: ^16.6.0 - graphql-ez: ^0.16.0 - jest: ^29.5.0 - jest-watch-typeahead: ^2.2.2 - prettier: ^2.8.6 - randomstring: ^1.2.3 - ts-jest: ^29.0.5 - tslib: ^2.5.0 - typescript: ^4.9.5 - wait-for-expect: ^3.0.2 - dependencies: - '@graphql-ez/fastify': 0.12.0_orbaahc6eekuqylvdxzf34kuru - '@graphql-ez/fastify-testing': 0.4.0_gw55l7m33unpztkcavxnnvhm5q - '@graphql-ez/plugin-codegen': 0.8.0_ybhfgsau5tg5dsvtpo567urcge - '@graphql-ez/plugin-schema': 0.9.0_ybhfgsau5tg5dsvtpo567urcge - '@rollup/plugin-babel': 6.0.3 - '@types/jest': 29.5.0 - cross-env: 7.0.3 - fastify: 4.11.0 - graphql: 16.6.0 - graphql-ez: 0.16.0_cqyb4buyc4habqgvcucexr22xm - jest: 29.5.0_@types+node@18.15.5 - jest-watch-typeahead: 2.2.2_jest@29.5.0 - prettier: 2.8.6 - randomstring: 1.2.3 - ts-jest: 29.0.5_7zwficsud2wmcwakxus3xxpqke - wait-for-expect: 3.0.2 - devDependencies: - '@graphql-ez/plugin-websockets': 0.11.0_ybhfgsau5tg5dsvtpo567urcge - '@jest/types': 29.5.0 - '@types/node': 18.15.5 - '@types/randomstring': 1.1.8 - bob-esbuild-cli: 4.0.0 - bob-ts: 4.1.1_egtog7kfy74nw7rr3bmqx36oni - concurrently: 7.6.0 - esbuild: 0.17.12 - tslib: 2.5.0 - typescript: 4.9.5 - - internal/website: - specifiers: - '@chakra-ui/icons': ^1.1.7 - '@chakra-ui/react': ^1.8.9 - '@chakra-ui/theme-tools': ^1.3.6 - '@chakra-ui/utils': ^1.10.4 - '@emotion/react': ^11.10.6 - '@emotion/styled': ^11.10.6 - '@guild-docs/client': 2.1.1 - '@guild-docs/server': 4.0.0 - '@mdx-js/react': ^2.3.0 - '@next/bundle-analyzer': ^12.3.4 - '@theguild/components': ^1.12.0 - '@types/node': ^18.15.5 - '@types/react': ^17.0.53 - '@types/react-dom': ^18.0.11 - bob-tsm: ^1.1.2 - concurrently: ^7.6.0 - cross-env: ^7.0.3 - csstype: ^3.1.1 - esbuild: ^0.17.12 - framer-motion: ^6.5.1 - i18next: ^22.4.13 - next: ^12.3.4 - next-i18next: ^13.2.2 - next-remote-watch: ^2.0.0 - next-seo: ^5.15.0 - open-cli: ^7.2.0 - react: ^17.0.2 - react-dom: ^17.0.2 - react-i18next: ^12.2.0 - react-icons: ^4.8.0 - react-use: ^17.4.0 - shiki: ^0.12.1 - typescript: ^4.9.5 - wait-on: ^7.0.1 - dependencies: - '@chakra-ui/icons': 1.1.7_react@17.0.2 - '@chakra-ui/react': 1.8.9_pizuovw4rxklnfeqfejc6mp34q - '@chakra-ui/theme-tools': 1.3.6 - '@chakra-ui/utils': 1.10.4 - '@emotion/react': 11.10.6_h7fc2el62uaa77gho3xhys6ola - '@emotion/styled': 11.10.6_7hisdke2c3hq4r3q5z4dcdhmzi - '@guild-docs/client': 2.1.1_i7yamdcqgfam5kgmi3p25dpzk4 - '@guild-docs/server': 4.0.0_vunfziydkmle7wbsgwsinw3tpa - '@mdx-js/react': 2.3.0_react@17.0.2 - '@theguild/components': 1.12.0_zsjcj4gvi24ks76nprapl4hsmq - csstype: 3.1.1 - framer-motion: 6.5.1_sfoxds7t5ydpegc3knd667wn6m - i18next: 22.4.13 - next: 12.3.4_sfoxds7t5ydpegc3knd667wn6m - next-i18next: 13.2.2_2ynmrf3odwjl6m6qwej4nuthfy - next-seo: 5.15.0_dwjfwrt6uv2f53xn6wotzcxyoa - react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 - react-i18next: 12.2.0_ffdbohwx3htqpx4tpuhghjrmkq - react-icons: 4.8.0_react@17.0.2 - react-use: 17.4.0_sfoxds7t5ydpegc3knd667wn6m - shiki: 0.12.1 + dependencies: + '@graphql-ez/fastify': + specifier: ^0.12.0 + version: 0.12.0(@types/node@18.19.6)(fastify@4.25.2)(graphql-ez@0.16.0)(graphql@16.8.1) + '@graphql-ez/fastify-testing': + specifier: ^0.4.0 + version: 0.4.0(@graphql-ez/fastify@0.12.0)(@types/node@18.19.6)(fastify@4.25.2)(graphql-ez@0.16.0)(graphql@16.8.1) + '@graphql-ez/plugin-codegen': + specifier: ^0.8.0 + version: 0.8.0(@types/node@18.19.6)(graphql-ez@0.16.0)(graphql@16.8.1) + '@graphql-ez/plugin-schema': + specifier: ^0.9.0 + version: 0.9.0(@types/node@18.19.6)(graphql-ez@0.16.0)(graphql@16.8.1) + '@rollup/plugin-babel': + specifier: ^6.0.3 + version: 6.0.3(@babel/core@7.23.7) + '@types/jest': + specifier: ^29.5.0 + version: 29.5.11 + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + fastify: + specifier: ^4.11.0 + version: 4.25.2 + graphql: + specifier: ^16.6.0 + version: 16.8.1 + graphql-ez: + specifier: ^0.16.0 + version: 0.16.0(@types/node@18.19.6)(graphql@16.8.1) + jest: + specifier: ^29.5.0 + version: 29.5.0(@types/node@18.19.6)(ts-node@10.9.1) + jest-watch-typeahead: + specifier: ^2.2.2 + version: 2.2.2(jest@29.5.0) + randomstring: + specifier: ^1.2.3 + version: 1.2.3 + wait-for-expect: + specifier: ^3.0.2 + version: 3.0.2 devDependencies: - '@next/bundle-analyzer': 12.3.4 - '@types/node': 18.15.5 - '@types/react': 17.0.53 - '@types/react-dom': 18.0.11 - bob-tsm: 1.1.2_zofgjzmca2gwtey4x4go3tg4j4 - concurrently: 7.6.0 - cross-env: 7.0.3 - esbuild: 0.17.12 - next-remote-watch: 2.0.0_next@12.3.4 - open-cli: 7.2.0 - typescript: 4.9.5 - wait-on: 7.0.1 + '@graphql-ez/plugin-websockets': + specifier: ^0.11.0 + version: 0.11.0(@types/node@18.19.6)(bufferutil@4.0.7)(graphql-ez@0.16.0)(graphql@16.8.1)(utf-8-validate@6.0.3) + '@jest/types': + specifier: ^29.5.0 + version: 29.5.0 + '@types/node': + specifier: ^18.15.5 + version: 18.19.6 + '@types/randomstring': + specifier: ^1.1.8 + version: 1.1.8 + bob-esbuild-cli: + specifier: 5.0.0-alpha-227aebc.0 + version: 5.0.0-alpha-227aebc.0(bob-esbuild@5.0.0-alpha-227aebc.0) + bob-ts: + specifier: 5.0.0-alpha-227aebc.0 + version: 5.0.0-alpha-227aebc.0(@types/node@18.19.6)(esbuild@0.17.19)(typescript@5.3.3) + concurrently: + specifier: ^7.6.0 + version: 7.6.0 + esbuild: + specifier: ^0.17.12 + version: 0.17.19 + tslib: + specifier: ^2.5.0 + version: 2.5.0 packages/cli: - specifiers: - '@graphql-codegen/core': ^3.1.0 - '@graphql-codegen/typescript': ^3.0.2 - '@graphql-tools/delegate': ^9.0.25 - '@graphql-tools/utils': ^9.2.0 - '@graphql-tools/wrap': ^9.3.4 - '@size-limit/preset-small-lib': ^8.2.4 - '@types/lodash': ^4.14.191 - '@types/lodash.sortby': ^4.7.7 - '@types/mkdirp': ^1.0.2 - '@types/node': ^18.15.5 - bob-ts: ^4.1.1 - bob-tsm: ^1.1.2 - changesets-github-release: ^0.1.0 - commander: ^10.0.0 - cosmiconfig: ^8.1.3 - esbuild: ^0.17.12 - fast-glob: ^3.2.12 - gqty: workspace:^2.3.0 - graphql: ^16.6.0 - lodash: ^4.17.21 - mkdirp: ^2.1.5 - open-cli: ^7.2.0 - prettier: ^2.8.6 - rimraf: ^4.4.0 - serve: ^14.2.0 - size-limit: ^8.2.4 - test-utils: workspace:^0.1.0 - tmp-promise: ^3.0.3 - tslib: ^2.5.0 - typescript: ^4.9.5 - undici: 5.7.0 - wait-on: ^7.0.1 dependencies: - gqty: link:../gqty - undici: 5.7.0 + '@graphql-codegen/core': + specifier: ^3.1.0 + version: 3.1.0(graphql@16.8.1) + '@graphql-codegen/typescript': + specifier: ^3.0.2 + version: 3.0.2(graphql@16.8.1) + '@graphql-tools/delegate': + specifier: ^9.0.25 + version: 9.0.25(graphql@16.8.1) + '@graphql-tools/utils': + specifier: ^9.2.0 + version: 9.2.0(graphql@16.8.1) + '@graphql-tools/wrap': + specifier: ^9.3.4 + version: 9.3.4(graphql@16.8.1) + chalk: + specifier: ^5.2.0 + version: 5.2.0 + commander: + specifier: ^11.0.0 + version: 11.1.0 + cosmiconfig: + specifier: ^8.1.3 + version: 8.1.3 + cross-fetch: + specifier: ^3.1.5 + version: 3.1.5 + fast-glob: + specifier: ^3.2.12 + version: 3.3.2 + gqty: + specifier: workspace:^ + version: link:../gqty/dist + graphql: + specifier: ^16.0.0 + version: 16.8.1 + inquirer: + specifier: ^8.2.5 + version: 8.2.6 + lodash-es: + specifier: ^4.17.21 + version: 4.17.21 + micromatch: + specifier: ^4.0.5 + version: 4.0.5 + mkdirp: + specifier: ^2.1.5 + version: 2.1.5 + prettier: + specifier: ^2.8.6 + version: 2.8.6 + trading-signals: + specifier: ^3.7.0 + version: 3.7.0 devDependencies: - '@graphql-codegen/core': 3.1.0_graphql@16.6.0 - '@graphql-codegen/typescript': 3.0.2_graphql@16.6.0 - '@graphql-tools/delegate': 9.0.25_graphql@16.6.0 - '@graphql-tools/utils': 9.2.0_graphql@16.6.0 - '@graphql-tools/wrap': 9.3.4_graphql@16.6.0 - '@size-limit/preset-small-lib': 8.2.4_size-limit@8.2.4 - '@types/lodash': 4.14.191 - '@types/lodash.sortby': 4.7.7 - '@types/mkdirp': 1.0.2 - '@types/node': 18.15.5 - bob-ts: 4.1.1_egtog7kfy74nw7rr3bmqx36oni - bob-tsm: 1.1.2_zofgjzmca2gwtey4x4go3tg4j4 - changesets-github-release: 0.1.0 - commander: 10.0.0 - cosmiconfig: 8.1.3 - esbuild: 0.17.12 - fast-glob: 3.2.12 - graphql: 16.6.0 - lodash: 4.17.21 - mkdirp: 2.1.5 - open-cli: 7.2.0 - prettier: 2.8.6 - rimraf: 4.4.0 - serve: 14.2.0 - size-limit: 8.2.4 - test-utils: link:../../internal/test-utils - tmp-promise: 3.0.3 - tslib: 2.5.0 - typescript: 4.9.5 - wait-on: 7.0.1 + '@size-limit/preset-small-lib': + specifier: ^8.2.4 + version: 8.2.4(size-limit@8.2.4) + '@types/inquirer': + specifier: ^8.2.6 + version: 8.2.10 + '@types/lodash-es': + specifier: ^4.14.191 + version: 4.17.7 + '@types/micromatch': + specifier: ^4.0.2 + version: 4.0.6 + '@types/mkdirp': + specifier: ^1.0.2 + version: 1.0.2 + '@types/ms': + specifier: ^0.7.31 + version: 0.7.31 + '@types/node': + specifier: ^18.15.5 + version: 18.19.6 + bob-tsm: + specifier: 2.0.0-alpha-227aebc.0 + version: 2.0.0-alpha-227aebc.0(esbuild@0.17.19)(typescript@5.3.3) + esbuild: + specifier: ^0.17.12 + version: 0.17.19 + open-cli: + specifier: ^7.2.0 + version: 7.2.0 + p-lazy: + specifier: ^3.1.0 + version: 3.1.0 + rimraf: + specifier: ^4.4.0 + version: 4.4.0 + serve: + specifier: ^14.2.0 + version: 14.2.0 + size-limit: + specifier: ^8.2.4 + version: 8.2.4 + test-utils: + specifier: workspace:^ + version: link:../../internal/test-utils + tmp-promise: + specifier: ^3.0.3 + version: 3.0.3 + wait-on: + specifier: ^7.0.1 + version: 7.0.1 publishDirectory: dist packages/gqty: - specifiers: - '@gqty/utils': workspace:^1.0.0 - '@size-limit/preset-small-lib': ^8.2.4 - '@types/mkdirp': ^1.0.2 - '@types/node': ^18.15.5 - '@types/react': ^17.0.53 - '@types/react-dom': ^18.0.11 - '@types/wait-on': ^5.3.1 - '@types/ws': ^8.5.4 - bob-esbuild-cli: ^4.0.0 - concurrently: ^7.6.0 - cross-env: ^7.0.3 - esbuild: ^0.17.12 - graphql: ^16.6.0 - jest: ^29.5.0 - mkdirp: ^2.1.5 - open-cli: ^7.2.0 - react: ^17.0.2 - react-dom: ^17.0.2 - rimraf: ^4.4.0 - serve: ^14.2.0 - size-limit: ^8.2.4 - test-utils: workspace:^0.1.0 - tsc-watch: ^6.0.0 - typescript: ^4.9.5 - wait-on: ^7.0.1 - ws: ^8.13.0 - dependencies: - '@gqty/utils': link:../utils + dependencies: + flatted: + specifier: ^3.2.7 + version: 3.2.9 + just-extend: + specifier: ^6.2.0 + version: 6.2.0 + just-has: + specifier: ^2.3.0 + version: 2.3.0 + just-memoize: + specifier: ^2.2.0 + version: 2.2.0 + just-safe-get: + specifier: ^4.2.0 + version: 4.2.0 + just-safe-set: + specifier: ^4.2.1 + version: 4.2.1 + multidict: + specifier: ^1.0.6 + version: 1.0.6 + object-hash: + specifier: ^3.0.0 + version: 3.0.0 + p-defer: + specifier: ^3.0.0 + version: 3.0.0 + p-lazy: + specifier: ^3.1.0 + version: 3.1.0 devDependencies: - '@size-limit/preset-small-lib': 8.2.4_size-limit@8.2.4 - '@types/mkdirp': 1.0.2 - '@types/node': 18.15.5 - '@types/react': 17.0.53 - '@types/react-dom': 18.0.11 - '@types/wait-on': 5.3.1 - '@types/ws': 8.5.4 - bob-esbuild-cli: 4.0.0 - concurrently: 7.6.0 - cross-env: 7.0.3 - esbuild: 0.17.12 - graphql: 16.6.0 - jest: 29.5.0_@types+node@18.15.5 - mkdirp: 2.1.5 - open-cli: 7.2.0 - react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 - rimraf: 4.4.0 - serve: 14.2.0 - size-limit: 8.2.4 - test-utils: link:../../internal/test-utils - tsc-watch: 6.0.0_typescript@4.9.5 - typescript: 4.9.5 - wait-on: 7.0.1 - ws: 8.13.0 + '@size-limit/preset-small-lib': + specifier: ^8.2.4 + version: 8.2.4(size-limit@8.2.4) + '@types/mkdirp': + specifier: ^1.0.2 + version: 1.0.2 + '@types/node': + specifier: ^18.15.5 + version: 18.19.6 + '@types/object-hash': + specifier: ^3.0.2 + version: 3.0.6 + '@types/wait-on': + specifier: ^5.3.1 + version: 5.3.1 + '@types/ws': + specifier: ^8.5.4 + version: 8.5.4 + bob-esbuild-cli: + specifier: 5.0.0-alpha-227aebc.0 + version: 5.0.0-alpha-227aebc.0(bob-esbuild@5.0.0-alpha-227aebc.0) + concurrently: + specifier: ^7.6.0 + version: 7.6.0 + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + esbuild: + specifier: ^0.17.12 + version: 0.17.19 + graphql: + specifier: ^16.6.0 + version: 16.8.1 + graphql-sse: + specifier: ^2.1.0 + version: 2.5.2(graphql@16.8.1) + graphql-ws: + specifier: ^5.11.3 + version: 5.14.3(graphql@16.8.1) + jest: + specifier: ^29.5.0 + version: 29.5.0(@types/node@18.19.6)(ts-node@10.9.1) + mkdirp: + specifier: ^2.1.5 + version: 2.1.5 + open-cli: + specifier: ^7.2.0 + version: 7.2.0 + rimraf: + specifier: ^4.4.0 + version: 4.4.0 + serve: + specifier: ^14.2.0 + version: 14.2.0 + size-limit: + specifier: ^8.2.4 + version: 8.2.4 + test-utils: + specifier: workspace:^0.1.0 + version: link:../../internal/test-utils + tsc-watch: + specifier: ^6.0.0 + version: 6.0.0(typescript@5.3.3) + type-fest: + specifier: ^3.9.0 + version: 3.13.1 + wait-on: + specifier: ^7.0.1 + version: 7.0.1 + ws: + specifier: ^8.13.0 + version: 8.13.0(bufferutil@4.0.7)(utf-8-validate@6.0.3) publishDirectory: dist packages/logger: - specifiers: - '@size-limit/preset-small-lib': ^8.2.4 - '@types/node': ^18.15.5 - '@types/prettier': ^2.7.2 - bob-esbuild-cli: ^4.0.0 - esbuild: ^0.17.12 - gqty: workspace:^2.3.0 - jest: ^29.5.0 - prettier: ^2.8.6 - size-limit: ^8.2.4 - test-utils: workspace:^0.1.0 - tslib: ^2.5.0 - typescript: ^4.9.5 dependencies: - prettier: 2.8.6 + prettier: + specifier: ^3.0.1 + version: 3.2.0 devDependencies: - '@size-limit/preset-small-lib': 8.2.4_size-limit@8.2.4 - '@types/node': 18.15.5 - '@types/prettier': 2.7.2 - bob-esbuild-cli: 4.0.0 - esbuild: 0.17.12 - gqty: link:../gqty - jest: 29.5.0_@types+node@18.15.5 - size-limit: 8.2.4 - test-utils: link:../../internal/test-utils - tslib: 2.5.0 - typescript: 4.9.5 + '@size-limit/preset-small-lib': + specifier: ^8.2.4 + version: 8.2.4(size-limit@8.2.4) + '@types/node': + specifier: ^18.15.5 + version: 18.19.6 + bob-esbuild-cli: + specifier: 5.0.0-alpha-227aebc.0 + version: 5.0.0-alpha-227aebc.0(bob-esbuild@5.0.0-alpha-227aebc.0) + esbuild: + specifier: ^0.17.12 + version: 0.17.19 + gqty: + specifier: workspace:^ + version: link:../gqty/dist + jest: + specifier: ^29.5.0 + version: 29.5.0(@types/node@18.19.6)(ts-node@10.9.1) + size-limit: + specifier: ^8.2.4 + version: 8.2.4 + test-utils: + specifier: workspace:^ + version: link:../../internal/test-utils + tslib: + specifier: ^2.5.0 + version: 2.5.0 publishDirectory: dist packages/react: - specifiers: - '@size-limit/preset-small-lib': ^8.2.4 - '@testing-library/jest-dom': ^5.16.5 - '@testing-library/react': ^12.1.5 - '@testing-library/react-hooks': ^8.0.1 - '@types/jest': ^29.5.0 - '@types/lodash': ^4.14.191 - '@types/node': ^18.15.5 - '@types/react': ^17.0.53 - '@types/react-dom': ^18.0.11 - bob-esbuild-cli: ^4.0.0 - esbuild: ^0.17.12 - gqty: workspace:^2.3.0 - graphql: ^16.6.0 - jest: ^29.5.0 - jest-environment-jsdom: ^29.5.0 - react: ^17.0.2 - react-dom: ^17.0.2 - react-ssr-prepass: ^1.5.0 - react-test-renderer: ^17.0.2 - regenerator-runtime: ^0.13.11 - size-limit: ^8.2.4 - test-utils: workspace:^0.1.0 - tslib: ^2.5.0 - typescript: ^4.9.5 - dependencies: - react-ssr-prepass: 1.5.0_react@17.0.2 + dependencies: + '@react-hookz/web': + specifier: ^23.0.0 + version: 23.1.0(react-dom@18.2.0)(react@18.2.0) + multidict: + specifier: ^1.0.6 + version: 1.0.6 + p-debounce: + specifier: ^4.0.0 + version: 4.0.0 + p-defer: + specifier: ^3.0.0 + version: 3.0.0 + react-ssr-prepass: + specifier: ^1.5.0 + version: 1.5.0(react@18.2.0) + use-sync-external-store: + specifier: ^1.2.0 + version: 1.2.0(patch_hash=zifctuasxutqued7wp7lp4536i)(react@18.2.0) devDependencies: - '@size-limit/preset-small-lib': 8.2.4_size-limit@8.2.4 - '@testing-library/jest-dom': 5.16.5 - '@testing-library/react': 12.1.5_sfoxds7t5ydpegc3knd667wn6m - '@testing-library/react-hooks': 8.0.1_x4rus6jnwzjq3zgm4bvjbdzauy - '@types/jest': 29.5.0 - '@types/lodash': 4.14.191 - '@types/node': 18.15.5 - '@types/react': 17.0.53 - '@types/react-dom': 18.0.11 - bob-esbuild-cli: 4.0.0 - esbuild: 0.17.12 - gqty: link:../gqty - graphql: 16.6.0 - jest: 29.5.0_@types+node@18.15.5 - jest-environment-jsdom: 29.5.0 - react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 - react-test-renderer: 17.0.2_react@17.0.2 - regenerator-runtime: 0.13.11 - size-limit: 8.2.4 - test-utils: link:../../internal/test-utils - tslib: 2.5.0 - typescript: 4.9.5 + '@size-limit/preset-small-lib': + specifier: ^8.2.4 + version: 8.2.4(size-limit@8.2.4) + '@testing-library/jest-dom': + specifier: ^5.16.5 + version: 5.16.5 + '@testing-library/react': + specifier: ^14.0.0 + version: 14.1.2(react-dom@18.2.0)(react@18.2.0) + '@types/jest': + specifier: ^29.5.1 + version: 29.5.11 + '@types/lodash-es': + specifier: ^4.17.7 + version: 4.17.7 + '@types/node': + specifier: ^18.16.3 + version: 18.19.6 + '@types/react': + specifier: ^18.2.0 + version: 18.2.17 + '@types/react-dom': + specifier: ^18.2.1 + version: 18.2.7 + '@types/use-sync-external-store': + specifier: ^0.0.3 + version: 0.0.3 + '@typescript-eslint/eslint-plugin': + specifier: ^5.59.2 + version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.46.0)(typescript@5.3.3) + '@typescript-eslint/parser': + specifier: ^5.59.2 + version: 5.62.0(eslint@8.46.0)(typescript@5.3.3) + bob-esbuild-cli: + specifier: 5.0.0-alpha-227aebc.0 + version: 5.0.0-alpha-227aebc.0(bob-esbuild@5.0.0-alpha-227aebc.0) + esbuild: + specifier: ^0.17.18 + version: 0.17.19 + eslint: + specifier: ^8.39.0 + version: 8.46.0 + eslint-plugin-you-dont-need-lodash-underscore: + specifier: ^6.12.0 + version: 6.13.0 + gqty: + specifier: workspace:^ + version: link:../gqty/dist + graphql: + specifier: ^16.6.0 + version: 16.8.1 + graphql-sse: + specifier: ^2.1.1 + version: 2.5.2(graphql@16.8.1) + graphql-ws: + specifier: ^5.12.1 + version: 5.14.3(graphql@16.8.1) + jest: + specifier: ^29.5.0 + version: 29.5.0(@types/node@18.19.6)(ts-node@10.9.1) + jest-environment-jsdom: + specifier: ^29.5.0 + version: 29.5.0(bufferutil@4.0.7)(utf-8-validate@6.0.3) + lodash-es: + specifier: ^4.17.21 + version: 4.17.21 + react: + specifier: ^18.2.0 + version: 18.2.0 + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) + react-test-renderer: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) + regenerator-runtime: + specifier: ^0.13.11 + version: 0.13.11 + size-limit: + specifier: ^8.2.4 + version: 8.2.4 + test-utils: + specifier: workspace:^ + version: link:../../internal/test-utils + tslib: + specifier: ^2.5.0 + version: 2.5.0 + type-fest: + specifier: ^3.9.0 + version: 3.13.1 publishDirectory: dist packages/subscriptions: - specifiers: - '@types/node': ^18.15.5 - '@types/ws': ^8.5.4 - bob-esbuild-cli: ^4.0.0 - esbuild: ^0.17.12 - gqty: workspace:^2.3.0 - graphql: ^16.6.0 - isomorphic-ws: ^5.0.0 - test-utils: workspace:^0.1.0 - tslib: ^2.5.0 - typescript: ^4.9.5 - ws: ^8.13.0 - dependencies: - isomorphic-ws: 5.0.0_ws@8.13.0 - ws: 8.13.0 - devDependencies: - '@types/node': 18.15.5 - '@types/ws': 8.5.4 - bob-esbuild-cli: 4.0.0 - esbuild: 0.17.12 - gqty: link:../gqty - graphql: 16.6.0 - test-utils: link:../../internal/test-utils - tslib: 2.5.0 - typescript: 4.9.5 - publishDirectory: dist - - packages/utils: - specifiers: - '@types/lodash-es': ^4.17.7 - '@types/sha1': 1.1.3 - lodash-es: ^4.17.21 - sha1: 1.1.1 + dependencies: + isomorphic-ws: + specifier: ^5.0.0 + version: 5.0.0(ws@8.13.0) + ws: + specifier: ^8.13.0 + version: 8.13.0(bufferutil@4.0.7)(utf-8-validate@6.0.3) devDependencies: - '@types/lodash-es': 4.17.7 - '@types/sha1': 1.1.3 - lodash-es: 4.17.21 - sha1: 1.1.1 + '@types/node': + specifier: ^18.15.1 + version: 18.19.6 + '@types/ws': + specifier: ^8.5.4 + version: 8.5.4 + bob-esbuild-cli: + specifier: 5.0.0-alpha-227aebc.0 + version: 5.0.0-alpha-227aebc.0(bob-esbuild@5.0.0-alpha-227aebc.0) + esbuild: + specifier: ^0.17.10 + version: 0.17.19 + gqty: + specifier: workspace:^ + version: link:../gqty/dist + graphql: + specifier: ^16.6.0 + version: 16.8.1 + test-utils: + specifier: workspace:^ + version: link:../../internal/test-utils + tslib: + specifier: ^2.5.0 + version: 2.5.0 publishDirectory: dist packages: - /@adobe/css-tools/4.0.1: - resolution: {integrity: sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==} + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} dev: true - /@algolia/autocomplete-core/1.7.2: - resolution: {integrity: sha512-eclwUDC6qfApNnEfu1uWcL/rudQsn59tjEoUYZYE2JSXZrHLRjBUGMxiCoknobU2Pva8ejb0eRxpIYDtVVqdsw==} - dependencies: - '@algolia/autocomplete-shared': 1.7.2 - dev: false - - /@algolia/autocomplete-js/1.7.2_algoliasearch@4.14.2: - resolution: {integrity: sha512-/x0r0510yEHtTt9+JIhWa9CIvS2s95n5eSyKrCXA6QF8DYKJV+LQpGCpHnO4gEHJFEe0itVdmws3DzOZrBGa9Q==} - peerDependencies: - '@algolia/client-search': '>= 4.5.1 < 6' - peerDependenciesMeta: - '@algolia/client-search': - optional: true - dependencies: - '@algolia/autocomplete-core': 1.7.2 - '@algolia/autocomplete-preset-algolia': 1.7.2_algoliasearch@4.14.2 - '@algolia/autocomplete-shared': 1.7.2 - htm: 3.1.1 - preact: 10.11.2 - transitivePeerDependencies: - - algoliasearch - dev: false - - /@algolia/autocomplete-plugin-algolia-insights/1.7.2_nl7ecob7oenl7dfhoewptlc4ye: - resolution: {integrity: sha512-dyWJ3Hpn0vGy+Lxd6BZYUupIPB/j7ZA4uzmQ+ThRQF3fjQMpDk4/zNi8/hf0r0Ow9tXOQ7ALKJtHbxWIT/f/Uw==} - peerDependencies: - search-insights: '>= 1 < 3' - dependencies: - '@algolia/autocomplete-js': 1.7.2_algoliasearch@4.14.2 - '@algolia/autocomplete-shared': 1.7.2 - search-insights: 2.2.1 - transitivePeerDependencies: - - '@algolia/client-search' - - algoliasearch - dev: false - - /@algolia/autocomplete-plugin-query-suggestions/1.7.2_algoliasearch@4.14.2: - resolution: {integrity: sha512-lM1B4tsJP+5ePHqXl4kuanmclu8uppmknNTTzWfinjuNRY2WrypwfqrBaCIztbZZYAfs7s0qeC/XXhA4PPSqoA==} - peerDependencies: - '@algolia/client-search': '>= 4.5.1 < 6' - algoliasearch: '>= 4.5.1 < 6' - peerDependenciesMeta: - '@algolia/client-search': - optional: true - dependencies: - '@algolia/autocomplete-core': 1.7.2 - '@algolia/autocomplete-js': 1.7.2_algoliasearch@4.14.2 - '@algolia/autocomplete-preset-algolia': 1.7.2_algoliasearch@4.14.2 - '@algolia/autocomplete-shared': 1.7.2 - algoliasearch: 4.14.2 - dev: false - - /@algolia/autocomplete-preset-algolia/1.7.2_algoliasearch@4.14.2: - resolution: {integrity: sha512-+RYEG6B0QiGGfRb2G3MtPfyrl0dALF3cQNTWBzBX6p5o01vCCGTTinAm2UKG3tfc2CnOMAtnPLkzNZyJUpnVJw==} - peerDependencies: - '@algolia/client-search': '>= 4.9.1 < 6' - algoliasearch: '>= 4.9.1 < 6' - peerDependenciesMeta: - '@algolia/client-search': - optional: true - dependencies: - '@algolia/autocomplete-shared': 1.7.2 - algoliasearch: 4.14.2 - dev: false - - /@algolia/autocomplete-shared/1.7.2: - resolution: {integrity: sha512-QCckjiC7xXHIUaIL3ektBtjJ0w7tTA3iqKcAE/Hjn1lZ5omp7i3Y4e09rAr9ZybqirL7AbxCLLq0Ra5DDPKeug==} - dev: false - - /@algolia/autocomplete-theme-classic/1.7.2: - resolution: {integrity: sha512-bUoT4wdScyAY4oZrk3zcaGwSKYJ11MGXNFIckWWN/Bd9xqoFu8/09Ujyw5WyzYZidHrs8D3FSTJi6sfHz5g3/Q==} - dev: false - - /@algolia/cache-browser-local-storage/4.14.2: - resolution: {integrity: sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA==} - dependencies: - '@algolia/cache-common': 4.14.2 - dev: false - - /@algolia/cache-common/4.14.2: - resolution: {integrity: sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg==} - dev: false - - /@algolia/cache-in-memory/4.14.2: - resolution: {integrity: sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ==} - dependencies: - '@algolia/cache-common': 4.14.2 - dev: false - - /@algolia/client-account/4.14.2: - resolution: {integrity: sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w==} - dependencies: - '@algolia/client-common': 4.14.2 - '@algolia/client-search': 4.14.2 - '@algolia/transporter': 4.14.2 - dev: false - - /@algolia/client-analytics/4.14.2: - resolution: {integrity: sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ==} - dependencies: - '@algolia/client-common': 4.14.2 - '@algolia/client-search': 4.14.2 - '@algolia/requester-common': 4.14.2 - '@algolia/transporter': 4.14.2 - dev: false - - /@algolia/client-common/4.14.2: - resolution: {integrity: sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q==} - dependencies: - '@algolia/requester-common': 4.14.2 - '@algolia/transporter': 4.14.2 - dev: false - - /@algolia/client-personalization/4.14.2: - resolution: {integrity: sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw==} - dependencies: - '@algolia/client-common': 4.14.2 - '@algolia/requester-common': 4.14.2 - '@algolia/transporter': 4.14.2 - dev: false - - /@algolia/client-search/4.14.2: - resolution: {integrity: sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw==} - dependencies: - '@algolia/client-common': 4.14.2 - '@algolia/requester-common': 4.14.2 - '@algolia/transporter': 4.14.2 - dev: false - - /@algolia/events/4.0.1: - resolution: {integrity: sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==} - dev: false - - /@algolia/logger-common/4.14.2: - resolution: {integrity: sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA==} - dev: false - - /@algolia/logger-console/4.14.2: - resolution: {integrity: sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g==} - dependencies: - '@algolia/logger-common': 4.14.2 - dev: false - - /@algolia/requester-browser-xhr/4.14.2: - resolution: {integrity: sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw==} - dependencies: - '@algolia/requester-common': 4.14.2 - dev: false - - /@algolia/requester-common/4.14.2: - resolution: {integrity: sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg==} - dev: false - - /@algolia/requester-node-http/4.14.2: - resolution: {integrity: sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg==} - dependencies: - '@algolia/requester-common': 4.14.2 - dev: false + /@adobe/css-tools@4.0.1: + resolution: {integrity: sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==} + dev: true - /@algolia/transporter/4.14.2: - resolution: {integrity: sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ==} - dependencies: - '@algolia/cache-common': 4.14.2 - '@algolia/logger-common': 4.14.2 - '@algolia/requester-common': 4.14.2 - dev: false + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + dev: true - /@ampproject/remapping/2.2.0: + /@ampproject/remapping@2.2.0: resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.1.1 '@jridgewell/trace-mapping': 0.3.17 - /@ardatan/relay-compiler/12.0.0_graphql@16.6.0: + /@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.19.6 - '@babel/generator': 7.20.1 - '@babel/parser': 7.20.1 - '@babel/runtime': 7.20.13 - '@babel/traverse': 7.20.1 - '@babel/types': 7.20.0 - babel-preset-fbjs: 3.4.0_@babel+core@7.19.6 + '@babel/core': 7.23.7 + '@babel/generator': 7.23.6 + '@babel/parser': 7.23.6 + '@babel/runtime': 7.23.8 + '@babel/traverse': 7.23.7 + '@babel/types': 7.23.6 + babel-preset-fbjs: 3.4.0(@babel/core@7.23.7) chalk: 4.1.2 fb-watchman: 2.0.2 fbjs: 3.0.4 glob: 7.2.3 - graphql: 16.6.0 + graphql: 16.8.1 immutable: 3.7.6 invariant: 2.2.4 nullthrows: 1.1.1 @@ -963,1108 +885,1507 @@ packages: transitivePeerDependencies: - encoding - supports-color - - /@babel/code-frame/7.16.7: - resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.18.6 dev: false - /@babel/code-frame/7.18.6: - resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.18.6 + '@babel/highlight': 7.23.4 + chalk: 2.4.2 - /@babel/compat-data/7.20.1: - resolution: {integrity: sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==} + /@babel/compat-data@7.23.5: + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} - /@babel/core/7.19.6: - resolution: {integrity: sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==} + /@babel/core@7.23.7: + resolution: {integrity: sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.0 - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.1 - '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.19.6 - '@babel/helper-module-transforms': 7.19.6 - '@babel/helpers': 7.20.1 - '@babel/parser': 7.20.1 - '@babel/template': 7.18.10 - '@babel/traverse': 7.20.1 - '@babel/types': 7.20.0 - convert-source-map: 1.9.0 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/helpers': 7.23.8 + '@babel/parser': 7.23.6 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.7 + '@babel/types': 7.23.6 + convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 - semver: 6.3.0 + semver: 6.3.1 transitivePeerDependencies: - supports-color - /@babel/generator/7.20.1: - resolution: {integrity: sha512-u1dMdBUmA7Z0rBB97xh8pIhviK7oItYOkjbsCxTWMknyvbQRBwX7/gn4JXurRdirWMFh+ZtYARqkA6ydogVZpg==} + /@babel/generator@7.23.6: + resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.0 + '@babel/types': 7.23.6 '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.17 jsesc: 2.5.2 - /@babel/helper-annotate-as-pure/7.18.6: - resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + + /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: + resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + dev: true + + /@babel/helper-compilation-targets@7.23.6: + resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.0 + '@babel/compat-data': 7.23.5 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.22.2 + lru-cache: 5.1.1 + semver: 6.3.1 - /@babel/helper-compilation-targets/7.20.0_@babel+core@7.19.6: - resolution: {integrity: sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==} + /@babel/helper-create-class-features-plugin@7.23.7(@babel/core@7.23.7): + resolution: {integrity: sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/compat-data': 7.20.1 - '@babel/core': 7.19.6 - '@babel/helper-validator-option': 7.18.6 - browserslist: 4.21.4 - semver: 6.3.0 - - /@babel/helper-create-class-features-plugin/7.19.0_@babel+core@7.19.6: - resolution: {integrity: sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==} + '@babel/core': 7.23.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.7): + resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-member-expression-to-functions': 7.18.9 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-replace-supers': 7.19.1 - '@babel/helper-split-export-declaration': 7.18.6 + '@babel/core': 7.23.7 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.1 + dev: true + + /@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.23.7): + resolution: {integrity: sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.8 transitivePeerDependencies: - supports-color + dev: true - /@babel/helper-environment-visitor/7.18.9: - resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} - /@babel/helper-function-name/7.19.0: - resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.18.10 - '@babel/types': 7.20.0 + '@babel/template': 7.22.15 + '@babel/types': 7.23.6 - /@babel/helper-hoist-variables/7.18.6: - resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.0 + '@babel/types': 7.23.6 - /@babel/helper-member-expression-to-functions/7.18.9: - resolution: {integrity: sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==} + /@babel/helper-member-expression-to-functions@7.23.0: + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.0 + '@babel/types': 7.23.6 - /@babel/helper-module-imports/7.18.6: - resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} + /@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.20.0 + '@babel/types': 7.23.6 - /@babel/helper-module-transforms/7.19.6: - resolution: {integrity: sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==} + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-module-imports': 7.18.6 - '@babel/helper-simple-access': 7.19.4 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/helper-validator-identifier': 7.19.1 - '@babel/template': 7.18.10 - '@babel/traverse': 7.20.1 - '@babel/types': 7.20.0 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.7 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 - /@babel/helper-optimise-call-expression/7.18.6: - resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} + /@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.0 + '@babel/types': 7.23.6 - /@babel/helper-plugin-utils/7.19.0: - resolution: {integrity: sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==} + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} - /@babel/helper-replace-supers/7.19.1: - resolution: {integrity: sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==} + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.7): + resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-member-expression-to-functions': 7.18.9 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/traverse': 7.20.1 - '@babel/types': 7.20.0 - transitivePeerDependencies: - - supports-color + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-wrap-function': 7.22.20 + dev: true + + /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.7): + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 - /@babel/helper-simple-access/7.19.4: - resolution: {integrity: sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==} + /@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.20.0 + '@babel/types': 7.23.6 - /@babel/helper-skip-transparent-expression-wrappers/7.20.0: - resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} + /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.0 + '@babel/types': 7.23.6 - /@babel/helper-split-export-declaration/7.18.6: - resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.0 + '@babel/types': 7.23.6 + + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} - /@babel/helper-string-parser/7.19.4: - resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier/7.19.1: - resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} + /@babel/helper-validator-option@7.23.5: + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-option/7.18.6: - resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} + /@babel/helper-wrap-function@7.22.20: + resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.23.0 + '@babel/template': 7.22.15 + '@babel/types': 7.23.6 + dev: true - /@babel/helpers/7.20.1: - resolution: {integrity: sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==} + /@babel/helpers@7.23.8: + resolution: {integrity: sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.18.10 - '@babel/traverse': 7.20.1 - '@babel/types': 7.20.0 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.7 + '@babel/types': 7.23.6 transitivePeerDependencies: - supports-color - /@babel/highlight/7.18.6: - resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser/7.20.1: - resolution: {integrity: sha512-hp0AYxaZJhxULfM1zyp7Wgr+pSUKBcP3M+PHnSzWGdXOzg/kHWIgiUWARvubhUKGOEw3xqY4x+lyZ9ytBVcELw==} + /@babel/parser@7.23.6: + resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.20.0 + '@babel/types': 7.23.6 + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.7) + dev: true + + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.23.7): + resolution: {integrity: sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + dev: true - /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.19.6: + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.23.7): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.19.6 - '@babel/helper-plugin-utils': 7.19.0 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.7 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + dev: false - /@babel/plugin-proposal-object-rest-spread/7.19.4_@babel+core@7.19.6: + /@babel/plugin-proposal-object-rest-spread@7.19.4(@babel/core@7.23.7): resolution: {integrity: sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.7 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) + dev: false + + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.7): + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/compat-data': 7.20.1 - '@babel/core': 7.19.6 - '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.19.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.19.6 - '@babel/plugin-transform-parameters': 7.20.1_@babel+core@7.19.6 + '@babel/core': 7.23.7 + dev: true - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.19.6: + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.7): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.19.6: + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.7): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.19.6: + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.7): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.7): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.7): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.7): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + dev: true - /@babel/plugin-syntax-flow/7.18.6_@babel+core@7.19.6: + /@babel/plugin-syntax-flow@7.18.6(@babel/core@7.23.7): resolution: {integrity: sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + dev: true - /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.19.6: + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.7): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.19.6: + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.7): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.19.6: + /@babel/plugin-syntax-jsx@7.18.6(@babel/core@7.23.7): resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.19.6: + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.7): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.19.6: + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.7): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.19.6: + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.7): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.19.6: + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.7): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.19.6: + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.7): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.19.6: + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.7): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.7): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + dev: true - /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.19.6: + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.7): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.19.6: + /@babel/plugin-syntax-typescript@7.20.0(@babel/core@7.23.7): resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-arrow-functions/7.18.6_@babel+core@7.19.6: - resolution: {integrity: sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==} + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.7): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.19.6: - resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} + /@babel/plugin-transform-async-generator-functions@7.23.7(@babel/core@7.23.7): + resolution: {integrity: sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) + dev: true - /@babel/plugin-transform-block-scoping/7.20.0_@babel+core@7.19.6: - resolution: {integrity: sha512-sXOohbpHZSk7GjxK9b3dKB7CfqUD5DwOH+DggKzOQ7TXYP+RCSbRykfjQmn/zq+rBjycVRtLf9pYhAaEJA786w==} + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.7) + dev: true - /@babel/plugin-transform-classes/7.19.0_@babel+core@7.19.6: - resolution: {integrity: sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==} + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.19.6 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-replace-supers': 7.19.1 - '@babel/helper-split-export-declaration': 7.18.6 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-computed-properties/7.18.9_@babel+core@7.19.6: - resolution: {integrity: sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==} + /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-destructuring/7.20.0_@babel+core@7.19.6: - resolution: {integrity: sha512-1dIhvZfkDVx/zn2S1aFwlruspTt4189j7fEkH0Y0VyuDM6bQt7bD6kLcz3l4IlLG+e5OReaBz9ROAbttRtUHqA==} + /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + dev: true - /@babel/plugin-transform-flow-strip-types/7.19.0_@babel+core@7.19.6: - resolution: {integrity: sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==} + /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7) + dev: true + + /@babel/plugin-transform-classes@7.23.8(@babel/core@7.23.7): + resolution: {integrity: sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-flow': 7.18.6_@babel+core@7.19.6 + '@babel/core': 7.23.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 - /@babel/plugin-transform-for-of/7.18.8_@babel+core@7.19.6: - resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==} + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.15 - /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.19.6: - resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.19.6 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-literals/7.18.9_@babel+core@7.19.6: - resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + dev: true - /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.19.6: - resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} + /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + dev: true - /@babel/plugin-transform-modules-commonjs/7.19.6_@babel+core@7.19.6: - resolution: {integrity: sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==} + /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-module-transforms': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-simple-access': 7.19.4 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7) + dev: true - /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.19.6: - resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} + /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-replace-supers': 7.19.1 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.7 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + dev: true - /@babel/plugin-transform-parameters/7.20.1_@babel+core@7.19.6: - resolution: {integrity: sha512-nDvKLrAvl+kf6BOy1UJ3MGwzzfTMgppxwiD2Jb4LO3xjYyZq30oQzDNJbCQpMdG9+j2IXHoiMrw5Cm/L6ZoxXQ==} + /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.7) + dev: true - /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.19.6: - resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} + /@babel/plugin-transform-flow-strip-types@7.19.0(@babel/core@7.23.7): + resolution: {integrity: sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-flow': 7.18.6(@babel/core@7.23.7) + dev: false - /@babel/plugin-transform-react-display-name/7.18.6_@babel+core@7.19.6: - resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==} + /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.7): + resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - /@babel/plugin-transform-react-jsx-self/7.18.6_@babel+core@7.19.6: - resolution: {integrity: sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==} + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 - dev: true + '@babel/core': 7.23.7 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-react-jsx-source/7.19.6_@babel+core@7.19.6: - resolution: {integrity: sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==} + /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7) dev: true - /@babel/plugin-transform-react-jsx/7.19.0_@babel+core@7.19.6: - resolution: {integrity: sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==} + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-module-imports': 7.18.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.19.6 - '@babel/types': 7.20.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.19.6: - resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} + /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7) + dev: true - /@babel/plugin-transform-spread/7.19.0_@babel+core@7.19.6: - resolution: {integrity: sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==} + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.19.6: - resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} + /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.23.7 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + dev: true - /@babel/runtime/7.20.1: - resolution: {integrity: sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==} + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - regenerator-runtime: 0.13.11 + '@babel/core': 7.23.7 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 - /@babel/runtime/7.20.13: - resolution: {integrity: sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==} + /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - regenerator-runtime: 0.13.11 + '@babel/core': 7.23.7 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + dev: true - /@babel/runtime/7.20.6: - resolution: {integrity: sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==} + /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - regenerator-runtime: 0.13.11 + '@babel/core': 7.23.7 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/template/7.18.10: - resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.7): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/code-frame': 7.18.6 - '@babel/parser': 7.20.1 - '@babel/types': 7.20.0 + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + dev: true - /@babel/traverse/7.20.1: - resolution: {integrity: sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==} + /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.1 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.20.1 - '@babel/types': 7.20.0 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + dev: true - /@babel/types/7.20.0: - resolution: {integrity: sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==} + /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/helper-string-parser': 7.19.4 - '@babel/helper-validator-identifier': 7.19.1 - to-fast-properties: 2.0.0 - - /@bcoe/v8-coverage/0.2.3: - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - - /@braintree/sanitize-url/6.0.1: - resolution: {integrity: sha512-zr9Qs9KFQiEvMWdZesjcmRJlUck5NR+eKGS1uyKk+oYTWwlYrsoPEi6VmG6/TzBD1hKCGEimrhTgGS6hvn/xIQ==} - dev: false + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) + dev: true - /@chakra-ui/accordion/1.4.12_csxourtydlqlkdypnr3c6yasxu: + /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) + dev: true + + /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.7 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) + dev: true + + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) + + /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) + dev: true + + /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) + dev: true + + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.7): + resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.7) + dev: true + + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-react-display-name@7.18.6(@babel/core@7.23.7): + resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-jsx-self@7.18.6(@babel/core@7.23.7): + resolution: {integrity: sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-react-jsx-source@7.19.6(@babel/core@7.23.7): + resolution: {integrity: sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-react-jsx@7.19.0(@babel/core@7.23.7): + resolution: {integrity: sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.23.7) + '@babel/types': 7.23.6 + dev: false + + /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.2 + dev: true + + /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.7): + resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/preset-env@7.23.8(@babel/core@7.23.7): + resolution: {integrity: sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.7 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.23.7) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.7) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.7) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-async-generator-functions': 7.23.7(@babel/core@7.23.7) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.23.7) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.7) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.7) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.7) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.7) + babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.7) + babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.7) + babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.7) + core-js-compat: 3.35.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.7): + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/types': 7.23.6 + esutils: 2.0.3 + dev: true + + /@babel/regjsgen@0.8.0: + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + dev: true + + /@babel/runtime@7.23.8: + resolution: {integrity: sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + + /@babel/traverse@7.23.7: + resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@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.6 + '@babel/types': 7.23.6 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + /@babel/types@7.23.6: + resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + + /@bcoe/v8-coverage@0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + /@chakra-ui/accordion@1.4.12(@chakra-ui/system@1.12.1)(framer-motion@6.5.1)(react@17.0.2): resolution: {integrity: sha512-Hq5Ie1SI4mmtgBmeuir+f7QKgopZEyQOojgufo/A20keMSy5Yk9WZjkXNQgvoIRl1AsoziIPUlubQOtkBZjjbA==} peerDependencies: '@chakra-ui/system': '>=1.0.0' framer-motion: 3.x || 4.x || 5.x || 6.x react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/descendant': 2.1.4_react@17.0.2 - '@chakra-ui/hooks': 1.9.1_react@17.0.2 - '@chakra-ui/icon': 2.0.5_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u - '@chakra-ui/transition': 1.4.8_4bcqv2kvtjx6raziruhdnbn2uq + '@chakra-ui/descendant': 2.1.4(react@17.0.2) + '@chakra-ui/hooks': 1.9.1(react@17.0.2) + '@chakra-ui/icon': 2.0.5(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) + '@chakra-ui/transition': 1.4.8(framer-motion@6.5.1)(react@17.0.2) '@chakra-ui/utils': 1.10.4 - framer-motion: 6.5.1_sfoxds7t5ydpegc3knd667wn6m + framer-motion: 6.5.1(react-dom@17.0.2)(react@17.0.2) react: 17.0.2 dev: false - /@chakra-ui/alert/1.3.7_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/alert@1.3.7(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-fFpJYBpHOIK/BX4BVl/xafYiDBUW+Bq/gUYDOo4iAiO4vHgxo74oa+yOwSRNlNjAgIX7pi2ridsYQALKyWyxxQ==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/icon': 2.0.5_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/icon': 2.0.5(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/anatomy/1.3.0_@chakra-ui+system@1.12.1: + /@chakra-ui/anatomy@1.3.0(@chakra-ui/system@1.12.1): resolution: {integrity: sha512-vj/lcHkCuq/dtbl69DkNsftZTnrGEegB90ODs1B6rxw8iVMdDSYkthPPFAkqzNs4ppv1y2IBjELuVzpeta1OHA==} peerDependencies: '@chakra-ui/system': '>=1.0.0' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u - '@chakra-ui/theme-tools': 1.3.6_@chakra-ui+system@1.12.1 + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) + '@chakra-ui/theme-tools': 1.3.6(@chakra-ui/system@1.12.1) dev: false - /@chakra-ui/avatar/1.3.11_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/avatar@1.3.11(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-/eRRK48Er92/QWAfWhxsJIN0gZBBvk+ew4Hglo+pxt3/NDnfTF2yPE7ZN29Dl6daPNbyTOpoksMwaU2mZIqLgA==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/image': 1.1.10_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/image': 1.1.10(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/breadcrumb/1.3.6_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/breadcrumb@1.3.6(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-iXxienBO6RUnJEcDvyDWyRt+mzPyl7/b6N8i0vrjGKGLpgtayJFvIdo33tFcvx6TCy7V9hiE3HTtZnNomWdR6A==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/button/1.5.10_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/button@1.5.10(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-IVEOrleI378CckAa3b3CTUHMPZRfpy6LPwn1Mx3sMpHEkDTKu8zJcjgEvCE8HYzNC1KbwBsa1PfTgk40ui6EtA==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/hooks': 1.9.1_react@17.0.2 - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 - '@chakra-ui/spinner': 1.2.6_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/hooks': 1.9.1(react@17.0.2) + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) + '@chakra-ui/spinner': 1.2.6(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/checkbox/1.7.1_csxourtydlqlkdypnr3c6yasxu: + /@chakra-ui/checkbox@1.7.1(@chakra-ui/system@1.12.1)(framer-motion@6.5.1)(react@17.0.2): resolution: {integrity: sha512-9Io97yn8OrdaIynCj+3Z/neJV7lTT1MtcdYh3BKMd7WnoJDkRY/GlBM8zsdgC5Wvm+ZQ1M83t0YvRPKLLzusyA==} peerDependencies: '@chakra-ui/system': '>=1.0.0' framer-motion: 3.x || 4.x || 5.x || 6.x react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/form-control': 1.6.0_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/hooks': 1.9.1_react@17.0.2 - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/form-control': 1.6.0(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/hooks': 1.9.1(react@17.0.2) + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 - '@chakra-ui/visually-hidden': 1.1.6_5qblqjf622vzzkdskgddihcrca - framer-motion: 6.5.1_sfoxds7t5ydpegc3knd667wn6m + '@chakra-ui/visually-hidden': 1.1.6(@chakra-ui/system@1.12.1)(react@17.0.2) + framer-motion: 6.5.1(react-dom@17.0.2)(react@17.0.2) react: 17.0.2 dev: false - /@chakra-ui/clickable/1.2.6_react@17.0.2: + /@chakra-ui/clickable@1.2.6(react@17.0.2): resolution: {integrity: sha512-89SsrQwwwAadcl/bN8nZqqaaVhVNFdBXqQnxVy1t07DL5ezubmNb5SgFh9LDznkm9YYPQhaGr3W6HFro7iAHMg==} peerDependencies: react: '>=16.8.6' dependencies: - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/close-button/1.2.7_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/close-button@1.2.7(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-cYTxfgrIlPU4IZm1sehZXxx/TNQBk9c3LBPvTpywEM8GVRGINh4YLq8WiMaPtO+TDNBnKoWS/jS4IHnR+abADw==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/icon': 2.0.5_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/icon': 2.0.5(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/color-mode/1.4.8_react@17.0.2: + /@chakra-ui/color-mode@1.4.8(react@17.0.2): resolution: {integrity: sha512-iD4126DVQi06c6ARr3uf3R2rtEu8aBVjW8rhZ+lOsV26Z15iCJA7OAut13Xu06fcZvgjSB/ChDy6Sx9sV9UjHA==} peerDependencies: react: '>=16.8.6' dependencies: - '@chakra-ui/hooks': 1.9.1_react@17.0.2 - '@chakra-ui/react-env': 1.1.6_react@17.0.2 + '@chakra-ui/hooks': 1.9.1(react@17.0.2) + '@chakra-ui/react-env': 1.1.6(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/control-box/1.1.6_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/control-box@1.1.6(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-EUcq5f854puG6ZA6wAWl4107OPl8+bj4MMHJCa48BB0qec0U8HCEtxQGnFwJmaYLalIAjMfHuY3OwO2A3Hi9hA==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/counter/1.2.10_react@17.0.2: + /@chakra-ui/counter@1.2.10(react@17.0.2): resolution: {integrity: sha512-HQd09IuJ4z8M8vWajH+99jBWWSHDesQZmnN95jUg3HKOuNleLaipf2JFdrqbO1uWQyHobn2PM6u+B+JCAh2nig==} peerDependencies: react: '>=16.8.6' dependencies: - '@chakra-ui/hooks': 1.9.1_react@17.0.2 + '@chakra-ui/hooks': 1.9.1(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/css-reset/1.1.3_lppulqnmkkrmfes7eqrbphxjnm: + /@chakra-ui/css-reset@1.1.3(@emotion/react@11.10.6)(react@17.0.2): resolution: {integrity: sha512-AgfrE7bRTJvNi/4zIfacI/kBHmHmHEIeQtHwCvk/0qM9V2gK1VM3ctYlnibf7BTh17F/UszweOGRb1lHSPfWjw==} peerDependencies: '@emotion/react': '>=10.0.35' react: '>=16.8.6' dependencies: - '@emotion/react': 11.10.6_h7fc2el62uaa77gho3xhys6ola + '@emotion/react': 11.10.6(@types/react@17.0.53)(react@17.0.2) react: 17.0.2 dev: false - /@chakra-ui/descendant/2.1.4_react@17.0.2: + /@chakra-ui/descendant@2.1.4(react@17.0.2): resolution: {integrity: sha512-k1olHM6c0fcI5fQxO9rqg9rxripcfHMEm2LkORgH0CAzFn/U75CxCw5ec0IMedNWCdiv740enVfnfhBAoSg7gw==} peerDependencies: react: '>=16.8.6' dependencies: - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) react: 17.0.2 dev: false - /@chakra-ui/editable/1.4.2_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/editable@1.4.2(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-a5zKghA/IvG7yNkmFl7Z9c2KSsf0FgyijsNPTg/4S5jxyz13QJtoTg40tdpyaxHHCT25y25iUcV4FYCj6Jd01w==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/hooks': 1.9.1_react@17.0.2 - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/hooks': 1.9.1(react@17.0.2) + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/focus-lock/1.2.6_h7fc2el62uaa77gho3xhys6ola: + /@chakra-ui/focus-lock@1.2.6(@types/react@17.0.53)(react@17.0.2): resolution: {integrity: sha512-ZJNE1oNdUM1aGWuCJ+bxFa/d3EwxzfMWzTKzSvKDK50GWoUQQ10xFTT9nY/yFpkcwhBvx1KavxKf44mIhIbSog==} peerDependencies: react: '>=16.8.6' dependencies: '@chakra-ui/utils': 1.10.4 react: 17.0.2 - react-focus-lock: 2.5.2_h7fc2el62uaa77gho3xhys6ola + react-focus-lock: 2.5.2(@types/react@17.0.53)(react@17.0.2) transitivePeerDependencies: - '@types/react' dev: false - /@chakra-ui/form-control/1.6.0_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/form-control@1.6.0(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-MtUE98aocP2QTgvyyJ/ABuG33mhT3Ox56phKreG3HzbUKByMwrbQSm1QcAgyYdqSZ9eKB2tXx+qgGNh+avAfDA==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/hooks': 1.9.1_react@17.0.2 - '@chakra-ui/icon': 2.0.5_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/hooks': 1.9.1(react@17.0.2) + '@chakra-ui/icon': 2.0.5(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/hooks/1.9.1_react@17.0.2: + /@chakra-ui/hooks@1.9.1(react@17.0.2): resolution: {integrity: sha512-SEeh1alDKzrP9gMLWMnXOUDBQDKF/URL6iTmkumTn6vhawWNla6sPrcMyoCzWdMzwUhZp3QNtCKbUm7dxBXvPw==} peerDependencies: react: '>=16.8.6' dependencies: - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) '@chakra-ui/utils': 1.10.4 compute-scroll-into-view: 1.0.14 copy-to-clipboard: 3.3.1 react: 17.0.2 dev: false - /@chakra-ui/icon/2.0.5_5qblqjf622vzzkdskgddihcrca: - resolution: {integrity: sha512-ZrqRvCCIxGr4qFd/r1pmtd9tobRmv8KAxV7ygFoc/t4vOSKTcVIjhE12gsI3FzgvXM15ZFVwsxa1zodwgo5neQ==} - peerDependencies: - '@chakra-ui/system': '>=1.0.0' - react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true - dependencies: - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u - '@chakra-ui/utils': 1.10.4 - react: 17.0.2 - dev: false - - /@chakra-ui/icon/2.0.5_react@17.0.2: + /@chakra-ui/icon@2.0.5(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-ZrqRvCCIxGr4qFd/r1pmtd9tobRmv8KAxV7ygFoc/t4vOSKTcVIjhE12gsI3FzgvXM15ZFVwsxa1zodwgo5neQ==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/icons/1.1.7_react@17.0.2: - resolution: {integrity: sha512-YIHxey/B4M2PyFASlHXtAWFyW+tsAtGAChOJ8dsM2kpu1MbVUqm/6nMI1KIFd7Te5IWuNYA75rAHBdLI0Yu61A==} - peerDependencies: - '@chakra-ui/system': '>=1.0.0' - react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true - dependencies: - '@chakra-ui/icon': 2.0.5_react@17.0.2 - '@types/react': 17.0.53 - react: 17.0.2 - dev: false - - /@chakra-ui/image/1.1.10_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/image@1.1.10(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-PJZmhQ/R1PgdMyCRjALfoyq1FNh/WzMAw70sliHLtLcb9hBXniwQZuckYfUshCkUoFBj/ow9d4byn9Culdpk7Q==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/hooks': 1.9.1_react@17.0.2 - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/hooks': 1.9.1(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/input/1.4.6_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/input@1.4.6(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-Ljy/NbOhh9cNQxKTWQRsT4aQiXs2vVya+Cj5NpMAz08NFFjPZovsTawhI7m6ejT5Vsh76QYjh2rOLLI3fWqQQw==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/form-control': 1.6.0_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/form-control': 1.6.0(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/layout/1.8.0_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/layout@1.8.0(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-GJtEKez5AZu0XQTxI6a6jwA/hMDD36pP0HBxBOGuHP1hWCebDzMjraiMfWiP9w7hKERFE4j19kocHxIXyocfJA==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/icon': 2.0.5_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/icon': 2.0.5(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/live-region/1.1.6_react@17.0.2: + /@chakra-ui/live-region@1.1.6(react@17.0.2): resolution: {integrity: sha512-9gPQHXf7oW0jXyT5R/JzyDMfJ3hF70TqhN8bRH4fMyfNr2Se+SjztMBqCrv5FS5rPjcCeua+e0eArpoB3ROuWQ==} peerDependencies: react: '>=16.8.6' @@ -2073,168 +2394,147 @@ packages: react: 17.0.2 dev: false - /@chakra-ui/media-query/2.0.4_sxr25aaor3bltw4csjjk62xw3q: + /@chakra-ui/media-query@2.0.4(@chakra-ui/system@1.12.1)(@chakra-ui/theme@1.14.1)(react@17.0.2): resolution: {integrity: sha512-kn6g/L0IFFUHz2v4yiCsBnhg9jUeA7525Z+AWl+BPtvryi7i9J+AJ27y/QAge7vUGy4dwDeFyxOZTs2oZ9/BsA==} peerDependencies: '@chakra-ui/system': '>=1.0.0' '@chakra-ui/theme': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/react-env': 1.1.6_react@17.0.2 - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u - '@chakra-ui/theme': 1.14.1_@chakra-ui+system@1.12.1 + '@chakra-ui/react-env': 1.1.6(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) + '@chakra-ui/theme': 1.14.1(@chakra-ui/system@1.12.1) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/menu/1.8.12_csxourtydlqlkdypnr3c6yasxu: + /@chakra-ui/menu@1.8.12(@chakra-ui/system@1.12.1)(framer-motion@6.5.1)(react@17.0.2): resolution: {integrity: sha512-X/s74VpOReQW4fCRCa21f/VOe++cXhPz2Sh7pDjtaT3zmKjrJwgk1Kw75cXfNX1eke6hf/wZ0FGweu/m7+C3OA==} peerDependencies: '@chakra-ui/system': '>=1.0.0' framer-motion: 3.x || 4.x || 5.x || 6.x react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/clickable': 1.2.6_react@17.0.2 - '@chakra-ui/descendant': 2.1.4_react@17.0.2 - '@chakra-ui/hooks': 1.9.1_react@17.0.2 - '@chakra-ui/popper': 2.4.3_react@17.0.2 - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u - '@chakra-ui/transition': 1.4.8_4bcqv2kvtjx6raziruhdnbn2uq + '@chakra-ui/clickable': 1.2.6(react@17.0.2) + '@chakra-ui/descendant': 2.1.4(react@17.0.2) + '@chakra-ui/hooks': 1.9.1(react@17.0.2) + '@chakra-ui/popper': 2.4.3(react@17.0.2) + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) + '@chakra-ui/transition': 1.4.8(framer-motion@6.5.1)(react@17.0.2) '@chakra-ui/utils': 1.10.4 - framer-motion: 6.5.1_sfoxds7t5ydpegc3knd667wn6m + framer-motion: 6.5.1(react-dom@17.0.2)(react@17.0.2) react: 17.0.2 dev: false - /@chakra-ui/modal/1.11.1_znojjvmuimc52wc6sir6sqg4da: + /@chakra-ui/modal@1.11.1(@chakra-ui/system@1.12.1)(@types/react@17.0.53)(framer-motion@6.5.1)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-B2BBDonHb04vbPLAWgko1JYBwgW8ZNSLyhTJK+rbrCsRSgazuLTcwq4hdyJqrYNWtaQEfSwpAXqJ7joMZdv59A==} peerDependencies: '@chakra-ui/system': '>=1.0.0' framer-motion: 3.x || 4.x || 5.x || 6.x react: '>=16.8.6' react-dom: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/close-button': 1.2.7_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/focus-lock': 1.2.6_h7fc2el62uaa77gho3xhys6ola - '@chakra-ui/hooks': 1.9.1_react@17.0.2 - '@chakra-ui/portal': 1.3.10_sfoxds7t5ydpegc3knd667wn6m - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u - '@chakra-ui/transition': 1.4.8_4bcqv2kvtjx6raziruhdnbn2uq + '@chakra-ui/close-button': 1.2.7(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/focus-lock': 1.2.6(@types/react@17.0.53)(react@17.0.2) + '@chakra-ui/hooks': 1.9.1(react@17.0.2) + '@chakra-ui/portal': 1.3.10(react-dom@17.0.2)(react@17.0.2) + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) + '@chakra-ui/transition': 1.4.8(framer-motion@6.5.1)(react@17.0.2) '@chakra-ui/utils': 1.10.4 - aria-hidden: 1.2.1_h7fc2el62uaa77gho3xhys6ola - framer-motion: 6.5.1_sfoxds7t5ydpegc3knd667wn6m + aria-hidden: 1.2.1(@types/react@17.0.53)(react@17.0.2) + framer-motion: 6.5.1(react-dom@17.0.2)(react@17.0.2) react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 - react-remove-scroll: 2.4.1_h7fc2el62uaa77gho3xhys6ola + react-dom: 17.0.2(react@17.0.2) + react-remove-scroll: 2.4.1(@types/react@17.0.53)(react@17.0.2) transitivePeerDependencies: - '@types/react' dev: false - /@chakra-ui/number-input/1.4.7_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/number-input@1.4.7(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-LorGRZFMipom8vCUEbLi2s7bTHF2Fgiu766W0jTbzMje+8Z1ZoRQunH9OZWQnxnWQTUfUM2KBW8KwToYh1ojfQ==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/counter': 1.2.10_react@17.0.2 - '@chakra-ui/form-control': 1.6.0_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/hooks': 1.9.1_react@17.0.2 - '@chakra-ui/icon': 2.0.5_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/counter': 1.2.10(react@17.0.2) + '@chakra-ui/form-control': 1.6.0(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/hooks': 1.9.1(react@17.0.2) + '@chakra-ui/icon': 2.0.5(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/pin-input/1.7.11_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/pin-input@1.7.11(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-KEVUHHmf22tI4F7gzT9+pHi4E5cCyte6M8rPEwRyuc0kUBo48D8OW0BJwGdESWOKMkQXazDF6Zg4o32t45tbpg==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/descendant': 2.1.4_react@17.0.2 - '@chakra-ui/hooks': 1.9.1_react@17.0.2 - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/descendant': 2.1.4(react@17.0.2) + '@chakra-ui/hooks': 1.9.1(react@17.0.2) + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/popover/1.11.9_csxourtydlqlkdypnr3c6yasxu: + /@chakra-ui/popover@1.11.9(@chakra-ui/system@1.12.1)(framer-motion@6.5.1)(react@17.0.2): resolution: {integrity: sha512-hJ1/Lwukox3ryTN7W1wnj+nE44utfLwQYvfUSdatt5dznnh8k0P6Wx7Hmjm1cYffRavBhqzwua/QZDWjJN9N0g==} peerDependencies: '@chakra-ui/system': '>=1.0.0' framer-motion: 3.x || 4.x || 5.x || 6.x react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/close-button': 1.2.7_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/hooks': 1.9.1_react@17.0.2 - '@chakra-ui/popper': 2.4.3_react@17.0.2 - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/close-button': 1.2.7(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/hooks': 1.9.1(react@17.0.2) + '@chakra-ui/popper': 2.4.3(react@17.0.2) + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 - framer-motion: 6.5.1_sfoxds7t5ydpegc3knd667wn6m + framer-motion: 6.5.1(react-dom@17.0.2)(react@17.0.2) react: 17.0.2 dev: false - /@chakra-ui/popper/2.4.3_react@17.0.2: + /@chakra-ui/popper@2.4.3(react@17.0.2): resolution: {integrity: sha512-TGzFnYt3mtIVkIejtYIAu4Ka9DaYLzMR4NgcqI6EtaTvgK7Xep+6RTiY/Nq+ZT3l/eaNUwqHRFoNrDUg1XYasA==} peerDependencies: react: '>=16.8.6' dependencies: - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) '@popperjs/core': 2.11.6 react: 17.0.2 dev: false - /@chakra-ui/portal/1.3.10_sfoxds7t5ydpegc3knd667wn6m: + /@chakra-ui/portal@1.3.10(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-t2KQ6MXbyf1qFYxWw/bs//CnwD+Clq7mbsP1Y7g+THCz2FvlLlMj45BWocLB30NoNyA8WCS2zyMBszW2/qvDiA==} peerDependencies: react: '>=16.8.6' react-dom: '>=16.8.6' dependencies: - '@chakra-ui/hooks': 1.9.1_react@17.0.2 - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 + '@chakra-ui/hooks': 1.9.1(react@17.0.2) + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 + react-dom: 17.0.2(react@17.0.2) dev: false - /@chakra-ui/progress/1.2.6_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/progress@1.2.6(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-thaHRIYTVktgV78vJMNwzfCX+ickhSpn2bun6FtGVUphFx4tjV+ggz+IGohm6AH2hapskoR1mQU2iNZb6BK0hQ==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u - '@chakra-ui/theme-tools': 1.3.6_@chakra-ui+system@1.12.1 + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) + '@chakra-ui/theme-tools': 1.3.6(@chakra-ui/system@1.12.1) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/provider/1.7.14_6dvm3afkgzqn7vmqvog4mojbze: + /@chakra-ui/provider@1.7.14(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-FCA33CZy/jFzExglKMioeri8sr9NtDTcNVPnx95ZJiA7WpfFo0xuZ6/fMC4DwIQPkJKbSIZBXYLZ3U10Ntylrw==} peerDependencies: '@emotion/react': ^11.0.0 @@ -2242,37 +2542,34 @@ packages: react: '>=16.8.6' react-dom: '>=16.8.6' dependencies: - '@chakra-ui/css-reset': 1.1.3_lppulqnmkkrmfes7eqrbphxjnm - '@chakra-ui/hooks': 1.9.1_react@17.0.2 - '@chakra-ui/portal': 1.3.10_sfoxds7t5ydpegc3knd667wn6m - '@chakra-ui/react-env': 1.1.6_react@17.0.2 - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/css-reset': 1.1.3(@emotion/react@11.10.6)(react@17.0.2) + '@chakra-ui/hooks': 1.9.1(react@17.0.2) + '@chakra-ui/portal': 1.3.10(react-dom@17.0.2)(react@17.0.2) + '@chakra-ui/react-env': 1.1.6(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 - '@emotion/react': 11.10.6_h7fc2el62uaa77gho3xhys6ola - '@emotion/styled': 11.10.6_7hisdke2c3hq4r3q5z4dcdhmzi + '@emotion/react': 11.10.6(@types/react@17.0.53)(react@17.0.2) + '@emotion/styled': 11.10.6(@emotion/react@11.10.6)(@types/react@17.0.53)(react@17.0.2) react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 + react-dom: 17.0.2(react@17.0.2) dev: false - /@chakra-ui/radio/1.5.1_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/radio@1.5.1(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-zO5eShz+j68A7935jJ2q5u3brX/bjPEGh9Pj2+bnKbmC9Vva6jEzBSJsAx9n4WbkAzR3xDMGWsbpivFp8X1tJw==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/form-control': 1.6.0_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/hooks': 1.9.1_react@17.0.2 - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/form-control': 1.6.0(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/hooks': 1.9.1(react@17.0.2) + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 - '@chakra-ui/visually-hidden': 1.1.6_5qblqjf622vzzkdskgddihcrca + '@chakra-ui/visually-hidden': 1.1.6(@chakra-ui/system@1.12.1)(react@17.0.2) react: 17.0.2 dev: false - /@chakra-ui/react-env/1.1.6_react@17.0.2: + /@chakra-ui/react-env@1.1.6(react@17.0.2): resolution: {integrity: sha512-L90LNvCfe04FTkN9OPok/o2e60zLJNBH8Im/5dUHvqy7dXLXok8ZDad5vEL46XmGbhe7O8fbxhG6FmAYdcCHrQ==} peerDependencies: react: '>=16.8.6' @@ -2281,7 +2578,7 @@ packages: react: 17.0.2 dev: false - /@chakra-ui/react-utils/1.2.3_react@17.0.2: + /@chakra-ui/react-utils@1.2.3(react@17.0.2): resolution: {integrity: sha512-r8pUwCVVB7UPhb0AiRa9ZzSp4xkMz64yIeJ4O4aGy4WMw7TRH4j4QkbkE1YC9tQitrXrliOlvx4WWJR4VyiGpw==} peerDependencies: react: '>=16.8.6' @@ -2290,7 +2587,7 @@ packages: react: 17.0.2 dev: false - /@chakra-ui/react/1.8.9_pizuovw4rxklnfeqfejc6mp34q: + /@chakra-ui/react@1.8.9(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(@types/react@17.0.53)(framer-motion@6.5.1)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-NfR5XKVqEWhchFLiWaTWkWeYZJK1SNF2O6sQxFVrX6M+nAgJ3Q9tfMk6/I3II+xc4hXJUcYmUvmw37vT92yMaQ==} peerDependencies: '@emotion/react': ^11.0.0 @@ -2299,78 +2596,75 @@ packages: react: '>=16.8.6' react-dom: '>=16.8.6' dependencies: - '@chakra-ui/accordion': 1.4.12_csxourtydlqlkdypnr3c6yasxu - '@chakra-ui/alert': 1.3.7_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/avatar': 1.3.11_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/breadcrumb': 1.3.6_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/button': 1.5.10_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/checkbox': 1.7.1_csxourtydlqlkdypnr3c6yasxu - '@chakra-ui/close-button': 1.2.7_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/control-box': 1.1.6_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/counter': 1.2.10_react@17.0.2 - '@chakra-ui/css-reset': 1.1.3_lppulqnmkkrmfes7eqrbphxjnm - '@chakra-ui/editable': 1.4.2_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/form-control': 1.6.0_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/hooks': 1.9.1_react@17.0.2 - '@chakra-ui/icon': 2.0.5_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/image': 1.1.10_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/input': 1.4.6_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/layout': 1.8.0_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/live-region': 1.1.6_react@17.0.2 - '@chakra-ui/media-query': 2.0.4_sxr25aaor3bltw4csjjk62xw3q - '@chakra-ui/menu': 1.8.12_csxourtydlqlkdypnr3c6yasxu - '@chakra-ui/modal': 1.11.1_znojjvmuimc52wc6sir6sqg4da - '@chakra-ui/number-input': 1.4.7_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/pin-input': 1.7.11_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/popover': 1.11.9_csxourtydlqlkdypnr3c6yasxu - '@chakra-ui/popper': 2.4.3_react@17.0.2 - '@chakra-ui/portal': 1.3.10_sfoxds7t5ydpegc3knd667wn6m - '@chakra-ui/progress': 1.2.6_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/provider': 1.7.14_6dvm3afkgzqn7vmqvog4mojbze - '@chakra-ui/radio': 1.5.1_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/react-env': 1.1.6_react@17.0.2 - '@chakra-ui/select': 1.2.11_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/skeleton': 1.2.14_glnyuheil4qa4aagin4jhz34ei - '@chakra-ui/slider': 1.5.11_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/spinner': 1.2.6_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/stat': 1.2.7_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/switch': 1.3.10_csxourtydlqlkdypnr3c6yasxu - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u - '@chakra-ui/table': 1.3.6_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/tabs': 1.6.11_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/tag': 1.2.7_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/textarea': 1.2.11_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/theme': 1.14.1_@chakra-ui+system@1.12.1 - '@chakra-ui/toast': 1.5.9_zbxngkwtndcajnqyumwskenfdm - '@chakra-ui/tooltip': 1.5.1_zbxngkwtndcajnqyumwskenfdm - '@chakra-ui/transition': 1.4.8_4bcqv2kvtjx6raziruhdnbn2uq + '@chakra-ui/accordion': 1.4.12(@chakra-ui/system@1.12.1)(framer-motion@6.5.1)(react@17.0.2) + '@chakra-ui/alert': 1.3.7(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/avatar': 1.3.11(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/breadcrumb': 1.3.6(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/button': 1.5.10(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/checkbox': 1.7.1(@chakra-ui/system@1.12.1)(framer-motion@6.5.1)(react@17.0.2) + '@chakra-ui/close-button': 1.2.7(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/control-box': 1.1.6(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/counter': 1.2.10(react@17.0.2) + '@chakra-ui/css-reset': 1.1.3(@emotion/react@11.10.6)(react@17.0.2) + '@chakra-ui/editable': 1.4.2(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/form-control': 1.6.0(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/hooks': 1.9.1(react@17.0.2) + '@chakra-ui/icon': 2.0.5(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/image': 1.1.10(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/input': 1.4.6(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/layout': 1.8.0(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/live-region': 1.1.6(react@17.0.2) + '@chakra-ui/media-query': 2.0.4(@chakra-ui/system@1.12.1)(@chakra-ui/theme@1.14.1)(react@17.0.2) + '@chakra-ui/menu': 1.8.12(@chakra-ui/system@1.12.1)(framer-motion@6.5.1)(react@17.0.2) + '@chakra-ui/modal': 1.11.1(@chakra-ui/system@1.12.1)(@types/react@17.0.53)(framer-motion@6.5.1)(react-dom@17.0.2)(react@17.0.2) + '@chakra-ui/number-input': 1.4.7(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/pin-input': 1.7.11(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/popover': 1.11.9(@chakra-ui/system@1.12.1)(framer-motion@6.5.1)(react@17.0.2) + '@chakra-ui/popper': 2.4.3(react@17.0.2) + '@chakra-ui/portal': 1.3.10(react-dom@17.0.2)(react@17.0.2) + '@chakra-ui/progress': 1.2.6(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/provider': 1.7.14(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react-dom@17.0.2)(react@17.0.2) + '@chakra-ui/radio': 1.5.1(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/react-env': 1.1.6(react@17.0.2) + '@chakra-ui/select': 1.2.11(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/skeleton': 1.2.14(@chakra-ui/theme@1.14.1)(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) + '@chakra-ui/slider': 1.5.11(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/spinner': 1.2.6(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/stat': 1.2.7(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/switch': 1.3.10(@chakra-ui/system@1.12.1)(framer-motion@6.5.1)(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) + '@chakra-ui/table': 1.3.6(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/tabs': 1.6.11(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/tag': 1.2.7(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/textarea': 1.2.11(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/theme': 1.14.1(@chakra-ui/system@1.12.1) + '@chakra-ui/toast': 1.5.9(@chakra-ui/system@1.12.1)(framer-motion@6.5.1)(react-dom@17.0.2)(react@17.0.2) + '@chakra-ui/tooltip': 1.5.1(@chakra-ui/system@1.12.1)(framer-motion@6.5.1)(react-dom@17.0.2)(react@17.0.2) + '@chakra-ui/transition': 1.4.8(framer-motion@6.5.1)(react@17.0.2) '@chakra-ui/utils': 1.10.4 - '@chakra-ui/visually-hidden': 1.1.6_5qblqjf622vzzkdskgddihcrca - '@emotion/react': 11.10.6_h7fc2el62uaa77gho3xhys6ola - '@emotion/styled': 11.10.6_7hisdke2c3hq4r3q5z4dcdhmzi - framer-motion: 6.5.1_sfoxds7t5ydpegc3knd667wn6m + '@chakra-ui/visually-hidden': 1.1.6(@chakra-ui/system@1.12.1)(react@17.0.2) + '@emotion/react': 11.10.6(@types/react@17.0.53)(react@17.0.2) + '@emotion/styled': 11.10.6(@emotion/react@11.10.6)(@types/react@17.0.53)(react@17.0.2) + framer-motion: 6.5.1(react-dom@17.0.2)(react@17.0.2) react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 + react-dom: 17.0.2(react@17.0.2) transitivePeerDependencies: - '@types/react' dev: false - /@chakra-ui/select/1.2.11_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/select@1.2.11(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-6Tis1+ZrRjQeWhQfziQn3ZdPphV5ccafpZOhiPdTcM2J1XcXOlII+9rHxvaW+jx7zQ5ly5o8kd7iXzalDgl5wA==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/form-control': 1.6.0_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/form-control': 1.6.0(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/skeleton/1.2.14_glnyuheil4qa4aagin4jhz34ei: + /@chakra-ui/skeleton@1.2.14(@chakra-ui/theme@1.14.1)(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2): resolution: {integrity: sha512-R0v4DfQ2yjXCJf9SzhTmDb2PLx5//LxsRbjjgRa8qJCR4MZaGswPrekp4dP8YjY8aEYzuZbvHU12T3vqZBk2GA==} peerDependencies: '@chakra-ui/theme': '>=1.0.0' @@ -2378,264 +2672,216 @@ packages: '@emotion/styled': ^11.0.0 react: '>=16.8.6' dependencies: - '@chakra-ui/hooks': 1.9.1_react@17.0.2 - '@chakra-ui/media-query': 2.0.4_sxr25aaor3bltw4csjjk62xw3q - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u - '@chakra-ui/theme': 1.14.1_@chakra-ui+system@1.12.1 + '@chakra-ui/hooks': 1.9.1(react@17.0.2) + '@chakra-ui/media-query': 2.0.4(@chakra-ui/system@1.12.1)(@chakra-ui/theme@1.14.1)(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) + '@chakra-ui/theme': 1.14.1(@chakra-ui/system@1.12.1) '@chakra-ui/utils': 1.10.4 - '@emotion/react': 11.10.6_h7fc2el62uaa77gho3xhys6ola - '@emotion/styled': 11.10.6_7hisdke2c3hq4r3q5z4dcdhmzi + '@emotion/react': 11.10.6(@types/react@17.0.53)(react@17.0.2) + '@emotion/styled': 11.10.6(@emotion/react@11.10.6)(@types/react@17.0.53)(react@17.0.2) react: 17.0.2 dev: false - /@chakra-ui/slider/1.5.11_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/slider@1.5.11(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-THkGU2BsA6XMosXcEVQkWVRftqUIAKCb+y4iEpR3C2ztqL7Fl/CbIGwyr5majhPhKc275rb8dfxwp8R0L0ZIiQ==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/hooks': 1.9.1_react@17.0.2 - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/hooks': 1.9.1(react@17.0.2) + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/spinner/1.2.6_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/spinner@1.2.6(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-GoUCccN120fGRVgUtfuwcEjeoaxffB+XsgpxX7jhWloXf8b6lkqm68bsxX4Ybb2vGN1fANI98/45JmrnddZO/A==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 - '@chakra-ui/visually-hidden': 1.1.6_5qblqjf622vzzkdskgddihcrca + '@chakra-ui/visually-hidden': 1.1.6(@chakra-ui/system@1.12.1)(react@17.0.2) react: 17.0.2 dev: false - /@chakra-ui/stat/1.2.7_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/stat@1.2.7(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-m76jumFW1N+mCG4ytrUz9Mh09nZtS4OQcADEvOslfdI5StwwuzasTA1tueaelPzdhBioMwFUWL05Fr1fXbPJ/Q==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/icon': 2.0.5_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/icon': 2.0.5(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 - '@chakra-ui/visually-hidden': 1.1.6_5qblqjf622vzzkdskgddihcrca + '@chakra-ui/visually-hidden': 1.1.6(@chakra-ui/system@1.12.1)(react@17.0.2) react: 17.0.2 dev: false - /@chakra-ui/styled-system/1.19.0: + /@chakra-ui/styled-system@1.19.0: resolution: {integrity: sha512-z+bMfWs6jQGkpgarge1kmk78DuDhJIXRUMyRqZ3+CiIkze88bIIsww6mV2i8tEfUfTAvALeMnlYZ1DYsHsTTJw==} dependencies: '@chakra-ui/utils': 1.10.4 csstype: 3.0.9 dev: false - /@chakra-ui/switch/1.3.10_csxourtydlqlkdypnr3c6yasxu: + /@chakra-ui/switch@1.3.10(@chakra-ui/system@1.12.1)(framer-motion@6.5.1)(react@17.0.2): resolution: {integrity: sha512-V6qDLY6oECCbPyu7alWWOAhSBI4+SAuT6XW/zEQbelkwuUOiGO1ax67rTXOmZ59A2AaV1gqQFxDh8AcbvwO5XQ==} peerDependencies: '@chakra-ui/system': '>=1.0.0' framer-motion: 3.x || 4.x || 5.x || 6.x react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/checkbox': 1.7.1_csxourtydlqlkdypnr3c6yasxu - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/checkbox': 1.7.1(@chakra-ui/system@1.12.1)(framer-motion@6.5.1)(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 - framer-motion: 6.5.1_sfoxds7t5ydpegc3knd667wn6m + framer-motion: 6.5.1(react-dom@17.0.2)(react@17.0.2) react: 17.0.2 dev: false - /@chakra-ui/system/1.12.1_zc6uy6i6ttehedii47aio4ko3u: + /@chakra-ui/system@1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2): resolution: {integrity: sha512-Rp09/rMuPA3hF38OJxeQciGO9N0Ie1GxwHRAw1AFA/TY3fVyK9pNI5oN+J/1cAxq7v9yKdIr1YfnruJTI9xfEg==} peerDependencies: '@emotion/react': ^11.0.0 '@emotion/styled': ^11.0.0 react: '>=16.8.6' dependencies: - '@chakra-ui/color-mode': 1.4.8_react@17.0.2 - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 + '@chakra-ui/color-mode': 1.4.8(react@17.0.2) + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) '@chakra-ui/styled-system': 1.19.0 '@chakra-ui/utils': 1.10.4 - '@emotion/react': 11.10.6_h7fc2el62uaa77gho3xhys6ola - '@emotion/styled': 11.10.6_7hisdke2c3hq4r3q5z4dcdhmzi + '@emotion/react': 11.10.6(@types/react@17.0.53)(react@17.0.2) + '@emotion/styled': 11.10.6(@emotion/react@11.10.6)(@types/react@17.0.53)(react@17.0.2) react: 17.0.2 react-fast-compare: 3.2.0 dev: false - /@chakra-ui/table/1.3.6_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/table@1.3.6(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-7agZAgAeDFKviqStvixqnLAH54+setzhx67EztioZTr5Xu+6hQ4rotfJbu8L4i587pcbNg98kCEXEkidjw0XRQ==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/tabs/1.6.11_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/tabs@1.6.11(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-hGs2REEVVWyfgs+qEkPiUsNnqwv3QwXfKYyXaMnGS7CCkGgUiEvIO7n9968/KGnGbM4GuEHX+BxG2suIUf24yg==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/clickable': 1.2.6_react@17.0.2 - '@chakra-ui/descendant': 2.1.4_react@17.0.2 - '@chakra-ui/hooks': 1.9.1_react@17.0.2 - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/clickable': 1.2.6(react@17.0.2) + '@chakra-ui/descendant': 2.1.4(react@17.0.2) + '@chakra-ui/hooks': 1.9.1(react@17.0.2) + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/tag/1.2.7_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/tag@1.2.7(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-RKrKOol4i/CnpFfo3T9LMm1abaqM+5Bs0soQLbo1iJBbBACY09sWXrQYvveQ2GYzU/OrAUloHqqmKjyVGOlNtg==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/icon': 2.0.5_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/icon': 2.0.5(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/textarea/1.2.11_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/textarea@1.2.11(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-RDWbMyC87/AFRX98EnVum5eig/7hhcvS1BrqW5lvmTgrpr7KVr80Dfa8hUj58Iq37Z7AqZijDPkBn/zg7bPdIg==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/form-control': 1.6.0_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/form-control': 1.6.0(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@chakra-ui/theme-tools/1.3.6: - resolution: {integrity: sha512-Wxz3XSJhPCU6OwCHEyH44EegEDQHwvlsx+KDkUDGevOjUU88YuNqOVkKtgTpgMLNQcsrYZ93oPWZUJqqCVNRew==} - peerDependencies: - '@chakra-ui/system': '>=1.0.0' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true - dependencies: - '@chakra-ui/utils': 1.10.4 - '@ctrl/tinycolor': 3.4.1 - dev: false - - /@chakra-ui/theme-tools/1.3.6_@chakra-ui+system@1.12.1: + /@chakra-ui/theme-tools@1.3.6(@chakra-ui/system@1.12.1): resolution: {integrity: sha512-Wxz3XSJhPCU6OwCHEyH44EegEDQHwvlsx+KDkUDGevOjUU88YuNqOVkKtgTpgMLNQcsrYZ93oPWZUJqqCVNRew==} peerDependencies: '@chakra-ui/system': '>=1.0.0' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 '@ctrl/tinycolor': 3.4.1 dev: false - /@chakra-ui/theme/1.14.1_@chakra-ui+system@1.12.1: + /@chakra-ui/theme@1.14.1(@chakra-ui/system@1.12.1): resolution: {integrity: sha512-VeNZi+zD3yDwzvZm234Cy3vnalCzQ+dhAgpHdIYzGO1CYO8DPa+ROcQ70rUueL7dSvUz15KOiGTw6DAl7LXlGA==} peerDependencies: '@chakra-ui/system': '>=1.0.0' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/anatomy': 1.3.0_@chakra-ui+system@1.12.1 - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u - '@chakra-ui/theme-tools': 1.3.6_@chakra-ui+system@1.12.1 + '@chakra-ui/anatomy': 1.3.0(@chakra-ui/system@1.12.1) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) + '@chakra-ui/theme-tools': 1.3.6(@chakra-ui/system@1.12.1) '@chakra-ui/utils': 1.10.4 dev: false - /@chakra-ui/toast/1.5.9_zbxngkwtndcajnqyumwskenfdm: + /@chakra-ui/toast@1.5.9(@chakra-ui/system@1.12.1)(framer-motion@6.5.1)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-rns04bGdMcG7Ijg45L+PfuEW4rCd0Ycraix4EJQhcl9RXI18G9sphmlp9feidhZAkI6Ukafq1YvyvkBfkKnIzQ==} peerDependencies: '@chakra-ui/system': '>=1.0.0' framer-motion: 3.x || 4.x || 5.x || 6.x react: '>=16.8.6' react-dom: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/alert': 1.3.7_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/close-button': 1.2.7_5qblqjf622vzzkdskgddihcrca - '@chakra-ui/hooks': 1.9.1_react@17.0.2 - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u - '@chakra-ui/theme': 1.14.1_@chakra-ui+system@1.12.1 - '@chakra-ui/transition': 1.4.8_4bcqv2kvtjx6raziruhdnbn2uq + '@chakra-ui/alert': 1.3.7(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/close-button': 1.2.7(@chakra-ui/system@1.12.1)(react@17.0.2) + '@chakra-ui/hooks': 1.9.1(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) + '@chakra-ui/theme': 1.14.1(@chakra-ui/system@1.12.1) + '@chakra-ui/transition': 1.4.8(framer-motion@6.5.1)(react@17.0.2) '@chakra-ui/utils': 1.10.4 - '@reach/alert': 0.13.2_sfoxds7t5ydpegc3knd667wn6m - framer-motion: 6.5.1_sfoxds7t5ydpegc3knd667wn6m + '@reach/alert': 0.13.2(react-dom@17.0.2)(react@17.0.2) + framer-motion: 6.5.1(react-dom@17.0.2)(react@17.0.2) react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 + react-dom: 17.0.2(react@17.0.2) dev: false - /@chakra-ui/tooltip/1.5.1_zbxngkwtndcajnqyumwskenfdm: + /@chakra-ui/tooltip@1.5.1(@chakra-ui/system@1.12.1)(framer-motion@6.5.1)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-EUAlDdlCBt63VpEVtj/RkFjHQVN/xA9gEAumngQdi1Sp+OXPYCBM9GwSY0NwrM1RfKBnhPSH9wz7FwredJWeaw==} peerDependencies: '@chakra-ui/system': '>=1.0.0' framer-motion: 3.x || 4.x || 5.x || 6.x react: '>=16.8.6' react-dom: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/hooks': 1.9.1_react@17.0.2 - '@chakra-ui/popper': 2.4.3_react@17.0.2 - '@chakra-ui/portal': 1.3.10_sfoxds7t5ydpegc3knd667wn6m - '@chakra-ui/react-utils': 1.2.3_react@17.0.2 - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/hooks': 1.9.1(react@17.0.2) + '@chakra-ui/popper': 2.4.3(react@17.0.2) + '@chakra-ui/portal': 1.3.10(react-dom@17.0.2)(react@17.0.2) + '@chakra-ui/react-utils': 1.2.3(react@17.0.2) + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 - '@chakra-ui/visually-hidden': 1.1.6_5qblqjf622vzzkdskgddihcrca - framer-motion: 6.5.1_sfoxds7t5ydpegc3knd667wn6m + '@chakra-ui/visually-hidden': 1.1.6(@chakra-ui/system@1.12.1)(react@17.0.2) + framer-motion: 6.5.1(react-dom@17.0.2)(react@17.0.2) react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 + react-dom: 17.0.2(react@17.0.2) dev: false - /@chakra-ui/transition/1.4.8_4bcqv2kvtjx6raziruhdnbn2uq: + /@chakra-ui/transition@1.4.8(framer-motion@6.5.1)(react@17.0.2): resolution: {integrity: sha512-5uc8LEuCH7+0h++wqAav/EktTHOjbLDSTXQlU9fzPIlNNgyf2eXrHVN2AGMGKiMR9Z4gS7umQjZ54r0w/mZ/Fw==} peerDependencies: framer-motion: 3.x || 4.x || 5.x || 6.x react: '>=16.8.6' dependencies: '@chakra-ui/utils': 1.10.4 - framer-motion: 6.5.1_sfoxds7t5ydpegc3knd667wn6m + framer-motion: 6.5.1(react-dom@17.0.2)(react@17.0.2) react: 17.0.2 dev: false - /@chakra-ui/utils/1.10.4: + /@chakra-ui/utils@1.10.4: resolution: {integrity: sha512-AM91VQQxw8F4F1WDA28mqKY6NFIOuzc2Ekkna88imy2OiqqmYH0xkq8J16L2qj4cLiLozpYqba3C79pWioy6FA==} dependencies: '@types/lodash.mergewith': 4.6.6 @@ -2644,24 +2890,21 @@ packages: lodash.mergewith: 4.6.2 dev: false - /@chakra-ui/visually-hidden/1.1.6_5qblqjf622vzzkdskgddihcrca: + /@chakra-ui/visually-hidden@1.1.6(@chakra-ui/system@1.12.1)(react@17.0.2): resolution: {integrity: sha512-Xzy5bA0UA+IyMgwJizQYSEdgz8cC/tHdmFB3CniXzmpKTSK8mJddeEBl+cGbXHBzxEUhH7xF1eaS41O+0ezWEQ==} peerDependencies: '@chakra-ui/system': '>=1.0.0' react: '>=16.8.6' - peerDependenciesMeta: - '@chakra-ui/system': - optional: true dependencies: - '@chakra-ui/system': 1.12.1_zc6uy6i6ttehedii47aio4ko3u + '@chakra-ui/system': 1.12.1(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@17.0.2) '@chakra-ui/utils': 1.10.4 react: 17.0.2 dev: false - /@changesets/apply-release-plan/6.1.3: + /@changesets/apply-release-plan@6.1.3: resolution: {integrity: sha512-ECDNeoc3nfeAe1jqJb5aFQX7CqzQhD2klXRez2JDb/aVpGUbX673HgKrnrgJRuQR/9f2TtLoYIzrGB9qwD77mg==} dependencies: - '@babel/runtime': 7.20.6 + '@babel/runtime': 7.23.8 '@changesets/config': 2.3.0 '@changesets/get-version-range-type': 0.3.2 '@changesets/git': 2.0.0 @@ -2676,10 +2919,10 @@ packages: semver: 5.7.1 dev: true - /@changesets/assemble-release-plan/5.2.3: + /@changesets/assemble-release-plan@5.2.3: resolution: {integrity: sha512-g7EVZCmnWz3zMBAdrcKhid4hkHT+Ft1n0mLussFMcB1dE2zCuwcvGoy9ec3yOgPGF4hoMtgHaMIk3T3TBdvU9g==} dependencies: - '@babel/runtime': 7.20.6 + '@babel/runtime': 7.23.8 '@changesets/errors': 0.1.4 '@changesets/get-dependents-graph': 1.3.5 '@changesets/types': 5.2.1 @@ -2687,17 +2930,27 @@ packages: semver: 5.7.1 dev: true - /@changesets/changelog-git/0.1.14: + /@changesets/changelog-git@0.1.14: resolution: {integrity: sha512-+vRfnKtXVWsDDxGctOfzJsPhaCdXRYoe+KyWYoq5X/GqoISREiat0l3L8B0a453B2B4dfHGcZaGyowHbp9BSaA==} dependencies: '@changesets/types': 5.2.1 dev: true - /@changesets/cli/2.26.0: + /@changesets/changelog-github@0.4.8: + resolution: {integrity: sha512-jR1DHibkMAb5v/8ym77E4AMNWZKB5NPzw5a5Wtqm1JepAuIF+hrKp2u04NKM14oBZhHglkCfrla9uq8ORnK/dw==} + dependencies: + '@changesets/get-github-info': 0.5.2 + '@changesets/types': 5.2.1 + dotenv: 8.6.0 + transitivePeerDependencies: + - encoding + dev: true + + /@changesets/cli@2.26.0: resolution: {integrity: sha512-0cbTiDms+ICTVtEwAFLNW0jBNex9f5+fFv3I771nBvdnV/mOjd1QJ4+f8KtVSOrwD9SJkk9xbDkWFb0oXd8d1Q==} hasBin: true dependencies: - '@babel/runtime': 7.20.6 + '@babel/runtime': 7.23.8 '@changesets/apply-release-plan': 6.1.3 '@changesets/assemble-release-plan': 5.2.3 '@changesets/changelog-git': 0.1.14 @@ -2732,7 +2985,7 @@ packages: tty-table: 4.1.6 dev: true - /@changesets/config/2.3.0: + /@changesets/config@2.3.0: resolution: {integrity: sha512-EgP/px6mhCx8QeaMAvWtRrgyxW08k/Bx2tpGT+M84jEdX37v3VKfh4Cz1BkwrYKuMV2HZKeHOh8sHvja/HcXfQ==} dependencies: '@changesets/errors': 0.1.4 @@ -2744,13 +2997,13 @@ packages: micromatch: 4.0.5 dev: true - /@changesets/errors/0.1.4: + /@changesets/errors@0.1.4: resolution: {integrity: sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q==} dependencies: extendable-error: 0.1.7 dev: true - /@changesets/get-dependents-graph/1.3.5: + /@changesets/get-dependents-graph@1.3.5: resolution: {integrity: sha512-w1eEvnWlbVDIY8mWXqWuYE9oKhvIaBhzqzo4ITSJY9hgoqQ3RoBqwlcAzg11qHxv/b8ReDWnMrpjpKrW6m1ZTA==} dependencies: '@changesets/types': 5.2.1 @@ -2760,10 +3013,19 @@ packages: semver: 5.7.1 dev: true - /@changesets/get-release-plan/3.0.16: + /@changesets/get-github-info@0.5.2: + resolution: {integrity: sha512-JppheLu7S114aEs157fOZDjFqUDpm7eHdq5E8SSR0gUBTEK0cNSHsrSR5a66xs0z3RWuo46QvA3vawp8BxDHvg==} + dependencies: + dataloader: 1.4.0 + node-fetch: 2.6.7 + transitivePeerDependencies: + - encoding + dev: true + + /@changesets/get-release-plan@3.0.16: resolution: {integrity: sha512-OpP9QILpBp1bY2YNIKFzwigKh7Qe9KizRsZomzLe6pK8IUo8onkAAVUD8+JRKSr8R7d4+JRuQrfSSNlEwKyPYg==} dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.23.8 '@changesets/assemble-release-plan': 5.2.3 '@changesets/config': 2.3.0 '@changesets/pre': 1.0.14 @@ -2772,14 +3034,14 @@ packages: '@manypkg/get-packages': 1.1.3 dev: true - /@changesets/get-version-range-type/0.3.2: + /@changesets/get-version-range-type@0.3.2: resolution: {integrity: sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg==} dev: true - /@changesets/git/2.0.0: + /@changesets/git@2.0.0: resolution: {integrity: sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A==} dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.23.8 '@changesets/errors': 0.1.4 '@changesets/types': 5.2.1 '@manypkg/get-packages': 1.1.3 @@ -2788,33 +3050,33 @@ packages: spawndamnit: 2.0.0 dev: true - /@changesets/logger/0.0.5: + /@changesets/logger@0.0.5: resolution: {integrity: sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw==} dependencies: chalk: 2.4.2 dev: true - /@changesets/parse/0.3.16: + /@changesets/parse@0.3.16: resolution: {integrity: sha512-127JKNd167ayAuBjUggZBkmDS5fIKsthnr9jr6bdnuUljroiERW7FBTDNnNVyJ4l69PzR57pk6mXQdtJyBCJKg==} dependencies: '@changesets/types': 5.2.1 js-yaml: 3.14.1 dev: true - /@changesets/pre/1.0.14: + /@changesets/pre@1.0.14: resolution: {integrity: sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ==} dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.23.8 '@changesets/errors': 0.1.4 '@changesets/types': 5.2.1 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 dev: true - /@changesets/read/0.5.9: + /@changesets/read@0.5.9: resolution: {integrity: sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ==} dependencies: - '@babel/runtime': 7.20.6 + '@babel/runtime': 7.23.8 '@changesets/git': 2.0.0 '@changesets/logger': 0.0.5 '@changesets/parse': 0.3.16 @@ -2824,41 +3086,40 @@ packages: p-filter: 2.1.0 dev: true - /@changesets/types/4.1.0: + /@changesets/types@4.1.0: resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} dev: true - /@changesets/types/5.2.1: + /@changesets/types@5.2.1: resolution: {integrity: sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg==} dev: true - /@changesets/write/0.2.3: + /@changesets/write@0.2.3: resolution: {integrity: sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==} dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.23.8 '@changesets/types': 5.2.1 fs-extra: 7.0.1 human-id: 1.0.2 prettier: 2.8.6 dev: true - /@cspotcode/source-map-support/0.8.1: + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 - dev: true - /@ctrl/tinycolor/3.4.1: + /@ctrl/tinycolor@3.4.1: resolution: {integrity: sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==} engines: {node: '>=10'} dev: false - /@emotion/babel-plugin/11.10.6: + /@emotion/babel-plugin@11.10.6: resolution: {integrity: sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==} dependencies: - '@babel/helper-module-imports': 7.18.6 - '@babel/runtime': 7.20.13 + '@babel/helper-module-imports': 7.22.15 + '@babel/runtime': 7.23.8 '@emotion/hash': 0.9.0 '@emotion/memoize': 0.8.0 '@emotion/serialize': 1.1.1 @@ -2870,7 +3131,7 @@ packages: stylis: 4.1.3 dev: false - /@emotion/cache/11.10.5: + /@emotion/cache@11.10.5: resolution: {integrity: sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==} dependencies: '@emotion/memoize': 0.8.0 @@ -2880,11 +3141,11 @@ packages: stylis: 4.1.3 dev: false - /@emotion/hash/0.9.0: + /@emotion/hash@0.9.0: resolution: {integrity: sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==} dev: false - /@emotion/is-prop-valid/0.8.8: + /@emotion/is-prop-valid@0.8.8: resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} requiresBuild: true dependencies: @@ -2892,22 +3153,23 @@ packages: dev: false optional: true - /@emotion/is-prop-valid/1.2.0: + /@emotion/is-prop-valid@1.2.0: resolution: {integrity: sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==} dependencies: '@emotion/memoize': 0.8.0 dev: false - /@emotion/memoize/0.7.4: + /@emotion/memoize@0.7.4: resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} + requiresBuild: true dev: false optional: true - /@emotion/memoize/0.8.0: + /@emotion/memoize@0.8.0: resolution: {integrity: sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==} dev: false - /@emotion/react/11.10.6_h7fc2el62uaa77gho3xhys6ola: + /@emotion/react@11.10.6(@types/react@17.0.53)(react@17.0.2): resolution: {integrity: sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==} peerDependencies: '@types/react': '*' @@ -2916,11 +3178,11 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.23.8 '@emotion/babel-plugin': 11.10.6 '@emotion/cache': 11.10.5 '@emotion/serialize': 1.1.1 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.0_react@17.0.2 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@17.0.2) '@emotion/utils': 1.2.0 '@emotion/weak-memoize': 0.3.0 '@types/react': 17.0.53 @@ -2928,7 +3190,7 @@ packages: react: 17.0.2 dev: false - /@emotion/serialize/1.1.1: + /@emotion/serialize@1.1.1: resolution: {integrity: sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==} dependencies: '@emotion/hash': 0.9.0 @@ -2938,11 +3200,11 @@ packages: csstype: 3.1.1 dev: false - /@emotion/sheet/1.2.1: + /@emotion/sheet@1.2.1: resolution: {integrity: sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==} dev: false - /@emotion/styled/11.10.6_7hisdke2c3hq4r3q5z4dcdhmzi: + /@emotion/styled@11.10.6(@emotion/react@11.10.6)(@types/react@17.0.53)(react@17.0.2): resolution: {integrity: sha512-OXtBzOmDSJo5Q0AFemHCfl+bUueT8BIcPSxu0EGTpGk6DmI5dnhSzQANm1e1ze0YZL7TDyAyy6s/b/zmGOS3Og==} peerDependencies: '@emotion/react': ^11.0.0-rc.0 @@ -2952,22 +3214,22 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.23.8 '@emotion/babel-plugin': 11.10.6 '@emotion/is-prop-valid': 1.2.0 - '@emotion/react': 11.10.6_h7fc2el62uaa77gho3xhys6ola + '@emotion/react': 11.10.6(@types/react@17.0.53)(react@17.0.2) '@emotion/serialize': 1.1.1 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.0_react@17.0.2 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@17.0.2) '@emotion/utils': 1.2.0 '@types/react': 17.0.53 react: 17.0.2 dev: false - /@emotion/unitless/0.8.0: + /@emotion/unitless@0.8.0: resolution: {integrity: sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==} dev: false - /@emotion/use-insertion-effect-with-fallbacks/1.0.0_react@17.0.2: + /@emotion/use-insertion-effect-with-fallbacks@1.0.0(react@17.0.2): resolution: {integrity: sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==} peerDependencies: react: '>=16.8.0' @@ -2975,472 +3237,699 @@ packages: react: 17.0.2 dev: false - /@emotion/utils/1.2.0: + /@emotion/utils@1.2.0: resolution: {integrity: sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==} dev: false - /@emotion/weak-memoize/0.3.0: + /@emotion/weak-memoize@0.3.0: resolution: {integrity: sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==} dev: false - /@envelop/core/3.0.4: - resolution: {integrity: sha512-AybIZxQsDlFQTWHy6YtX/MSQPVuw+eOFtTW90JsHn6EbmcQnD6N3edQfSiTGjggPRHLoC0+0cuYXp2Ly2r3vrQ==} + /@envelop/core@3.0.6: + resolution: {integrity: sha512-06t1xCPXq6QFN7W1JUEf68aCwYN0OUDNAIoJe7bAqhaoa2vn7NCcuX1VHkJ/OWpmElUgCsRO6RiBbIru1in0Ig==} dependencies: - '@envelop/types': 3.0.1 - tslib: 2.4.0 + '@envelop/types': 3.0.2 + tslib: 2.5.0 - /@envelop/dataloader/4.0.4_dataloader@2.1.0: + /@envelop/dataloader@4.0.4(@envelop/core@3.0.6)(dataloader@2.1.0): resolution: {integrity: sha512-e98vs9n9rEh/E0sFtUvMujHpA6ZzxLvhs/ei/KRiQWVtKDtKeWIiTKTpWXKevWWiugbB6YbSWvvEDcMLlCZrGQ==} peerDependencies: '@envelop/core': ^3.0.4 dataloader: ^2.0.0 - peerDependenciesMeta: - '@envelop/core': - optional: true dependencies: + '@envelop/core': 3.0.6 dataloader: 2.1.0 tslib: 2.5.0 dev: false - /@envelop/execute-subscription-event/3.0.4_graphql@16.6.0: + /@envelop/execute-subscription-event@3.0.4(@envelop/core@3.0.6)(graphql@16.8.1): resolution: {integrity: sha512-xGc8urS9IFqX4NnrSy8zQAs/ugi9ShjX7ddfK2pfl1rI7NPUQ3E1BNb0n7CCnlUBTuM9uIri3Mfs4HTbEsA9Vw==} peerDependencies: '@envelop/core': ^3.0.4 - graphql: '*' - peerDependenciesMeta: - '@envelop/core': - optional: true + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - graphql: 16.6.0 + '@envelop/core': 3.0.6 + graphql: 16.8.1 tslib: 2.5.0 dev: false - /@envelop/types/3.0.1: - resolution: {integrity: sha512-Ok62K1K+rlS+wQw77k8Pis8+1/h7+/9Wk5Fgcc2U6M5haEWsLFAHcHsk8rYlnJdEUl2Y3yJcCSOYbt1dyTaU5w==} + /@envelop/types@3.0.2: + resolution: {integrity: sha512-pOFea9ha0EkURWxJ/35axoH9fDGP5S2cUu/5Mmo9pb8zUf+TaEot8vB670XXihFEn/92759BMjLJNWBKmNhyng==} dependencies: tslib: 2.5.0 - /@esbuild/android-arm/0.17.12: - resolution: {integrity: sha512-E/sgkvwoIfj4aMAPL2e35VnUJspzVYl7+M1B2cqeubdBhADV4uPon0KCc8p2G+LqSJ6i8ocYPCqY3A4GGq0zkQ==} + /@esbuild/android-arm64@0.17.19: + resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [android] requiresBuild: true + dev: true optional: true - /@esbuild/android-arm64/0.17.12: - resolution: {integrity: sha512-WQ9p5oiXXYJ33F2EkE3r0FRDFVpEdcDiwNX3u7Xaibxfx6vQE0Sb8ytrfQsA5WO6kDn6mDfKLh6KrPBjvkk7xA==} + /@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.17.19: + resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.17.19: + resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true optional: true - /@esbuild/android-x64/0.17.12: - resolution: {integrity: sha512-m4OsaCr5gT+se25rFPHKQXARMyAehHTQAz4XX1Vk3d27VtqiX0ALMBPoXZsGaB6JYryCLfgGwUslMqTfqeLU0w==} + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} cpu: [x64] os: [android] requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.17.19: + resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true optional: true - /@esbuild/darwin-arm64/0.17.12: - resolution: {integrity: sha512-O3GCZghRIx+RAN0NDPhyyhRgwa19MoKlzGonIb5hgTj78krqp9XZbYCvFr9N1eUxg0ZQEpiiZ4QvsOQwBpP+lg==} + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.17.19: + resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true optional: true - /@esbuild/darwin-x64/0.17.12: - resolution: {integrity: sha512-5D48jM3tW27h1qjaD9UNRuN+4v0zvksqZSPZqeSWggfMlsVdAhH3pwSfQIFJwcs9QJ9BRibPS4ViZgs3d2wsCA==} + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.17.19: + resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true optional: true - /@esbuild/freebsd-arm64/0.17.12: - resolution: {integrity: sha512-OWvHzmLNTdF1erSvrfoEBGlN94IE6vCEaGEkEH29uo/VoONqPnoDFfShi41Ew+yKimx4vrmmAJEGNoyyP+OgOQ==} + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true + dev: true optional: true - /@esbuild/freebsd-x64/0.17.12: - resolution: {integrity: sha512-A0Xg5CZv8MU9xh4a+7NUpi5VHBKh1RaGJKqjxe4KG87X+mTjDE6ZvlJqpWoeJxgfXHT7IMP9tDFu7IZ03OtJAw==} + /@esbuild/freebsd-x64@0.17.19: + resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true + dev: true optional: true - /@esbuild/linux-arm/0.17.12: - resolution: {integrity: sha512-WsHyJ7b7vzHdJ1fv67Yf++2dz3D726oO3QCu8iNYik4fb5YuuReOI9OtA+n7Mk0xyQivNTPbl181s+5oZ38gyA==} + /@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} - cpu: [arm] + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.17.19: + resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} + engines: {node: '>=12'} + cpu: [arm64] os: [linux] requiresBuild: true + dev: true optional: true - /@esbuild/linux-arm64/0.17.12: - resolution: {integrity: sha512-cK3AjkEc+8v8YG02hYLQIQlOznW+v9N+OI9BAFuyqkfQFR+DnDLhEM5N8QRxAUz99cJTo1rLNXqRrvY15gbQUg==} + /@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.17.19: + resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.17.19: + resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true optional: true - /@esbuild/linux-ia32/0.17.12: - resolution: {integrity: sha512-jdOBXJqcgHlah/nYHnj3Hrnl9l63RjtQ4vn9+bohjQPI2QafASB5MtHAoEv0JQHVb/xYQTFOeuHnNYE1zF7tYw==} + /@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.17.19: + resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true optional: true - /@esbuild/linux-loong64/0.17.12: - resolution: {integrity: sha512-GTOEtj8h9qPKXCyiBBnHconSCV9LwFyx/gv3Phw0pa25qPYjVuuGZ4Dk14bGCfGX3qKF0+ceeQvwmtI+aYBbVA==} + /@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.17.19: + resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true optional: true - /@esbuild/linux-mips64el/0.17.12: - resolution: {integrity: sha512-o8CIhfBwKcxmEENOH9RwmUejs5jFiNoDw7YgS0EJTF6kgPgcqLFjgoc5kDey5cMHRVCIWc6kK2ShUePOcc7RbA==} + /@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.17.19: + resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true optional: true - /@esbuild/linux-ppc64/0.17.12: - resolution: {integrity: sha512-biMLH6NR/GR4z+ap0oJYb877LdBpGac8KfZoEnDiBKd7MD/xt8eaw1SFfYRUeMVx519kVkAOL2GExdFmYnZx3A==} + /@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.17.19: + resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true optional: true - /@esbuild/linux-riscv64/0.17.12: - resolution: {integrity: sha512-jkphYUiO38wZGeWlfIBMB72auOllNA2sLfiZPGDtOBb1ELN8lmqBrlMiucgL8awBw1zBXN69PmZM6g4yTX84TA==} + /@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.17.19: + resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true optional: true - /@esbuild/linux-s390x/0.17.12: - resolution: {integrity: sha512-j3ucLdeY9HBcvODhCY4b+Ds3hWGO8t+SAidtmWu/ukfLLG/oYDMaA+dnugTVAg5fnUOGNbIYL9TOjhWgQB8W5g==} + /@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.17.19: + resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - /@esbuild/linux-x64/0.17.12: - resolution: {integrity: sha512-uo5JL3cgaEGotaqSaJdRfFNSCUJOIliKLnDGWaVCgIKkHxwhYMm95pfMbWZ9l7GeW9kDg0tSxcy9NYdEtjwwmA==} + /@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.17.19: + resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true optional: true - /@esbuild/netbsd-x64/0.17.12: - resolution: {integrity: sha512-DNdoRg8JX+gGsbqt2gPgkgb00mqOgOO27KnrWZtdABl6yWTST30aibGJ6geBq3WM2TIeW6COs5AScnC7GwtGPg==} + /@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.17.19: + resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true optional: true - /@esbuild/openbsd-x64/0.17.12: - resolution: {integrity: sha512-aVsENlr7B64w8I1lhHShND5o8cW6sB9n9MUtLumFlPhG3elhNWtE7M1TFpj3m7lT3sKQUMkGFjTQBrvDDO1YWA==} + /@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.17.19: + resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true optional: true - /@esbuild/sunos-x64/0.17.12: - resolution: {integrity: sha512-qbHGVQdKSwi0JQJuZznS4SyY27tYXYF0mrgthbxXrZI3AHKuRvU+Eqbg/F0rmLDpW/jkIZBlCO1XfHUBMNJ1pg==} + /@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.17.19: + resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true optional: true - /@esbuild/win32-arm64/0.17.12: - resolution: {integrity: sha512-zsCp8Ql+96xXTVTmm6ffvoTSZSV2B/LzzkUXAY33F/76EajNw1m+jZ9zPfNJlJ3Rh4EzOszNDHsmG/fZOhtqDg==} + /@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.17.19: + resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true optional: true - /@esbuild/win32-ia32/0.17.12: - resolution: {integrity: sha512-FfrFjR4id7wcFYOdqbDfDET3tjxCozUgbqdkOABsSFzoZGFC92UK7mg4JKRc/B3NNEf1s2WHxJ7VfTdVDPN3ng==} + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.17.19: + resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true optional: true - /@esbuild/win32-x64/0.17.12: - resolution: {integrity: sha512-JOOxw49BVZx2/5tW3FqkdjSD/5gXYeVGPDcB0lvap0gLQshkh1Nyel1QazC+wNxus3xPlsYAgqU1BUmrmCvWtw==} + /@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] requiresBuild: true + dev: true optional: true - /@faker-js/faker/7.6.0: + /@eslint-community/eslint-utils@4.4.0(eslint@8.46.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.46.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.2.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js@8.56.0: + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@faker-js/faker@7.6.0: resolution: {integrity: sha512-XK6BTq1NDMo9Xqw/YkYyGjSsg44fbNwYRx7QK2CuoQgyy+f1rrTDHoExVM5PsyXCtfl2vs2vVJ0MN0yN6LppRw==} engines: {node: '>=14.0.0', npm: '>=6.0.0'} dev: false - /@fastify/ajv-compiler/3.4.0: - resolution: {integrity: sha512-69JnK7Cot+ktn7LD5TikP3b7psBPX55tYpQa8WSumt8r117PCa2zwHnImfBtRWYExreJlI48hr0WZaVrTBGj7w==} + /@fastify/ajv-compiler@3.5.0: + resolution: {integrity: sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==} dependencies: ajv: 8.11.0 - ajv-formats: 2.1.1 + ajv-formats: 2.1.1(ajv@8.11.0) fast-uri: 2.1.0 + dev: false - /@fastify/cors/8.2.0: + /@fastify/cors@8.2.0: resolution: {integrity: sha512-qDgwpmg6C4D0D3nh8MTMuRXWyEwPnDZDBODaJv90FP2o9ukbahJByW4FtrM5Bpod5KbTf1oIExBmpItbUTQmHg==} dependencies: fastify-plugin: 4.3.0 mnemonist: 0.39.5 + dev: false - /@fastify/deepmerge/1.1.0: + /@fastify/deepmerge@1.1.0: resolution: {integrity: sha512-E8Hfdvs1bG6u0N4vN5Nty6JONUfTdOciyD5rn8KnEsLKIenvOVcr210BQR9t34PRkNyjqnMLGk3e0BsaxRdL+g==} + dev: false - /@fastify/error/3.0.0: - resolution: {integrity: sha512-dPRyT40GiHRzSCll3/Jn2nPe25+E1VXc9tDwRAIKwFCxd5Np5wzgz1tmooWG3sV0qKgrBibihVoCna2ru4SEFg==} + /@fastify/error@3.4.1: + resolution: {integrity: sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==} - /@fastify/fast-json-stringify-compiler/4.1.0: - resolution: {integrity: sha512-cTKBV2J9+u6VaKDhX7HepSfPSzw+F+TSd+k0wzifj4rG+4E5PjSFJCk19P8R6tr/72cuzgGd+mbB3jFT6lvAgw==} + /@fastify/fast-json-stringify-compiler@4.3.0: + resolution: {integrity: sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==} dependencies: - fast-json-stringify: 5.4.0 + fast-json-stringify: 5.10.0 + dev: false - /@fastify/nextjs/9.2.0_next@12.3.4: + /@fastify/nextjs@9.2.0(next@12.3.4): resolution: {integrity: sha512-javnZvkO0+HLfuHYUqNF/14mE0T01gy2gkBCiJ2IFDIvpVhFzp65ElF3c7meGAF7Osqz//6useY04+vTIxGU3A==} peerDependencies: next: 12.x.x || 13.x.x dependencies: '@fastify/under-pressure': 8.1.0 fastify-plugin: 4.3.0 - next: 12.3.4_sfoxds7t5ydpegc3knd667wn6m + next: 12.3.4(@babel/core@7.23.7)(react-dom@17.0.2)(react@17.0.2) dev: true - /@fastify/under-pressure/8.1.0: + /@fastify/under-pressure@8.1.0: resolution: {integrity: sha512-2Nm0UyVxTdssvNTbYVZFSH4C2LwgQcphOxgX6hIQce8jH1sm1gx/wusDBr6+0lyzwE06V537kwA7JeAvysK3xw==} dependencies: - '@fastify/error': 3.0.0 + '@fastify/error': 3.4.1 fastify-plugin: 4.3.0 dev: true - /@graphql-codegen/core/2.6.8_graphql@16.6.0: + /@graphql-codegen/core@2.6.8(graphql@16.8.1): resolution: {integrity: sha512-JKllNIipPrheRgl+/Hm/xuWMw9++xNQ12XJR/OHHgFopOg4zmN3TdlRSyYcv/K90hCFkkIwhlHFUQTfKrm8rxQ==} peerDependencies: - graphql: '*' + 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': 3.1.1_graphql@16.6.0 - '@graphql-tools/schema': 9.0.12_graphql@16.6.0 - '@graphql-tools/utils': 9.2.0_graphql@16.6.0 - graphql: 16.6.0 + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) + '@graphql-tools/schema': 9.0.15(graphql@16.8.1) + '@graphql-tools/utils': 9.2.0(graphql@16.8.1) + graphql: 16.8.1 tslib: 2.4.1 dev: false - /@graphql-codegen/core/3.1.0_graphql@16.6.0: + /@graphql-codegen/core@3.1.0(graphql@16.8.1): resolution: {integrity: sha512-DH1/yaR7oJE6/B+c6ZF2Tbdh7LixF1K8L+8BoSubjNyQ8pNwR4a70mvc1sv6H7qgp6y1bPQ9tKE+aazRRshysw==} peerDependencies: - graphql: '*' + 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': 4.1.0_graphql@16.6.0 - '@graphql-tools/schema': 9.0.15_graphql@16.6.0 - '@graphql-tools/utils': 9.2.0_graphql@16.6.0 - graphql: 16.6.0 + '@graphql-codegen/plugin-helpers': 4.1.0(graphql@16.8.1) + '@graphql-tools/schema': 9.0.15(graphql@16.8.1) + '@graphql-tools/utils': 9.2.0(graphql@16.8.1) + graphql: 16.8.1 tslib: 2.5.0 - dev: true - - /@graphql-codegen/plugin-helpers/3.1.1_graphql@16.6.0: - resolution: {integrity: sha512-+V1WK4DUhejVSbkZrAsyv9gA4oQABVrtEUkT7vWq7gSf7Ln6OEM59lDUDsjp5wpLPTBIDJANbAe3qEd+iCB3Ow==} - peerDependencies: - graphql: '*' - dependencies: - '@graphql-tools/utils': 8.13.1_graphql@16.6.0 - change-case-all: 1.0.15 - common-tags: 1.8.2 - graphql: 16.6.0 - import-from: 4.0.0 - lodash: 4.17.21 - tslib: 2.4.1 dev: false - /@graphql-codegen/plugin-helpers/3.1.2_graphql@16.6.0: + /@graphql-codegen/plugin-helpers@3.1.2(graphql@16.8.1): resolution: {integrity: sha512-emOQiHyIliVOIjKVKdsI5MXj312zmRDwmHpyUTZMjfpvxq/UVAHUJIVdVf+lnjjrI+LXBTgMlTWTgHQfmICxjg==} peerDependencies: - graphql: '*' + 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': 9.2.0_graphql@16.6.0 + '@graphql-tools/utils': 9.2.0(graphql@16.8.1) change-case-all: 1.0.15 common-tags: 1.8.2 - graphql: 16.6.0 + graphql: 16.8.1 import-from: 4.0.0 lodash: 4.17.21 tslib: 2.4.1 dev: false - /@graphql-codegen/plugin-helpers/4.1.0_graphql@16.6.0: + /@graphql-codegen/plugin-helpers@4.1.0(graphql@16.8.1): resolution: {integrity: sha512-xvSHJb9OGb5CODIls0AI1rCenLz+FuiaNPCsfHMCNsLDjOZK2u0jAQ9zUBdc/Wb+21YXZujBCc0Vm1QX+Zz0nw==} peerDependencies: - graphql: '*' + 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': 9.2.0_graphql@16.6.0 + '@graphql-tools/utils': 9.2.0(graphql@16.8.1) change-case-all: 1.0.15 common-tags: 1.8.2 - graphql: 16.6.0 + graphql: 16.8.1 import-from: 4.0.0 lodash: 4.17.21 tslib: 2.5.0 - dev: true + dev: false - /@graphql-codegen/schema-ast/2.6.1_graphql@16.6.0: + /@graphql-codegen/schema-ast@2.6.1(graphql@16.8.1): resolution: {integrity: sha512-5TNW3b1IHJjCh07D2yQNGDQzUpUl2AD+GVe1Dzjqyx/d2Fn0TPMxLsHsKPS4Plg4saO8FK/QO70wLsP7fdbQ1w==} peerDependencies: - graphql: '*' + 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': 3.1.2_graphql@16.6.0 - '@graphql-tools/utils': 9.2.0_graphql@16.6.0 - graphql: 16.6.0 + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) + '@graphql-tools/utils': 9.2.0(graphql@16.8.1) + graphql: 16.8.1 tslib: 2.4.1 dev: false - /@graphql-codegen/schema-ast/3.0.1_graphql@16.6.0: + /@graphql-codegen/schema-ast@3.0.1(graphql@16.8.1): resolution: {integrity: sha512-rTKTi4XiW4QFZnrEqetpiYEWVsOFNoiR/v3rY9mFSttXFbIwNXPme32EspTiGWmEEdHY8UuTDtZN3vEcs/31zw==} peerDependencies: - graphql: '*' + 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': 4.1.0_graphql@16.6.0 - '@graphql-tools/utils': 9.2.0_graphql@16.6.0 - graphql: 16.6.0 + '@graphql-codegen/plugin-helpers': 4.1.0(graphql@16.8.1) + '@graphql-tools/utils': 9.2.0(graphql@16.8.1) + graphql: 16.8.1 tslib: 2.5.0 - dev: true + dev: false - /@graphql-codegen/typed-document-node/2.3.10_graphql@16.6.0: + /@graphql-codegen/typed-document-node@2.3.10(graphql@16.8.1): resolution: {integrity: sha512-FcEKubvEl2bHZG2N7u0AwioRYQmhBDRb/JXNBoNXjv9hg32juwejbilS9WWxgcxS13nPj14byEPfHs6GDrKZLw==} peerDependencies: - graphql: '*' + 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': 3.1.2_graphql@16.6.0 - '@graphql-codegen/visitor-plugin-common': 2.13.5_graphql@16.6.0 + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 2.13.5(graphql@16.8.1) auto-bind: 4.0.0 change-case-all: 1.0.15 - graphql: 16.6.0 + graphql: 16.8.1 tslib: 2.4.1 transitivePeerDependencies: - encoding - supports-color dev: false - /@graphql-codegen/typescript-operations/2.5.10_graphql@16.6.0: + /@graphql-codegen/typescript-operations@2.5.10(graphql@16.8.1): resolution: {integrity: sha512-N5H7JhcMRzjM2KdvCitqkOd4hphzD9q3NVWGLvBe3Xgqx5Cs3Y4GUcCJbRolSXdQcYBVgZpLZrUe/qoxwYyfeg==} peerDependencies: - graphql: '*' + 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': 3.1.2_graphql@16.6.0 - '@graphql-codegen/typescript': 2.8.8_graphql@16.6.0 - '@graphql-codegen/visitor-plugin-common': 2.13.5_graphql@16.6.0 + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) + '@graphql-codegen/typescript': 2.8.8(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 2.13.5(graphql@16.8.1) auto-bind: 4.0.0 - graphql: 16.6.0 + graphql: 16.8.1 tslib: 2.4.1 transitivePeerDependencies: - encoding - supports-color dev: false - /@graphql-codegen/typescript-resolvers/2.7.10_graphql@16.6.0: + /@graphql-codegen/typescript-resolvers@2.7.10(graphql@16.8.1): resolution: {integrity: sha512-MCts4Vq4l8j5zxbfSjm3bkqYOsMWF9yzzNakYSTWsQZqxqAggsiMz18GTdhQvWCtFt6eKYadVrX3WDZBLuAHOA==} peerDependencies: - graphql: '*' - dependencies: - '@graphql-codegen/plugin-helpers': 3.1.2_graphql@16.6.0 - '@graphql-codegen/typescript': 2.8.8_graphql@16.6.0 - '@graphql-codegen/visitor-plugin-common': 2.13.5_graphql@16.6.0 - '@graphql-tools/utils': 8.13.1_graphql@16.6.0 - auto-bind: 4.0.0 - graphql: 16.6.0 - tslib: 2.4.1 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /@graphql-codegen/typescript/2.8.5_graphql@16.6.0: - resolution: {integrity: sha512-5w3zNlnNKM9tI5ZRbhESmsJ4G16rSiFmNQX6Ot56fmcYUC6bnAt5fqvSqs2C+8fVGIIjeWuwjQA5Xn1VkaLY8A==} - peerDependencies: - graphql: '*' + 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': 3.1.2_graphql@16.6.0 - '@graphql-codegen/schema-ast': 2.6.1_graphql@16.6.0 - '@graphql-codegen/visitor-plugin-common': 2.13.5_graphql@16.6.0 + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) + '@graphql-codegen/typescript': 2.8.8(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 2.13.5(graphql@16.8.1) + '@graphql-tools/utils': 8.13.1(graphql@16.8.1) auto-bind: 4.0.0 - graphql: 16.6.0 + graphql: 16.8.1 tslib: 2.4.1 transitivePeerDependencies: - encoding - supports-color dev: false - /@graphql-codegen/typescript/2.8.8_graphql@16.6.0: + /@graphql-codegen/typescript@2.8.8(graphql@16.8.1): resolution: {integrity: sha512-A0oUi3Oy6+DormOlrTC4orxT9OBZkIglhbJBcDmk34jAKKUgesukXRd4yOhmTrnbchpXz2T8IAOFB3FWIaK4Rw==} peerDependencies: - graphql: '*' + graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-codegen/plugin-helpers': 3.1.2_graphql@16.6.0 - '@graphql-codegen/schema-ast': 2.6.1_graphql@16.6.0 - '@graphql-codegen/visitor-plugin-common': 2.13.8_graphql@16.6.0 + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) + '@graphql-codegen/schema-ast': 2.6.1(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 2.13.8(graphql@16.8.1) auto-bind: 4.0.0 - graphql: 16.6.0 + graphql: 16.8.1 tslib: 2.4.1 transitivePeerDependencies: - encoding - supports-color dev: false - /@graphql-codegen/typescript/3.0.2_graphql@16.6.0: + /@graphql-codegen/typescript@3.0.2(graphql@16.8.1): resolution: {integrity: sha512-qD6QkTB+2eJmIaZ6Tihv6HRz7daWWLz9uw5vwCmPeZN6XL2RINZGLkR7D8BQzLDlNGMrpQ4SeSM9o3ZALSCIuQ==} peerDependencies: - graphql: '*' + graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: - '@graphql-codegen/plugin-helpers': 4.1.0_graphql@16.6.0 - '@graphql-codegen/schema-ast': 3.0.1_graphql@16.6.0 - '@graphql-codegen/visitor-plugin-common': 3.0.2_graphql@16.6.0 + '@graphql-codegen/plugin-helpers': 4.1.0(graphql@16.8.1) + '@graphql-codegen/schema-ast': 3.0.1(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 3.0.2(graphql@16.8.1) auto-bind: 4.0.0 - graphql: 16.6.0 + graphql: 16.8.1 tslib: 2.5.0 transitivePeerDependencies: - encoding - supports-color - dev: true + dev: false - /@graphql-codegen/visitor-plugin-common/2.13.5_graphql@16.6.0: + /@graphql-codegen/visitor-plugin-common@2.13.5(graphql@16.8.1): resolution: {integrity: sha512-OV/mGnSvB/WkEqFu/3bPkAPDNRGRB3xONww5+06CObl383yGrasqM04shYYK4cpcCn9PVWFe8u0SLSEeGmMVrg==} peerDependencies: - graphql: '*' + 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': 3.1.2_graphql@16.6.0 - '@graphql-tools/optimize': 1.3.1_graphql@16.6.0 - '@graphql-tools/relay-operation-optimizer': 6.5.8_graphql@16.6.0 - '@graphql-tools/utils': 8.13.1_graphql@16.6.0 + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) + '@graphql-tools/optimize': 1.3.1(graphql@16.8.1) + '@graphql-tools/relay-operation-optimizer': 6.5.8(graphql@16.8.1) + '@graphql-tools/utils': 8.13.1(graphql@16.8.1) auto-bind: 4.0.0 change-case-all: 1.0.15 dependency-graph: 0.11.0 - graphql: 16.6.0 - graphql-tag: 2.12.6_graphql@16.6.0 + graphql: 16.8.1 + graphql-tag: 2.12.6(graphql@16.8.1) parse-filepath: 1.0.2 tslib: 2.4.1 transitivePeerDependencies: @@ -3448,20 +3937,20 @@ packages: - supports-color dev: false - /@graphql-codegen/visitor-plugin-common/2.13.8_graphql@16.6.0: + /@graphql-codegen/visitor-plugin-common@2.13.8(graphql@16.8.1): resolution: {integrity: sha512-IQWu99YV4wt8hGxIbBQPtqRuaWZhkQRG2IZKbMoSvh0vGeWb3dB0n0hSgKaOOxDY+tljtOf9MTcUYvJslQucMQ==} peerDependencies: - graphql: '*' + 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': 3.1.2_graphql@16.6.0 - '@graphql-tools/optimize': 1.3.1_graphql@16.6.0 - '@graphql-tools/relay-operation-optimizer': 6.5.8_graphql@16.6.0 - '@graphql-tools/utils': 9.2.0_graphql@16.6.0 + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) + '@graphql-tools/optimize': 1.3.1(graphql@16.8.1) + '@graphql-tools/relay-operation-optimizer': 6.5.8(graphql@16.8.1) + '@graphql-tools/utils': 9.2.0(graphql@16.8.1) auto-bind: 4.0.0 change-case-all: 1.0.15 dependency-graph: 0.11.0 - graphql: 16.6.0 - graphql-tag: 2.12.6_graphql@16.6.0 + graphql: 16.8.1 + graphql-tag: 2.12.6(graphql@16.8.1) parse-filepath: 1.0.2 tslib: 2.4.1 transitivePeerDependencies: @@ -3469,61 +3958,28 @@ packages: - supports-color dev: false - /@graphql-codegen/visitor-plugin-common/3.0.2_graphql@16.6.0: + /@graphql-codegen/visitor-plugin-common@3.0.2(graphql@16.8.1): resolution: {integrity: sha512-dKblRFrB0Fdl3+nPlzlLBka+TN/EGwr/q09mwry0H58z3j6gXkMbsdPr+dc8MhgOV7w/8egRvSPIvd7m6eFCnw==} peerDependencies: - graphql: '*' + 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': 4.1.0_graphql@16.6.0 - '@graphql-tools/optimize': 1.3.1_graphql@16.6.0 - '@graphql-tools/relay-operation-optimizer': 6.5.8_graphql@16.6.0 - '@graphql-tools/utils': 9.2.0_graphql@16.6.0 + '@graphql-codegen/plugin-helpers': 4.1.0(graphql@16.8.1) + '@graphql-tools/optimize': 1.3.1(graphql@16.8.1) + '@graphql-tools/relay-operation-optimizer': 6.5.8(graphql@16.8.1) + '@graphql-tools/utils': 9.2.0(graphql@16.8.1) auto-bind: 4.0.0 change-case-all: 1.0.15 dependency-graph: 0.11.0 - graphql: 16.6.0 - graphql-tag: 2.12.6_graphql@16.6.0 + graphql: 16.8.1 + graphql-tag: 2.12.6(graphql@16.8.1) parse-filepath: 1.0.2 tslib: 2.5.0 transitivePeerDependencies: - encoding - supports-color - dev: true - - /@graphql-ez/client/0.6.1_b243oerbkaq6iicamxlfxsskte: - resolution: {integrity: sha512-WdyK6Lqn7woRtZ6ccs+i8eLDKdFqwYpx4idsAk6hyXWrdR5SCVuuoziZZpFv+sQuIeR34SDpZGv3oxREaFWcag==} - peerDependencies: - '@graphql-typed-document-node/core': '*' - '@types/node': '*' - graphql: '*' - peerDependenciesMeta: - '@graphql-typed-document-node/core': - optional: true - dependencies: - '@graphql-ez/utils': 0.2.0_cqyb4buyc4habqgvcucexr22xm - '@graphql-typed-document-node/core': 3.2.0_graphql@16.6.0 - '@types/node': 18.15.5 - graphql: 16.6.0 - undici: 5.7.0 - dev: false - - /@graphql-ez/client/0.6.1_cqyb4buyc4habqgvcucexr22xm: - resolution: {integrity: sha512-WdyK6Lqn7woRtZ6ccs+i8eLDKdFqwYpx4idsAk6hyXWrdR5SCVuuoziZZpFv+sQuIeR34SDpZGv3oxREaFWcag==} - peerDependencies: - '@graphql-typed-document-node/core': '*' - '@types/node': '*' - graphql: '*' - peerDependenciesMeta: - '@graphql-typed-document-node/core': - optional: true - dependencies: - '@graphql-ez/utils': 0.2.0_cqyb4buyc4habqgvcucexr22xm - '@types/node': 18.15.5 - graphql: 16.6.0 - undici: 5.7.0 dev: false - /@graphql-ez/client/0.6.1_ecm5me3wxveow2jprdqx4kgwjq: + /@graphql-ez/client@0.6.1(@types/node@18.19.6)(graphql@16.8.1): resolution: {integrity: sha512-WdyK6Lqn7woRtZ6ccs+i8eLDKdFqwYpx4idsAk6hyXWrdR5SCVuuoziZZpFv+sQuIeR34SDpZGv3oxREaFWcag==} peerDependencies: '@graphql-typed-document-node/core': '*' @@ -3533,52 +3989,13 @@ packages: '@graphql-typed-document-node/core': optional: true dependencies: - '@graphql-ez/utils': 0.2.0_ddkhnomv6qakhz4wmciki3kakm - '@graphql-typed-document-node/core': 3.2.0_graphql@17.0.0-alpha.2 - '@types/node': 18.15.5 - graphql: 17.0.0-alpha.2 + '@graphql-ez/utils': 0.2.0(@types/node@18.19.6)(graphql@16.8.1) + '@types/node': 18.19.6 + graphql: 16.8.1 undici: 5.7.0 - dev: true - - /@graphql-ez/fastify-testing/0.4.0_ea5semnvare4dczwxuvgvhhrim: - resolution: {integrity: sha512-ZnrrF9A5RY72XTDt5YFsJLYK3jyZpPXRhzRvHjItM26skGAyHrSE3azgHznIVCWxvrZZb4jtu0yQRcAwPd9nuA==} - peerDependencies: - '@graphql-ez/fastify': 0.12.0 - fastify: ^4.7.0 - graphql: '*' - graphql-ez: ^0.16.0 - dependencies: - '@graphql-ez/client': 0.6.1_ecm5me3wxveow2jprdqx4kgwjq - '@graphql-ez/fastify': 0.12.0_sjoruv57pci442joaaplrlyrfa - '@graphql-ez/utils': 0.2.0_ddkhnomv6qakhz4wmciki3kakm - fastify: 4.11.0 - graphql: 17.0.0-alpha.2 - graphql-ez: 0.16.0_ddkhnomv6qakhz4wmciki3kakm - transitivePeerDependencies: - - '@graphql-typed-document-node/core' - - '@types/node' - dev: true - - /@graphql-ez/fastify-testing/0.4.0_gw55l7m33unpztkcavxnnvhm5q: - resolution: {integrity: sha512-ZnrrF9A5RY72XTDt5YFsJLYK3jyZpPXRhzRvHjItM26skGAyHrSE3azgHznIVCWxvrZZb4jtu0yQRcAwPd9nuA==} - peerDependencies: - '@graphql-ez/fastify': 0.12.0 - fastify: ^4.7.0 - graphql: '*' - graphql-ez: ^0.16.0 - dependencies: - '@graphql-ez/client': 0.6.1_cqyb4buyc4habqgvcucexr22xm - '@graphql-ez/fastify': 0.12.0_orbaahc6eekuqylvdxzf34kuru - '@graphql-ez/utils': 0.2.0_cqyb4buyc4habqgvcucexr22xm - fastify: 4.11.0 - graphql: 16.6.0 - graphql-ez: 0.16.0_cqyb4buyc4habqgvcucexr22xm - transitivePeerDependencies: - - '@graphql-typed-document-node/core' - - '@types/node' dev: false - /@graphql-ez/fastify-testing/0.4.0_zow4snlfvwzlxlnfckljwyv4aa: + /@graphql-ez/fastify-testing@0.4.0(@graphql-ez/fastify@0.12.0)(@types/node@18.19.6)(fastify@4.25.2)(graphql-ez@0.16.0)(graphql@16.8.1): resolution: {integrity: sha512-ZnrrF9A5RY72XTDt5YFsJLYK3jyZpPXRhzRvHjItM26skGAyHrSE3azgHznIVCWxvrZZb4jtu0yQRcAwPd9nuA==} peerDependencies: '@graphql-ez/fastify': 0.12.0 @@ -3586,40 +4003,18 @@ packages: graphql: '*' graphql-ez: ^0.16.0 dependencies: - '@graphql-ez/client': 0.6.1_b243oerbkaq6iicamxlfxsskte - '@graphql-ez/fastify': 0.12.0_orbaahc6eekuqylvdxzf34kuru - '@graphql-ez/utils': 0.2.0_cqyb4buyc4habqgvcucexr22xm - fastify: 4.11.0 - graphql: 16.6.0 - graphql-ez: 0.16.0_cqyb4buyc4habqgvcucexr22xm + '@graphql-ez/client': 0.6.1(@types/node@18.19.6)(graphql@16.8.1) + '@graphql-ez/fastify': 0.12.0(@types/node@18.19.6)(fastify@4.25.2)(graphql-ez@0.16.0)(graphql@16.8.1) + '@graphql-ez/utils': 0.2.0(@types/node@18.19.6)(graphql@16.8.1) + fastify: 4.25.2 + graphql: 16.8.1 + graphql-ez: 0.16.0(@types/node@18.19.6)(graphql@16.8.1) transitivePeerDependencies: - '@graphql-typed-document-node/core' - '@types/node' dev: false - /@graphql-ez/fastify/0.12.0_orbaahc6eekuqylvdxzf34kuru: - resolution: {integrity: sha512-U4o9qwkvnOrwf6H9Z5CUtJZAslFNy1EqYBghKAtM5111pXRyIAD3Hgy/M3GrH9EeyCiY0v8y+N2u9dtOppMyng==} - engines: {node: '>=14.13.1'} - peerDependencies: - '@types/node': '*' - fastify: ^4.7.0 - graphql: '*' - graphql-ez: ^0.16.0 - peerDependenciesMeta: - fastify: - optional: true - graphql: - optional: true - dependencies: - '@fastify/cors': 8.2.0 - '@graphql-ez/utils': 0.2.0_cqyb4buyc4habqgvcucexr22xm - '@types/node': 18.15.5 - fastify: 4.11.0 - graphql: 16.6.0 - graphql-ez: 0.16.0_cqyb4buyc4habqgvcucexr22xm - dev: false - - /@graphql-ez/fastify/0.12.0_sjoruv57pci442joaaplrlyrfa: + /@graphql-ez/fastify@0.12.0(@types/node@18.19.6)(fastify@4.25.2)(graphql-ez@0.16.0)(graphql@16.8.1): resolution: {integrity: sha512-U4o9qwkvnOrwf6H9Z5CUtJZAslFNy1EqYBghKAtM5111pXRyIAD3Hgy/M3GrH9EeyCiY0v8y+N2u9dtOppMyng==} engines: {node: '>=14.13.1'} peerDependencies: @@ -3634,54 +4029,32 @@ packages: optional: true dependencies: '@fastify/cors': 8.2.0 - '@graphql-ez/utils': 0.2.0_ddkhnomv6qakhz4wmciki3kakm - '@types/node': 18.15.5 - fastify: 4.11.0 - graphql: 17.0.0-alpha.2 - graphql-ez: 0.16.0_ddkhnomv6qakhz4wmciki3kakm - dev: true - - /@graphql-ez/nextjs/0.11.0_c5xlb76vribzm5vdd4qmd4rlja: - resolution: {integrity: sha512-oZNeAu8Kbi0QmGpyK17QIjS5Vxzn6smCjZ4qE5+OKmAeJ8iSlTJlZtUn+ALEG0DzEIFg2nPM5xTAMlKO47WdCg==} - engines: {node: '>=14.13.1'} - peerDependencies: - '@types/node': '*' - graphql: '*' - graphql-ez: ^0.16.0 - next: ^12.3.4 - peerDependenciesMeta: - graphql: - optional: true - next: - optional: true - dependencies: - '@types/cors': 2.8.13 - '@types/node': 18.15.5 - cors: 2.8.5 - graphql: 16.6.0 - graphql-ez: 0.16.0_cqyb4buyc4habqgvcucexr22xm - next: 12.3.4_sfoxds7t5ydpegc3knd667wn6m + '@graphql-ez/utils': 0.2.0(@types/node@18.19.6)(graphql@16.8.1) + '@types/node': 18.19.6 + fastify: 4.25.2 + graphql: 16.8.1 + graphql-ez: 0.16.0(@types/node@18.19.6)(graphql@16.8.1) dev: false - /@graphql-ez/plugin-altair/0.11.0_ybhfgsau5tg5dsvtpo567urcge: + /@graphql-ez/plugin-altair@0.11.0(@types/node@18.19.6)(graphql-ez@0.16.0)(graphql@16.8.1): resolution: {integrity: sha512-7z567qkqwjhfm7yppCrH68CuPf6/89VX7FH+OlmXcl/v0Tif97pwhcs6LUFTTvBuIYyFOKKSinUBEGTqFHZMwg==} engines: {node: '>=14.13.1'} peerDependencies: '@types/node': '*' graphql-ez: ^0.16.0 dependencies: - '@graphql-ez/utils': 0.2.0_cqyb4buyc4habqgvcucexr22xm - '@types/node': 18.15.5 + '@graphql-ez/utils': 0.2.0(@types/node@18.19.6)(graphql@16.8.1) + '@types/node': 18.19.6 altair-static-slim: 5.0.9 cross-undici-fetch: 0.4.14 - graphql-ez: 0.16.0_cqyb4buyc4habqgvcucexr22xm + graphql-ez: 0.16.0(@types/node@18.19.6)(graphql@16.8.1) mime-types: 2.1.35 transitivePeerDependencies: - encoding - graphql dev: false - /@graphql-ez/plugin-codegen/0.8.0_ybhfgsau5tg5dsvtpo567urcge: + /@graphql-ez/plugin-codegen@0.8.0(@types/node@18.19.6)(graphql-ez@0.16.0)(graphql@16.8.1): resolution: {integrity: sha512-dv0nW2PAG4EqaFwLn0lmm45rPtQ7yqfP4ega3J3JPHM1qUCBNi/QBTk2X2V3k2bBLCyDzDtXiNNDKgu9ILKW0w==} engines: {node: '>=14.13.1'} peerDependencies: @@ -3691,56 +4064,42 @@ packages: graphql: optional: true dependencies: - '@graphql-codegen/core': 2.6.8_graphql@16.6.0 - '@graphql-codegen/plugin-helpers': 3.1.1_graphql@16.6.0 - '@graphql-codegen/typed-document-node': 2.3.10_graphql@16.6.0 - '@graphql-codegen/typescript': 2.8.5_graphql@16.6.0 - '@graphql-codegen/typescript-operations': 2.5.10_graphql@16.6.0 - '@graphql-codegen/typescript-resolvers': 2.7.10_graphql@16.6.0 - '@graphql-ez/utils': 0.2.0_cqyb4buyc4habqgvcucexr22xm - '@graphql-tools/graphql-file-loader': 7.5.13_graphql@16.6.0 - '@graphql-tools/load': 7.8.8_graphql@16.6.0 - '@graphql-tools/utils': 9.1.3_graphql@16.6.0 - graphql: 16.6.0 - graphql-ez: 0.16.0_cqyb4buyc4habqgvcucexr22xm + '@graphql-codegen/core': 2.6.8(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.8.1) + '@graphql-codegen/typed-document-node': 2.3.10(graphql@16.8.1) + '@graphql-codegen/typescript': 2.8.8(graphql@16.8.1) + '@graphql-codegen/typescript-operations': 2.5.10(graphql@16.8.1) + '@graphql-codegen/typescript-resolvers': 2.7.10(graphql@16.8.1) + '@graphql-ez/utils': 0.2.0(@types/node@18.19.6)(graphql@16.8.1) + '@graphql-tools/graphql-file-loader': 7.5.13(graphql@16.8.1) + '@graphql-tools/load': 7.8.8(graphql@16.8.1) + '@graphql-tools/utils': 9.2.0(graphql@16.8.1) + graphql: 16.8.1 + graphql-ez: 0.16.0(@types/node@18.19.6)(graphql@16.8.1) mkdirp: 1.0.4 - prettier: 2.8.1 + prettier: 2.8.6 transitivePeerDependencies: - '@types/node' - encoding - supports-color dev: false - /@graphql-ez/plugin-dataloader/0.8.0_4khj4v5e4vfkswp32g74ajok3i: + /@graphql-ez/plugin-dataloader@0.8.0(@envelop/core@3.0.6)(graphql-ez@0.16.0)(graphql@16.8.1): resolution: {integrity: sha512-tg+y2qvNgiXXVd9/nPLh0900LG3rr2Zetmf1MmVo/lpEslt3LvnxOoZ+os41IkaugUAoWE5SqeVsZWryFNQKaw==} engines: {node: '>=14.13.1'} peerDependencies: graphql-ez: ^0.16.0 dependencies: - '@envelop/dataloader': 4.0.4_dataloader@2.1.0 - '@envelop/execute-subscription-event': 3.0.4_graphql@16.6.0 + '@envelop/dataloader': 4.0.4(@envelop/core@3.0.6)(dataloader@2.1.0) + '@envelop/execute-subscription-event': 3.0.4(@envelop/core@3.0.6)(graphql@16.8.1) dataloader: 2.1.0 - graphql-ez: 0.16.0_cqyb4buyc4habqgvcucexr22xm + graphql-ez: 0.16.0(@types/node@18.19.6)(graphql@16.8.1) transitivePeerDependencies: - '@envelop/core' - graphql dev: false - /@graphql-ez/plugin-graphiql/0.12.0_ybhfgsau5tg5dsvtpo567urcge: - resolution: {integrity: sha512-d2MPAi6MXaDzKPr/Ai2+GNn/6mQKoNfbeQLudIzNOr1/zc00tO5HAgDaO8WwhHTDfCX+GwFw2Bgr4ZOU3lv+Uw==} - engines: {node: '>=14.13.1'} - peerDependencies: - graphql-ez: ^0.16.0 - dependencies: - '@graphql-ez/utils': 0.2.0_cqyb4buyc4habqgvcucexr22xm - '@pablosz/graphql-helix-graphiql': 4.2.2_cqyb4buyc4habqgvcucexr22xm - graphql-ez: 0.16.0_cqyb4buyc4habqgvcucexr22xm - transitivePeerDependencies: - - '@types/node' - - graphql - dev: false - - /@graphql-ez/plugin-schema/0.9.0_ybhfgsau5tg5dsvtpo567urcge: + /@graphql-ez/plugin-schema@0.9.0(@types/node@18.19.6)(graphql-ez@0.16.0)(graphql@16.8.1): resolution: {integrity: sha512-53qxFKiZcDQyyu25mkCIicy1pAfSPca2hgTHWYsS1SRkrIiGMK3tQ/WRkFE6FTOfgnrh6Inx4PA0YEVDWqZCow==} engines: {node: '>=14.13.1'} peerDependencies: @@ -3750,16 +4109,16 @@ packages: graphql: optional: true dependencies: - '@graphql-ez/utils': 0.2.0_cqyb4buyc4habqgvcucexr22xm - '@graphql-tools/schema': 9.0.12_graphql@16.6.0 - '@graphql-tools/utils': 9.1.3_graphql@16.6.0 - graphql: 16.6.0 - graphql-ez: 0.16.0_cqyb4buyc4habqgvcucexr22xm + '@graphql-ez/utils': 0.2.0(@types/node@18.19.6)(graphql@16.8.1) + '@graphql-tools/schema': 9.0.15(graphql@16.8.1) + '@graphql-tools/utils': 9.2.0(graphql@16.8.1) + graphql: 16.8.1 + graphql-ez: 0.16.0(@types/node@18.19.6)(graphql@16.8.1) transitivePeerDependencies: - '@types/node' dev: false - /@graphql-ez/plugin-upload/0.8.0_kjoqpzaqt57iapo3yu2w2aeoce: + /@graphql-ez/plugin-upload@0.8.0(@types/graphql-upload@16.0.0)(@types/node@18.19.6)(graphql-ez@0.16.0)(graphql-upload@13.0.0)(graphql@16.8.1): resolution: {integrity: sha512-R/cE1vT5kZxWe4EpuwV15znWU+GSu4KsUIgdCUYcE897XO1O9+Iadn4K/RyPuRY3tv//6+7Bj5gKruJaFgmsbg==} engines: {node: '>=14.13.1'} peerDependencies: @@ -3773,16 +4132,16 @@ packages: graphql-upload: optional: true dependencies: - '@graphql-ez/utils': 0.2.0_cqyb4buyc4habqgvcucexr22xm + '@graphql-ez/utils': 0.2.0(@types/node@18.19.6)(graphql@16.8.1) '@types/graphql-upload': 16.0.0 - graphql: 16.6.0 - graphql-ez: 0.16.0_cqyb4buyc4habqgvcucexr22xm - graphql-upload: 16.0.2_graphql@16.6.0 + graphql: 16.8.1 + graphql-ez: 0.16.0(@types/node@18.19.6)(graphql@16.8.1) + graphql-upload: 13.0.0(graphql@16.8.1) transitivePeerDependencies: - '@types/node' dev: false - /@graphql-ez/plugin-websockets/0.11.0_ybhfgsau5tg5dsvtpo567urcge: + /@graphql-ez/plugin-websockets@0.11.0(@types/node@18.19.6)(bufferutil@4.0.7)(graphql-ez@0.16.0)(graphql@16.8.1)(utf-8-validate@6.0.3): resolution: {integrity: sha512-jtvw5o3rw3Y6JNFfl+CoybQWdzqy0ml+eHNelHEd1Jd1b/Jbsc9RsIyOHE6uRqOxQhsBi6/1HL+nJCUuW+/n9A==} engines: {node: '>=14.13.1'} peerDependencies: @@ -3792,395 +4151,270 @@ packages: graphql: optional: true dependencies: - '@graphql-ez/utils': 0.2.0_cqyb4buyc4habqgvcucexr22xm - '@types/ws': 8.5.3 - graphql: 16.6.0 - graphql-ez: 0.16.0_cqyb4buyc4habqgvcucexr22xm - graphql-ws: 5.11.2_graphql@16.6.0 - subscriptions-transport-ws-envelop: 2.0.2_graphql@16.6.0+ws@8.11.0 - ws: 8.11.0 + '@graphql-ez/utils': 0.2.0(@types/node@18.19.6)(graphql@16.8.1) + '@types/ws': 8.5.4 + graphql: 16.8.1 + graphql-ez: 0.16.0(@types/node@18.19.6)(graphql@16.8.1) + graphql-ws: 5.14.3(graphql@16.8.1) + subscriptions-transport-ws-envelop: 2.0.2(graphql@16.8.1)(ws@8.13.0) + ws: 8.13.0(bufferutil@4.0.7)(utf-8-validate@6.0.3) transitivePeerDependencies: - '@types/node' - bufferutil - utf-8-validate - /@graphql-ez/utils/0.2.0_cqyb4buyc4habqgvcucexr22xm: - resolution: {integrity: sha512-oYsmJPG6Ru1ODKni5QvtbBh6OhofIm+jRMTaGL2lZo9ZXqj2WFm4lI4heKTiJQv/VOqKpXOVFS38FvnJzW15Aw==} - peerDependencies: - '@types/node': '*' - graphql: '*' - dependencies: - '@types/node': 18.15.5 - graphql: 16.6.0 - - /@graphql-ez/utils/0.2.0_ddkhnomv6qakhz4wmciki3kakm: + /@graphql-ez/utils@0.2.0(@types/node@18.19.6)(graphql@16.8.1): resolution: {integrity: sha512-oYsmJPG6Ru1ODKni5QvtbBh6OhofIm+jRMTaGL2lZo9ZXqj2WFm4lI4heKTiJQv/VOqKpXOVFS38FvnJzW15Aw==} peerDependencies: '@types/node': '*' graphql: '*' dependencies: - '@types/node': 18.15.5 - graphql: 17.0.0-alpha.2 - dev: true + '@types/node': 18.19.6 + graphql: 16.8.1 - /@graphql-tools/batch-execute/8.5.16_graphql@16.6.0: + /@graphql-tools/batch-execute@8.5.16(graphql@16.8.1): resolution: {integrity: sha512-x/gXA6R1Q/qigT5LDesZYemErzFYvBBuTaVgiIJuE2wG6oMV1cln0O35Z7WVQw6H3I4vF7cCG7c7wKSoC+3z4Q==} peerDependencies: - graphql: '*' + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 9.2.0_graphql@16.6.0 + '@graphql-tools/utils': 9.2.0(graphql@16.8.1) dataloader: 2.1.0 - graphql: 16.6.0 + graphql: 16.8.1 tslib: 2.5.0 value-or-promise: 1.0.12 - dev: true + dev: false - /@graphql-tools/delegate/9.0.25_graphql@16.6.0: + /@graphql-tools/delegate@9.0.25(graphql@16.8.1): resolution: {integrity: sha512-M7DMrPx8uEjXUshkki0ufcL//9Dj12eR3vykvteFB6odYL9cX5dhZC9l1D2IdQRuHzLMskhkhRtfnXRoa82KTA==} peerDependencies: - graphql: '*' + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/batch-execute': 8.5.16_graphql@16.6.0 - '@graphql-tools/executor': 0.0.13_graphql@16.6.0 - '@graphql-tools/schema': 9.0.15_graphql@16.6.0 - '@graphql-tools/utils': 9.2.0_graphql@16.6.0 + '@graphql-tools/batch-execute': 8.5.16(graphql@16.8.1) + '@graphql-tools/executor': 0.0.13(graphql@16.8.1) + '@graphql-tools/schema': 9.0.15(graphql@16.8.1) + '@graphql-tools/utils': 9.2.0(graphql@16.8.1) dataloader: 2.1.0 - graphql: 16.6.0 + graphql: 16.8.1 tslib: 2.5.0 value-or-promise: 1.0.12 - dev: true + dev: false - /@graphql-tools/executor/0.0.13_graphql@16.6.0: + /@graphql-tools/executor@0.0.13(graphql@16.8.1): resolution: {integrity: sha512-bZ7QdUV5URLCjD/WuDkvyROYoDVoueTN5W1PatkcN949lwIwEKXUW6y3gRSpiZjXw8IH4/NmN3xPk10OT1emRw==} peerDependencies: - graphql: '*' + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 9.2.0_graphql@16.6.0 - '@graphql-typed-document-node/core': 3.1.1_graphql@16.6.0 + '@graphql-tools/utils': 9.2.0(graphql@16.8.1) + '@graphql-typed-document-node/core': 3.1.1(graphql@16.8.1) '@repeaterjs/repeater': 3.0.4 - graphql: 16.6.0 + graphql: 16.8.1 tslib: 2.5.0 value-or-promise: 1.0.12 - dev: true + dev: false - /@graphql-tools/graphql-file-loader/7.5.13_graphql@16.6.0: + /@graphql-tools/graphql-file-loader@7.5.13(graphql@16.8.1): resolution: {integrity: sha512-VWFVnw3aB6sykGfpb/Dn3sxQswqvp2FsVwDy8ubH1pgLuxlDuurhHjRHvMG2+p7IaHC7q8T3Vk/rLtZftrwOBQ==} peerDependencies: - graphql: '*' + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/import': 6.7.14_graphql@16.6.0 - '@graphql-tools/utils': 9.1.3_graphql@16.6.0 + '@graphql-tools/import': 6.7.14(graphql@16.8.1) + '@graphql-tools/utils': 9.1.3(graphql@16.8.1) globby: 11.1.0 - graphql: 16.6.0 + graphql: 16.8.1 tslib: 2.5.0 unixify: 1.0.0 dev: false - /@graphql-tools/import/6.7.14_graphql@16.6.0: + /@graphql-tools/import@6.7.14(graphql@16.8.1): resolution: {integrity: sha512-lRX/MHM0Km497kg4VXMvtV1DeG/AfPJFO2ovaL0kDujWEdyCsWxsB4whY7nPeiNaPA/nT3mQ8MU7yFzVjogF/Q==} peerDependencies: - graphql: '*' + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 9.1.3_graphql@16.6.0 - graphql: 16.6.0 + '@graphql-tools/utils': 9.1.3(graphql@16.8.1) + graphql: 16.8.1 resolve-from: 5.0.0 tslib: 2.5.0 dev: false - /@graphql-tools/load/7.8.8_graphql@16.6.0: + /@graphql-tools/load@7.8.8(graphql@16.8.1): resolution: {integrity: sha512-gMuQdO2jXmI0BNUc1MafxRQTWVMUtuH500pZAQtOdDdNJppV7lJdY6mMhITQ2qnhYDuMrcZPHhIkcftyQfkgUg==} peerDependencies: - graphql: '*' + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/schema': 9.0.12_graphql@16.6.0 - '@graphql-tools/utils': 9.1.3_graphql@16.6.0 - graphql: 16.6.0 + '@graphql-tools/schema': 9.0.12(graphql@16.8.1) + '@graphql-tools/utils': 9.1.3(graphql@16.8.1) + graphql: 16.8.1 p-limit: 3.1.0 tslib: 2.5.0 dev: false - /@graphql-tools/merge/8.3.14_graphql@16.6.0: + /@graphql-tools/merge@8.3.14(graphql@16.8.1): resolution: {integrity: sha512-zV0MU1DnxJLIB0wpL4N3u21agEiYFsjm6DI130jqHpwF0pR9HkF+Ni65BNfts4zQelP0GjkHltG+opaozAJ1NA==} peerDependencies: - graphql: '*' + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 9.1.3_graphql@16.6.0 - graphql: 16.6.0 + '@graphql-tools/utils': 9.1.3(graphql@16.8.1) + graphql: 16.8.1 tslib: 2.5.0 dev: false - /@graphql-tools/merge/8.3.17_graphql@16.6.0: + /@graphql-tools/merge@8.3.17(graphql@16.8.1): resolution: {integrity: sha512-CLzz49lc6BavPhH9gPRm0sJeNA7kC/tF/jLUTQsyef6xj82Jw3rqIJ9PE+bk1cqPCOG01WLOfquBu445OMDO2g==} peerDependencies: - graphql: '*' + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 9.2.0_graphql@16.6.0 - graphql: 16.6.0 + '@graphql-tools/utils': 9.2.0(graphql@16.8.1) + graphql: 16.8.1 tslib: 2.5.0 - dev: true + dev: false - /@graphql-tools/optimize/1.3.1_graphql@16.6.0: + /@graphql-tools/optimize@1.3.1(graphql@16.8.1): resolution: {integrity: sha512-5j5CZSRGWVobt4bgRRg7zhjPiSimk+/zIuColih8E8DxuFOaJ+t0qu7eZS5KXWBkjcd4BPNuhUPpNlEmHPqVRQ==} peerDependencies: - graphql: '*' + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - graphql: 16.6.0 + graphql: 16.8.1 tslib: 2.5.0 + dev: false - /@graphql-tools/relay-operation-optimizer/6.5.8_graphql@16.6.0: + /@graphql-tools/relay-operation-optimizer@6.5.8(graphql@16.8.1): resolution: {integrity: sha512-TQAO3i9/VlW7+4Q6E2BKWdEx+BkixHcjuwJLI59Eu4GJVETNi05Vsup4y5tr0kbtQU/oTGrYsCRIe0ssQ81jMQ==} peerDependencies: - graphql: '*' + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@ardatan/relay-compiler': 12.0.0_graphql@16.6.0 - '@graphql-tools/utils': 8.13.1_graphql@16.6.0 - graphql: 16.6.0 + '@ardatan/relay-compiler': 12.0.0(graphql@16.8.1) + '@graphql-tools/utils': 8.13.1(graphql@16.8.1) + graphql: 16.8.1 tslib: 2.5.0 transitivePeerDependencies: - encoding - supports-color + dev: false - /@graphql-tools/schema/9.0.12_graphql@16.6.0: + /@graphql-tools/schema@9.0.12(graphql@16.8.1): resolution: {integrity: sha512-DmezcEltQai0V1y96nwm0Kg11FDS/INEFekD4nnVgzBqawvznWqK6D6bujn+cw6kivoIr3Uq//QmU/hBlBzUlQ==} peerDependencies: - graphql: '*' + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/merge': 8.3.14_graphql@16.6.0 - '@graphql-tools/utils': 9.1.3_graphql@16.6.0 - graphql: 16.6.0 + '@graphql-tools/merge': 8.3.14(graphql@16.8.1) + '@graphql-tools/utils': 9.1.3(graphql@16.8.1) + graphql: 16.8.1 tslib: 2.5.0 value-or-promise: 1.0.11 dev: false - /@graphql-tools/schema/9.0.15_graphql@16.6.0: + /@graphql-tools/schema@9.0.15(graphql@16.8.1): resolution: {integrity: sha512-p2DbpkOBcsi+yCEjwoS+r4pJ5z+3JjlJdhbPkCwC4q8lGf5r93dVYrExOrqGKTU5kxLXI/mxabSxcunjNIsDIg==} peerDependencies: - graphql: '*' + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/merge': 8.3.17_graphql@16.6.0 - '@graphql-tools/utils': 9.2.0_graphql@16.6.0 - graphql: 16.6.0 + '@graphql-tools/merge': 8.3.17(graphql@16.8.1) + '@graphql-tools/utils': 9.2.0(graphql@16.8.1) + graphql: 16.8.1 tslib: 2.5.0 value-or-promise: 1.0.12 - dev: true + dev: false - /@graphql-tools/utils/8.13.1_graphql@16.6.0: + /@graphql-tools/utils@8.13.1(graphql@16.8.1): resolution: {integrity: sha512-qIh9yYpdUFmctVqovwMdheVNJqFh+DQNWIhX87FJStfXYnmweBUDATok9fWPleKeFwxnW8IapKmY8m8toJEkAw==} peerDependencies: - graphql: '*' + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - graphql: 16.6.0 + graphql: 16.8.1 tslib: 2.5.0 + dev: false - /@graphql-tools/utils/9.1.3_graphql@16.6.0: + /@graphql-tools/utils@9.1.3(graphql@16.8.1): resolution: {integrity: sha512-bbJyKhs6awp1/OmP+WKA1GOyu9UbgZGkhIj5srmiMGLHohEOKMjW784Sk0BZil1w2x95UPu0WHw6/d/HVCACCg==} peerDependencies: - graphql: '*' + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - graphql: 16.6.0 + graphql: 16.8.1 tslib: 2.5.0 dev: false - /@graphql-tools/utils/9.2.0_graphql@16.6.0: + /@graphql-tools/utils@9.2.0(graphql@16.8.1): resolution: {integrity: sha512-s3lEG1iYkyYEnKCWrIFECX3XH2wmZvbg6Ir3udCvIDynq+ydaO7JQXobclpPtwSJtjlS353haF//6V7mnBQ4bg==} peerDependencies: - graphql: '*' + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-typed-document-node/core': 3.2.0_graphql@16.6.0 - graphql: 16.6.0 + '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + graphql: 16.8.1 tslib: 2.5.0 + dev: false - /@graphql-tools/wrap/9.3.4_graphql@16.6.0: + /@graphql-tools/wrap@9.3.4(graphql@16.8.1): resolution: {integrity: sha512-MJY6lZqi+j96izjOYOLk5fys34oiLt7U34SQ4Wd6V/sy1utVMbh2H7XiZAuDJ38JIKmr72qN7kLgNcnNOxXjHQ==} peerDependencies: - graphql: '*' + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/delegate': 9.0.25_graphql@16.6.0 - '@graphql-tools/schema': 9.0.15_graphql@16.6.0 - '@graphql-tools/utils': 9.2.0_graphql@16.6.0 - graphql: 16.6.0 + '@graphql-tools/delegate': 9.0.25(graphql@16.8.1) + '@graphql-tools/schema': 9.0.15(graphql@16.8.1) + '@graphql-tools/utils': 9.2.0(graphql@16.8.1) + graphql: 16.8.1 tslib: 2.5.0 value-or-promise: 1.0.12 - dev: true + dev: false - /@graphql-typed-document-node/core/3.1.1_graphql@16.6.0: + /@graphql-typed-document-node/core@3.1.1(graphql@16.8.1): resolution: {integrity: sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg==} peerDependencies: - graphql: '*' - dependencies: - graphql: 16.6.0 - dev: true - - /@graphql-typed-document-node/core/3.2.0_graphql@16.6.0: - resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} - peerDependencies: - graphql: '*' + 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: 16.6.0 + graphql: 16.8.1 + dev: false - /@graphql-typed-document-node/core/3.2.0_graphql@17.0.0-alpha.2: + /@graphql-typed-document-node/core@3.2.0(graphql@16.8.1): resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} peerDependencies: - graphql: '*' - dependencies: - graphql: 17.0.0-alpha.2 - dev: true - - /@guild-docs/client/2.1.1_i7yamdcqgfam5kgmi3p25dpzk4: - resolution: {integrity: sha512-ikdcOnjeLvwih+V+WvDCKwP6u8752mVtzK1zjm01H7O+EosmiHHgilHPER7lvvwf7DJ/tBjZJJfqTtvSSrw1zQ==} - peerDependencies: - '@chakra-ui/icons': '*' - '@chakra-ui/react': '*' - '@chakra-ui/utils': '*' - '@emotion/react': '*' - '@mdx-js/react': ^2.1.1 - '@theguild/components': ^1.10.3 - framer-motion: '*' - next: '>=12.1.4' - next-i18next: '*' - next-seo: ^5.4.0 - react: '*' - react-dom: '*' - react-icons: ^4.3.1 - react-use: ^17.3.2 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true + 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: - '@chakra-ui/icons': 1.1.7_react@17.0.2 - '@chakra-ui/react': 1.8.9_pizuovw4rxklnfeqfejc6mp34q - '@chakra-ui/utils': 1.10.4 - '@emotion/react': 11.10.6_h7fc2el62uaa77gho3xhys6ola - '@guild-docs/mdx-remote': 2.0.2_utcvqzmoogmguqse2qaqwut5au - '@guild-docs/types': 2.0.0_plm56vbnmjadqejeinvs2v2cgm - '@mdx-js/react': 2.3.0_react@17.0.2 - '@theguild/components': 1.12.0_zsjcj4gvi24ks76nprapl4hsmq - framer-motion: 6.5.1_sfoxds7t5ydpegc3knd667wn6m - immer: 9.0.12 - mdx-mermaid: 1.3.2_mermaid@9.1.7+react@17.0.2 - mermaid: 9.1.7 - next: 12.3.4_sfoxds7t5ydpegc3knd667wn6m - next-i18next: 13.2.2_2ynmrf3odwjl6m6qwej4nuthfy - next-seo: 5.15.0_dwjfwrt6uv2f53xn6wotzcxyoa - nprogress: 0.2.0 - react: 17.0.2 - react-children-utilities: 2.7.0_react@17.0.2 - react-dom: 17.0.2_react@17.0.2 - react-icons: 4.8.0_react@17.0.2 - react-intersection-observer: 8.33.1_react@17.0.2 - react-sticky-box: 1.0.2_react@17.0.2 - react-use: 17.4.0_sfoxds7t5ydpegc3knd667wn6m - remove-markdown: 0.3.0 - use-immer: 0.6.0_immer@9.0.12+react@17.0.2 - zustand: 3.7.2_react@17.0.2 - transitivePeerDependencies: - - '@types/react' - - shiki - - supports-color - - unist-util-visit + graphql: 16.8.1 dev: false - /@guild-docs/mdx-remote/2.0.2_utcvqzmoogmguqse2qaqwut5au: - resolution: {integrity: sha512-g35B/Lo7s4l3HLcB9Z7jvTYrhMjCLMbfeS4i3rEhzhP54S0lvQ6gFTbVY25nDGZjZGMgMpkykY4Rk/p73UF2qQ==} - peerDependencies: - '@mdx-js/react': ^2.1.1 - react: '*' - dependencies: - '@babel/code-frame': 7.16.7 - '@guild-docs/types': 3.0.0_plm56vbnmjadqejeinvs2v2cgm - '@mdx-js/mdx': 2.1.1 - '@mdx-js/react': 2.3.0_react@17.0.2 - '@stefanprobst/rehype-shiki': 2.2.0_shiki@0.12.1 - react: 17.0.2 - remark-gfm: 3.0.1 - unified: 10.1.2 - unist-util-remove: 3.1.0 - vfile: 5.3.2 - vfile-matter: 3.0.1 - transitivePeerDependencies: - - '@chakra-ui/react' - - '@types/react' - - next-i18next - - shiki - - supports-color - dev: false + /@hapi/hoek@9.3.0: + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + dev: true - /@guild-docs/server/4.0.0_vunfziydkmle7wbsgwsinw3tpa: - resolution: {integrity: sha512-LlDr4U8LMwoE3LEmbMgUXlmFBUdHVKzGIOofKG1SR6VNwZEQ8/qAR5eEIdl3xA5VyOCs4PJ0lDJg5pzoECxq8w==} - peerDependencies: - next: '>=12.1.5' - next-i18next: '*' - react: '*' - react-dom: '*' - shiki: '*' + /@hapi/topo@5.1.0: + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} dependencies: - '@guild-docs/mdx-remote': 2.0.2_utcvqzmoogmguqse2qaqwut5au - '@guild-docs/types': 3.0.0_plm56vbnmjadqejeinvs2v2cgm - '@stefanprobst/remark-shiki': 2.1.0_shiki@0.12.1 - github-slugger: 1.4.0 - globby: 13.1.1 - gray-matter: 4.0.3 - next: 12.3.4_sfoxds7t5ydpegc3knd667wn6m - next-i18next: 13.2.2_2ynmrf3odwjl6m6qwej4nuthfy - react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 - rehype-slug: 5.0.1 - remark-emoji: 3.0.2 - shiki: 0.12.1 - tiny-lru: 8.0.2 - undici: 5.7.0 - transitivePeerDependencies: - - '@chakra-ui/react' - - '@mdx-js/react' - - '@types/react' - - supports-color - dev: false + '@hapi/hoek': 9.3.0 + dev: true - /@guild-docs/types/2.0.0_plm56vbnmjadqejeinvs2v2cgm: - resolution: {integrity: sha512-BeObMB7WokzcFO5quSWOOouJL96zneEzE0VS6rkZmg/bG/ukX0S6ODy4/UhxsWphxPYqQ68VAdM57WqTkdlamg==} - peerDependencies: - '@chakra-ui/react': '*' - '@types/react': '*' - next-i18next: '*' + /@humanwhocodes/config-array@0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} dependencies: - '@chakra-ui/react': 1.8.9_pizuovw4rxklnfeqfejc6mp34q - '@mdx-js/mdx': 2.1.5 - '@types/react': 17.0.53 - next-i18next: 13.2.2_2ynmrf3odwjl6m6qwej4nuthfy - unified: 10.1.2 + '@humanwhocodes/object-schema': 2.0.2 + debug: 4.3.4 + minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: false + dev: true - /@guild-docs/types/3.0.0_plm56vbnmjadqejeinvs2v2cgm: - resolution: {integrity: sha512-Vd8lgw+p7boag31I2hqpiCgp3aKsLgPNs2WNWx3MZA2bWJ7+qKKDvPP3KiioMGK5nadEq9SsCbG72ogBZbwpag==} - peerDependencies: - '@chakra-ui/react': '*' - '@types/react': '*' - next-i18next: '*' - dependencies: - '@chakra-ui/react': 1.8.9_pizuovw4rxklnfeqfejc6mp34q - '@mdx-js/mdx': 2.1.5 - '@types/react': 17.0.53 - next-i18next: 13.2.2_2ynmrf3odwjl6m6qwej4nuthfy - unified: 10.1.2 - transitivePeerDependencies: - - supports-color - dev: false + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true - /@hapi/hoek/9.3.0: - resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + /@humanwhocodes/object-schema@2.0.2: + resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} dev: true - /@hapi/topo/5.1.0: - resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} dependencies: - '@hapi/hoek': 9.3.0 + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.0.1 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 dev: true - /@istanbuljs/load-nyc-config/1.1.0: + /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} dependencies: @@ -4190,34 +4424,22 @@ packages: js-yaml: 3.14.1 resolve-from: 5.0.0 - /@istanbuljs/schema/0.1.3: + /@istanbuljs/schema@0.1.3: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - /@jest/console/29.4.2: - resolution: {integrity: sha512-0I/rEJwMpV9iwi9cDEnT71a5nNGK9lj8Z4+1pRAU2x/thVXCDnaTGrvxyK+cAqZTFVFCiR+hfVrP4l2m+dCmQg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.5.0 - '@types/node': 18.15.5 - chalk: 4.1.2 - jest-message-util: 29.5.0 - jest-util: 29.5.0 - slash: 3.0.0 - dev: false - - /@jest/console/29.5.0: + /@jest/console@29.5.0: resolution: {integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.15.5 + '@types/node': 18.19.6 chalk: 4.1.2 jest-message-util: 29.5.0 jest-util: 29.5.0 slash: 3.0.0 - /@jest/core/29.5.0: + /@jest/core@29.5.0(ts-node@10.9.1): resolution: {integrity: sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -4231,14 +4453,14 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.5 + '@types/node': 18.19.6 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.7.1 exit: 0.1.2 graceful-fs: 4.2.10 jest-changed-files: 29.5.0 - jest-config: 29.5.0_@types+node@18.15.5 + jest-config: 29.5.0(@types/node@18.19.6)(ts-node@10.9.1) jest-haste-map: 29.5.0 jest-message-util: 29.5.0 jest-regex-util: 29.4.3 @@ -4258,64 +4480,22 @@ packages: - supports-color - ts-node - /@jest/core/29.5.0_ts-node@10.9.1: - resolution: {integrity: sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==} + /@jest/environment@29.5.0: + resolution: {integrity: sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==} 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.5.0 - '@jest/reporters': 29.5.0 - '@jest/test-result': 29.5.0 - '@jest/transform': 29.5.0 + '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.5 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.7.1 - exit: 0.1.2 - graceful-fs: 4.2.10 - jest-changed-files: 29.5.0 - jest-config: 29.5.0_757mb262zsxkcnuknwfdsckmku - jest-haste-map: 29.5.0 - jest-message-util: 29.5.0 - jest-regex-util: 29.4.3 - jest-resolve: 29.5.0 - jest-resolve-dependencies: 29.5.0 - jest-runner: 29.5.0 - jest-runtime: 29.5.0 - jest-snapshot: 29.5.0 - jest-util: 29.5.0 - jest-validate: 29.5.0 - jest-watcher: 29.5.0 - micromatch: 4.0.5 - pretty-format: 29.5.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - supports-color - - ts-node - dev: true - - /@jest/environment/29.5.0: - resolution: {integrity: sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/fake-timers': 29.5.0 - '@jest/types': 29.5.0 - '@types/node': 18.15.5 + '@types/node': 18.19.6 jest-mock: 29.5.0 - /@jest/expect-utils/29.5.0: + /@jest/expect-utils@29.5.0: resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.4.3 - /@jest/expect/29.5.0: + /@jest/expect@29.5.0: resolution: {integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -4324,18 +4504,18 @@ packages: transitivePeerDependencies: - supports-color - /@jest/fake-timers/29.5.0: + /@jest/fake-timers@29.5.0: resolution: {integrity: sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 '@sinonjs/fake-timers': 10.0.2 - '@types/node': 18.15.5 + '@types/node': 18.19.6 jest-message-util: 29.5.0 jest-mock: 29.5.0 jest-util: 29.5.0 - /@jest/globals/29.5.0: + /@jest/globals@29.5.0: resolution: {integrity: sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -4346,7 +4526,7 @@ packages: transitivePeerDependencies: - supports-color - /@jest/reporters/29.5.0: + /@jest/reporters@29.5.0: resolution: {integrity: sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -4361,7 +4541,7 @@ packages: '@jest/transform': 29.5.0 '@jest/types': 29.5.0 '@jridgewell/trace-mapping': 0.3.17 - '@types/node': 18.15.5 + '@types/node': 18.19.6 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -4382,13 +4562,13 @@ packages: transitivePeerDependencies: - supports-color - /@jest/schemas/29.4.3: + /@jest/schemas@29.4.3: resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@sinclair/typebox': 0.25.21 - /@jest/source-map/29.4.3: + /@jest/source-map@29.4.3: resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -4396,17 +4576,7 @@ packages: callsites: 3.1.0 graceful-fs: 4.2.10 - /@jest/test-result/29.4.0: - resolution: {integrity: sha512-EtRklzjpddZU/aBVxJqqejfzfOcnehmjNXufs6u6qwd05kkhXpAPhZdt8bLlQd7cA2nD+JqZQ5Dx9NX5Jh6mjA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/console': 29.4.2 - '@jest/types': 29.5.0 - '@types/istanbul-lib-coverage': 2.0.4 - collect-v8-coverage: 1.0.1 - dev: false - - /@jest/test-result/29.5.0: + /@jest/test-result@29.5.0: resolution: {integrity: sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -4415,7 +4585,7 @@ packages: '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 - /@jest/test-sequencer/29.5.0: + /@jest/test-sequencer@29.5.0: resolution: {integrity: sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -4424,11 +4594,11 @@ packages: jest-haste-map: 29.5.0 slash: 3.0.0 - /@jest/transform/29.5.0: + /@jest/transform@29.5.0: resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.19.6 + '@babel/core': 7.23.7 '@jest/types': 29.5.0 '@jridgewell/trace-mapping': 0.3.17 babel-plugin-istanbul: 6.1.1 @@ -4446,25 +4616,25 @@ packages: transitivePeerDependencies: - supports-color - /@jest/types/29.5.0: + /@jest/types@29.5.0: resolution: {integrity: sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/schemas': 29.4.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.15.5 + '@types/node': 18.19.6 '@types/yargs': 17.0.13 chalk: 4.1.2 - /@jridgewell/gen-mapping/0.1.1: + /@jridgewell/gen-mapping@0.1.1: resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.14 - /@jridgewell/gen-mapping/0.3.2: + /@jridgewell/gen-mapping@0.3.2: resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} engines: {node: '>=6.0.0'} dependencies: @@ -4472,43 +4642,42 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 '@jridgewell/trace-mapping': 0.3.17 - /@jridgewell/resolve-uri/3.1.0: + /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} - /@jridgewell/set-array/1.1.2: + /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - /@jridgewell/sourcemap-codec/1.4.14: + /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - /@jridgewell/trace-mapping/0.3.17: + /@jridgewell/trace-mapping@0.3.17: resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 - /@jridgewell/trace-mapping/0.3.9: + /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 - dev: true - /@manypkg/find-root/1.1.0: + /@manypkg/find-root@1.1.0: resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.23.8 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 dev: true - /@manypkg/get-packages/1.1.3: + /@manypkg/get-packages@1.1.3: resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.23.8 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 @@ -4516,65 +4685,7 @@ packages: read-yaml-file: 1.1.0 dev: true - /@mdx-js/mdx/2.1.1: - resolution: {integrity: sha512-SXC18cChut3F2zkVXwsb2no0fzTQ1z6swjK13XwFbF5QU/SFQM0orAItPypSdL3GvqYyzVJtz8UofzJhPEQtMw==} - dependencies: - '@types/estree-jsx': 0.0.1 - '@types/mdx': 2.0.3 - astring: 1.8.3 - estree-util-build-jsx: 2.2.0 - estree-util-is-identifier-name: 2.0.1 - estree-walker: 3.0.1 - hast-util-to-estree: 2.1.0 - markdown-extensions: 1.1.1 - periscopic: 3.0.4 - remark-mdx: 2.1.5 - remark-parse: 10.0.1 - remark-rehype: 10.1.0 - unified: 10.1.2 - unist-util-position-from-estree: 1.1.1 - unist-util-stringify-position: 3.0.2 - unist-util-visit: 4.1.1 - vfile: 5.3.2 - transitivePeerDependencies: - - supports-color - dev: false - - /@mdx-js/mdx/2.1.5: - resolution: {integrity: sha512-zEG0lt+Bl/r5U6e0TOS7qDbsXICtemfAPquxWFsMbdzrvlWaqMGemLl+sjVpqlyaaiCiGVQBSGdCk0t1qXjkQg==} - dependencies: - '@types/estree-jsx': 1.0.0 - '@types/mdx': 2.0.3 - estree-util-build-jsx: 2.2.0 - estree-util-is-identifier-name: 2.0.1 - estree-util-to-js: 1.1.0 - estree-walker: 3.0.1 - hast-util-to-estree: 2.1.0 - markdown-extensions: 1.1.1 - periscopic: 3.0.4 - remark-mdx: 2.1.5 - remark-parse: 10.0.1 - remark-rehype: 10.1.0 - unified: 10.1.2 - unist-util-position-from-estree: 1.1.1 - unist-util-stringify-position: 3.0.2 - unist-util-visit: 4.1.1 - vfile: 5.3.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@mdx-js/react/2.3.0_react@17.0.2: - resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==} - peerDependencies: - react: '>=16' - dependencies: - '@types/mdx': 2.0.3 - '@types/react': 17.0.53 - react: 17.0.2 - dev: false - - /@motionone/animation/10.14.0: + /@motionone/animation@10.14.0: resolution: {integrity: sha512-h+1sdyBP8vbxEBW5gPFDnj+m2DCqdlAuf2g6Iafb1lcMnqjsRXWlPw1AXgvUMXmreyhqmPbJqoNfIKdytampRQ==} dependencies: '@motionone/easing': 10.14.0 @@ -4583,7 +4694,7 @@ packages: tslib: 2.5.0 dev: false - /@motionone/dom/10.12.0: + /@motionone/dom@10.12.0: resolution: {integrity: sha512-UdPTtLMAktHiqV0atOczNYyDd/d8Cf5fFsd1tua03PqTwwCe/6lwhLSQ8a7TbnQ5SN0gm44N1slBfj+ORIhrqw==} dependencies: '@motionone/animation': 10.14.0 @@ -4594,14 +4705,14 @@ packages: tslib: 2.5.0 dev: false - /@motionone/easing/10.14.0: + /@motionone/easing@10.14.0: resolution: {integrity: sha512-2vUBdH9uWTlRbuErhcsMmt1jvMTTqvGmn9fHq8FleFDXBlHFs5jZzHJT9iw+4kR1h6a4SZQuCf72b9ji92qNYA==} dependencies: '@motionone/utils': 10.14.0 tslib: 2.5.0 dev: false - /@motionone/generators/10.14.0: + /@motionone/generators@10.14.0: resolution: {integrity: sha512-6kRHezoFfIjFN7pPpaxmkdZXD36tQNcyJe3nwVqwJ+ZfC0e3rFmszR8kp9DEVFs9QL/akWjuGPSLBI1tvz+Vjg==} dependencies: '@motionone/types': 10.14.0 @@ -4609,11 +4720,11 @@ packages: tslib: 2.5.0 dev: false - /@motionone/types/10.14.0: + /@motionone/types@10.14.0: resolution: {integrity: sha512-3bNWyYBHtVd27KncnJLhksMFQ5o2MSdk1cA/IZqsHtA9DnRM1SYgN01CTcJ8Iw8pCXF5Ocp34tyAjY7WRpOJJQ==} dev: false - /@motionone/utils/10.14.0: + /@motionone/utils@10.14.0: resolution: {integrity: sha512-sLWBLPzRqkxmOTRzSaD3LFQXCPHvDzyHJ1a3VP9PRzBxyVd2pv51/gMOsdAcxQ9n+MIeGJnxzXBYplUHKj4jkw==} dependencies: '@motionone/types': 10.14.0 @@ -4621,19 +4732,29 @@ packages: tslib: 2.5.0 dev: false - /@next/bundle-analyzer/12.3.4: - resolution: {integrity: sha512-eKjgRICzbLTmod0UnJcArFVs5uEAiuZwB6NCf84m+btW7jdylUVoOYf1wi5tA14xk5L9Lho7Prm6/XJ8gxYzfQ==} + /@next/bundle-analyzer@13.5.6(bufferutil@4.0.7)(utf-8-validate@5.0.10): + resolution: {integrity: sha512-4P5YVpR3N/B5+p0TQ/rPAr+9fsjkdfCVTGzJhKwE7XHqS+QME4gYxAYeGKkfkHEkP2A3GKXs8QSp0LjIvWLI3g==} dependencies: - webpack-bundle-analyzer: 4.3.0 + webpack-bundle-analyzer: 4.7.0(bufferutil@4.0.7)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate dev: true - /@next/env/12.3.4: + /@next/env@12.3.4: resolution: {integrity: sha512-H/69Lc5Q02dq3o+dxxy5O/oNxFsZpdL6WREtOOtOM1B/weonIwDXkekr1KV5DPVPr12IHFPrMrcJQ6bgPMfn7A==} - /@next/swc-android-arm-eabi/12.3.4: + /@next/env@13.4.12: + resolution: {integrity: sha512-RmHanbV21saP/6OEPBJ7yJMuys68cIf8OBBWd7+uj40LdpmswVAwe1uzeuFyUsd6SfeITWT3XnQfn6wULeKwDQ==} + dev: false + + /@next/eslint-plugin-next@13.3.0: + resolution: {integrity: sha512-wuGN5qSEjSgcq9fVkH0Y/qIPFjnZtW3ZPwfjJOn7l/rrf6y8J24h/lo61kwqunTyzZJm/ETGfGVU9PUs8cnzEA==} + dependencies: + glob: 7.1.7 + dev: true + + /@next/swc-android-arm-eabi@12.3.4: resolution: {integrity: sha512-cM42Cw6V4Bz/2+j/xIzO8nK/Q3Ly+VSlZJTa1vHzsocJRYz8KT6MrreXaci2++SIZCF1rVRCDgAg5PpqRibdIA==} engines: {node: '>= 10'} cpu: [arm] @@ -4641,7 +4762,7 @@ packages: requiresBuild: true optional: true - /@next/swc-android-arm64/12.3.4: + /@next/swc-android-arm64@12.3.4: resolution: {integrity: sha512-5jf0dTBjL+rabWjGj3eghpLUxCukRhBcEJgwLedewEA/LJk2HyqCvGIwj5rH+iwmq1llCWbOky2dO3pVljrapg==} engines: {node: '>= 10'} cpu: [arm64] @@ -4649,7 +4770,7 @@ packages: requiresBuild: true optional: true - /@next/swc-darwin-arm64/12.3.4: + /@next/swc-darwin-arm64@12.3.4: resolution: {integrity: sha512-DqsSTd3FRjQUR6ao0E1e2OlOcrF5br+uegcEGPVonKYJpcr0MJrtYmPxd4v5T6UCJZ+XzydF7eQo5wdGvSZAyA==} engines: {node: '>= 10'} cpu: [arm64] @@ -4657,7 +4778,16 @@ packages: requiresBuild: true optional: true - /@next/swc-darwin-x64/12.3.4: + /@next/swc-darwin-arm64@13.4.12: + resolution: {integrity: sha512-deUrbCXTMZ6ZhbOoloqecnUeNpUOupi8SE2tx4jPfNS9uyUR9zK4iXBvH65opVcA/9F5I/p8vDXSYbUlbmBjZg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-darwin-x64@12.3.4: resolution: {integrity: sha512-PPF7tbWD4k0dJ2EcUSnOsaOJ5rhT3rlEt/3LhZUGiYNL8KvoqczFrETlUx0cUYaXe11dRA3F80Hpt727QIwByQ==} engines: {node: '>= 10'} cpu: [x64] @@ -4665,7 +4795,16 @@ packages: requiresBuild: true optional: true - /@next/swc-freebsd-x64/12.3.4: + /@next/swc-darwin-x64@13.4.12: + resolution: {integrity: sha512-WRvH7RxgRHlC1yb5oG0ZLx8F7uci9AivM5/HGGv9ZyG2Als8Ij64GC3d+mQ5sJhWjusyU6T6V1WKTUoTmOB0zQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-freebsd-x64@12.3.4: resolution: {integrity: sha512-KM9JXRXi/U2PUM928z7l4tnfQ9u8bTco/jb939pdFUHqc28V43Ohd31MmZD1QzEK4aFlMRaIBQOWQZh4D/E5lQ==} engines: {node: '>= 10'} cpu: [x64] @@ -4673,7 +4812,7 @@ packages: requiresBuild: true optional: true - /@next/swc-linux-arm-gnueabihf/12.3.4: + /@next/swc-linux-arm-gnueabihf@12.3.4: resolution: {integrity: sha512-3zqD3pO+z5CZyxtKDTnOJ2XgFFRUBciOox6EWkoZvJfc9zcidNAQxuwonUeNts6Xbm8Wtm5YGIRC0x+12YH7kw==} engines: {node: '>= 10'} cpu: [arm] @@ -4681,7 +4820,7 @@ packages: requiresBuild: true optional: true - /@next/swc-linux-arm64-gnu/12.3.4: + /@next/swc-linux-arm64-gnu@12.3.4: resolution: {integrity: sha512-kiX0vgJGMZVv+oo1QuObaYulXNvdH/IINmvdZnVzMO/jic/B8EEIGlZ8Bgvw8LCjH3zNVPO3mGrdMvnEEPEhKA==} engines: {node: '>= 10'} cpu: [arm64] @@ -4689,7 +4828,16 @@ packages: requiresBuild: true optional: true - /@next/swc-linux-arm64-musl/12.3.4: + /@next/swc-linux-arm64-gnu@13.4.12: + resolution: {integrity: sha512-YEKracAWuxp54tKiAvvq73PUs9lok57cc8meYRibTWe/VdPB2vLgkTVWFcw31YDuRXdEhdX0fWS6Q+ESBhnEig==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-musl@12.3.4: resolution: {integrity: sha512-EETZPa1juczrKLWk5okoW2hv7D7WvonU+Cf2CgsSoxgsYbUCZ1voOpL4JZTOb6IbKMDo6ja+SbY0vzXZBUMvkQ==} engines: {node: '>= 10'} cpu: [arm64] @@ -4697,7 +4845,16 @@ packages: requiresBuild: true optional: true - /@next/swc-linux-x64-gnu/12.3.4: + /@next/swc-linux-arm64-musl@13.4.12: + resolution: {integrity: sha512-LhJR7/RAjdHJ2Isl2pgc/JaoxNk0KtBgkVpiDJPVExVWA1c6gzY57+3zWuxuyWzTG+fhLZo2Y80pLXgIJv7g3g==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-gnu@12.3.4: resolution: {integrity: sha512-4csPbRbfZbuWOk3ATyWcvVFdD9/Rsdq5YHKvRuEni68OCLkfy4f+4I9OBpyK1SKJ00Cih16NJbHE+k+ljPPpag==} engines: {node: '>= 10'} cpu: [x64] @@ -4705,7 +4862,16 @@ packages: requiresBuild: true optional: true - /@next/swc-linux-x64-musl/12.3.4: + /@next/swc-linux-x64-gnu@13.4.12: + resolution: {integrity: sha512-1DWLL/B9nBNiQRng+1aqs3OaZcxC16Nf+mOnpcrZZSdyKHek3WQh6j/fkbukObgNGwmCoVevLUa/p3UFTTqgqg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-musl@12.3.4: resolution: {integrity: sha512-YeBmI+63Ro75SUiL/QXEVXQ19T++58aI/IINOyhpsRL1LKdyfK/35iilraZEFz9bLQrwy1LYAR5lK200A9Gjbg==} engines: {node: '>= 10'} cpu: [x64] @@ -4713,7 +4879,16 @@ packages: requiresBuild: true optional: true - /@next/swc-win32-arm64-msvc/12.3.4: + /@next/swc-linux-x64-musl@13.4.12: + resolution: {integrity: sha512-kEAJmgYFhp0VL+eRWmUkVxLVunn7oL9Mdue/FS8yzRBVj7Z0AnIrHpTIeIUl1bbdQq1VaoOztnKicAjfkLTRCQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-arm64-msvc@12.3.4: resolution: {integrity: sha512-Sd0qFUJv8Tj0PukAYbCCDbmXcMkbIuhnTeHm9m4ZGjCf6kt7E/RMs55Pd3R5ePjOkN7dJEuxYBehawTR/aPDSQ==} engines: {node: '>= 10'} cpu: [arm64] @@ -4721,7 +4896,16 @@ packages: requiresBuild: true optional: true - /@next/swc-win32-ia32-msvc/12.3.4: + /@next/swc-win32-arm64-msvc@13.4.12: + resolution: {integrity: sha512-GMLuL/loR6yIIRTnPRY6UGbLL9MBdw2anxkOnANxvLvsml4F0HNIgvnU3Ej4BjbqMTNjD4hcPFdlEow4XHPdZA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-ia32-msvc@12.3.4: resolution: {integrity: sha512-rt/vv/vg/ZGGkrkKcuJ0LyliRdbskQU+91bje+PgoYmxTZf/tYs6IfbmgudBJk6gH3QnjHWbkphDdRQrseRefQ==} engines: {node: '>= 10'} cpu: [ia32] @@ -4729,7 +4913,16 @@ packages: requiresBuild: true optional: true - /@next/swc-win32-x64-msvc/12.3.4: + /@next/swc-win32-ia32-msvc@13.4.12: + resolution: {integrity: sha512-PhgNqN2Vnkm7XaMdRmmX0ZSwZXQAtamBVSa9A/V1dfKQCV1rjIZeiy/dbBnVYGdj63ANfsOR/30XpxP71W0eww==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-x64-msvc@12.3.4: resolution: {integrity: sha512-DQ20JEfTBZAgF8QCjYfJhv2/279M6onxFjdG/+5B0Cyj00/EdBxiWb2eGGFgQhrBbNv/lsvzFbbi0Ptf8Vw/bg==} engines: {node: '>= 10'} cpu: [x64] @@ -4737,270 +4930,78 @@ packages: requiresBuild: true optional: true - /@nodelib/fs.scandir/2.1.5: + /@next/swc-win32-x64-msvc@13.4.12: + resolution: {integrity: sha512-Z+56e/Ljt0bUs+T+jPjhFyxYBcdY2RIq9ELFU+qAMQMteHo7ymbV7CKmlcX59RI9C4YzN8PgMgLyAoi916b5HA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - /@nodelib/fs.stat/2.0.5: + /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - /@nodelib/fs.walk/1.2.8: + /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.13.0 - /@pablosz/graphql-helix-graphiql/4.2.2_cqyb4buyc4habqgvcucexr22xm: - resolution: {integrity: sha512-KvSzKAM7amhSsr1D2ZeAynSXzkZfCWOrRPdawcCowKR2t7o8BkUQc91o0wcVgnqzf5YJLp1xYKhxUvzYsHxy1g==} - dependencies: - '@graphql-ez/utils': 0.2.0_cqyb4buyc4habqgvcucexr22xm - transitivePeerDependencies: - - '@types/node' - - graphql - dev: false - - /@pablosz/graphql-helix/2.0.3_graphql@16.6.0: + /@pablosz/graphql-helix@2.0.3(graphql@16.8.1): resolution: {integrity: sha512-+uZMo0whkR0WbG3OJEgsrpgI8yH8iFhROysptXvxEOXUuptAcd3i0Dqi2fzcy32Qgg7WPS9G/yQkIsgMB6vFOQ==} peerDependencies: graphql: '*' dependencies: - graphql: 16.6.0 + graphql: 16.8.1 - /@pablosz/graphql-helix/2.0.3_graphql@17.0.0-alpha.2: - resolution: {integrity: sha512-+uZMo0whkR0WbG3OJEgsrpgI8yH8iFhROysptXvxEOXUuptAcd3i0Dqi2fzcy32Qgg7WPS9G/yQkIsgMB6vFOQ==} - peerDependencies: - graphql: '*' - dependencies: - graphql: 17.0.0-alpha.2 + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true dev: true + optional: true - /@pnpm/types/8.8.0: - resolution: {integrity: sha512-IKUpbWRHDB9C4Yy4UeBpeYhU7eIsLj50jF5HNRUkbJnM0CWHPLxX9TGCI+ov8pgGeTP1t1g0GPDHD6en9D8LxQ==} - engines: {node: '>=14.6'} + /@pnpm/types@9.4.2: + resolution: {integrity: sha512-g1hcF8Nv4gd76POilz9gD4LITAPXOe5nX4ijgr8ixCbLQZfcpYiMfJ+C1RlMNRUDo8vhlNB4O3bUlxmT6EAQXA==} + engines: {node: '>=16.14'} dev: true - /@polka/url/1.0.0-next.21: + /@polka/url@1.0.0-next.21: resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} dev: true - /@popperjs/core/2.11.6: + /@popperjs/core@2.11.6: resolution: {integrity: sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==} dev: false - /@radix-ui/primitive/0.1.0: - resolution: {integrity: sha512-tqxZKybwN5Fa3VzZry4G6mXAAb9aAqKmPtnVbZpL0vsBwvOHTBwsjHVPXylocYLwEtBY9SCe665bYnNB515uoA==} - dependencies: - '@babel/runtime': 7.20.13 - dev: false - - /@radix-ui/react-collection/0.1.4_react@17.0.2: - resolution: {integrity: sha512-3muGI15IdgaDFjOcO7xX8a35HQRBRF6LH9pS6UCeZeRmbslkVeHyJRQr2rzICBUoX7zgIA0kXyMDbpQnJGyJTA==} - peerDependencies: - react: ^16.8 || ^17.0 - dependencies: - '@babel/runtime': 7.20.13 - '@radix-ui/react-compose-refs': 0.1.0_react@17.0.2 - '@radix-ui/react-context': 0.1.1_react@17.0.2 - '@radix-ui/react-primitive': 0.1.4_react@17.0.2 - '@radix-ui/react-slot': 0.1.2_react@17.0.2 - react: 17.0.2 - dev: false - - /@radix-ui/react-compose-refs/0.1.0_react@17.0.2: - resolution: {integrity: sha512-eyclbh+b77k+69Dk72q3694OHrn9B3QsoIRx7ywX341U9RK1ThgQjMFZoPtmZNQTksXHLNEiefR8hGVeFyInGg==} - peerDependencies: - react: ^16.8 || ^17.0 - dependencies: - '@babel/runtime': 7.20.13 - react: 17.0.2 - dev: false - - /@radix-ui/react-context/0.1.1_react@17.0.2: - resolution: {integrity: sha512-PkyVX1JsLBioeu0jB9WvRpDBBLtLZohVDT3BB5CTSJqActma8S8030P57mWZb4baZifMvN7KKWPAA40UmWKkQg==} - peerDependencies: - react: ^16.8 || ^17.0 - dependencies: - '@babel/runtime': 7.20.13 - react: 17.0.2 - dev: false - - /@radix-ui/react-dismissable-layer/0.1.5_react@17.0.2: - resolution: {integrity: sha512-J+fYWijkX4M4QKwf9dtu1oC0U6e6CEl8WhBp3Ad23yz2Hia0XCo6Pk/mp5CAFy4QBtQedTSkhW05AdtSOEoajQ==} - peerDependencies: - react: ^16.8 || ^17.0 - dependencies: - '@babel/runtime': 7.20.13 - '@radix-ui/primitive': 0.1.0 - '@radix-ui/react-compose-refs': 0.1.0_react@17.0.2 - '@radix-ui/react-primitive': 0.1.4_react@17.0.2 - '@radix-ui/react-use-body-pointer-events': 0.1.1_react@17.0.2 - '@radix-ui/react-use-callback-ref': 0.1.0_react@17.0.2 - '@radix-ui/react-use-escape-keydown': 0.1.0_react@17.0.2 - react: 17.0.2 - dev: false - - /@radix-ui/react-id/0.1.5_react@17.0.2: - resolution: {integrity: sha512-IPc4H/63bes0IZ1GJJozSEkSWcDyhNGtKFWUpJ+XtaLyQ1X3x7Mf6fWwWhDcpqlYEP+5WtAvfqcyEsyjP+ZhBQ==} - peerDependencies: - react: ^16.8 || ^17.0 - dependencies: - '@babel/runtime': 7.20.13 - '@radix-ui/react-use-layout-effect': 0.1.0_react@17.0.2 - react: 17.0.2 - dev: false - - /@radix-ui/react-navigation-menu/0.1.2_sfoxds7t5ydpegc3knd667wn6m: - resolution: {integrity: sha512-b9+2ambunxMNw4pgOt9xqzVN/A5NPajpiKvR45zI/BS/uOWfV1A3N5Kn+OIbRMln9GyBnuoxXV0tUBLC2rAzpw==} - peerDependencies: - react: ^16.8 || ^17.0 - react-dom: ^16.8 || ^17.0 - dependencies: - '@babel/runtime': 7.20.13 - '@radix-ui/primitive': 0.1.0 - '@radix-ui/react-collection': 0.1.4_react@17.0.2 - '@radix-ui/react-compose-refs': 0.1.0_react@17.0.2 - '@radix-ui/react-context': 0.1.1_react@17.0.2 - '@radix-ui/react-dismissable-layer': 0.1.5_react@17.0.2 - '@radix-ui/react-id': 0.1.5_react@17.0.2 - '@radix-ui/react-presence': 0.1.2_react@17.0.2 - '@radix-ui/react-primitive': 0.1.4_react@17.0.2 - '@radix-ui/react-use-callback-ref': 0.1.0_react@17.0.2 - '@radix-ui/react-use-controllable-state': 0.1.0_react@17.0.2 - '@radix-ui/react-use-direction': 0.1.0_react@17.0.2 - '@radix-ui/react-use-layout-effect': 0.1.0_react@17.0.2 - '@radix-ui/react-use-previous': 0.1.1_react@17.0.2 - '@radix-ui/react-visually-hidden': 0.1.4_react@17.0.2 - react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 - dev: false - - /@radix-ui/react-presence/0.1.2_react@17.0.2: - resolution: {integrity: sha512-3BRlFZraooIUfRlyN+b/Xs5hq1lanOOo/+3h6Pwu2GMFjkGKKa4Rd51fcqGqnVlbr3jYg+WLuGyAV4KlgqwrQw==} - peerDependencies: - react: '>=16.8' - dependencies: - '@babel/runtime': 7.20.13 - '@radix-ui/react-compose-refs': 0.1.0_react@17.0.2 - '@radix-ui/react-use-layout-effect': 0.1.0_react@17.0.2 - react: 17.0.2 - dev: false - - /@radix-ui/react-primitive/0.1.4_react@17.0.2: - resolution: {integrity: sha512-6gSl2IidySupIMJFjYnDIkIWRyQdbu/AHK7rbICPani+LW4b0XdxBXc46og/iZvuwW8pjCS8I2SadIerv84xYA==} - peerDependencies: - react: ^16.8 || ^17.0 - dependencies: - '@babel/runtime': 7.20.13 - '@radix-ui/react-slot': 0.1.2_react@17.0.2 - react: 17.0.2 - dev: false - - /@radix-ui/react-slot/0.1.2_react@17.0.2: - resolution: {integrity: sha512-ADkqfL+agEzEguU3yS26jfB50hRrwf7U4VTwAOZEmi/g+ITcBWe12yM46ueS/UCIMI9Py+gFUaAdxgxafFvY2Q==} - peerDependencies: - react: ^16.8 || ^17.0 - dependencies: - '@babel/runtime': 7.20.13 - '@radix-ui/react-compose-refs': 0.1.0_react@17.0.2 - react: 17.0.2 - dev: false - - /@radix-ui/react-use-body-pointer-events/0.1.1_react@17.0.2: - resolution: {integrity: sha512-R8leV2AWmJokTmERM8cMXFHWSiv/fzOLhG/JLmRBhLTAzOj37EQizssq4oW0Z29VcZy2tODMi9Pk/htxwb+xpA==} - peerDependencies: - react: ^16.8 || ^17.0 - dependencies: - '@babel/runtime': 7.20.13 - '@radix-ui/react-use-layout-effect': 0.1.0_react@17.0.2 - react: 17.0.2 - dev: false - - /@radix-ui/react-use-callback-ref/0.1.0_react@17.0.2: - resolution: {integrity: sha512-Va041McOFFl+aV+sejvl0BS2aeHx86ND9X/rVFmEFQKTXCp6xgUK0NGUAGcgBlIjnJSbMYPGEk1xKSSlVcN2Aw==} - peerDependencies: - react: ^16.8 || ^17.0 - dependencies: - '@babel/runtime': 7.20.13 - react: 17.0.2 - dev: false - - /@radix-ui/react-use-controllable-state/0.1.0_react@17.0.2: - resolution: {integrity: sha512-zv7CX/PgsRl46a52Tl45TwqwVJdmqnlQEQhaYMz/yBOD2sx2gCkCFSoF/z9mpnYWmS6DTLNTg5lIps3fV6EnXg==} - peerDependencies: - react: ^16.8 || ^17.0 - dependencies: - '@babel/runtime': 7.20.13 - '@radix-ui/react-use-callback-ref': 0.1.0_react@17.0.2 - react: 17.0.2 - dev: false - - /@radix-ui/react-use-direction/0.1.0_react@17.0.2: - resolution: {integrity: sha512-NajpY/An9TCPSfOVkgWIdXJV+VuWl67PxB6kOKYmtNAFHvObzIoh8o0n9sAuwSAyFCZVq211FEf9gvVDRhOyiA==} - peerDependencies: - react: ^16.8 || ^17.0 - dependencies: - '@babel/runtime': 7.20.13 - react: 17.0.2 - dev: false - - /@radix-ui/react-use-escape-keydown/0.1.0_react@17.0.2: - resolution: {integrity: sha512-tDLZbTGFmvXaazUXXv8kYbiCcbAE8yKgng9s95d8fCO+Eundv0Jngbn/hKPhDDs4jj9ChwRX5cDDnlaN+ugYYQ==} - peerDependencies: - react: ^16.8 || ^17.0 - dependencies: - '@babel/runtime': 7.20.13 - '@radix-ui/react-use-callback-ref': 0.1.0_react@17.0.2 - react: 17.0.2 - dev: false - - /@radix-ui/react-use-layout-effect/0.1.0_react@17.0.2: - resolution: {integrity: sha512-+wdeS51Y+E1q1Wmd+1xSSbesZkpVj4jsg0BojCbopWvgq5iBvixw5vgemscdh58ep98BwUbsFYnrywFhV9yrVg==} - peerDependencies: - react: ^16.8 || ^17.0 - dependencies: - '@babel/runtime': 7.20.13 - react: 17.0.2 - dev: false - - /@radix-ui/react-use-previous/0.1.1_react@17.0.2: - resolution: {integrity: sha512-O/ZgrDBr11dR8rhO59ED8s5zIXBRFi8MiS+CmFGfi7MJYdLbfqVOmQU90Ghf87aifEgWe6380LA69KBneaShAg==} - peerDependencies: - react: ^16.8 || ^17.0 - dependencies: - '@babel/runtime': 7.20.13 - react: 17.0.2 - dev: false - - /@radix-ui/react-visually-hidden/0.1.4_react@17.0.2: - resolution: {integrity: sha512-K/q6AEEzqeeEq/T0NPChvBqnwlp8Tl4NnQdrI/y8IOY7BRR+Ug0PEsVk6g48HJ7cA1//COugdxXXVVK/m0X1mA==} - peerDependencies: - react: ^16.8 || ^17.0 - dependencies: - '@babel/runtime': 7.20.13 - '@radix-ui/react-primitive': 0.1.4_react@17.0.2 - react: 17.0.2 - dev: false - - /@reach/alert/0.13.2_sfoxds7t5ydpegc3knd667wn6m: + /@reach/alert@0.13.2(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-LDz83AXCrClyq/MWe+0vaZfHp1Ytqn+kgL5VxG7rirUvmluWaj/snxzfNPWn0Ma4K2YENmXXRC/iHt5X95SqIg==} peerDependencies: react: ^16.8.0 || 17.x react-dom: ^16.8.0 || 17.x + peerDependenciesMeta: + react-dom: + optional: true dependencies: - '@reach/utils': 0.13.2_sfoxds7t5ydpegc3knd667wn6m - '@reach/visually-hidden': 0.13.2_sfoxds7t5ydpegc3knd667wn6m + '@reach/utils': 0.13.2(react-dom@17.0.2)(react@17.0.2) + '@reach/visually-hidden': 0.13.2(react-dom@17.0.2)(react@17.0.2) prop-types: 15.8.1 react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 + react-dom: 17.0.2(react@17.0.2) tslib: 2.5.0 dev: false - /@reach/utils/0.13.2_sfoxds7t5ydpegc3knd667wn6m: + /@reach/utils@0.13.2(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-3ir6cN60zvUrwjOJu7C6jec/samqAeyAB12ZADK+qjnmQPdzSYldrFWwDVV5H0WkhbYXR3uh+eImu13hCetNPQ==} peerDependencies: react: ^16.8.0 || 17.x @@ -5008,12 +5009,12 @@ packages: dependencies: '@types/warning': 3.0.0 react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 + react-dom: 17.0.2(react@17.0.2) tslib: 2.5.0 warning: 4.0.3 dev: false - /@reach/visually-hidden/0.13.2_sfoxds7t5ydpegc3knd667wn6m: + /@reach/visually-hidden@0.13.2(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-sPZwNS0/duOuG0mYwE5DmgEAzW9VhgU3aIt1+mrfT/xiT9Cdncqke+kRBQgU708q/Ttm9tWsoHni03nn/SuPTQ==} peerDependencies: react: ^16.8.0 || 17.x @@ -5021,26 +5022,49 @@ packages: dependencies: prop-types: 15.8.1 react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 + react-dom: 17.0.2(react@17.0.2) tslib: 2.5.0 dev: false - /@react-native-async-storage/async-storage/1.17.12: - resolution: {integrity: sha512-BXg4OxFdjPTRt+8MvN6jz4muq0/2zII3s7HeT/11e4Zeh3WCgk/BleLzUcDfVqF3OzFHUqEkSrb76d6Ndjd/Nw==} + /@react-hookz/deep-equal@1.0.4: + resolution: {integrity: sha512-N56fTrAPUDz/R423pag+n6TXWbvlBZDtTehaGFjK0InmN+V2OFWLE/WmORhmn6Ce7dlwH5+tQN1LJFw3ngTJVg==} + dev: false + + /@react-hookz/web@22.0.0(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-jl4JgUXaiSvvDVQD2z/rq2/RaykjjLrAZxHOEQj2H38j4UFWIVhv5oKUH8yrKF4wX6tMX9gdrj62f9yGq/nSaQ==} + peerDependencies: + js-cookie: ^3.0.1 + react: ^16.8 || ^17 || ^18 + react-dom: ^16.8 || ^17 || ^18 + peerDependenciesMeta: + js-cookie: + optional: true + dependencies: + '@react-hookz/deep-equal': 1.0.4 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: false + + /@react-hookz/web@23.1.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-fvbURdsa1ukttbLR1ASE/XmqXP09vZ1PiCYppYeR1sNMzCrdkG0iBnjxniFSVjJ8gIw2fRs6nqMTbeBz2uAkuA==} peerDependencies: - react-native: ^0.0.0-0 || 0.60 - 0.71 || 1000.0.0 + js-cookie: ^3.0.5 + react: ^16.8 || ^17 || ^18 + react-dom: ^16.8 || ^17 || ^18 peerDependenciesMeta: - react-native: + js-cookie: optional: true dependencies: - merge-options: 3.0.4 + '@react-hookz/deep-equal': 1.0.4 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: false - /@repeaterjs/repeater/3.0.4: + /@repeaterjs/repeater@3.0.4: resolution: {integrity: sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==} - dev: true + dev: false - /@rollup/plugin-babel/6.0.3: + /@rollup/plugin-babel@6.0.3(@babel/core@7.23.7): resolution: {integrity: sha512-fKImZKppa1A/gX73eg4JGo+8kQr/q1HBQaCGKECZ0v4YBBv3lFqi14+7xyApECzvkLTHCifx+7ntcrvtBIRcpg==} engines: {node: '>=14.0.0'} peerDependencies: @@ -5048,18 +5072,17 @@ packages: '@types/babel__core': ^7.1.9 rollup: ^1.20.0||^2.0.0||^3.0.0 peerDependenciesMeta: - '@babel/core': - optional: true '@types/babel__core': optional: true rollup: optional: true dependencies: - '@babel/helper-module-imports': 7.18.6 - '@rollup/pluginutils': 5.0.2 + '@babel/core': 7.23.7 + '@babel/helper-module-imports': 7.22.15 + '@rollup/pluginutils': 5.1.0(rollup@2.79.1) dev: false - /@rollup/pluginutils/4.2.1: + /@rollup/pluginutils@4.2.1: resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} engines: {node: '>= 8.0.0'} dependencies: @@ -5067,59 +5090,63 @@ packages: picomatch: 2.3.1 dev: true - /@rollup/pluginutils/5.0.2: - resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} + /@rollup/pluginutils@5.1.0(rollup@2.79.1): + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0 + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 peerDependenciesMeta: rollup: optional: true dependencies: - '@types/estree': 1.0.0 + '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 - dev: false + rollup: 2.79.1 - /@sideway/address/4.1.4: + /@rushstack/eslint-patch@1.6.1: + resolution: {integrity: sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==} + dev: true + + /@sideway/address@4.1.4: resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} dependencies: '@hapi/hoek': 9.3.0 dev: true - /@sideway/formula/3.0.0: + /@sideway/formula@3.0.0: resolution: {integrity: sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==} dev: true - /@sideway/pinpoint/2.0.0: + /@sideway/pinpoint@2.0.0: resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} dev: true - /@sinclair/typebox/0.25.21: + /@sinclair/typebox@0.25.21: resolution: {integrity: sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==} - /@sinonjs/commons/2.0.0: + /@sinonjs/commons@2.0.0: resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} dependencies: type-detect: 4.0.8 - /@sinonjs/fake-timers/10.0.2: + /@sinonjs/fake-timers@10.0.2: resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==} dependencies: '@sinonjs/commons': 2.0.0 - /@size-limit/esbuild/8.2.4_size-limit@8.2.4: + /@size-limit/esbuild@8.2.4(size-limit@8.2.4): resolution: {integrity: sha512-kPgNfpwUvBD98s5axlf1UciFg4Ki4AYSl/cOmSyyYBuzksHiwW7Myeu0w4mTxtV9nwBFbkrrNXqszE7b+OhFLA==} engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} peerDependencies: size-limit: 8.2.4 dependencies: - esbuild: 0.17.12 - nanoid: 3.3.4 + esbuild: 0.17.19 + nanoid: 3.3.7 size-limit: 8.2.4 dev: true - /@size-limit/file/8.2.4_size-limit@8.2.4: + /@size-limit/file@8.2.4(size-limit@8.2.4): resolution: {integrity: sha512-xLuF97W7m7lxrRJvqXRlxO/4t7cpXtfxOnjml/t4aRVUCMXLdyvebRr9OM4jjoK8Fmiz8jomCbETUCI3jVhLzA==} engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} peerDependencies: @@ -5129,75 +5156,49 @@ packages: size-limit: 8.2.4 dev: true - /@size-limit/preset-small-lib/8.2.4_size-limit@8.2.4: + /@size-limit/preset-small-lib@8.2.4(size-limit@8.2.4): resolution: {integrity: sha512-AL4384oBgMcDPlNblgWHreqFSSOui0J9NbgyHhegB1h8AgRyHbdVGC3yWLpEESYQXHYnKdbNrYeRE/TclsViog==} peerDependencies: size-limit: 8.2.4 dependencies: - '@size-limit/esbuild': 8.2.4_size-limit@8.2.4 - '@size-limit/file': 8.2.4_size-limit@8.2.4 + '@size-limit/esbuild': 8.2.4(size-limit@8.2.4) + '@size-limit/file': 8.2.4(size-limit@8.2.4) size-limit: 8.2.4 dev: true - /@stefanprobst/rehype-shiki/2.2.0_shiki@0.12.1: - resolution: {integrity: sha512-X/m9hUMifZYJk77pc9dTl8Q5DLWdXegzmHhPZ5yraFpQXG9n/m2jKMLvIR7F6gI8l5plj6aNx/qcMCMnfBwBOA==} - engines: {node: '>=14.17', yarn: 1.x} - peerDependencies: - shiki: ^0.10.0 - dependencies: - hast-util-to-string: 2.0.0 - json5: 2.2.3 - parse-numeric-range: 1.3.0 - remark-parse: 10.0.1 - remark-rehype: 10.1.0 - shiki: 0.12.1 - shiki-renderer-hast: 1.1.5_shiki@0.12.1 - unified: 10.1.2 - unist-util-visit: 4.1.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@stefanprobst/remark-shiki/2.1.0_shiki@0.12.1: - resolution: {integrity: sha512-cIQBMke/gP2W8sqxW2QW0qWQFbPnE8WQU4k32lKwEAOm/hZRuXxULRDdhNgJzMRoZBtVedyuW0RsedKKD94CCQ==} - engines: {node: '>=14.17', yarn: 1.x} - peerDependencies: - shiki: ^0.10.0 + /@swc/helpers@0.4.11: + resolution: {integrity: sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==} dependencies: - json5: 2.2.3 - parse-numeric-range: 1.3.0 - shiki: 0.12.1 - unified: 10.1.2 - unist-util-visit: 4.1.1 - dev: false + tslib: 2.5.0 - /@swc/helpers/0.4.11: - resolution: {integrity: sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==} + /@swc/helpers@0.5.1: + resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==} dependencies: tslib: 2.5.0 + dev: false - /@testing-library/dom/8.19.0: - resolution: {integrity: sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A==} - engines: {node: '>=12'} + /@testing-library/dom@9.3.4: + resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} + engines: {node: '>=14'} dependencies: - '@babel/code-frame': 7.18.6 - '@babel/runtime': 7.20.13 - '@types/aria-query': 4.2.2 + '@babel/code-frame': 7.23.5 + '@babel/runtime': 7.23.8 + '@types/aria-query': 5.0.4 aria-query: 5.1.3 chalk: 4.1.2 dom-accessibility-api: 0.5.14 - lz-string: 1.4.4 + lz-string: 1.5.0 pretty-format: 27.5.1 dev: true - /@testing-library/jest-dom/5.16.5: + /@testing-library/jest-dom@5.16.5: resolution: {integrity: sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==} engines: {node: '>=8', npm: '>=6', yarn: '>=1'} dependencies: '@adobe/css-tools': 4.0.1 - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.23.8 '@types/testing-library__jest-dom': 5.14.5 - aria-query: 5.1.3 + aria-query: 5.3.0 chalk: 3.0.0 css.escape: 1.5.1 dom-accessibility-api: 0.5.14 @@ -5205,205 +5206,116 @@ packages: redent: 3.0.0 dev: true - /@testing-library/react-hooks/8.0.1_x4rus6jnwzjq3zgm4bvjbdzauy: - resolution: {integrity: sha512-Aqhl2IVmLt8IovEVarNDFuJDVWVvhnr9/GCU6UUnrYXwgDFF9h2L2o2P9KBni1AST5sT6riAyoukFLyjQUgD/g==} - engines: {node: '>=12'} + /@testing-library/react@14.1.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-z4p7DVBTPjKM5qDZ0t5ZjzkpSNb+fZy1u6bzO7kk8oeGagpPCAtgh4cx1syrfp7a+QWkM021jGqjJaxJJnXAZg==} + engines: {node: '>=14'} peerDependencies: - '@types/react': ^16.9.0 || ^17.0.0 - react: ^16.9.0 || ^17.0.0 - react-dom: ^16.9.0 || ^17.0.0 - react-test-renderer: ^16.9.0 || ^17.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - react-dom: - optional: true - react-test-renderer: - optional: true + react: ^18.0.0 + react-dom: ^18.0.0 dependencies: - '@babel/runtime': 7.20.1 - '@types/react': 17.0.53 - react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 - react-error-boundary: 3.1.4_react@17.0.2 - react-test-renderer: 17.0.2_react@17.0.2 - dev: true - - /@testing-library/react/12.1.5_sfoxds7t5ydpegc3knd667wn6m: - resolution: {integrity: sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg==} - engines: {node: '>=12'} - peerDependencies: - react: <18.0.0 - react-dom: <18.0.0 - dependencies: - '@babel/runtime': 7.20.1 - '@testing-library/dom': 8.19.0 - '@types/react-dom': 17.0.18 - react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 + '@babel/runtime': 7.23.8 + '@testing-library/dom': 9.3.4 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) dev: true - /@theguild/components/1.12.0_zsjcj4gvi24ks76nprapl4hsmq: - resolution: {integrity: sha512-OaFIIbZSRDVDi3Og/XCbFxbvquvOmA084JpptCIIk/urBvOrOw44h9/f70ATHrT5W0XctrKbXj9xbDmKS92cxg==} - peerDependencies: - react: ^17.0.2 - react-dom: ^17.0.2 - dependencies: - '@algolia/autocomplete-js': 1.7.2_algoliasearch@4.14.2 - '@algolia/autocomplete-plugin-algolia-insights': 1.7.2_nl7ecob7oenl7dfhoewptlc4ye - '@algolia/autocomplete-plugin-query-suggestions': 1.7.2_algoliasearch@4.14.2 - '@algolia/autocomplete-theme-classic': 1.7.2 - '@emotion/react': 11.10.6_h7fc2el62uaa77gho3xhys6ola - '@emotion/styled': 11.10.6_7hisdke2c3hq4r3q5z4dcdhmzi - '@radix-ui/react-navigation-menu': 0.1.2_sfoxds7t5ydpegc3knd667wn6m - algoliasearch: 4.14.2 - focus-trap-react: 9.0.2_sfoxds7t5ydpegc3knd667wn6m - polished: 4.2.2 - react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 - react-instantsearch-dom: 6.17.0_kr5x6cjikajrhwznglqptdxk4q - react-paginate: 7.1.5_react@17.0.2 - react-player: 2.11.0_react@17.0.2 - search-insights: 2.2.1 - tinykeys: 1.4.0 - twin.macro: 2.8.2 - use-debounce: 8.0.4_react@17.0.2 - transitivePeerDependencies: - - '@algolia/client-search' - - '@types/react' - - prop-types - - ts-node - dev: false - - /@tokenizer/token/0.3.0: + /@tokenizer/token@0.3.0: resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} dev: true - /@tootallnate/once/2.0.0: + /@tootallnate/once@2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} dev: true - /@tsconfig/node10/1.0.9: + /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: true - /@tsconfig/node12/1.0.11: + /@tsconfig/node12@1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true - /@tsconfig/node14/1.0.3: + /@tsconfig/node14@1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true - /@tsconfig/node16/1.0.3: + /@tsconfig/node16@1.0.3: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} - dev: true - /@types/accepts/1.3.5: + /@types/accepts@1.3.5: resolution: {integrity: sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==} dependencies: - '@types/node': 18.15.5 + '@types/node': 18.19.6 - /@types/acorn/4.0.6: - resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} - dependencies: - '@types/estree': 1.0.0 - dev: false - - /@types/aria-query/4.2.2: - resolution: {integrity: sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==} + /@types/aria-query@5.0.4: + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} dev: true - /@types/babel__core/7.1.19: + /@types/babel__core@7.1.19: resolution: {integrity: sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==} dependencies: - '@babel/parser': 7.20.1 - '@babel/types': 7.20.0 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.18.2 - /@types/babel__generator/7.6.4: + /@types/babel__generator@7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.20.0 + '@babel/types': 7.23.6 - /@types/babel__template/7.4.1: + /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.20.1 - '@babel/types': 7.20.0 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 - /@types/babel__traverse/7.18.2: + /@types/babel__traverse@7.18.2: resolution: {integrity: sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==} dependencies: - '@babel/types': 7.20.0 + '@babel/types': 7.23.6 + + /@types/big.js@6.1.6: + resolution: {integrity: sha512-0r9J+Zz9rYm2hOTwiMAVkm3XFQ4u5uTK37xrQMhc9bysn/sf/okzovWMYYIBMFTn/yrEZ11pusgLEaoarTlQbA==} + dev: false - /@types/body-parser/1.19.2: + /@types/body-parser@1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 - '@types/node': 18.15.5 + '@types/node': 18.19.6 - /@types/busboy/1.5.0: - resolution: {integrity: sha512-ncOOhwmyFDW76c/Tuvv9MA9VGYUCn8blzyWmzYELcNGDb0WXWLSmFi7hJq25YdRBYJrmMBB5jZZwUjlJe9HCjQ==} - dependencies: - '@types/node': 18.15.5 - dev: false + /@types/braces@3.0.4: + resolution: {integrity: sha512-0WR3b8eaISjEW7RpZnclONaLFDf7buaowRHdqLp4vLj54AsSAYWfh3DRbfiYJY9XDxMgx1B4sE1Afw2PGpuHOA==} + dev: true - /@types/connect/3.4.35: + /@types/connect@3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 18.15.5 + '@types/node': 18.19.6 - /@types/content-disposition/0.5.5: + /@types/content-disposition@0.5.5: resolution: {integrity: sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==} - /@types/cookies/0.7.7: + /@types/cookies@0.7.7: resolution: {integrity: sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==} dependencies: '@types/connect': 3.4.35 '@types/express': 4.17.14 '@types/keygrip': 1.0.2 - '@types/node': 18.15.5 - - /@types/cors/2.8.13: - resolution: {integrity: sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==} - dependencies: - '@types/node': 18.15.5 - dev: false - - /@types/debug/4.1.7: - resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} - dependencies: - '@types/ms': 0.7.31 - dev: false - - /@types/estree-jsx/0.0.1: - resolution: {integrity: sha512-gcLAYiMfQklDCPjQegGn0TBAn9it05ISEsEhlKQUddIk7o2XDokOcTN7HBO8tznM0D9dGezvHEfRZBfZf6me0A==} - dependencies: - '@types/estree': 1.0.0 - dev: false - - /@types/estree-jsx/1.0.0: - resolution: {integrity: sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==} - dependencies: - '@types/estree': 1.0.0 - dev: false + '@types/node': 18.19.6 - /@types/estree/1.0.0: - resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} - dev: false + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - /@types/express-serve-static-core/4.17.31: + /@types/express-serve-static-core@4.17.31: resolution: {integrity: sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==} dependencies: - '@types/node': 18.15.5 + '@types/node': 18.19.6 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 - /@types/express/4.17.14: + /@types/express@4.17.14: resolution: {integrity: sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==} dependencies: '@types/body-parser': 1.19.2 @@ -5411,92 +5323,86 @@ packages: '@types/qs': 6.9.7 '@types/serve-static': 1.15.0 - /@types/extract-files/8.1.1: + /@types/extract-files@8.1.1: resolution: {integrity: sha512-dMJJqBqyhsfJKuK7p7HyyNmki7qj1AlwhUKWx6KrU7i1K2T2SPsUsSUTWFmr/sEM1q8rfR8j5IyUmYrDbrhfjQ==} - dev: false + dev: true - /@types/graceful-fs/4.1.5: + /@types/graceful-fs@4.1.5: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} dependencies: - '@types/node': 18.15.5 + '@types/node': 18.19.6 - /@types/graphql-upload/16.0.0: + /@types/graphql-upload@16.0.0: resolution: {integrity: sha512-X2YD1w9cCYSRPFmYDUwfdNNcgjK3TP1uqZfmKvI9/jdGizkpkj0Q/gOzJkkPnpIhR8z0UK4lNtgeQmVW5PsyzA==} dependencies: '@types/express': 4.17.14 '@types/koa': 2.13.5 fs-capacitor: 8.0.0 - graphql: 16.6.0 - - /@types/hast/2.3.4: - resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==} - dependencies: - '@types/unist': 2.0.6 - dev: false - - /@types/hoist-non-react-statics/3.3.1: - resolution: {integrity: sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==} - dependencies: - '@types/react': 17.0.53 - hoist-non-react-statics: 3.3.2 - dev: false + graphql: 16.8.1 - /@types/http-assert/1.5.3: + /@types/http-assert@1.5.3: resolution: {integrity: sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==} - /@types/http-errors/2.0.1: + /@types/http-errors@2.0.1: resolution: {integrity: sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==} - /@types/is-ci/3.0.0: + /@types/inquirer@8.2.10: + resolution: {integrity: sha512-IdD5NmHyVjWM8SHWo/kPBgtzXatwPkfwzyP3fN1jF2g9BWt5WO+8hL2F4o2GKIYsU40PpqeevuUWvkS/roXJkA==} + dependencies: + '@types/through': 0.0.33 + rxjs: 7.8.0 + dev: true + + /@types/is-ci@3.0.0: resolution: {integrity: sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==} dependencies: ci-info: 3.7.1 dev: true - /@types/istanbul-lib-coverage/2.0.4: + /@types/istanbul-lib-coverage@2.0.4: resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} - /@types/istanbul-lib-report/3.0.0: + /@types/istanbul-lib-report@3.0.0: resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} dependencies: '@types/istanbul-lib-coverage': 2.0.4 - /@types/istanbul-reports/3.0.1: + /@types/istanbul-reports@3.0.1: resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} dependencies: '@types/istanbul-lib-report': 3.0.0 - /@types/jest/29.5.0: - resolution: {integrity: sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg==} + /@types/jest@29.5.11: + resolution: {integrity: sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ==} dependencies: expect: 29.5.0 pretty-format: 29.5.0 - /@types/js-cookie/2.2.7: - resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==} - dev: false - - /@types/js-yaml/4.0.5: - resolution: {integrity: sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==} - dev: false - - /@types/jsdom/20.0.0: + /@types/jsdom@20.0.0: resolution: {integrity: sha512-YfAchFs0yM1QPDrLm2VHe+WHGtqms3NXnXAMolrgrVP6fgBHHXy1ozAbo/dFtPNtZC/m66bPiCTWYmqp1F14gA==} dependencies: - '@types/node': 18.15.5 + '@types/node': 18.19.6 '@types/tough-cookie': 4.0.2 parse5: 7.1.1 dev: true - /@types/keygrip/1.0.2: + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + dev: true + + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + + /@types/keygrip@1.0.2: resolution: {integrity: sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==} - /@types/koa-compose/3.2.5: + /@types/koa-compose@3.2.5: resolution: {integrity: sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==} dependencies: '@types/koa': 2.13.5 - /@types/koa/2.13.5: + /@types/koa@2.13.5: resolution: {integrity: sha512-HSUOdzKz3by4fnqagwthW/1w/yJspTgppyyalPVbgZf8jQWvdIXcVW5h2DGtw4zYntOaeRGx49r1hxoPWrD4aA==} dependencies: '@types/accepts': 1.3.5 @@ -5506,215 +5412,340 @@ packages: '@types/http-errors': 2.0.1 '@types/keygrip': 1.0.2 '@types/koa-compose': 3.2.5 - '@types/node': 18.15.5 + '@types/node': 18.19.6 - /@types/lodash-es/4.17.7: + /@types/lodash-es@4.17.7: resolution: {integrity: sha512-z0ptr6UI10VlU6l5MYhGwS4mC8DZyYer2mCoyysZtSF7p26zOX8UpbrV0YpNYLGS8K4PUFIyEr62IMFFjveSiQ==} dependencies: '@types/lodash': 4.14.191 dev: true - /@types/lodash.mergewith/4.6.6: + /@types/lodash.mergewith@4.6.6: resolution: {integrity: sha512-RY/8IaVENjG19rxTZu9Nukqh0W2UrYgmBj5sdns4hWRZaV8PqR7wIKHFKzvOTjo4zVRV7sVI+yFhAJql12Kfqg==} dependencies: '@types/lodash': 4.14.191 dev: false - /@types/lodash.sortby/4.7.7: - resolution: {integrity: sha512-J/4IS+jQopGBrrRetBXDCX0KnSeXJZ0rOTmGAxR9MWGV24YdHxX8IRi9LCGAU9GKWlBov9KRSfQpuup9PReqrw==} - dependencies: - '@types/lodash': 4.14.191 - dev: true - - /@types/lodash/4.14.191: + /@types/lodash@4.14.191: resolution: {integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==} - /@types/mdast/3.0.10: - resolution: {integrity: sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==} + /@types/micromatch@4.0.6: + resolution: {integrity: sha512-2eulCHWqjEpk9/vyic4tBhI8a9qQEl6DaK2n/sF7TweX9YESlypgKyhXMDGt4DAOy/jhLPvVrZc8pTDAMsplJA==} dependencies: - '@types/unist': 2.0.6 - dev: false - - /@types/mdx/2.0.3: - resolution: {integrity: sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==} - dev: false + '@types/braces': 3.0.4 + dev: true - /@types/mime/3.0.1: + /@types/mime@3.0.1: resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} - /@types/minimatch/3.0.5: + /@types/minimatch@3.0.5: resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} dev: true - /@types/minimist/1.2.2: + /@types/minimist@1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true - /@types/mkdirp/1.0.2: + /@types/mkdirp@1.0.2: resolution: {integrity: sha512-o0K1tSO0Dx5X6xlU5F1D6625FawhC3dU3iqr25lluNv/+/QIVH8RLNEiVokgIZo+mz+87w/3Mkg/VvQS+J51fQ==} dependencies: - '@types/node': 18.15.5 + '@types/node': 18.19.6 dev: true - /@types/ms/0.7.31: + /@types/ms@0.7.31: resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} - dev: false + dev: true - /@types/node/12.20.55: + /@types/node@12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: true - /@types/node/18.15.5: - resolution: {integrity: sha512-Ark2WDjjZO7GmvsyFFf81MXuGTA/d6oP38anyxWOL6EREyBKAxKoFHwBhaZxCfLRLpO8JgVXwqOwSwa7jRcjew==} + /@types/node@18.19.6: + resolution: {integrity: sha512-X36s5CXMrrJOs2lQCdDF68apW4Rfx9ixYMawlepwmE4Anezv/AV2LSpKD1Ub8DAc+urp5bk0BGZ6NtmBitfnsg==} + dependencies: + undici-types: 5.26.5 + + /@types/node@20.4.5: + resolution: {integrity: sha512-rt40Nk13II9JwQBdeYqmbn2Q6IVTA5uPhvSO+JVqdXw/6/4glI6oR9ezty/A9Hg5u7JH4OmYmuQ+XvjKm0Datg==} + dev: true - /@types/normalize-package-data/2.4.1: + /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true - /@types/object-path/0.11.1: - resolution: {integrity: sha512-219LSCO9HPcoXcRTC6DbCs0FRhZgBnEMzf16RRqkT40WbkKx3mOeQuz3e2XqbfhOz/AHfbru0kzB1n1RCAsIIg==} - dev: false + /@types/object-hash@3.0.6: + resolution: {integrity: sha512-fOBV8C1FIu2ELinoILQ+ApxcUKz4ngq+IWUYrxSGjXzzjUALijilampwkMgEtJ+h2njAW3pi853QpzNVCHB73w==} + dev: true - /@types/parse-json/4.0.0: + /@types/parse-json@4.0.0: resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} dev: false - /@types/prettier/2.7.2: + /@types/prettier@2.7.2: resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} - /@types/prop-types/15.7.5: + /@types/prop-types@15.7.5: resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} - /@types/qs/6.9.7: + /@types/qs@6.9.7: resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} - /@types/randomstring/1.1.8: + /@types/randomstring@1.1.8: resolution: {integrity: sha512-NPOJcW+TTjT9Qiog0UjSoG3Sj24c7EfzZO39BU9E61D7fQtwNmBNblyQhSsK9+5s9Fm0o31rvX+ZyZkpE/c7jA==} dev: true - /@types/range-parser/1.2.4: + /@types/range-parser@1.2.4: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} - /@types/react-dom/17.0.18: - resolution: {integrity: sha512-rLVtIfbwyur2iFKykP2w0pl/1unw26b5td16d5xMgp7/yjTHomkyxPYChFoCr/FtEX1lN9wY6lFj1qvKdS5kDw==} + /@types/react-dom@18.2.7: + resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==} dependencies: - '@types/react': 17.0.53 + '@types/react': 18.2.17 dev: true - /@types/react-dom/18.0.11: - resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==} + /@types/react@17.0.53: + resolution: {integrity: sha512-1yIpQR2zdYu1Z/dc1OxC+MA6GR240u3gcnP4l6mvj/PJiVaqHsQPmWttsvHsfnhfPbU2FuGmo0wSITPygjBmsw==} dependencies: - '@types/react': 17.0.53 - dev: true + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.2 + csstype: 3.1.1 - /@types/react/17.0.53: - resolution: {integrity: sha512-1yIpQR2zdYu1Z/dc1OxC+MA6GR240u3gcnP4l6mvj/PJiVaqHsQPmWttsvHsfnhfPbU2FuGmo0wSITPygjBmsw==} + /@types/react@18.2.17: + resolution: {integrity: sha512-u+e7OlgPPh+aryjOm5UJMX32OvB2E3QASOAqVMY6Ahs90djagxwv2ya0IctglNbNTexC12qCSMZG47KPfy1hAA==} dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.2 csstype: 3.1.1 + dev: true - /@types/scheduler/0.16.2: + /@types/scheduler@0.16.2: resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} - /@types/semver/6.2.3: + /@types/semver@6.2.3: resolution: {integrity: sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A==} dev: true - /@types/serve-static/1.15.0: + /@types/semver@7.5.6: + resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} + dev: true + + /@types/serve-static@1.15.0: resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==} dependencies: '@types/mime': 3.0.1 - '@types/node': 18.15.5 - - /@types/sha1/1.1.3: - resolution: {integrity: sha512-bXfx/6xrPu1l6pLItGRMPX00lhnJavpj2qiQeLHflXvL2Ix97aC8FTF2/pQoqukRzcCwKyN3csZvOLzamIoaSA==} - dependencies: - '@types/node': 18.15.5 - dev: true + '@types/node': 18.19.6 - /@types/stack-utils/2.0.1: + /@types/stack-utils@2.0.1: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} - /@types/testing-library__jest-dom/5.14.5: + /@types/testing-library__jest-dom@5.14.5: resolution: {integrity: sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==} dependencies: - '@types/jest': 29.5.0 + '@types/jest': 29.5.11 dev: true - /@types/tough-cookie/4.0.2: + /@types/through@0.0.33: + resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} + dependencies: + '@types/node': 18.19.6 + dev: true + + /@types/tough-cookie@4.0.2: resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==} dev: true - /@types/unist/2.0.6: - resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} - dev: false + /@types/use-sync-external-store@0.0.3: + resolution: {integrity: sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==} + dev: true - /@types/wait-on/5.3.1: + /@types/wait-on@5.3.1: resolution: {integrity: sha512-2FFOKCF/YydrMUaqg+fkk49qf0e5rDgwt6aQsMzFQzbS419h2gNOXyiwp/o2yYy27bi/C1z+HgfncryjGzlvgQ==} dependencies: - '@types/node': 18.15.5 + '@types/node': 18.19.6 dev: true - /@types/warning/3.0.0: + /@types/warning@3.0.0: resolution: {integrity: sha512-t/Tvs5qR47OLOr+4E9ckN8AmP2Tf16gWq+/qA4iUGS/OOyHVO8wv2vjJuX8SNOUTJyWb+2t7wJm6cXILFnOROA==} dev: false - /@types/ws/8.5.3: - resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==} - dependencies: - '@types/node': 18.15.5 - - /@types/ws/8.5.4: + /@types/ws@8.5.4: resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} dependencies: - '@types/node': 18.15.5 - dev: true + '@types/node': 18.19.6 - /@types/yargs-parser/21.0.0: + /@types/yargs-parser@21.0.0: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} - /@types/yargs/17.0.13: + /@types/yargs@17.0.13: resolution: {integrity: sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==} dependencies: '@types/yargs-parser': 21.0.0 - /@vitejs/plugin-react-refresh/1.3.6: + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.46.0)(typescript@5.3.3): + resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 5.62.0(eslint@8.46.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/type-utils': 5.62.0(eslint@8.46.0)(typescript@5.3.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.46.0)(typescript@5.3.3) + debug: 4.3.4 + eslint: 8.46.0 + graphemer: 1.4.0 + ignore: 5.2.0 + natural-compare-lite: 1.4.0 + semver: 7.5.4 + tsutils: 3.21.0(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@5.62.0(eslint@8.46.0)(typescript@5.3.3): + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) + debug: 4.3.4 + eslint: 8.46.0 + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager@5.62.0: + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + dev: true + + /@typescript-eslint/type-utils@5.62.0(eslint@8.46.0)(typescript@5.3.3): + resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.46.0)(typescript@5.3.3) + debug: 4.3.4 + eslint: 8.46.0 + tsutils: 3.21.0(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + tsutils: 3.21.0(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@5.62.0(eslint@8.46.0)(typescript@5.3.3): + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) + eslint: 8.46.0 + eslint-scope: 5.1.1 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@5.62.0: + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@vitejs/plugin-react-refresh@1.3.6: resolution: {integrity: sha512-iNR/UqhUOmFFxiezt0em9CgmiJBdWR+5jGxB2FihaoJfqGt76kiwaKoVOJVU5NYcDWMdN06LbyN2VIGIoYdsEA==} engines: {node: '>=12.0.0'} deprecated: This package has been deprecated in favor of @vitejs/plugin-react dependencies: - '@babel/core': 7.19.6 - '@babel/plugin-transform-react-jsx-self': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-react-jsx-source': 7.19.6_@babel+core@7.19.6 + '@babel/core': 7.23.7 + '@babel/plugin-transform-react-jsx-self': 7.18.6(@babel/core@7.23.7) + '@babel/plugin-transform-react-jsx-source': 7.19.6(@babel/core@7.23.7) '@rollup/pluginutils': 4.2.1 react-refresh: 0.10.0 transitivePeerDependencies: - supports-color dev: true - /@xobotyi/scrollbar-width/1.9.5: - resolution: {integrity: sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==} - dev: false - - /@zeit/schemas/2.29.0: + /@zeit/schemas@2.29.0: resolution: {integrity: sha512-g5QiLIfbg3pLuYUJPlisNKY+epQJTcMDsOnVNkscrDP1oi7vmJnzOANYJI/1pZcVJ6umUkBv3aFtlg1UvUHGzA==} dev: true - /abab/2.0.6: + /abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead dev: true - /abort-controller/3.0.0: + /abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} dependencies: event-target-shim: 5.0.1 + dev: false - /abstract-logging/2.0.1: + /abstract-logging@2.0.1: resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} + dev: false - /accepts/1.3.8: + /accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} dependencies: @@ -5722,51 +5753,31 @@ packages: negotiator: 0.6.3 dev: true - /acorn-globals/7.0.1: + /acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: - acorn: 8.8.1 + acorn: 8.11.3 acorn-walk: 8.2.0 dev: true - /acorn-jsx/5.3.2_acorn@8.8.1: + /acorn-jsx@5.3.2(acorn@8.11.3): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.8.1 - dev: false - - /acorn-node/1.8.2: - resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} - dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 - xtend: 4.0.2 - dev: false - - /acorn-walk/7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} - dev: false - - /acorn-walk/8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} - engines: {node: '>=0.4.0'} + acorn: 8.11.3 dev: true - /acorn/7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + /acorn-walk@8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} - hasBin: true - dev: false - /acorn/8.8.1: - resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true - /agent-base/6.0.2: + /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: @@ -5775,23 +5786,27 @@ packages: - supports-color dev: true - /aggregate-error/4.0.1: - resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} - engines: {node: '>=12'} - dependencies: - clean-stack: 4.2.0 - indent-string: 5.0.0 - dev: true - - /ajv-formats/2.1.1: + /ajv-formats@2.1.1(ajv@8.11.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 peerDependenciesMeta: ajv: optional: true dependencies: ajv: 8.11.0 + dev: false - /ajv/8.11.0: + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ajv@8.11.0: resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==} dependencies: fast-deep-equal: 3.1.3 @@ -5799,121 +5814,98 @@ packages: require-from-string: 2.0.2 uri-js: 4.4.1 - /algoliasearch-helper/3.11.1_algoliasearch@4.14.2: - resolution: {integrity: sha512-mvsPN3eK4E0bZG0/WlWJjeqe/bUD2KOEVOl0GyL/TGXn6wcpZU8NOuztGHCUKXkyg5gq6YzUakVTmnmSSO5Yiw==} - peerDependencies: - algoliasearch: '>= 3.1 < 6' - dependencies: - '@algolia/events': 4.0.1 - algoliasearch: 4.14.2 - dev: false - - /algoliasearch/4.14.2: - resolution: {integrity: sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg==} - dependencies: - '@algolia/cache-browser-local-storage': 4.14.2 - '@algolia/cache-common': 4.14.2 - '@algolia/cache-in-memory': 4.14.2 - '@algolia/client-account': 4.14.2 - '@algolia/client-analytics': 4.14.2 - '@algolia/client-common': 4.14.2 - '@algolia/client-personalization': 4.14.2 - '@algolia/client-search': 4.14.2 - '@algolia/logger-common': 4.14.2 - '@algolia/logger-console': 4.14.2 - '@algolia/requester-browser-xhr': 4.14.2 - '@algolia/requester-common': 4.14.2 - '@algolia/requester-node-http': 4.14.2 - '@algolia/transporter': 4.14.2 - dev: false - - /altair-static-slim/5.0.9: + /altair-static-slim@5.0.9: resolution: {integrity: sha512-PlG7yCBfV+dvBWRJBFb/v9m8N7lZcBTFdYNV1WIQfHW7w/sU8yat35uxGoAQ9K7XkOHNpRF0wdyRqmGwtro0bg==} dev: false - /ansi-align/3.0.1: + /ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} dependencies: string-width: 4.2.3 dev: true - /ansi-colors/4.1.3: + /ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} dev: true - /ansi-escapes/4.3.2: + /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} dependencies: type-fest: 0.21.3 - /ansi-escapes/6.0.0: + /ansi-escapes@6.0.0: resolution: {integrity: sha512-IG23inYII3dWlU2EyiAiGj6Bwal5GzsgPMwjYGvc1HPE2dgbj4ZB5ToWBKSquKw74nB3TIuOwaI6/jSULzfgrw==} engines: {node: '>=14.16'} dependencies: - type-fest: 3.2.0 + type-fest: 3.13.1 dev: false - /ansi-regex/5.0.1: + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - /ansi-regex/6.0.1: + /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} - /ansi-styles/3.2.1: + /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} dependencies: color-convert: 1.9.3 - /ansi-styles/4.3.0: + /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} dependencies: color-convert: 2.0.1 - /ansi-styles/5.2.0: + /ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} - /ansi-styles/6.2.1: + /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} dev: true - /anymatch/3.1.2: + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true + + /anymatch@3.1.2: resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - /arch/2.2.0: + /arch@2.2.0: resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} dev: true - /archy/1.0.0: + /archy@1.0.0: resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} + dev: false - /arg/4.1.3: + /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true - /arg/5.0.2: + /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: true - /argparse/1.0.10: + /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 - /argparse/2.0.1: + /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - /aria-hidden/1.2.1_h7fc2el62uaa77gho3xhys6ola: + /aria-hidden@1.2.1(@types/react@17.0.53)(react@17.0.2): resolution: {integrity: sha512-PN344VAf9j1EAi+jyVHOJ8XidQdPVssGco39eNcsGdM4wcsILtxrKLkbuiMfLWYROK1FjRQasMWCBttrhjnr6A==} engines: {node: '>=10'} peerDependencies: @@ -5928,175 +5920,179 @@ packages: tslib: 2.5.0 dev: false - /aria-query/5.1.3: + /aria-query@5.1.3: resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} dependencies: deep-equal: 2.0.5 dev: true - /array-differ/3.0.0: - resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} - engines: {node: '>=8'} + /aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + dependencies: + dequal: 2.0.3 dev: true - /array-find-index/1.0.2: - resolution: {integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==} - engines: {node: '>=0.10.0'} + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.5 + is-array-buffer: 3.0.2 dev: true - /array-flatten/1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + /array-differ@3.0.0: + resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} + engines: {node: '>=8'} + dev: true + + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-string: 1.0.7 dev: true - /array-union/2.1.0: + /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - /array-uniq/1.0.2: + /array-uniq@1.0.2: resolution: {integrity: sha512-GVYjmpL05al4dNlKJm53mKE4w9OOLiuVHWorsIA3YVz+Hu0hcn6PtE3Ydl0EqU7v+7ABC4mjjWsnLUxbpno+CA==} engines: {node: '>=0.10.0'} dev: false - /array.prototype.flat/1.3.0: - resolution: {integrity: sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==} + /array.prototype.findlastindex@1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 es-shim-unscopables: 1.0.0 + get-intrinsic: 1.2.2 dev: true - /arrgv/1.0.2: - resolution: {integrity: sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==} - engines: {node: '>=8.0.0'} + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.0 + dev: true + + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.0 + dev: true + + /array.prototype.tosorted@1.1.2: + resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.0 + get-intrinsic: 1.2.2 + dev: true + + /arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 dev: true - /arrify/1.0.1: + /arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} dev: true - /arrify/2.0.1: + /arrify@2.0.1: resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} engines: {node: '>=8'} dev: true - /arrify/3.0.0: - resolution: {integrity: sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==} - engines: {node: '>=12'} - dev: true - - /asap/2.0.6: + /asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - - /astring/1.8.3: - resolution: {integrity: sha512-sRpyiNrx2dEYIMmUXprS8nlpRg2Drs8m9ElX9vVEXaCB4XEAJhKfs7IcX0IwShjuOAjLR6wzIrgoptz1n19i1A==} - hasBin: true dev: false - /asynckit/0.4.0: + /ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + dev: true + + /asynciterator.prototype@1.0.0: + resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} + dependencies: + has-symbols: 1.0.3 + dev: true + + /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true - /atomic-sleep/1.0.0: + /atomic-sleep@1.0.0: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} + dev: false - /auto-bind/4.0.0: + /auto-bind@4.0.0: resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} engines: {node: '>=8'} + dev: false - /autoprefixer/10.4.13_postcss@8.4.21: - resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} + /autoprefixer@10.4.14(postcss@8.4.21): + resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.21.4 - caniuse-lite: 1.0.30001429 + browserslist: 4.22.2 + caniuse-lite: 1.0.30001576 fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 postcss: 8.4.21 postcss-value-parser: 4.2.0 - dev: false + dev: true - /ava/5.2.0: - resolution: {integrity: sha512-W8yxFXJr/P68JP55eMpQIa6AiXhCX3VeuajM8nolyWNExcMDD6rnIWKTjw0B/+GkFHBIaN6Jd0LtcMThcoqVfg==} - engines: {node: '>=14.19 <15 || >=16.15 <17 || >=18'} - hasBin: true - peerDependencies: - '@ava/typescript': '*' - peerDependenciesMeta: - '@ava/typescript': - optional: true - dependencies: - acorn: 8.8.1 - acorn-walk: 8.2.0 - ansi-styles: 6.2.1 - arrgv: 1.0.2 - arrify: 3.0.0 - callsites: 4.0.0 - cbor: 8.1.0 - chalk: 5.2.0 - chokidar: 3.5.3 - chunkd: 2.0.1 - ci-info: 3.7.1 - ci-parallel-vars: 1.0.1 - clean-yaml-object: 0.1.0 - cli-truncate: 3.1.0 - code-excerpt: 4.0.0 - common-path-prefix: 3.0.0 - concordance: 5.0.4 - currently-unhandled: 0.4.1 - debug: 4.3.4 - del: 7.0.0 - emittery: 1.0.1 - figures: 5.0.0 - globby: 13.1.3 - ignore-by-default: 2.1.0 - indent-string: 5.0.0 - is-error: 2.2.2 - is-plain-object: 5.0.0 - is-promise: 4.0.0 - matcher: 5.0.0 - mem: 9.0.2 - ms: 2.1.3 - p-event: 5.0.1 - p-map: 5.5.0 - picomatch: 2.3.1 - pkg-conf: 4.0.0 - plur: 5.1.0 - pretty-ms: 8.0.0 - resolve-cwd: 3.0.0 - slash: 3.0.0 - stack-utils: 2.0.6 - strip-ansi: 7.0.1 - supertap: 3.0.1 - temp-dir: 3.0.0 - write-file-atomic: 5.0.0 - yargs: 17.6.2 - transitivePeerDependencies: - - supports-color - dev: true - - /available-typed-arrays/1.0.5: + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} dev: true - /avvio/8.2.0: - resolution: {integrity: sha512-bbCQdg7bpEv6kGH41RO/3B2/GMMmJSo2iBK+X8AWN9mujtfUipMDfIjsgHCfpnKqoGEQrrmCDKSa5OQ19+fDmg==} + /avvio@8.2.1: + resolution: {integrity: sha512-TAlMYvOuwGyLK3PfBb5WKBXZmXz2fVCgv23d6zZFdle/q3gPjmxBaeuC0pY0Dzs5PWMSgfqqEZkrye19GlDTgw==} dependencies: archy: 1.0.0 debug: 4.3.4 fastq: 1.13.0 transitivePeerDependencies: - supports-color + dev: false - /axios/0.27.2: + /axe-core@4.7.0: + resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} + engines: {node: '>=4'} + dev: true + + /axios@0.27.2: resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==} dependencies: follow-redirects: 1.15.2 @@ -6105,31 +6101,34 @@ packages: - debug dev: true - /babel-jest/29.5.0_@babel+core@7.19.6: + /axobject-query@3.2.1: + resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + dependencies: + dequal: 2.0.3 + dev: true + + /babel-jest@29.5.0(@babel/core@7.23.7): resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 + '@babel/core': 7.23.7 '@jest/transform': 29.5.0 '@types/babel__core': 7.1.19 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.5.0_@babel+core@7.19.6 + babel-preset-jest: 29.5.0(@babel/core@7.23.7) chalk: 4.1.2 graceful-fs: 4.2.10 slash: 3.0.0 transitivePeerDependencies: - supports-color - /babel-plugin-istanbul/6.1.1: + /babel-plugin-istanbul@6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-plugin-utils': 7.22.5 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -6137,171 +6136,199 @@ packages: transitivePeerDependencies: - supports-color - /babel-plugin-jest-hoist/29.5.0: + /babel-plugin-jest-hoist@29.5.0: resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/template': 7.18.10 - '@babel/types': 7.20.0 + '@babel/template': 7.22.15 + '@babel/types': 7.23.6 '@types/babel__core': 7.1.19 '@types/babel__traverse': 7.18.2 - /babel-plugin-macros/2.8.0: - resolution: {integrity: sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==} - dependencies: - '@babel/runtime': 7.20.13 - cosmiconfig: 6.0.0 - resolve: 1.22.1 - dev: false - - /babel-plugin-macros/3.1.0: + /babel-plugin-macros@3.1.0: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.23.8 cosmiconfig: 7.1.0 - resolve: 1.22.1 + resolve: 1.22.8 dev: false - /babel-plugin-syntax-trailing-function-commas/7.0.0-beta.0: + /babel-plugin-polyfill-corejs2@0.4.7(@babel/core@7.23.7): + resolution: {integrity: sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.7 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.23.7): + resolution: {integrity: sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) + core-js-compat: 3.35.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-regenerator@0.5.4(@babel/core@7.23.7): + resolution: {integrity: sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: resolution: {integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==} + dev: false - /babel-preset-current-node-syntax/1.0.1_@babel+core@7.19.6: + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.7): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.19.6 - '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.19.6 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.19.6 - '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.19.6 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.19.6 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.19.6 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.19.6 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.19.6 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.19.6 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.19.6 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.19.6 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.19.6 - - /babel-preset-fbjs/3.4.0_@babel+core@7.19.6: + '@babel/core': 7.23.7 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.7) + + /babel-preset-fbjs@3.4.0(@babel/core@7.23.7): resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} peerDependencies: '@babel/core': ^7.0.0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-proposal-object-rest-spread': 7.19.4_@babel+core@7.19.6 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.19.6 - '@babel/plugin-syntax-flow': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.19.6 - '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-block-scoping': 7.20.0_@babel+core@7.19.6 - '@babel/plugin-transform-classes': 7.19.0_@babel+core@7.19.6 - '@babel/plugin-transform-computed-properties': 7.18.9_@babel+core@7.19.6 - '@babel/plugin-transform-destructuring': 7.20.0_@babel+core@7.19.6 - '@babel/plugin-transform-flow-strip-types': 7.19.0_@babel+core@7.19.6 - '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.19.6 - '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.19.6 - '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.19.6 - '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-modules-commonjs': 7.19.6_@babel+core@7.19.6 - '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-parameters': 7.20.1_@babel+core@7.19.6 - '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-react-display-name': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.19.6 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.19.6 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.19.6 + '@babel/core': 7.23.7 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.7) + '@babel/plugin-proposal-object-rest-spread': 7.19.4(@babel/core@7.23.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.7) + '@babel/plugin-syntax-flow': 7.18.6(@babel/core@7.23.7) + '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.23.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.7) + '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.23.7) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-flow-strip-types': 7.19.0(@babel/core@7.23.7) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.7) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.23.7) + '@babel/plugin-transform-react-jsx': 7.19.0(@babel/core@7.23.7) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.7) babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 - transitivePeerDependencies: - - supports-color + dev: false - /babel-preset-jest/29.5.0_@babel+core@7.19.6: + /babel-preset-jest@29.5.0(@babel/core@7.23.7): resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 - peerDependenciesMeta: - '@babel/core': - optional: true dependencies: - '@babel/core': 7.19.6 + '@babel/core': 7.23.7 babel-plugin-jest-hoist: 29.5.0 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.19.6 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.7) - /backo2/1.0.2: + /backo2@1.0.2: resolution: {integrity: sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==} - /bail/2.0.2: - resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - dev: false - - /balanced-match/1.0.2: + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - /base64-js/1.5.1: + /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: false - /better-path-resolve/1.0.0: + /better-path-resolve@1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} dependencies: is-windows: 1.0.2 dev: true - /big-integer/1.6.51: + /big-integer@1.6.51: resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} engines: {node: '>=0.6'} dev: true - /binary-extensions/2.2.0: + /big.js@6.2.1: + resolution: {integrity: sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ==} + dev: false + + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - - /blueimp-md5/2.19.0: - resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} dev: true - /bob-esbuild-cli/4.0.0: - resolution: {integrity: sha512-wJ0td3/TdcfjGmKr94pcxi2qsrXQpXuUzX5xEe0FYoOVNqrtSoeqUD67pUXrfgGmA9jDkQoq1t9b0+7FpQtHxw==} + /bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: false + + /bob-esbuild-cli@5.0.0-alpha-227aebc.0(bob-esbuild@5.0.0-alpha-227aebc.0): + resolution: {integrity: sha512-32Iyv8SXr2n7aVPcJjfPT3OEBzLnf+xROWJwM1iK6W0c2oebn3crBKNeFEtEKYAAszHtZ+2+u88COpXTAPaQjw==} engines: {node: '>=14.13.1'} hasBin: true peerDependencies: - bob-esbuild: ^4.0.0 + bob-esbuild: ^5.0.0-alpha-227aebc.0 peerDependenciesMeta: bob-esbuild: optional: true dependencies: - commander: 9.4.1 + bob-esbuild: 5.0.0-alpha-227aebc.0(esbuild@0.18.20)(typescript@5.3.3) + commander: 11.1.0 dev: true - /bob-esbuild-cli/4.0.0_bob-esbuild@4.0.3: - resolution: {integrity: sha512-wJ0td3/TdcfjGmKr94pcxi2qsrXQpXuUzX5xEe0FYoOVNqrtSoeqUD67pUXrfgGmA9jDkQoq1t9b0+7FpQtHxw==} - engines: {node: '>=14.13.1'} - hasBin: true + /bob-esbuild-plugin@5.0.0-alpha-227aebc.0(esbuild@0.18.20)(rollup@2.79.1): + resolution: {integrity: sha512-ez9c3o7Y0CD6rJmx8LSsUGdE/pSvktZGWnyj7hRD8z4ZhDdvMvnCJ3ULv1V5D6BkSoHBHAg3gvuKQ868+/cZaw==} peerDependencies: - bob-esbuild: ^4.0.0 + esbuild: '>=0.14.39' + rollup: '*' peerDependenciesMeta: - bob-esbuild: + esbuild: + optional: true + rollup: optional: true dependencies: - bob-esbuild: 4.0.3_zofgjzmca2gwtey4x4go3tg4j4 - commander: 9.4.1 + '@rollup/pluginutils': 5.1.0(rollup@2.79.1) + esbuild: 0.18.20 + rollup: 2.79.1 dev: true - /bob-esbuild-plugin/4.0.0_ywuimuzxrww3qfvp225qpyckgu: - resolution: {integrity: sha512-Ymk0kEPc0JhL3eZQVnWpjT4/HMX8Hw7aD5CzqSvNAXeUgaR1+8m5O1RtkP/D42ZwNv+FPgD1wKM4pdoQ4ScmAQ==} + /bob-esbuild-plugin@5.0.0-alpha-d826df0.0(esbuild@0.17.19)(rollup@2.79.1): + resolution: {integrity: sha512-ByIveo0lvUmB8sqC4aDqgnNiwg2IyVgtdjLRzBZe51whobfcgxOwYsE5vcY6XUZWClCHfHhQhsrALKixqPNJwg==} peerDependencies: esbuild: '>=0.14.39' rollup: '*' @@ -6311,13 +6338,29 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 4.2.1 - esbuild: 0.17.12 + '@rollup/pluginutils': 5.1.0(rollup@2.79.1) + esbuild: 0.17.19 + rollup: 2.79.1 + dev: true + + /bob-esbuild-plugin@5.0.0-alpha-d826df0.0(esbuild@0.18.20)(rollup@2.79.1): + resolution: {integrity: sha512-ByIveo0lvUmB8sqC4aDqgnNiwg2IyVgtdjLRzBZe51whobfcgxOwYsE5vcY6XUZWClCHfHhQhsrALKixqPNJwg==} + peerDependencies: + esbuild: '>=0.14.39' + rollup: '*' + peerDependenciesMeta: + esbuild: + optional: true + rollup: + optional: true + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@2.79.1) + esbuild: 0.18.20 rollup: 2.79.1 dev: true - /bob-esbuild/4.0.3_zofgjzmca2gwtey4x4go3tg4j4: - resolution: {integrity: sha512-9AGuh6V5Whsditj5n2oJjWAvHwgadgD2HD0qZ4rEBwY9tpj8YbfYeiaXQQV9qJxwT9oUYOsQE53wPNYBFDIfJA==} + /bob-esbuild@5.0.0-alpha-227aebc.0(esbuild@0.18.20)(typescript@5.3.3): + resolution: {integrity: sha512-VWCdAs85bAf377nBfd+3VBvlxH/dmH63M2Fxf0FTp6Pe4JthD3SZmGUiftFJPplc3njUXao4ojtc3hpd9FelKA==} peerDependencies: esbuild: '>=0.14.39' typescript: '*' @@ -6327,15 +6370,36 @@ packages: typescript: optional: true dependencies: - '@pnpm/types': 8.8.0 - bob-esbuild-plugin: 4.0.0_ywuimuzxrww3qfvp225qpyckgu - esbuild: 0.17.12 + '@pnpm/types': 9.4.2 + bob-esbuild-plugin: 5.0.0-alpha-227aebc.0(esbuild@0.18.20)(rollup@2.79.1) + esbuild: 0.18.20 + rollup: 2.79.1 + typescript: 5.3.3 + dev: true + + /bob-ts@5.0.0-alpha-227aebc.0(@types/node@18.19.6)(esbuild@0.17.19)(typescript@5.3.3): + resolution: {integrity: sha512-CTFOVp1Hzo7CQoVYuuGjeMU8kdm2VuUZ2uhOeb5zKigHaAziRfaArB2bbRrLI4joRENs6QPQdEJ6mg5ZtUbcVw==} + engines: {node: '>=14.13.1'} + hasBin: true + peerDependencies: + '@types/node': '*' + esbuild: '>=0.14.39' + typescript: '*' + peerDependenciesMeta: + '@types/node': + optional: true + typescript: + optional: true + dependencies: + '@types/node': 18.19.6 + bob-esbuild-plugin: 5.0.0-alpha-d826df0.0(esbuild@0.17.19)(rollup@2.79.1) + esbuild: 0.17.19 rollup: 2.79.1 - typescript: 4.9.5 + typescript: 5.3.3 dev: true - /bob-ts/4.1.1_egtog7kfy74nw7rr3bmqx36oni: - resolution: {integrity: sha512-lXvGGP46GSU10LMHB27Kq2PZl+DaK1L5geHxxzLw/QklEWnvfzLPJsH9YGvV9F4AdIGJp85FTC1xIfanwd3NbQ==} + /bob-ts@5.0.0-alpha-227aebc.0(@types/node@18.19.6)(esbuild@0.18.20)(typescript@5.3.3): + resolution: {integrity: sha512-CTFOVp1Hzo7CQoVYuuGjeMU8kdm2VuUZ2uhOeb5zKigHaAziRfaArB2bbRrLI4joRENs6QPQdEJ6mg5ZtUbcVw==} engines: {node: '>=14.13.1'} hasBin: true peerDependencies: @@ -6348,15 +6412,15 @@ packages: typescript: optional: true dependencies: - '@types/node': 18.15.5 - bob-esbuild-plugin: 4.0.0_ywuimuzxrww3qfvp225qpyckgu - esbuild: 0.17.12 + '@types/node': 18.19.6 + bob-esbuild-plugin: 5.0.0-alpha-d826df0.0(esbuild@0.18.20)(rollup@2.79.1) + esbuild: 0.18.20 rollup: 2.79.1 - typescript: 4.9.5 + typescript: 5.3.3 dev: true - /bob-tsm/1.1.2_zofgjzmca2gwtey4x4go3tg4j4: - resolution: {integrity: sha512-5H6wIDpQTop5rt/5JRvtssmpiTkIqi1EBkpSy19GfReOed6QoeD+iJIRjNgyiI7ZsX1ogETxgN7KiW5Wx6pUEQ==} + /bob-tsm@2.0.0-alpha-227aebc.0(esbuild@0.17.19)(typescript@5.3.3): + resolution: {integrity: sha512-GiT+6+dvhFdsfb0reGtzoXFFJRMCpgIsaxyKXC+gEP3yh6UC+Yu1gpwbC3jhXGDH5j9TcpCPTZ1OnvmRLVR0Yw==} engines: {node: '>=14.13.1'} hasBin: true peerDependencies: @@ -6366,33 +6430,30 @@ packages: typescript: optional: true dependencies: - esbuild: 0.17.12 - typescript: 4.9.5 + esbuild: 0.17.19 + typescript: 5.3.3 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true - /body-parser/1.20.1: - resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + /bob-tsm@2.0.0-alpha-227aebc.0(esbuild@0.18.20)(typescript@5.3.3): + resolution: {integrity: sha512-GiT+6+dvhFdsfb0reGtzoXFFJRMCpgIsaxyKXC+gEP3yh6UC+Yu1gpwbC3jhXGDH5j9TcpCPTZ1OnvmRLVR0Yw==} + engines: {node: '>=14.13.1'} + hasBin: true + peerDependencies: + esbuild: '>=0.14.39' + typescript: '>=4.7.4' + peerDependenciesMeta: + typescript: + optional: true dependencies: - bytes: 3.1.2 - content-type: 1.0.4 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.1 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color + esbuild: 0.18.20 + typescript: 5.3.3 + optionalDependencies: + fsevents: 2.3.3 dev: true - /boxen/7.0.0: + /boxen@7.0.0: resolution: {integrity: sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==} engines: {node: '>=14.16'} dependencies: @@ -6403,153 +6464,142 @@ packages: string-width: 5.1.2 type-fest: 2.19.0 widest-line: 4.0.1 - wrap-ansi: 8.0.1 + wrap-ansi: 8.1.0 dev: true - /bplist-parser/0.2.0: + /bplist-parser@0.2.0: resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} engines: {node: '>= 5.10.0'} dependencies: big-integer: 1.6.51 dev: true - /brace-expansion/1.1.11: + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - /brace-expansion/2.0.1: + /brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 dev: true - /braces/3.0.2: + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - /breakword/1.0.5: + /breakword@1.0.5: resolution: {integrity: sha512-ex5W9DoOQ/LUEU3PMdLs9ua/CYZl1678NUkKOdUSi8Aw5F1idieaiRURCBFJCwVcrD1J8Iy3vfWSloaMwO2qFg==} dependencies: wcwidth: 1.0.1 dev: true - /browserslist/4.21.4: - resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} + /browserslist@4.22.2: + resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001429 - electron-to-chromium: 1.4.284 - node-releases: 2.0.6 - update-browserslist-db: 1.0.10_browserslist@4.21.4 + caniuse-lite: 1.0.30001576 + electron-to-chromium: 1.4.630 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.2) - /bs-logger/0.2.6: + /bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} dependencies: fast-json-stable-stringify: 2.1.0 + dev: true - /bser/2.1.1: + /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: node-int64: 0.4.0 - /buffer-from/1.1.2: + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - /buffer/6.0.3: + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + + /buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 + dev: false - /bufferutil/4.0.7: + /bufferutil@4.0.7: resolution: {integrity: sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==} engines: {node: '>=6.14.2'} requiresBuild: true dependencies: node-gyp-build: 4.5.0 - dev: true - /bundle-name/3.0.0: + /bundle-name@3.0.0: resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} engines: {node: '>=12'} dependencies: run-applescript: 5.0.0 dev: true - /busboy/1.6.0: + /busboy@0.3.1: + resolution: {integrity: sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==} + engines: {node: '>=4.5.0'} + dependencies: + dicer: 0.3.0 + dev: false + + /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} dependencies: streamsearch: 1.1.0 dev: false - /bytes-iec/3.1.1: + /bytes-iec@3.1.1: resolution: {integrity: sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==} engines: {node: '>= 0.8'} dev: true - /bytes/3.0.0: + /bytes@3.0.0: resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} engines: {node: '>= 0.8'} dev: true - /bytes/3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - - /c8/7.13.0: - resolution: {integrity: sha512-/NL4hQTv1gBL6J6ei80zu3IiTrmePDKXKXOTLpHvcIWZTVYQlDhVWjjWvkhICylE8EwwnMVzDZugCvdx0/DIIA==} - engines: {node: '>=10.12.0'} - hasBin: true - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@istanbuljs/schema': 0.1.3 - find-up: 5.0.0 - foreground-child: 2.0.0 - istanbul-lib-coverage: 3.2.0 - istanbul-lib-report: 3.0.0 - istanbul-reports: 3.1.5 - rimraf: 3.0.2 - test-exclude: 6.0.0 - v8-to-istanbul: 9.0.1 - yargs: 16.2.0 - yargs-parser: 20.2.9 - dev: true - - /call-bind/1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.1.3 + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 dev: true - /callsites/3.1.0: + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - /callsites/4.0.0: - resolution: {integrity: sha512-y3jRROutgpKdz5vzEhWM34TidDU8vkJppF8dszITeb1PQmSqV3DTxyV8G/lyO/DNvtE1YTedehmw9MPZsCBHxQ==} - engines: {node: '>=12.20'} - dev: true - - /camel-case/4.1.2: + /camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} dependencies: pascal-case: 3.1.2 tslib: 2.5.0 + dev: false - /camelcase-css/2.0.1: + /camelcase-css@2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - dev: false + dev: true - /camelcase-keys/6.2.2: + /camelcase-keys@6.2.2: resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} engines: {node: '>=8'} dependencies: @@ -6558,7 +6608,7 @@ packages: quick-lru: 4.0.1 dev: true - /camelcase-keys/8.0.2: + /camelcase-keys@8.0.2: resolution: {integrity: sha512-qMKdlOfsjlezMqxkUGGMaWWs17i2HoL15tM+wtx8ld4nLrUwU58TFdvyGOz/piNP842KeO8yXvggVQSdQ828NA==} engines: {node: '>=14.16'} dependencies: @@ -6568,48 +6618,38 @@ packages: type-fest: 2.19.0 dev: true - /camelcase/5.3.1: + /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} - /camelcase/6.3.0: + /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - /camelcase/7.0.0: + /camelcase@7.0.0: resolution: {integrity: sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ==} engines: {node: '>=14.16'} dev: true - /caniuse-lite/1.0.30001429: - resolution: {integrity: sha512-511ThLu1hF+5RRRt0zYCf2U2yRr9GPF6m5y90SBCWsvSoYoW7yAGlv/elyPaNfvGCkp6kj/KFZWU0BMA69Prsg==} + /caniuse-lite@1.0.30001576: + resolution: {integrity: sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==} - /capital-case/1.0.4: + /capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} dependencies: no-case: 3.0.4 tslib: 2.5.0 upper-case-first: 2.0.2 - - /cbor/8.1.0: - resolution: {integrity: sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==} - engines: {node: '>=12.19'} - dependencies: - nofilter: 3.1.0 - dev: true - - /ccount/2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} dev: false - /chalk-template/0.4.0: + /chalk-template@0.4.0: resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} engines: {node: '>=12'} dependencies: chalk: 4.1.2 dev: true - /chalk/2.4.2: + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} dependencies: @@ -6617,7 +6657,7 @@ packages: escape-string-regexp: 1.0.5 supports-color: 5.5.0 - /chalk/3.0.0: + /chalk@3.0.0: resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} engines: {node: '>=8'} dependencies: @@ -6625,23 +6665,23 @@ packages: supports-color: 7.2.0 dev: true - /chalk/4.1.2: + /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - /chalk/5.0.1: + /chalk@5.0.1: resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: true - /chalk/5.2.0: + /chalk@5.2.0: resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - /change-case-all/1.0.15: + /change-case-all@1.0.15: resolution: {integrity: sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==} dependencies: change-case: 4.1.2 @@ -6654,8 +6694,9 @@ packages: title-case: 3.0.3 upper-case: 2.0.2 upper-case-first: 2.0.2 + dev: false - /change-case/4.1.2: + /change-case@4.1.2: resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} dependencies: camel-case: 4.1.2 @@ -6670,46 +6711,26 @@ packages: sentence-case: 3.0.4 snake-case: 3.0.4 tslib: 2.5.0 + dev: false - /changesets-github-release/0.1.0: + /changesets-github-release@0.1.0: resolution: {integrity: sha512-ai++eLjlEjW4flLKExS8Li2a5qocO+N3YTR13aZCAwt4bgj6MYXgPfdoukLktaQXs3QUmaHz5dG2ISot/hZD5g==} hasBin: true dev: true - /char-regex/1.0.2: + /char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} - /char-regex/2.0.1: + /char-regex@2.0.1: resolution: {integrity: sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==} engines: {node: '>=12.20'} dev: false - /character-entities-html4/2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - dev: false - - /character-entities-legacy/3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - dev: false - - /character-entities/2.0.2: - resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - dev: false - - /character-reference-invalid/2.0.1: - resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - dev: false - - /chardet/0.7.0: + /chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true - - /charenc/0.0.2: - resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} - dev: true - /chokidar/3.5.3: + /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} dependencies: @@ -6721,57 +6742,43 @@ packages: normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: 2.3.2 - - /chunkd/2.0.1: - resolution: {integrity: sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==} + fsevents: 2.3.3 dev: true - /ci-info/3.7.1: + /ci-info@3.7.1: resolution: {integrity: sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==} engines: {node: '>=8'} - /ci-parallel-vars/1.0.1: - resolution: {integrity: sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==} - dev: true - - /cjs-module-lexer/1.2.2: + /cjs-module-lexer@1.2.2: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} - /classnames/2.3.2: - resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==} - dev: false - - /clean-set/1.1.2: - resolution: {integrity: sha512-cA8uCj0qSoG9e0kevyOWXwPaELRPVg5Pxp6WskLMwerx257Zfnh8Nl0JBH59d7wQzij2CK7qEfJQK3RjuKKIug==} - dev: false - - /clean-stack/4.2.0: - resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} - engines: {node: '>=12'} - dependencies: - escape-string-regexp: 5.0.0 - dev: true - - /clean-yaml-object/0.1.0: - resolution: {integrity: sha512-3yONmlN9CSAkzNwnRCiJQ7Q2xK5mWuEfL3PuTZcAUzhObbXsfsnMptJzXwz93nc5zn9V9TwCVMmV7w4xsm43dw==} - engines: {node: '>=0.10.0'} - dev: true - - /cli-boxes/3.0.0: + /cli-boxes@3.0.0: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} dev: true - /cli-truncate/3.1.0: - resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} dependencies: - slice-ansi: 5.0.0 - string-width: 5.1.2 - dev: true + restore-cursor: 3.1.0 + dev: false + + /cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + dev: false + + /cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + dev: false - /clipboardy/3.0.0: + /client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + dev: false + + /clipboardy@3.0.0: resolution: {integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: @@ -6780,22 +6787,14 @@ packages: is-wsl: 2.2.0 dev: true - /cliui/6.0.0: + /cliui@6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 - /cliui/7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: true - - /cliui/8.0.1: + /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} dependencies: @@ -6803,125 +6802,68 @@ packages: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - /clone/1.0.4: + /clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} - dev: true - /co/4.6.0: + /co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - /code-excerpt/4.0.0: - resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - convert-to-spaces: 2.0.1 - dev: true - - /collect-v8-coverage/1.0.1: + /collect-v8-coverage@1.0.1: resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} - /color-convert/1.9.3: + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 - /color-convert/2.0.1: + /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - /color-name/1.1.3: + /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - /color-name/1.1.4: + /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - /color-string/1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.2 - dev: false - - /color/3.2.1: - resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} - dependencies: - color-convert: 1.9.3 - color-string: 1.9.1 - dev: false - - /color/4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 - dev: false - - /combined-stream/1.0.8: + /combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 dev: true - /comma-separated-tokens/2.0.2: - resolution: {integrity: sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==} - dev: false - - /commander/10.0.0: - resolution: {integrity: sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==} - engines: {node: '>=14'} - dev: true - - /commander/2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: false - - /commander/5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} - dev: true + /commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} - /commander/6.2.1: - resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} dev: true - /commander/7.2.0: + /commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} - dev: false - - /commander/8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} - dev: false - - /commander/9.4.1: - resolution: {integrity: sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==} - engines: {node: ^12.20.0 || >=14} - dev: true - - /common-path-prefix/3.0.0: - resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} dev: true - /common-tags/1.8.2: + /common-tags@1.8.2: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} engines: {node: '>=4.0.0'} + dev: false - /compressible/2.0.18: + /compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 dev: true - /compression/1.7.4: + /compression@1.7.4: resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} engines: {node: '>= 0.8.0'} dependencies: @@ -6936,28 +6878,14 @@ packages: - supports-color dev: true - /compute-scroll-into-view/1.0.14: + /compute-scroll-into-view@1.0.14: resolution: {integrity: sha512-mKDjINe3tc6hGelUMNDzuhorIUZ7kS7BwyY0r2wQd2HOH2tRuJykiC06iSEX8y1TuhNzvz4GcJnK16mM2J1NMQ==} dev: false - /concat-map/0.0.1: + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - /concordance/5.0.4: - resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==} - engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'} - dependencies: - date-time: 3.1.0 - esutils: 2.0.3 - fast-diff: 1.2.0 - js-string-escape: 1.0.1 - lodash: 4.17.21 - md5-hex: 3.0.1 - semver: 7.3.8 - well-known-symbols: 2.0.0 - dev: true - - /concurrently/7.6.0: + /concurrently@7.6.0: resolution: {integrity: sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==} engines: {node: ^12.20.0 || ^14.13.0 || >=16.0.0} hasBin: true @@ -6965,7 +6893,7 @@ packages: chalk: 4.1.2 date-fns: 2.29.3 lodash: 4.17.21 - rxjs: 7.5.7 + rxjs: 7.8.0 shell-quote: 1.7.4 spawn-command: 0.0.2-1 supports-color: 8.1.1 @@ -6973,85 +6901,43 @@ packages: yargs: 17.6.2 dev: true - /constant-case/3.0.4: + /constant-case@3.0.4: resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} dependencies: no-case: 3.0.4 tslib: 2.5.0 upper-case: 2.0.2 + dev: false - /content-disposition/0.5.2: + /content-disposition@0.5.2: resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} engines: {node: '>= 0.6'} dev: true - /content-disposition/0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /content-type/1.0.4: - resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} - engines: {node: '>= 0.6'} - - /convert-source-map/1.9.0: + /convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - /convert-source-map/2.0.0: + /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - /convert-to-spaces/2.0.1: - resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - - /cookie-signature/1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - dev: true - - /cookie/0.5.0: + /cookie@0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} - - /copy-to-clipboard/3.3.1: - resolution: {integrity: sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==} - dependencies: - toggle-selection: 1.0.6 dev: false - /copy-to-clipboard/3.3.2: - resolution: {integrity: sha512-Vme1Z6RUDzrb6xAI7EZlVZ5uvOk2F//GaxKUxajDqm9LhOVM1inxNAD2vy+UZDYsd0uyA9s7b3/FVZPSxqrCfg==} + /copy-to-clipboard@3.3.1: + resolution: {integrity: sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==} dependencies: toggle-selection: 1.0.6 dev: false - /core-js/3.26.0: - resolution: {integrity: sha512-+DkDrhoR4Y0PxDz6rurahuB+I45OsEUv8E1maPTB6OuHRohMMcznBq9TMpdpDMm/hUPob/mJJS3PqgbHpMTQgw==} - requiresBuild: true - dev: false - - /cors/2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 - dev: false - - /cosmiconfig/6.0.0: - resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} - engines: {node: '>=8'} + /core-js-compat@3.35.0: + resolution: {integrity: sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==} dependencies: - '@types/parse-json': 4.0.0 - import-fresh: 3.3.0 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - dev: false + browserslist: 4.22.2 + dev: true - /cosmiconfig/7.1.0: + /cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} dependencies: @@ -7062,7 +6948,7 @@ packages: yaml: 1.10.2 dev: false - /cosmiconfig/8.1.3: + /cosmiconfig@8.1.3: resolution: {integrity: sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==} engines: {node: '>=14'} dependencies: @@ -7070,27 +6956,27 @@ packages: js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - dev: true + dev: false - /create-require/1.1.1: + /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true - /cross-env/7.0.3: + /cross-env@7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} hasBin: true dependencies: cross-spawn: 7.0.3 - /cross-fetch/3.1.5: + /cross-fetch@3.1.5: resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} dependencies: node-fetch: 2.6.7 transitivePeerDependencies: - encoding + dev: false - /cross-spawn-async/2.2.5: + /cross-spawn-async@2.2.5: resolution: {integrity: sha512-snteb3aVrxYYOX9e8BabYFK9WhCDhTlw1YQktfTthBogxri4/2r9U2nQc0ffY73ZAxezDc+U8gvHAeU1wy1ubQ==} deprecated: cross-spawn no longer requires a build toolchain, use it instead dependencies: @@ -7098,7 +6984,7 @@ packages: which: 1.3.1 dev: true - /cross-spawn/5.1.0: + /cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} dependencies: lru-cache: 4.1.5 @@ -7106,7 +6992,7 @@ packages: which: 1.3.1 dev: true - /cross-spawn/7.0.3: + /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} dependencies: @@ -7114,7 +7000,7 @@ packages: shebang-command: 2.0.0 which: 2.0.2 - /cross-undici-fetch/0.4.14: + /cross-undici-fetch@0.4.14: resolution: {integrity: sha512-CCep44A/baoO8kYJBIR1cRO/tRAk29xzb/tH3O85OtgwZGkL5I0tJZ47ccZdrnAJxrl5tlaYhAOx09fJXMcUqQ==} dependencies: abort-controller: 3.0.0 @@ -7128,91 +7014,64 @@ packages: - encoding dev: false - /crypt/0.0.2: - resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} - dev: true - - /crypto-random-string/4.0.0: + /crypto-random-string@4.0.0: resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} engines: {node: '>=12'} dependencies: type-fest: 1.4.0 dev: true - /css-box-model/1.2.1: + /css-box-model@1.2.1: resolution: {integrity: sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==} dependencies: tiny-invariant: 1.3.1 dev: false - /css-color-names/0.0.4: - resolution: {integrity: sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==} - dev: false - - /css-in-js-utils/2.0.1: - resolution: {integrity: sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==} - dependencies: - hyphenate-style-name: 1.0.4 - isobject: 3.0.1 - dev: false - - /css-tree/1.1.3: - resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} - engines: {node: '>=8.0.0'} - dependencies: - mdn-data: 2.0.14 - source-map: 0.6.1 - dev: false - - /css-unit-converter/1.1.2: - resolution: {integrity: sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==} - dev: false - - /css.escape/1.5.1: + /css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} dev: true - /cssesc/3.0.0: + /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true - dev: false + dev: true - /cssom/0.3.8: + /cssom@0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} dev: true - /cssom/0.5.0: + /cssom@0.5.0: resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} dev: true - /cssstyle/2.3.0: + /cssstyle@2.3.0: resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} dependencies: cssom: 0.3.8 dev: true - /csstype/3.0.9: + /csstype@3.0.9: resolution: {integrity: sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==} dev: false - /csstype/3.1.1: + /csstype@3.1.1: resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} - /csv-generate/3.4.3: + /csv-generate@3.4.3: resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} dev: true - /csv-parse/4.16.3: + /csv-parse@4.16.3: resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} dev: true - /csv-stringify/5.6.5: + /csv-stringify@5.6.5: resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} dev: true - /csv/5.5.3: + /csv@5.5.3: resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} engines: {node: '>= 0.1.90'} dependencies: @@ -7222,877 +7081,375 @@ packages: stream-transform: 2.1.3 dev: true - /currently-unhandled/0.4.1: - resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==} - engines: {node: '>=0.10.0'} - dependencies: - array-find-index: 1.0.2 + /damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} dev: true - /d3-array/1.2.4: - resolution: {integrity: sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==} - dev: false - - /d3-array/3.2.0: - resolution: {integrity: sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==} + /data-urls@3.0.2: + resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} dependencies: - internmap: 2.0.3 - dev: false - - /d3-axis/1.0.12: - resolution: {integrity: sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==} - dev: false + abab: 2.0.6 + whatwg-mimetype: 3.0.0 + whatwg-url: 11.0.0 + dev: true - /d3-axis/3.0.0: - resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} - engines: {node: '>=12'} - dev: false + /dataloader@1.4.0: + resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} + dev: true - /d3-brush/1.1.6: - resolution: {integrity: sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==} - dependencies: - d3-dispatch: 1.0.6 - d3-drag: 1.2.5 - d3-interpolate: 1.4.0 - d3-selection: 1.4.2 - d3-transition: 1.3.2 + /dataloader@2.1.0: + resolution: {integrity: sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ==} dev: false - /d3-brush/3.0.0: - resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} - engines: {node: '>=12'} - dependencies: - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-transition: 3.0.1_d3-selection@3.0.0 - dev: false + /date-fns@2.29.3: + resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==} + engines: {node: '>=0.11'} - /d3-chord/1.0.6: - resolution: {integrity: sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==} + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true dependencies: - d3-array: 1.2.4 - d3-path: 1.0.9 - dev: false + ms: 2.0.0 + dev: true - /d3-chord/3.0.1: - resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} - engines: {node: '>=12'} + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true dependencies: - d3-path: 3.0.1 - dev: false - - /d3-collection/1.0.7: - resolution: {integrity: sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==} - dev: false - - /d3-color/3.1.0: - resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} - engines: {node: '>=12'} - dev: false + ms: 2.1.3 + dev: true - /d3-contour/1.3.2: - resolution: {integrity: sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==} + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true dependencies: - d3-array: 1.2.4 - dev: false + ms: 2.1.2 - /d3-contour/4.0.0: - resolution: {integrity: sha512-7aQo0QHUTu/Ko3cP9YK9yUTxtoDEiDGwnBHyLxG5M4vqlBkO/uixMRele3nfsfj6UXOcuReVpVXzAboGraYIJw==} - engines: {node: '>=12'} + /decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} dependencies: - d3-array: 3.2.0 - dev: false + decamelize: 1.2.0 + map-obj: 1.0.1 + dev: true - /d3-delaunay/6.0.2: - resolution: {integrity: sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==} - engines: {node: '>=12'} - dependencies: - delaunator: 5.0.0 - dev: false + /decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} - /d3-dispatch/1.0.6: - resolution: {integrity: sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==} - dev: false + /decamelize@6.0.0: + resolution: {integrity: sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true - /d3-dispatch/3.0.1: - resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} - engines: {node: '>=12'} - dev: false + /decimal.js@10.4.2: + resolution: {integrity: sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==} + dev: true - /d3-drag/1.2.5: - resolution: {integrity: sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==} - dependencies: - d3-dispatch: 1.0.6 - d3-selection: 1.4.2 - dev: false + /dedent@0.7.0: + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} - /d3-drag/3.0.0: - resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} - engines: {node: '>=12'} + /deep-equal@2.0.5: + resolution: {integrity: sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==} dependencies: - d3-dispatch: 3.0.1 - d3-selection: 3.0.0 - dev: false + call-bind: 1.0.5 + es-get-iterator: 1.1.2 + get-intrinsic: 1.2.2 + is-arguments: 1.1.1 + is-date-object: 1.0.5 + is-regex: 1.1.4 + isarray: 2.0.5 + object-is: 1.1.5 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.5.1 + side-channel: 1.0.4 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.13 + dev: true - /d3-dsv/1.2.0: - resolution: {integrity: sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==} - hasBin: true - dependencies: - commander: 2.20.3 - iconv-lite: 0.4.24 - rw: 1.3.3 - dev: false + /deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + dev: true - /d3-dsv/3.0.1: - resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} - engines: {node: '>=12'} - hasBin: true - dependencies: - commander: 7.2.0 - iconv-lite: 0.6.3 - rw: 1.3.3 - dev: false + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true - /d3-ease/1.0.7: - resolution: {integrity: sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==} - dev: false + /deepmerge@4.2.2: + resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} + engines: {node: '>=0.10.0'} - /d3-ease/3.0.1: - resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + /default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} engines: {node: '>=12'} - dev: false - - /d3-fetch/1.2.0: - resolution: {integrity: sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==} dependencies: - d3-dsv: 1.2.0 - dev: false + bplist-parser: 0.2.0 + untildify: 4.0.0 + dev: true - /d3-fetch/3.0.1: - resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} + /default-browser@3.1.0: + resolution: {integrity: sha512-SOHecvSoairSAWxEHP/0qcsld/KtI3DargfEuELQDyHIYmS2EMgdGhHOTC1GxaYr+NLUV6kDroeiSBfnNHnn8w==} engines: {node: '>=12'} dependencies: - d3-dsv: 3.0.1 - dev: false + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 5.1.1 + xdg-default-browser: 2.1.0 + dev: true - /d3-force/1.2.1: - resolution: {integrity: sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==} + /defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: - d3-collection: 1.0.7 - d3-dispatch: 1.0.6 - d3-quadtree: 1.0.7 - d3-timer: 1.0.10 - dev: false + clone: 1.0.4 - /d3-force/3.0.0: - resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} - engines: {node: '>=12'} + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} dependencies: - d3-dispatch: 3.0.1 - d3-quadtree: 3.0.1 - d3-timer: 3.0.1 - dev: false + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.0 + dev: true - /d3-format/1.4.5: - resolution: {integrity: sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==} - dev: false + /define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + dev: true - /d3-format/3.1.0: - resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} + /define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} - dev: false + dev: true - /d3-geo/1.12.1: - resolution: {integrity: sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==} + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} dependencies: - d3-array: 1.2.4 - dev: false + define-data-property: 1.1.1 + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + dev: true - /d3-geo/3.0.1: - resolution: {integrity: sha512-Wt23xBych5tSy9IYAM1FR2rWIBFWa52B/oF/GYe5zbdHrg08FU8+BuI6X4PvTwPDdqdAdq04fuWJpELtsaEjeA==} - engines: {node: '>=12'} - dependencies: - d3-array: 3.2.0 - dev: false + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: true - /d3-hierarchy/1.1.9: - resolution: {integrity: sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==} + /depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} dev: false - /d3-hierarchy/3.1.2: - resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} - engines: {node: '>=12'} + /dependency-graph@0.11.0: + resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} + engines: {node: '>= 0.6.0'} dev: false - /d3-interpolate/1.4.0: - resolution: {integrity: sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==} - dependencies: - d3-color: 3.1.0 - dev: false + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: true - /d3-interpolate/3.0.1: - resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} - engines: {node: '>=12'} - dependencies: - d3-color: 3.1.0 - dev: false + /detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + dev: true - /d3-path/1.0.9: - resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} - dev: false + /detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} - /d3-path/3.0.1: - resolution: {integrity: sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==} - engines: {node: '>=12'} + /detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} dev: false - /d3-polygon/1.0.6: - resolution: {integrity: sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==} + /dicer@0.3.0: + resolution: {integrity: sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==} + engines: {node: '>=4.5.0'} + dependencies: + streamsearch: 0.1.2 dev: false - /d3-polygon/3.0.1: - resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} - engines: {node: '>=12'} - dev: false + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: true - /d3-quadtree/1.0.7: - resolution: {integrity: sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==} - dev: false + /diff-sequences@29.4.3: + resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - /d3-quadtree/3.0.1: - resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} - engines: {node: '>=12'} - dev: false + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} - /d3-random/1.1.2: - resolution: {integrity: sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==} - dev: false + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 - /d3-random/3.0.1: - resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} - engines: {node: '>=12'} - dev: false + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: true - /d3-scale-chromatic/1.5.0: - resolution: {integrity: sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==} + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} dependencies: - d3-color: 3.1.0 - d3-interpolate: 1.4.0 - dev: false + esutils: 2.0.3 + dev: true - /d3-scale-chromatic/3.0.0: - resolution: {integrity: sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==} - engines: {node: '>=12'} + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} dependencies: - d3-color: 3.1.0 - d3-interpolate: 3.0.1 - dev: false + esutils: 2.0.3 + dev: true - /d3-scale/2.2.2: - resolution: {integrity: sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==} - dependencies: - d3-array: 1.2.4 - d3-collection: 1.0.7 - d3-format: 1.4.5 - d3-interpolate: 1.4.0 - d3-time: 1.1.0 - d3-time-format: 2.3.0 - dev: false + /dom-accessibility-api@0.5.14: + resolution: {integrity: sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==} + dev: true - /d3-scale/4.0.2: - resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} - engines: {node: '>=12'} - dependencies: - d3-array: 3.2.0 - d3-format: 3.1.0 - d3-interpolate: 3.0.1 - d3-time: 3.0.0 - d3-time-format: 4.1.0 - dev: false - - /d3-selection/1.4.2: - resolution: {integrity: sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==} - dev: false - - /d3-selection/3.0.0: - resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} - engines: {node: '>=12'} - dev: false - - /d3-shape/1.3.7: - resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} - dependencies: - d3-path: 1.0.9 - dev: false - - /d3-shape/3.1.0: - resolution: {integrity: sha512-tGDh1Muf8kWjEDT/LswZJ8WF85yDZLvVJpYU9Nq+8+yW1Z5enxrmXOhTArlkaElU+CTn0OTVNli+/i+HP45QEQ==} - engines: {node: '>=12'} - dependencies: - d3-path: 3.0.1 - dev: false - - /d3-time-format/2.3.0: - resolution: {integrity: sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==} - dependencies: - d3-time: 1.1.0 - dev: false - - /d3-time-format/4.1.0: - resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} - engines: {node: '>=12'} - dependencies: - d3-time: 3.0.0 - dev: false - - /d3-time/1.1.0: - resolution: {integrity: sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==} - dev: false - - /d3-time/3.0.0: - resolution: {integrity: sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==} - engines: {node: '>=12'} - dependencies: - d3-array: 3.2.0 - dev: false - - /d3-timer/1.0.10: - resolution: {integrity: sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==} - dev: false - - /d3-timer/3.0.1: - resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} - engines: {node: '>=12'} - dev: false - - /d3-transition/1.3.2: - resolution: {integrity: sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==} - dependencies: - d3-color: 3.1.0 - d3-dispatch: 1.0.6 - d3-ease: 1.0.7 - d3-interpolate: 1.4.0 - d3-selection: 1.4.2 - d3-timer: 1.0.10 - dev: false - - /d3-transition/3.0.1_d3-selection@3.0.0: - resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} - engines: {node: '>=12'} - peerDependencies: - d3-selection: 2 - 3 - dependencies: - d3-color: 3.1.0 - d3-dispatch: 3.0.1 - d3-ease: 3.0.1 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-timer: 3.0.1 - dev: false - - /d3-voronoi/1.1.4: - resolution: {integrity: sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==} - dev: false - - /d3-zoom/1.8.3: - resolution: {integrity: sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==} - dependencies: - d3-dispatch: 1.0.6 - d3-drag: 1.2.5 - d3-interpolate: 1.4.0 - d3-selection: 1.4.2 - d3-transition: 1.3.2 - dev: false - - /d3-zoom/3.0.0: - resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} - engines: {node: '>=12'} - dependencies: - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-transition: 3.0.1_d3-selection@3.0.0 - dev: false - - /d3/5.16.0: - resolution: {integrity: sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==} - dependencies: - d3-array: 1.2.4 - d3-axis: 1.0.12 - d3-brush: 1.1.6 - d3-chord: 1.0.6 - d3-collection: 1.0.7 - d3-color: 3.1.0 - d3-contour: 1.3.2 - d3-dispatch: 1.0.6 - d3-drag: 1.2.5 - d3-dsv: 1.2.0 - d3-ease: 1.0.7 - d3-fetch: 1.2.0 - d3-force: 1.2.1 - d3-format: 1.4.5 - d3-geo: 1.12.1 - d3-hierarchy: 1.1.9 - d3-interpolate: 1.4.0 - d3-path: 1.0.9 - d3-polygon: 1.0.6 - d3-quadtree: 1.0.7 - d3-random: 1.1.2 - d3-scale: 2.2.2 - d3-scale-chromatic: 1.5.0 - d3-selection: 1.4.2 - d3-shape: 1.3.7 - d3-time: 1.1.0 - d3-time-format: 2.3.0 - d3-timer: 1.0.10 - d3-transition: 1.3.2 - d3-voronoi: 1.1.4 - d3-zoom: 1.8.3 - dev: false - - /d3/7.6.1: - resolution: {integrity: sha512-txMTdIHFbcpLx+8a0IFhZsbp+PfBBPt8yfbmukZTQFroKuFqIwqswF0qE5JXWefylaAVpSXFoKm3yP+jpNLFLw==} - engines: {node: '>=12'} - dependencies: - d3-array: 3.2.0 - d3-axis: 3.0.0 - d3-brush: 3.0.0 - d3-chord: 3.0.1 - d3-color: 3.1.0 - d3-contour: 4.0.0 - d3-delaunay: 6.0.2 - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-dsv: 3.0.1 - d3-ease: 3.0.1 - d3-fetch: 3.0.1 - d3-force: 3.0.0 - d3-format: 3.1.0 - d3-geo: 3.0.1 - d3-hierarchy: 3.1.2 - d3-interpolate: 3.0.1 - d3-path: 3.0.1 - d3-polygon: 3.0.1 - d3-quadtree: 3.0.1 - d3-random: 3.0.1 - d3-scale: 4.0.2 - d3-scale-chromatic: 3.0.0 - d3-selection: 3.0.0 - d3-shape: 3.1.0 - d3-time: 3.0.0 - d3-time-format: 4.1.0 - d3-timer: 3.0.1 - d3-transition: 3.0.1_d3-selection@3.0.0 - d3-zoom: 3.0.0 - dev: false - - /dagre-d3/0.6.4: - resolution: {integrity: sha512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ==} - dependencies: - d3: 5.16.0 - dagre: 0.8.5 - graphlib: 2.1.8 - lodash: 4.17.21 - dev: false - - /dagre/0.8.5: - resolution: {integrity: sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==} - dependencies: - graphlib: 2.1.8 - lodash: 4.17.21 - dev: false - - /data-uri-to-buffer/4.0.0: - resolution: {integrity: sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==} - engines: {node: '>= 12'} - dev: true - - /data-urls/3.0.2: - resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} - engines: {node: '>=12'} - dependencies: - abab: 2.0.6 - whatwg-mimetype: 3.0.0 - whatwg-url: 11.0.0 - dev: true - - /dataloader/2.1.0: - resolution: {integrity: sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ==} - - /date-fns/2.29.3: - resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==} - engines: {node: '>=0.11'} - - /date-time/3.1.0: - resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==} - engines: {node: '>=6'} - dependencies: - time-zone: 1.0.0 - dev: true - - /debug/2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.0.0 - dev: true - - /debug/4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - - /decamelize-keys/1.1.1: - resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} - engines: {node: '>=0.10.0'} - dependencies: - decamelize: 1.2.0 - map-obj: 1.0.1 - dev: true - - /decamelize/1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - - /decamelize/6.0.0: - resolution: {integrity: sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - - /decimal.js/10.4.2: - resolution: {integrity: sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==} - dev: true - - /decode-named-character-reference/1.0.2: - resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} - dependencies: - character-entities: 2.0.2 - dev: false - - /dedent/0.7.0: - resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} - - /deep-equal/2.0.5: - resolution: {integrity: sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==} - dependencies: - call-bind: 1.0.2 - es-get-iterator: 1.1.2 - get-intrinsic: 1.1.3 - is-arguments: 1.1.1 - is-date-object: 1.0.5 - is-regex: 1.1.4 - isarray: 2.0.5 - object-is: 1.1.5 - object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.4.3 - side-channel: 1.0.4 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.8 - dev: true - - /deep-extend/0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - dev: true - - /deep-is/0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true - - /deepmerge/4.2.2: - resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} - engines: {node: '>=0.10.0'} - - /default-browser-id/3.0.0: - resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} - engines: {node: '>=12'} - dependencies: - bplist-parser: 0.2.0 - untildify: 4.0.0 - dev: true - - /default-browser/3.1.0: - resolution: {integrity: sha512-SOHecvSoairSAWxEHP/0qcsld/KtI3DargfEuELQDyHIYmS2EMgdGhHOTC1GxaYr+NLUV6kDroeiSBfnNHnn8w==} - engines: {node: '>=12'} - dependencies: - bundle-name: 3.0.0 - default-browser-id: 3.0.0 - execa: 5.1.1 - xdg-default-browser: 2.1.0 - dev: true - - /defaults/1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - dependencies: - clone: 1.0.4 - dev: true - - /define-lazy-prop/2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - - /define-lazy-prop/3.0.0: - resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} - engines: {node: '>=12'} - dev: true - - /define-properties/1.1.4: - resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} - engines: {node: '>= 0.4'} - dependencies: - has-property-descriptors: 1.0.0 - object-keys: 1.1.1 - dev: true - - /defined/1.0.1: - resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} - dev: false - - /del/7.0.0: - resolution: {integrity: sha512-tQbV/4u5WVB8HMJr08pgw0b6nG4RGt/tj+7Numvq+zqcvUFeMaIWWOUFltiU+6go8BSO2/ogsB4EasDaj0y68Q==} - engines: {node: '>=14.16'} - dependencies: - globby: 13.1.3 - graceful-fs: 4.2.10 - is-glob: 4.0.3 - is-path-cwd: 3.0.0 - is-path-inside: 4.0.0 - p-map: 5.5.0 - rimraf: 3.0.2 - slash: 4.0.0 - dev: true - - /delaunator/5.0.0: - resolution: {integrity: sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==} - dependencies: - robust-predicates: 3.0.1 - dev: false - - /delayed-stream/1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: true - - /depd/2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - - /dependency-graph/0.11.0: - resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} - engines: {node: '>= 0.6.0'} - - /dequal/2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - dev: false - - /destroy/1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dev: true - - /detect-indent/6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - dev: true - - /detect-newline/3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - - /detect-node-es/1.1.0: - resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - dev: false - - /detective/5.2.1: - resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} - engines: {node: '>=0.8.0'} - hasBin: true - dependencies: - acorn-node: 1.8.2 - defined: 1.0.1 - minimist: 1.2.7 - dev: false - - /didyoumean/1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: false - - /diff-sequences/29.4.3: - resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - /diff/4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true - - /diff/5.1.0: - resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} - engines: {node: '>=0.3.1'} - dev: false - - /dir-glob/3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - - /dlv/1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: false - - /dom-accessibility-api/0.5.14: - resolution: {integrity: sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==} - dev: true - - /domexception/4.0.0: - resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} + /domexception@4.0.0: + resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} + deprecated: Use your platform's native DOMException instead dependencies: webidl-conversions: 7.0.0 dev: true - /dompurify/2.4.0: - resolution: {integrity: sha512-Be9tbQMZds4a3C6xTmz68NlMfeONA//4dOavl/1rNw50E+/QO0KVpbcU0PcaW0nsQxurXls9ZocqFxk8R2mWEA==} - dev: false - - /dot-case/3.0.4: + /dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dependencies: no-case: 3.0.4 tslib: 2.5.0 - - /dotenv/16.0.3: - resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} - engines: {node: '>=12'} dev: false - /dset/3.1.2: - resolution: {integrity: sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==} - engines: {node: '>=4'} - dev: false + /dotenv@8.6.0: + resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} + engines: {node: '>=10'} + dev: true - /duplexer/0.1.2: + /duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: true - /eastasianwidth/0.2.0: + /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /ee-first/1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - dev: true - - /electron-to-chromium/1.4.284: - resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} + /electron-to-chromium@1.4.630: + resolution: {integrity: sha512-osHqhtjojpCsACVnuD11xO5g9xaCyw7Qqn/C2KParkMv42i8jrJJgx3g7mkHfpxwhy9MnOJr8+pKOdZ7qzgizg==} - /emittery/0.13.1: + /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} - /emittery/1.0.1: - resolution: {integrity: sha512-2ID6FdrMD9KDLldGesP6317G78K7km/kMcwItRtVFva7I/cSEOIaLpewaUb+YLXVwdAp3Ctfxh/V5zIl1sj7dQ==} - engines: {node: '>=14.16'} - dev: true - - /emoji-regex/8.0.0: + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - /emoji-regex/9.2.2: + /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true - /emoticon/4.0.1: - resolution: {integrity: sha512-dqx7eA9YaqyvYtUhJwT4rC1HIp82j5ybS1/vQ42ur+jBe17dJMwZE4+gvL1XadSFfxaPFFGt3Xsw+Y8akThDlw==} - dev: false - - /encodeurl/1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - dev: true - - /end-of-stream/1.4.4: + /end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 dev: true - /enquirer/2.3.6: + /enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.10 + tapable: 2.2.1 + dev: true + + /enquirer@2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} dependencies: ansi-colors: 4.1.3 dev: true - /entities/4.4.0: + /entities@4.4.0: resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} engines: {node: '>=0.12'} dev: true - /error-ex/1.3.2: + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 - /error-stack-parser/2.1.4: - resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} - dependencies: - stackframe: 1.3.4 - dev: false - - /es-abstract/1.20.4: - resolution: {integrity: sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==} + /es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.2 + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + es-set-tostringtag: 2.0.2 es-to-primitive: 1.2.1 - function-bind: 1.1.1 - function.prototype.name: 1.1.5 - get-intrinsic: 1.1.3 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.2 get-symbol-description: 1.0.0 - has: 1.0.3 + globalthis: 1.0.3 + gopd: 1.0.1 has-property-descriptors: 1.0.0 + has-proto: 1.0.1 has-symbols: 1.0.3 - internal-slot: 1.0.3 + hasown: 2.0.0 + internal-slot: 1.0.6 + is-array-buffer: 3.0.2 is-callable: 1.2.7 is-negative-zero: 2.0.2 is-regex: 1.1.4 is-shared-array-buffer: 1.0.2 is-string: 1.0.7 + is-typed-array: 1.1.12 is-weakref: 1.0.2 - object-inspect: 1.12.2 + object-inspect: 1.13.1 object-keys: 1.1.1 object.assign: 4.1.4 - regexp.prototype.flags: 1.4.3 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.0.1 safe-regex-test: 1.0.0 - string.prototype.trimend: 1.0.5 - string.prototype.trimstart: 1.0.5 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 + typed-array-length: 1.0.4 unbox-primitive: 1.0.2 + which-typed-array: 1.1.13 dev: true - /es-get-iterator/1.1.2: + /es-get-iterator@1.1.2: resolution: {integrity: sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.3 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 has-symbols: 1.0.3 is-arguments: 1.1.1 is-map: 2.0.2 @@ -8101,13 +7458,41 @@ packages: isarray: 2.0.5 dev: true - /es-shim-unscopables/1.0.0: + /es-iterator-helpers@1.0.15: + resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} + dependencies: + asynciterator.prototype: 1.0.0 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-set-tostringtag: 2.0.2 + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + globalthis: 1.0.3 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.6 + iterator.prototype: 1.1.2 + safe-array-concat: 1.0.1 + dev: true + + /es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + has-tostringtag: 1.0.0 + hasown: 2.0.0 + dev: true + + /es-shim-unscopables@1.0.0: resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} dependencies: has: 1.0.3 dev: true - /es-to-primitive/1.2.1: + /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} dependencies: @@ -8116,61 +7501,83 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild/0.17.12: - resolution: {integrity: sha512-bX/zHl7Gn2CpQwcMtRogTTBf9l1nl+H6R8nUbjk+RuKqAE3+8FDulLA+pHvX7aA7Xe07Iwa+CWvy9I8Y2qqPKQ==} + /esbuild@0.17.19: + resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.17.12 - '@esbuild/android-arm64': 0.17.12 - '@esbuild/android-x64': 0.17.12 - '@esbuild/darwin-arm64': 0.17.12 - '@esbuild/darwin-x64': 0.17.12 - '@esbuild/freebsd-arm64': 0.17.12 - '@esbuild/freebsd-x64': 0.17.12 - '@esbuild/linux-arm': 0.17.12 - '@esbuild/linux-arm64': 0.17.12 - '@esbuild/linux-ia32': 0.17.12 - '@esbuild/linux-loong64': 0.17.12 - '@esbuild/linux-mips64el': 0.17.12 - '@esbuild/linux-ppc64': 0.17.12 - '@esbuild/linux-riscv64': 0.17.12 - '@esbuild/linux-s390x': 0.17.12 - '@esbuild/linux-x64': 0.17.12 - '@esbuild/netbsd-x64': 0.17.12 - '@esbuild/openbsd-x64': 0.17.12 - '@esbuild/sunos-x64': 0.17.12 - '@esbuild/win32-arm64': 0.17.12 - '@esbuild/win32-ia32': 0.17.12 - '@esbuild/win32-x64': 0.17.12 - - /escalade/3.1.1: + '@esbuild/android-arm': 0.17.19 + '@esbuild/android-arm64': 0.17.19 + '@esbuild/android-x64': 0.17.19 + '@esbuild/darwin-arm64': 0.17.19 + '@esbuild/darwin-x64': 0.17.19 + '@esbuild/freebsd-arm64': 0.17.19 + '@esbuild/freebsd-x64': 0.17.19 + '@esbuild/linux-arm': 0.17.19 + '@esbuild/linux-arm64': 0.17.19 + '@esbuild/linux-ia32': 0.17.19 + '@esbuild/linux-loong64': 0.17.19 + '@esbuild/linux-mips64el': 0.17.19 + '@esbuild/linux-ppc64': 0.17.19 + '@esbuild/linux-riscv64': 0.17.19 + '@esbuild/linux-s390x': 0.17.19 + '@esbuild/linux-x64': 0.17.19 + '@esbuild/netbsd-x64': 0.17.19 + '@esbuild/openbsd-x64': 0.17.19 + '@esbuild/sunos-x64': 0.17.19 + '@esbuild/win32-arm64': 0.17.19 + '@esbuild/win32-ia32': 0.17.19 + '@esbuild/win32-x64': 0.17.19 + dev: true + + /esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + dev: true + + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} - /escape-html/1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: true - - /escape-string-regexp/1.0.5: + /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - /escape-string-regexp/2.0.0: + /escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} - /escape-string-regexp/4.0.0: + /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - dev: false - - /escape-string-regexp/5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} - /escodegen/2.0.0: + /escodegen@2.0.0: resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} engines: {node: '>=6.0'} hasBin: true @@ -8183,67 +7590,309 @@ packages: source-map: 0.6.1 dev: true - /esprima/4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + /eslint-config-next@13.3.0(eslint@8.46.0)(typescript@5.3.3): + resolution: {integrity: sha512-6YEwmFBX0VjBd3ODGW9df0Is0FLaRFdMN8eAahQG9CN6LjQ28J8AFr19ngxqMSg7Qv6Uca/3VeeBosJh1bzu0w==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@next/eslint-plugin-next': 13.3.0 + '@rushstack/eslint-patch': 1.6.1 + '@typescript-eslint/parser': 5.62.0(eslint@8.46.0)(typescript@5.3.3) + eslint: 8.46.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.46.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.46.0) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.46.0) + eslint-plugin-react: 7.33.2(eslint@8.46.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.46.0) + typescript: 5.3.3 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.46.0): + resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + dependencies: + debug: 4.3.4 + enhanced-resolve: 5.15.0 + eslint: 8.46.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.46.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.46.0) + fast-glob: 3.3.2 + get-tsconfig: 4.7.2 + is-core-module: 2.13.1 + is-glob: 4.0.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.46.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} - hasBin: true + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.62.0(eslint@8.46.0)(typescript@5.3.3) + debug: 3.2.7 + eslint: 8.46.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.46.0) + transitivePeerDependencies: + - supports-color + dev: true - /estraverse/5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.46.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.62.0(eslint@8.46.0)(typescript@5.3.3) + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.46.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.46.0) + hasown: 2.0.0 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 + object.values: 1.1.7 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-jsx-a11y@6.8.0(eslint@8.46.0): + resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + '@babel/runtime': 7.23.8 + aria-query: 5.3.0 + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + ast-types-flow: 0.0.8 + axe-core: 4.7.0 + axobject-query: 3.2.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + es-iterator-helpers: 1.0.15 + eslint: 8.46.0 + hasown: 2.0.0 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 dev: true - /estree-util-attach-comments/2.1.0: - resolution: {integrity: sha512-rJz6I4L0GaXYtHpoMScgDIwM0/Vwbu5shbMeER596rB2D1EWF6+Gj0e0UKzJPZrpoOc87+Q2kgVFHfjAymIqmw==} + /eslint-plugin-react-hooks@4.6.0(eslint@8.46.0): + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - '@types/estree': 1.0.0 - dev: false + eslint: 8.46.0 + dev: true - /estree-util-build-jsx/2.2.0: - resolution: {integrity: sha512-apsfRxF9uLrqosApvHVtYZjISPvTJ+lBiIydpC+9wE6cF6ssbhnjyQLqaIjgzGxvC2Hbmec1M7g91PoBayYoQQ==} + /eslint-plugin-react@7.33.2(eslint@8.46.0): + resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@types/estree-jsx': 1.0.0 - estree-util-is-identifier-name: 2.0.1 - estree-walker: 3.0.1 - dev: false + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + array.prototype.tosorted: 1.1.2 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.15 + eslint: 8.46.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + object.hasown: 1.1.3 + object.values: 1.1.7 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.10 + dev: true - /estree-util-is-identifier-name/2.0.1: - resolution: {integrity: sha512-rxZj1GkQhY4x1j/CSnybK9cGuMFQYFPLq0iNyopqf14aOVLFtMv7Esika+ObJWPWiOHuMOAHz3YkWoLYYRnzWQ==} - dev: false + /eslint-plugin-you-dont-need-lodash-underscore@6.13.0: + resolution: {integrity: sha512-6FkFLp/R/QlgfJl5NrxkIXMQ36jMVLczkWDZJvMd7/wr/M3K0DS7mtX7plZ3giTDcbDD7VBfNYUfUVaBCZOXKA==} + engines: {node: '>=4.0'} + dependencies: + kebab-case: 1.0.2 + dev: true - /estree-util-to-js/1.1.0: - resolution: {integrity: sha512-490lbfCcpLk+ofK6HCgqDfYs4KAfq6QVvDw3+Bm1YoKRgiOjKiKYGAVQE1uwh7zVxBgWhqp4FDtp5SqunpUk1A==} + /eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} dependencies: - '@types/estree-jsx': 1.0.0 - astring: 1.8.3 - source-map: 0.7.4 - dev: false + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true - /estree-util-visit/1.2.0: - resolution: {integrity: sha512-wdsoqhWueuJKsh5hqLw3j8lwFqNStm92VcwtAOAny8g/KS/l5Y8RISjR4k5W6skCj3Nirag/WUCMS0Nfy3sgsg==} + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@types/estree-jsx': 1.0.0 - '@types/unist': 2.0.6 - dev: false + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true - /estree-walker/2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true - /estree-walker/3.0.1: - resolution: {integrity: sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g==} - dev: false + /eslint@8.46.0: + resolution: {integrity: sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.56.0 + '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.2.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true - /esutils/2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 3.4.3 dev: true - /etag/1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 dev: true - /event-stream/3.3.4: + /estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /event-stream@3.3.4: resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} dependencies: duplexer: 0.1.2 @@ -8255,18 +7904,20 @@ packages: through: 2.3.8 dev: true - /event-target-shim/5.0.1: + /event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} + dev: false - /eventemitter3/4.0.7: + /eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - /events/3.3.0: + /events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + dev: false - /execa/0.2.2: + /execa@0.2.2: resolution: {integrity: sha512-zmBGzLd3nhA/NB9P7VLoceAO6vyYPftvl809Vjwe5U2fYI9tYWbeKqP3wZlAw9WS+znnkogf/bhSU+Gcn2NbkQ==} engines: {node: '>=0.12'} dependencies: @@ -8277,7 +7928,7 @@ packages: strip-eof: 1.0.0 dev: true - /execa/4.1.0: + /execa@4.1.0: resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} engines: {node: '>=10'} dependencies: @@ -8292,7 +7943,7 @@ packages: strip-final-newline: 2.0.0 dev: true - /execa/5.1.1: + /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} dependencies: @@ -8306,11 +7957,11 @@ packages: signal-exit: 3.0.7 strip-final-newline: 2.0.0 - /exit/0.1.2: + /exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} - /expect/29.5.0: + /expect@29.5.0: resolution: {integrity: sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -8320,88 +7971,38 @@ packages: jest-message-util: 29.5.0 jest-util: 29.5.0 - /express/4.18.2: - resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} - engines: {node: '>= 0.10.0'} - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.1 - content-disposition: 0.5.4 - content-type: 1.0.4 - cookie: 0.5.0 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.2.0 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.11.0 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /extend-shallow/2.0.1: - resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} - engines: {node: '>=0.10.0'} - dependencies: - is-extendable: 0.1.1 - dev: false - - /extend/3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - dev: false - - /extendable-error/0.1.7: + /extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} dev: true - /external-editor/3.1.0: + /external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} dependencies: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 - dev: true - /extract-files/13.0.0: + /extract-files@13.0.0: resolution: {integrity: sha512-FXD+2Tsr8Iqtm3QZy1Zmwscca7Jx3mMC5Crr+sEP1I303Jy1CYMuYCm7hRTplFNg3XdUavErkxnTzpaqdSoi6g==} engines: {node: ^14.17.0 || ^16.0.0 || >= 18.0.0} dependencies: is-plain-obj: 4.1.0 dev: false - /fast-decode-uri-component/1.0.1: + /fast-content-type-parse@1.1.0: + resolution: {integrity: sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==} + dev: false + + /fast-decode-uri-component@1.0.1: resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} + dev: false - /fast-deep-equal/3.1.3: + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - /fast-diff/1.2.0: - resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} - dev: true - - /fast-glob/3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 @@ -8410,87 +8011,87 @@ packages: merge2: 1.4.1 micromatch: 4.0.5 - /fast-json-stable-stringify/2.1.0: + /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - /fast-json-stringify/5.4.0: - resolution: {integrity: sha512-PIzon53oX/zEGLrGbu4DpfNcYiV4K4rk+JsVrawRPO/G8cNBEMZ3KlIk2BCGqN+m1KCCA4zt5E7Hh3GG9ojRVA==} + /fast-json-stringify@5.10.0: + resolution: {integrity: sha512-fu1BhzPzgOdvK+sVhSPFzm06DQl0Dwbo+NQxWm21k03ili2wsJExXbGZ9qsD4Lsn7zFGltF8h9I1fuhk4JPnrQ==} dependencies: '@fastify/deepmerge': 1.1.0 ajv: 8.11.0 - ajv-formats: 2.1.1 + ajv-formats: 2.1.1(ajv@8.11.0) fast-deep-equal: 3.1.3 fast-uri: 2.1.0 + json-schema-ref-resolver: 1.0.1 rfdc: 1.3.0 + dev: false - /fast-levenshtein/2.0.6: + /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fast-querystring/1.0.0: + /fast-querystring@1.0.0: resolution: {integrity: sha512-3LQi62IhQoDlmt4ULCYmh17vRO2EtS7hTSsG4WwoKWgV7GLMKBOecEh+aiavASnLx8I2y89OD33AGLo0ccRhzA==} dependencies: fast-decode-uri-component: 1.0.1 + dev: false - /fast-redact/3.1.2: + /fast-redact@3.1.2: resolution: {integrity: sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==} engines: {node: '>=6'} - - /fast-shallow-equal/1.0.0: - resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==} dev: false - /fast-uri/2.1.0: + /fast-uri@2.1.0: resolution: {integrity: sha512-qKRta6N7BWEFVlyonVY/V+BMLgFqktCUV0QjT259ekAIlbVrMaFnFLxJ4s/JPl4tou56S1BzPufI60bLe29fHA==} + dev: false - /fast-url-parser/1.1.3: + /fast-url-parser@1.1.3: resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} dependencies: punycode: 1.4.1 dev: true - /fastest-stable-stringify/2.0.2: - resolution: {integrity: sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==} - dev: false - - /fastify-plugin/4.3.0: + /fastify-plugin@4.3.0: resolution: {integrity: sha512-M3+i368lV0OYTJ5TfClIoPKEKSOF7112iiPdwgfSR0gN98BjA1Nk+c6oBHtfcVt9KiMxl+EQKHC1QNWo3ZOpYQ==} - /fastify/4.11.0: - resolution: {integrity: sha512-JteZ8pjEqd+6n+azQnQfSJV8MUMxAmxbvC2Dx/Mybj039Lf/u3kda9Kq84uy/huCpqCzZoyHIZS5JFGF3wLztw==} + /fastify@4.25.2: + resolution: {integrity: sha512-SywRouGleDHvRh054onj+lEZnbC1sBCLkR0UY3oyJwjD4BdZJUrxBqfkfCaqn74pVCwBaRHGuL3nEWeHbHzAfw==} dependencies: - '@fastify/ajv-compiler': 3.4.0 - '@fastify/error': 3.0.0 - '@fastify/fast-json-stringify-compiler': 4.1.0 + '@fastify/ajv-compiler': 3.5.0 + '@fastify/error': 3.4.1 + '@fastify/fast-json-stringify-compiler': 4.3.0 abstract-logging: 2.0.1 - avvio: 8.2.0 - content-type: 1.0.4 - find-my-way: 7.3.1 - light-my-request: 5.6.1 - pino: 8.7.0 - process-warning: 2.0.0 + avvio: 8.2.1 + fast-content-type-parse: 1.1.0 + fast-json-stringify: 5.10.0 + find-my-way: 7.7.0 + light-my-request: 5.11.0 + pino: 8.17.2 + process-warning: 3.0.0 proxy-addr: 2.0.7 rfdc: 1.3.0 - secure-json-parse: 2.5.0 - semver: 7.3.8 - tiny-lru: 10.0.1 + secure-json-parse: 2.7.0 + semver: 7.5.4 + toad-cache: 3.7.0 transitivePeerDependencies: - supports-color + dev: false - /fastq/1.13.0: + /fastq@1.13.0: resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} dependencies: reusify: 1.0.4 - /fb-watchman/2.0.2: + /fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} dependencies: bser: 2.1.1 - /fbjs-css-vars/1.0.2: + /fbjs-css-vars@1.0.2: resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} + dev: false - /fbjs/3.0.4: + /fbjs@3.0.4: resolution: {integrity: sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==} dependencies: cross-fetch: 3.1.5 @@ -8502,24 +8103,23 @@ packages: ua-parser-js: 0.7.32 transitivePeerDependencies: - encoding + dev: false - /fetch-blob/3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} + /figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 3.2.1 - dev: true + escape-string-regexp: 1.0.5 + dev: false - /figures/5.0.0: - resolution: {integrity: sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==} - engines: {node: '>=14'} + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: - escape-string-regexp: 5.0.0 - is-unicode-supported: 1.3.0 + flat-cache: 3.2.0 dev: true - /file-type/18.2.1: + /file-type@18.2.1: resolution: {integrity: sha512-Yw5MtnMv7vgD2/6Bjmmuegc8bQEVA9GmAyaR18bMYWKqsWDG9wgYZ1j4I6gNMF5Y5JBDcUcjRQqNQx7Y8uotcg==} engines: {node: '>=14.16'} dependencies: @@ -8528,47 +8128,33 @@ packages: token-types: 5.0.1 dev: true - /fill-range/7.0.1: + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - /finalhandler/1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /find-my-way/7.3.1: - resolution: {integrity: sha512-kGvM08SOkqvheLcuQ8GW9t/H901Qb9rZEbcNWbXopzy4jDRoaJpJoObPSKf4MnQLZ20ZTp7rL5MpF6rf+pqmyg==} + /find-my-way@7.7.0: + resolution: {integrity: sha512-+SrHpvQ52Q6W9f3wJoJBbAQULJuNEEQwBvlvYwACDhBTLOTMiQ0HYWh4+vC3OivGP2ENcTI1oKlFA2OepJNjhQ==} engines: {node: '>=14'} dependencies: fast-deep-equal: 3.1.3 fast-querystring: 1.0.0 safe-regex2: 2.0.0 + dev: false - /find-root/1.1.0: + /find-root@1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} dev: false - /find-up/4.1.0: + /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - /find-up/5.0.0: + /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} dependencies: @@ -8576,7 +8162,7 @@ packages: path-exists: 4.0.0 dev: true - /find-up/6.3.0: + /find-up@6.3.0: resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: @@ -8584,43 +8170,33 @@ packages: path-exists: 5.0.0 dev: true - /find-yarn-workspace-root2/1.2.16: + /find-yarn-workspace-root2@1.2.16: resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} dependencies: micromatch: 4.0.5 pkg-dir: 4.2.0 dev: true - /focus-lock/0.9.2: - resolution: {integrity: sha512-YtHxjX7a0IC0ZACL5wsX8QdncXofWpGPNoVMuI/nZUrPGp6LmNI6+D5j0pPj+v8Kw5EpweA+T5yImK0rnWf7oQ==} - engines: {node: '>=10'} - dependencies: - tslib: 2.5.0 - dev: false - - /focus-trap-react/9.0.2_sfoxds7t5ydpegc3knd667wn6m: - resolution: {integrity: sha512-ZwhO5by6KG5r3dy48Lk00A1/0zNYw1Z3RZTN6O6kgAPsWFcwTFszOcQ1dLSfM8pIxpS/ttc7wTttJowjVT3jpg==} - peerDependencies: - prop-types: ^15.8.1 - react: '>=16.3.0' - react-dom: '>=16.3.0' - peerDependenciesMeta: - prop-types: - optional: true + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: - focus-trap: 6.9.4 - react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 - tabbable: 5.3.3 - dev: false + flatted: 3.2.9 + keyv: 4.5.4 + rimraf: 3.0.2 + dev: true - /focus-trap/6.9.4: - resolution: {integrity: sha512-v2NTsZe2FF59Y+sDykKY+XjqZ0cPfhq/hikWVL88BqLivnNiEffAsac6rP6H45ff9wG9LL5ToiDqrLEP9GX9mw==} + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + + /focus-lock@0.9.2: + resolution: {integrity: sha512-YtHxjX7a0IC0ZACL5wsX8QdncXofWpGPNoVMuI/nZUrPGp6LmNI6+D5j0pPj+v8Kw5EpweA+T5yImK0rnWf7oQ==} + engines: {node: '>=10'} dependencies: - tabbable: 5.3.3 + tslib: 2.5.0 dev: false - /follow-redirects/1.15.2: + /follow-redirects@1.15.2: resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} engines: {node: '>=4.0'} peerDependencies: @@ -8630,25 +8206,25 @@ packages: optional: true dev: true - /for-each/0.3.3: + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 dev: true - /foreground-child/2.0.0: - resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} - engines: {node: '>=8.0.0'} + /foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} dependencies: cross-spawn: 7.0.3 - signal-exit: 3.0.7 + signal-exit: 4.1.0 dev: true - /form-data-encoder/1.7.2: + /form-data-encoder@1.7.2: resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} dev: false - /form-data/4.0.0: + /form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} dependencies: @@ -8657,7 +8233,7 @@ packages: mime-types: 2.1.35 dev: true - /formdata-node/4.4.1: + /formdata-node@4.4.1: resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} engines: {node: '>= 12.20'} dependencies: @@ -8665,22 +8241,16 @@ packages: web-streams-polyfill: 4.0.0-beta.3 dev: false - /formdata-polyfill/4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} - dependencies: - fetch-blob: 3.2.0 - dev: true - - /forwarded/0.2.0: + /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} + dev: false - /fraction.js/4.2.0: + /fraction.js@4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} - dev: false + dev: true - /framer-motion/6.5.1_sfoxds7t5ydpegc3knd667wn6m: + /framer-motion@6.5.1(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-o1BGqqposwi7cgDrtg0dNONhkmPsUFDaLcKXigzuTFC5x58mE8iyTazxSudFzmT6MEyJKfjjU8ItoMe3W+3fiw==} peerDependencies: react: '>=16.8 || ^17.0.0 || ^18.0.0' @@ -8691,48 +8261,39 @@ packages: hey-listen: 1.0.8 popmotion: 11.0.3 react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 + react-dom: 17.0.2(react@17.0.2) style-value-types: 5.0.0 - tslib: 2.4.1 + tslib: 2.5.0 optionalDependencies: '@emotion/is-prop-valid': 0.8.8 dev: false - /framesync/5.3.0: + /framesync@5.3.0: resolution: {integrity: sha512-oc5m68HDO/tuK2blj7ZcdEBRx3p1PjrgHazL8GYEpvULhrtGIFbQArN6cQS2QhW8mitffaB+VYzMjDqBxxQeoA==} dependencies: tslib: 2.5.0 dev: false - /framesync/6.0.1: + /framesync@6.0.1: resolution: {integrity: sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==} dependencies: tslib: 2.5.0 dev: false - /fresh/0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - dev: true - - /from/0.1.7: + /from@0.1.7: resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} dev: true - /fs-capacitor/8.0.0: + /fs-capacitor@6.2.0: + resolution: {integrity: sha512-nKcE1UduoSKX27NSZlg879LdQc94OtbOsEmKMN2MBNudXREvijRKx2GEBsTMTfws+BrbkJoEuynbGSVRSpauvw==} + engines: {node: '>=10'} + dev: false + + /fs-capacitor@8.0.0: resolution: {integrity: sha512-+Lk6iSKajdGw+7XYxUkwIzreJ2G1JFlYOdnKJv5PzwFLVsoJYBpCuS7WPIUSNT1IbQaEWT1nhYU63Ud03DyzLA==} engines: {node: ^14.17.0 || >=16.0.0} - /fs-extra/10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - dependencies: - graceful-fs: 4.2.10 - jsonfile: 6.1.0 - universalify: 2.0.0 - dev: false - - /fs-extra/7.0.1: + /fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} dependencies: @@ -8741,7 +8302,7 @@ packages: universalify: 0.1.2 dev: true - /fs-extra/8.1.0: + /fs-extra@8.1.0: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} dependencies: @@ -8750,100 +8311,130 @@ packages: universalify: 0.1.2 dev: true - /fs.realpath/1.0.0: + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - /fsevents/2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true optional: true - /function-bind/1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - /function.prototype.name/1.1.5: - resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 functions-have-names: 1.2.3 dev: true - /functions-have-names/1.2.3: + /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true - /gensync/1.0.0-beta.2: + /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} - /get-caller-file/2.0.5: + /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - /get-intrinsic/1.1.3: - resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==} + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} dependencies: - function-bind: 1.1.1 - has: 1.0.3 + function-bind: 1.1.2 + has-proto: 1.0.1 has-symbols: 1.0.3 + hasown: 2.0.0 dev: true - /get-nonce/1.0.1: + /get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} dev: false - /get-package-type/0.1.0: + /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} - /get-stdin/9.0.0: + /get-stdin@9.0.0: resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} engines: {node: '>=12'} dev: true - /get-stream/5.2.0: + /get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} dependencies: pump: 3.0.0 dev: true - /get-stream/6.0.1: + /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - /get-symbol-description/1.0.0: + /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.3 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 dev: true - /github-slugger/1.4.0: - resolution: {integrity: sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==} - dev: false + /get-tsconfig@4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true - /glob-parent/5.1.2: + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - /glob-parent/6.0.2: + /glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 + dev: true + + /glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: false - /glob/7.2.3: + /glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.3 + minipass: 7.0.4 + path-scurry: 1.10.1 + dev: true + + /glob@7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 @@ -8853,67 +8444,74 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 - /glob/9.2.1: + /glob@9.2.1: resolution: {integrity: sha512-Pxxgq3W0HyA3XUvSXcFhRSs+43Jsx0ddxcFrbjxNGkL2Ak5BAUBxLqI5G6ADDeCHLfzzXFhe0b1yYcctGmytMA==} engines: {node: '>=16 || 14 >=14.17'} dependencies: fs.realpath: 1.0.0 minimatch: 7.4.2 minipass: 4.2.4 - path-scurry: 1.6.1 + path-scurry: 1.10.1 dev: true - /globals/11.12.0: + /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - /globby/11.1.0: + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + dev: true + + /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.12 + fast-glob: 3.3.2 ignore: 5.2.0 merge2: 1.4.1 slash: 3.0.0 - /globby/13.1.1: - resolution: {integrity: sha512-XMzoDZbGZ37tufiv7g0N4F/zp3zkwdFtVbV3EHsVl1KQr4RPLfNoT068/97RPshz2J5xYNEjLKKBKaGHifBd3Q==} + /globby@13.1.3: + resolution: {integrity: sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: dir-glob: 3.0.1 - fast-glob: 3.2.12 + fast-glob: 3.3.2 ignore: 5.2.0 merge2: 1.4.1 slash: 4.0.0 - dev: false + dev: true - /globby/13.1.3: - resolution: {integrity: sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - dir-glob: 3.0.1 - fast-glob: 3.2.12 - ignore: 5.2.0 - merge2: 1.4.1 - slash: 4.0.0 + get-intrinsic: 1.2.2 dev: true - /graceful-fs/4.2.10: + /graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - /grapheme-splitter/1.0.4: + /grapheme-splitter@1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true - /graphlib/2.1.8: - resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==} - dependencies: - lodash: 4.17.21 - dev: false + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true - /graphql-ez/0.16.0_cqyb4buyc4habqgvcucexr22xm: + /graphql-ez@0.16.0(@types/node@18.19.6)(graphql@16.8.1): resolution: {integrity: sha512-ZognCmC3fP0AZg76QGKmylmZG6uonLTL1qY5Jpx7uTKKGI9o+617URQa6H31TkIdFDWPKACEYzLJ+toMQZ45LA==} engines: {node: '>=14.13.1'} peerDependencies: @@ -8922,281 +8520,176 @@ packages: graphql: optional: true dependencies: - '@envelop/core': 3.0.4 - '@envelop/types': 3.0.1 - '@graphql-ez/utils': 0.2.0_cqyb4buyc4habqgvcucexr22xm - '@pablosz/graphql-helix': 2.0.3_graphql@16.6.0 - graphql: 16.6.0 + '@envelop/core': 3.0.6 + '@envelop/types': 3.0.2 + '@graphql-ez/utils': 0.2.0(@types/node@18.19.6)(graphql@16.8.1) + '@pablosz/graphql-helix': 2.0.3(graphql@16.8.1) + graphql: 16.8.1 tiny-lru: 10.0.1 transitivePeerDependencies: - '@types/node' - /graphql-ez/0.16.0_ddkhnomv6qakhz4wmciki3kakm: - resolution: {integrity: sha512-ZognCmC3fP0AZg76QGKmylmZG6uonLTL1qY5Jpx7uTKKGI9o+617URQa6H31TkIdFDWPKACEYzLJ+toMQZ45LA==} - engines: {node: '>=14.13.1'} + /graphql-sse@2.5.2(graphql@16.8.1): + resolution: {integrity: sha512-KCTl7HpD12xQrbXGdLrc1BL0ybfB6M83lxRO1mqT31pvOY01ZuWgiJKTY8+NAX8sgEMPVrnXXOXh9LqYDgNI+g==} + engines: {node: '>=12'} peerDependencies: - graphql: '*' - peerDependenciesMeta: - graphql: - optional: true + graphql: '>=0.11 <=16' dependencies: - '@envelop/core': 3.0.4 - '@envelop/types': 3.0.1 - '@graphql-ez/utils': 0.2.0_ddkhnomv6qakhz4wmciki3kakm - '@pablosz/graphql-helix': 2.0.3_graphql@17.0.0-alpha.2 - graphql: 17.0.0-alpha.2 - tiny-lru: 10.0.1 - transitivePeerDependencies: - - '@types/node' + graphql: 16.8.1 dev: true - /graphql-tag/2.12.6_graphql@16.6.0: + /graphql-tag@2.12.6(graphql@16.8.1): resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} engines: {node: '>=10'} peerDependencies: - graphql: '*' + 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.6.0 + graphql: 16.8.1 tslib: 2.5.0 + dev: false - /graphql-upload/16.0.2_graphql@16.6.0: - resolution: {integrity: sha512-enwIkZqUELdNH9lrjHlTNfj7gLitSa0EAX4TNXZtg2frnmQzPhpjH0l+6K7ft274fhoRCIcz8SKiNRJDf/cG4Q==} - engines: {node: ^14.17.0 || ^16.0.0 || >= 18.0.0} + /graphql-upload@13.0.0(graphql@16.8.1): + resolution: {integrity: sha512-YKhx8m/uOtKu4Y1UzBFJhbBGJTlk7k4CydlUUiNrtxnwZv0WigbRHP+DVhRNKt7u7DXOtcKZeYJlGtnMXvreXA==} + engines: {node: ^12.22.0 || ^14.17.0 || >= 16.0.0} peerDependencies: - '@types/express': ^4.0.29 - '@types/koa': ^2.11.4 - graphql: '*' - peerDependenciesMeta: - '@types/express': - optional: true - '@types/koa': - optional: true + graphql: 0.13.1 - 16 dependencies: - '@types/busboy': 1.5.0 - '@types/node': 18.15.5 - '@types/object-path': 0.11.1 - busboy: 1.6.0 - fs-capacitor: 8.0.0 - graphql: 16.6.0 - http-errors: 2.0.0 + busboy: 0.3.1 + fs-capacitor: 6.2.0 + graphql: 16.8.1 + http-errors: 1.8.1 object-path: 0.11.8 dev: false - /graphql-ws/5.11.2_graphql@16.6.0: - resolution: {integrity: sha512-4EiZ3/UXYcjm+xFGP544/yW1+DVI8ZpKASFbzrV5EDTFWJp0ZvLl4Dy2fSZAzz9imKp5pZMIcjB0x/H69Pv/6w==} + /graphql-ws@5.14.3(graphql@16.8.1): + resolution: {integrity: sha512-F/i2xNIVbaEF2xWggID0X/UZQa2V8kqKDPO8hwmu53bVOcTL7uNkxnexeEgSCVxYBQUTUNEI8+e4LO1FOhKPKQ==} engines: {node: '>=10'} peerDependencies: - graphql: '*' + graphql: '>=0.11 <=16' dependencies: - graphql: 16.6.0 + graphql: 16.8.1 - /graphql/16.6.0: - resolution: {integrity: sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==} + /graphql@16.8.1: + resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} - /graphql/17.0.0-alpha.2: - resolution: {integrity: sha512-aRAd/BQ5hSO0+l7x+sHBfJVUp2JUOjPTE/iwJ3BhtYNH/MC7n4gjlZbKvnBVFZZAczyMS3vezS4teEZivoqIzw==} - engines: {node: ^14.19.0 || ^16.10.0 || >=18.0.0} - dev: true - - /gray-matter/4.0.3: - resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} - engines: {node: '>=6.0'} - dependencies: - js-yaml: 3.14.1 - kind-of: 6.0.3 - section-matter: 1.0.0 - strip-bom-string: 1.0.0 - dev: false - - /gzip-size/6.0.0: + /gzip-size@6.0.0: resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} engines: {node: '>=10'} dependencies: duplexer: 0.1.2 dev: true - /hard-rejection/2.1.0: + /hard-rejection@2.1.0: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} dev: true - /has-bigints/1.0.2: + /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true - /has-flag/3.0.0: + /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} - /has-flag/4.0.0: + /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /has-property-descriptors/1.0.0: + /has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.2 + dev: true + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} dev: true - /has-symbols/1.0.3: + /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} dev: true - /has-tostringtag/1.0.0: + /has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /has/1.0.3: + /has@1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} dependencies: - function-bind: 1.1.1 - - /hast-util-has-property/2.0.0: - resolution: {integrity: sha512-4Qf++8o5v14us4Muv3HRj+Er6wTNGA/N9uCaZMty4JWvyFKLdhULrv4KE1b65AthsSO9TXSZnjuxS8ecIyhb0w==} - dev: false - - /hast-util-heading-rank/2.1.0: - resolution: {integrity: sha512-w+Rw20Q/iWp2Bcnr6uTrYU6/ftZLbHKhvc8nM26VIWpDqDMlku2iXUVTeOlsdoih/UKQhY7PHQ+vZ0Aqq8bxtQ==} - dependencies: - '@types/hast': 2.3.4 - dev: false - - /hast-util-parse-selector/3.1.0: - resolution: {integrity: sha512-AyjlI2pTAZEOeu7GeBPZhROx0RHBnydkQIXlhnFzDi0qfXTmGUWoCYZtomHbrdrheV4VFUlPcfJ6LMF5T6sQzg==} - dependencies: - '@types/hast': 2.3.4 - dev: false - - /hast-util-to-estree/2.1.0: - resolution: {integrity: sha512-Vwch1etMRmm89xGgz+voWXvVHba2iiMdGMKmaMfYt35rbVtFDq8JNwwAIvi8zHMkO6Gvqo9oTMwJTmzVRfXh4g==} - dependencies: - '@types/estree': 1.0.0 - '@types/estree-jsx': 1.0.0 - '@types/hast': 2.3.4 - '@types/unist': 2.0.6 - comma-separated-tokens: 2.0.2 - estree-util-attach-comments: 2.1.0 - estree-util-is-identifier-name: 2.0.1 - hast-util-whitespace: 2.0.0 - mdast-util-mdx-expression: 1.3.1 - mdast-util-mdxjs-esm: 1.3.0 - property-information: 6.1.1 - space-separated-tokens: 2.0.1 - style-to-object: 0.3.0 - unist-util-position: 4.0.3 - zwitch: 2.0.2 - transitivePeerDependencies: - - supports-color - dev: false - - /hast-util-to-string/2.0.0: - resolution: {integrity: sha512-02AQ3vLhuH3FisaMM+i/9sm4OXGSq1UhOOCpTLLQtHdL3tZt7qil69r8M8iDkZYyC0HCFylcYoP+8IO7ddta1A==} - dependencies: - '@types/hast': 2.3.4 - dev: false - - /hast-util-whitespace/2.0.0: - resolution: {integrity: sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==} - dev: false + function-bind: 1.1.2 + dev: true - /hastscript/7.1.0: - resolution: {integrity: sha512-uBjaTTLN0MkCZxY/R2fWUOcu7FRtUVzKRO5P/RAfgsu3yFiMB1JWCO4AjeVkgHxAira1f2UecHK5WfS9QurlWA==} + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} dependencies: - '@types/hast': 2.3.4 - comma-separated-tokens: 2.0.2 - hast-util-parse-selector: 3.1.0 - property-information: 6.1.1 - space-separated-tokens: 2.0.1 - dev: false + function-bind: 1.1.2 - /header-case/2.0.4: + /header-case@2.0.4: resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} dependencies: capital-case: 1.0.4 tslib: 2.5.0 - - /hex-color-regex/1.1.0: - resolution: {integrity: sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==} dev: false - /hey-listen/1.0.8: + /hey-listen@1.0.8: resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} dev: false - /hoist-non-react-statics/3.3.2: + /hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} dependencies: react-is: 16.13.1 dev: false - /hosted-git-info/2.8.9: + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true - /hosted-git-info/4.1.0: + /hosted-git-info@4.1.0: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} dependencies: lru-cache: 6.0.0 dev: true - /hosted-git-info/5.2.1: + /hosted-git-info@5.2.1: resolution: {integrity: sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: lru-cache: 7.18.1 dev: true - /hsl-regex/1.0.0: - resolution: {integrity: sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==} - dev: false - - /hsla-regex/1.0.0: - resolution: {integrity: sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==} - dev: false - - /htm/3.1.1: - resolution: {integrity: sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ==} - dev: false - - /html-encoding-sniffer/3.0.0: + /html-encoding-sniffer@3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} dependencies: whatwg-encoding: 2.0.0 dev: true - /html-escaper/2.0.2: + /html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - /html-parse-stringify/3.0.1: - resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} - dependencies: - void-elements: 3.1.0 - dev: false - - /html-tags/3.2.0: - resolution: {integrity: sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==} - engines: {node: '>=8'} - dev: false - - /http-errors/2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} + /http-errors@1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} + engines: {node: '>= 0.6'} dependencies: - depd: 2.0.0 + depd: 1.1.2 inherits: 2.0.4 setprototypeof: 1.2.0 - statuses: 2.0.1 + statuses: 1.5.0 toidentifier: 1.0.1 + dev: false - /http-proxy-agent/5.0.0: + /http-proxy-agent@5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} engines: {node: '>= 6'} dependencies: @@ -9207,7 +8700,7 @@ packages: - supports-color dev: true - /https-proxy-agent/5.0.1: + /https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} dependencies: @@ -9217,87 +8710,63 @@ packages: - supports-color dev: true - /human-id/1.0.2: + /human-id@1.0.2: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} dev: true - /human-signals/1.1.1: + /human-signals@1.1.1: resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} engines: {node: '>=8.12.0'} dev: true - /human-signals/2.1.0: + /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - /husky/8.0.3: + /husky@8.0.3: resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} engines: {node: '>=14'} hasBin: true dev: true - /hyphenate-style-name/1.0.4: - resolution: {integrity: sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==} - dev: false - - /i18next-fs-backend/2.1.1: - resolution: {integrity: sha512-FTnj+UmNgT3YRml5ruRv0jMZDG7odOL/OP5PF5mOqvXud2vHrPOOs68Zdk6iqzL47cnnM0ZVkK2BAvpFeDJToA==} - dev: false - - /i18next/22.4.13: - resolution: {integrity: sha512-GX7flMHRRqQA0I1yGLmaZ4Hwt1JfLqagk8QPDPZsqekbKtXsuIngSVWM/s3SLgNkrEXjA+0sMGNuOEkkmyqmWg==} - dependencies: - '@babel/runtime': 7.20.13 - dev: false - - /iconv-lite/0.4.24: + /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 - /iconv-lite/0.6.3: + /iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 + dev: true - /ieee754/1.2.1: + /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - /ignore-by-default/2.1.0: - resolution: {integrity: sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw==} - engines: {node: '>=10 <11 || >=12 <13 || >=14'} - dev: true - - /ignore/5.2.0: + /ignore@5.2.0: resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} engines: {node: '>= 4'} - /immediate/3.0.6: - resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - dev: false - - /immer/9.0.12: - resolution: {integrity: sha512-lk7UNmSbAukB5B6dh9fnh5D0bJTOFKxVg2cyJWTYrWRfhLrLMBquONcUs3aFq507hNoIZEDDh8lb8UtOizSMhA==} - dev: false - - /immutable/3.7.6: + /immutable@3.7.6: resolution: {integrity: sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==} engines: {node: '>=0.8.0'} + dev: false - /import-fresh/3.3.0: + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - /import-from/4.0.0: + /import-from@4.0.0: resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} engines: {node: '>=12.2'} + dev: false - /import-local/3.1.0: + /import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} hasBin: true @@ -9305,216 +8774,197 @@ packages: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 - /imurmurhash/0.1.4: + /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - /indent-string/4.0.0: + /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} dev: true - /indent-string/5.0.0: + /indent-string@5.0.0: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} engines: {node: '>=12'} dev: true - /inflight/1.0.6: + /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: once: 1.4.0 wrappy: 1.0.2 - /inherits/2.0.4: + /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - /ini/1.3.8: + /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true - /inline-style-parser/0.1.1: - resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} - dev: false - - /inline-style-prefixer/6.0.1: - resolution: {integrity: sha512-AsqazZ8KcRzJ9YPN1wMH2aNM7lkWQ8tSPrW5uDk1ziYwiAPWSZnUsC7lfZq+BDqLqz0B4Pho5wscWcJzVvRzDQ==} + /inquirer@8.2.6: + resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} + engines: {node: '>=12.0.0'} dependencies: - css-in-js-utils: 2.0.1 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 6.2.0 dev: false - /internal-slot/1.0.3: - resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} + /internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.1.3 - has: 1.0.3 + get-intrinsic: 1.2.2 + hasown: 2.0.0 side-channel: 1.0.4 dev: true - /internmap/2.0.3: - resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} - engines: {node: '>=12'} - dev: false - - /invariant/2.2.4: + /invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} dependencies: loose-envify: 1.4.0 + dev: false - /ipaddr.js/1.9.1: + /ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} + dev: false - /irregular-plurals/3.3.0: - resolution: {integrity: sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g==} - engines: {node: '>=8'} - dev: true - - /is-absolute/1.0.0: + /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 - - /is-alphabetical/2.0.1: - resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} - dev: false - - /is-alphanumerical/2.0.1: - resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} - dependencies: - is-alphabetical: 2.0.1 - is-decimal: 2.0.1 dev: false - /is-arguments/1.1.1: + /is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-tostringtag: 1.0.0 dev: true - /is-arrayish/0.2.1: + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 + dev: true + + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - /is-arrayish/0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - dev: false + /is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true - /is-bigint/1.0.4: + /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 dev: true - /is-binary-path/2.1.0: + /is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 + dev: true - /is-boolean-object/1.1.2: + /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-tostringtag: 1.0.0 dev: true - /is-buffer/2.0.5: - resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} - engines: {node: '>=4'} - dev: false - - /is-callable/1.2.7: + /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} dev: true - /is-ci/3.0.1: + /is-ci@3.0.1: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} hasBin: true dependencies: ci-info: 3.7.1 dev: true - /is-color-stop/1.1.0: - resolution: {integrity: sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==} + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - css-color-names: 0.0.4 - hex-color-regex: 1.1.0 - hsl-regex: 1.0.0 - hsla-regex: 1.0.0 - rgb-regex: 1.0.1 - rgba-regex: 1.0.0 - dev: false - - /is-core-module/2.11.0: - resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} - dependencies: - has: 1.0.3 + hasown: 2.0.0 - /is-date-object/1.0.5: + /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-decimal/2.0.1: - resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - dev: false - - /is-docker/2.2.1: + /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true + dev: true - /is-docker/3.0.0: + /is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true dev: true - /is-error/2.2.2: - resolution: {integrity: sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==} - dev: true - - /is-extendable/0.1.1: - resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} - engines: {node: '>=0.10.0'} - dev: false - - /is-extglob/2.1.1: + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - /is-fullwidth-code-point/3.0.0: + /is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + dependencies: + call-bind: 1.0.5 + dev: true + + /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - /is-fullwidth-code-point/4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - dev: true - - /is-generator-fn/2.1.0: + /is-generator-fn@2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} - /is-glob/4.0.3: + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - /is-hexadecimal/2.0.1: - resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - dev: false - - /is-inside-container/1.0.0: + /is-inside-container@1.0.0: resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} engines: {node: '>=14.16'} hasBin: true @@ -9522,239 +8972,208 @@ packages: is-docker: 3.0.0 dev: true - /is-lower-case/2.0.2: + /is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + dev: false + + /is-lower-case@2.0.2: resolution: {integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==} dependencies: tslib: 2.5.0 + dev: false - /is-map/2.0.2: + /is-map@2.0.2: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} dev: true - /is-negative-zero/2.0.2: + /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} dev: true - /is-number-object/1.0.7: + /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-number/7.0.0: + /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - /is-path-cwd/3.0.0: - resolution: {integrity: sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - - /is-path-inside/4.0.0: - resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} - engines: {node: '>=12'} + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} dev: true - /is-plain-obj/1.1.0: + /is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} dev: true - /is-plain-obj/2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - dev: false - - /is-plain-obj/4.1.0: + /is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} dev: false - /is-plain-object/5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - dev: true - - /is-port-reachable/4.0.0: + /is-port-reachable@4.0.0: resolution: {integrity: sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /is-potential-custom-element-name/1.0.1: + /is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: true - /is-promise/4.0.0: - resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - dev: true - - /is-reference/3.0.0: - resolution: {integrity: sha512-Eo1W3wUoHWoCoVM4GVl/a+K0IgiqE5aIo4kJABFyMum1ZORlPkC+UC357sSQUL5w5QCE5kCC9upl75b7+7CY/Q==} - dependencies: - '@types/estree': 1.0.0 - dev: false - - /is-regex/1.1.4: + /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-tostringtag: 1.0.0 dev: true - /is-relative/1.0.0: + /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: false - /is-set/2.0.2: + /is-set@2.0.2: resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} dev: true - /is-shared-array-buffer/1.0.2: + /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 dev: true - /is-stream/2.0.1: + /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - /is-stream/3.0.0: + /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /is-string/1.0.7: + /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 dev: true - /is-subdir/1.2.0: + /is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} dependencies: better-path-resolve: 1.0.0 dev: true - /is-symbol/1.0.4: + /is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /is-typed-array/1.1.9: - resolution: {integrity: sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==} + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-abstract: 1.20.4 - for-each: 0.3.3 - has-tostringtag: 1.0.0 + which-typed-array: 1.1.13 dev: true - /is-unc-path/1.0.0: + /is-unc-path@1.0.0: resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} engines: {node: '>=0.10.0'} dependencies: unc-path-regex: 0.1.2 + dev: false - /is-unicode-supported/1.3.0: - resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} - engines: {node: '>=12'} - dev: true + /is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: false - /is-upper-case/2.0.2: + /is-upper-case@2.0.2: resolution: {integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==} dependencies: tslib: 2.5.0 + dev: false - /is-weakmap/2.0.1: + /is-weakmap@2.0.1: resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} dev: true - /is-weakref/1.0.2: + /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 dev: true - /is-weakset/2.0.2: + /is-weakset@2.0.2: resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.3 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 dev: true - /is-windows/1.0.2: + /is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} - /is-wsl/2.2.0: + /is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} dependencies: is-docker: 2.2.1 - - /isarray/2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} dev: true - /isexe/2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - /isobject/3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - dev: false - - /isomorphic-unfetch/4.0.2: - resolution: {integrity: sha512-1Yd+CF/7al18/N2BDbsLBcp6RO3tucSW+jcLq24dqdX5MNbCNTw1z4BsGsp4zNmjr/Izm2cs/cEqZPp4kvWSCA==} - dependencies: - node-fetch: 3.3.0 - unfetch: 5.0.0 + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} dev: true - /isomorphic-ws/4.0.1_ws@8.11.0: + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + /isomorphic-ws@4.0.1(ws@8.13.0): resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} peerDependencies: ws: '*' dependencies: - ws: 8.11.0 + ws: 8.13.0(bufferutil@4.0.7)(utf-8-validate@6.0.3) - /isomorphic-ws/5.0.0_ws@8.13.0: + /isomorphic-ws@5.0.0(ws@8.13.0): resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} peerDependencies: ws: '*' dependencies: - ws: 8.13.0 + ws: 8.13.0(bufferutil@4.0.7)(utf-8-validate@6.0.3) dev: false - /istanbul-lib-coverage/3.2.0: + /istanbul-lib-coverage@3.2.0: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} - /istanbul-lib-instrument/5.2.1: + /istanbul-lib-instrument@5.2.1: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.19.6 - '@babel/parser': 7.20.1 + '@babel/core': 7.23.7 + '@babel/parser': 7.23.6 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 - semver: 6.3.0 + semver: 6.3.1 transitivePeerDependencies: - supports-color - /istanbul-lib-report/3.0.0: + /istanbul-lib-report@3.0.0: resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} engines: {node: '>=8'} dependencies: @@ -9762,7 +9181,7 @@ packages: make-dir: 3.1.0 supports-color: 7.2.0 - /istanbul-lib-source-maps/4.0.1: + /istanbul-lib-source-maps@4.0.1: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: @@ -9772,24 +9191,43 @@ packages: transitivePeerDependencies: - supports-color - /istanbul-reports/3.1.5: + /istanbul-reports@3.1.5: resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.0 - /iterall/1.3.0: + /iterall@1.3.0: resolution: {integrity: sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==} - /jest-changed-files/29.5.0: + /iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.4 + set-function-name: 2.0.1 + dev: true + + /jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + dev: true + + /jest-changed-files@29.5.0: resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: execa: 5.1.1 p-limit: 3.1.0 - /jest-circus/29.5.0: + /jest-circus@29.5.0: resolution: {integrity: sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -9797,7 +9235,7 @@ packages: '@jest/expect': 29.5.0 '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.5 + '@types/node': 18.19.6 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -9816,35 +9254,7 @@ packages: transitivePeerDependencies: - supports-color - /jest-cli/29.5.0_757mb262zsxkcnuknwfdsckmku: - resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} - 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.5.0_ts-node@10.9.1 - '@jest/test-result': 29.5.0 - '@jest/types': 29.5.0 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.10 - import-local: 3.1.0 - jest-config: 29.5.0_757mb262zsxkcnuknwfdsckmku - jest-util: 29.5.0 - jest-validate: 29.5.0 - prompts: 2.4.2 - yargs: 17.6.2 - transitivePeerDependencies: - - '@types/node' - - supports-color - - ts-node - dev: true - - /jest-cli/29.5.0_@types+node@18.15.5: + /jest-cli@29.5.0(@types/node@18.19.6)(ts-node@10.9.1): resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -9854,14 +9264,14 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.5.0 + '@jest/core': 29.5.0(ts-node@10.9.1) '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.10 import-local: 3.1.0 - jest-config: 29.5.0_@types+node@18.15.5 + jest-config: 29.5.0(@types/node@18.19.6)(ts-node@10.9.1) jest-util: 29.5.0 jest-validate: 29.5.0 prompts: 2.4.2 @@ -9871,47 +9281,7 @@ packages: - supports-color - ts-node - /jest-config/29.5.0_757mb262zsxkcnuknwfdsckmku: - resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} - 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.19.6 - '@jest/test-sequencer': 29.5.0 - '@jest/types': 29.5.0 - '@types/node': 18.15.5 - babel-jest: 29.5.0_@babel+core@7.19.6 - chalk: 4.1.2 - ci-info: 3.7.1 - deepmerge: 4.2.2 - glob: 7.2.3 - graceful-fs: 4.2.10 - jest-circus: 29.5.0 - jest-environment-node: 29.5.0 - jest-get-type: 29.4.3 - jest-regex-util: 29.4.3 - jest-resolve: 29.5.0 - jest-runner: 29.5.0 - jest-util: 29.5.0 - jest-validate: 29.5.0 - micromatch: 4.0.5 - parse-json: 5.2.0 - pretty-format: 29.5.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - ts-node: 10.9.1_345kigqis4fipgyy5xb3ndshmq - transitivePeerDependencies: - - supports-color - dev: true - - /jest-config/29.5.0_@types+node@18.15.5: + /jest-config@29.5.0(@types/node@18.19.6)(ts-node@10.9.1): resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -9923,11 +9293,11 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.19.6 + '@babel/core': 7.23.7 '@jest/test-sequencer': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.5 - babel-jest: 29.5.0_@babel+core@7.19.6 + '@types/node': 18.19.6 + babel-jest: 29.5.0(@babel/core@7.23.7) chalk: 4.1.2 ci-info: 3.7.1 deepmerge: 4.2.2 @@ -9946,10 +9316,11 @@ packages: pretty-format: 29.5.0 slash: 3.0.0 strip-json-comments: 3.1.1 + ts-node: 10.9.1(@types/node@18.19.6)(typescript@5.3.3) transitivePeerDependencies: - supports-color - /jest-diff/29.5.0: + /jest-diff@29.5.0: resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -9958,13 +9329,13 @@ packages: jest-get-type: 29.4.3 pretty-format: 29.5.0 - /jest-docblock/29.4.3: + /jest-docblock@29.4.3: resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: detect-newline: 3.1.0 - /jest-each/29.5.0: + /jest-each@29.5.0: resolution: {integrity: sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -9974,7 +9345,7 @@ packages: jest-util: 29.5.0 pretty-format: 29.5.0 - /jest-environment-jsdom/29.5.0: + /jest-environment-jsdom@29.5.0(bufferutil@4.0.7)(utf-8-validate@6.0.3): resolution: {integrity: sha512-/KG8yEK4aN8ak56yFVdqFDzKNHgF4BAymCx2LbPNPsUshUlfAl0eX402Xm1pt+eoG9SLZEUVifqXtX8SK74KCw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -9987,38 +9358,38 @@ packages: '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 '@types/jsdom': 20.0.0 - '@types/node': 18.15.5 + '@types/node': 18.19.6 jest-mock: 29.5.0 jest-util: 29.5.0 - jsdom: 20.0.2 + jsdom: 20.0.2(bufferutil@4.0.7)(utf-8-validate@6.0.3) transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate dev: true - /jest-environment-node/29.5.0: + /jest-environment-node@29.5.0: resolution: {integrity: sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/environment': 29.5.0 '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.5 + '@types/node': 18.19.6 jest-mock: 29.5.0 jest-util: 29.5.0 - /jest-get-type/29.4.3: + /jest-get-type@29.4.3: resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - /jest-haste-map/29.5.0: + /jest-haste-map@29.5.0: resolution: {integrity: sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 '@types/graceful-fs': 4.1.5 - '@types/node': 18.15.5 + '@types/node': 18.19.6 anymatch: 3.1.2 fb-watchman: 2.0.2 graceful-fs: 4.2.10 @@ -10028,16 +9399,16 @@ packages: micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 - /jest-leak-detector/29.5.0: + /jest-leak-detector@29.5.0: resolution: {integrity: sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-get-type: 29.4.3 pretty-format: 29.5.0 - /jest-matcher-utils/29.5.0: + /jest-matcher-utils@29.5.0: resolution: {integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -10046,11 +9417,11 @@ packages: jest-get-type: 29.4.3 pretty-format: 29.5.0 - /jest-message-util/29.5.0: + /jest-message-util@29.5.0: resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.23.5 '@jest/types': 29.5.0 '@types/stack-utils': 2.0.1 chalk: 4.1.2 @@ -10060,15 +9431,15 @@ packages: slash: 3.0.0 stack-utils: 2.0.6 - /jest-mock/29.5.0: + /jest-mock@29.5.0: resolution: {integrity: sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.15.5 + '@types/node': 18.19.6 jest-util: 29.5.0 - /jest-pnp-resolver/1.2.2_jest-resolve@29.5.0: + /jest-pnp-resolver@1.2.2(jest-resolve@29.5.0): resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} engines: {node: '>=6'} peerDependencies: @@ -10079,16 +9450,11 @@ packages: dependencies: jest-resolve: 29.5.0 - /jest-regex-util/29.2.0: - resolution: {integrity: sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: false - - /jest-regex-util/29.4.3: + /jest-regex-util@29.4.3: resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - /jest-resolve-dependencies/29.5.0: + /jest-resolve-dependencies@29.5.0: resolution: {integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -10097,21 +9463,21 @@ packages: transitivePeerDependencies: - supports-color - /jest-resolve/29.5.0: + /jest-resolve@29.5.0: resolution: {integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==} 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.5.0 - jest-pnp-resolver: 1.2.2_jest-resolve@29.5.0 + jest-pnp-resolver: 1.2.2(jest-resolve@29.5.0) jest-util: 29.5.0 jest-validate: 29.5.0 - resolve: 1.22.1 + resolve: 1.22.8 resolve.exports: 2.0.0 slash: 3.0.0 - /jest-runner/29.5.0: + /jest-runner@29.5.0: resolution: {integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -10120,7 +9486,7 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.5 + '@types/node': 18.19.6 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.10 @@ -10139,7 +9505,7 @@ packages: transitivePeerDependencies: - supports-color - /jest-runtime/29.5.0: + /jest-runtime@29.5.0: resolution: {integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -10150,7 +9516,7 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.5 + '@types/node': 18.19.6 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 @@ -10168,22 +9534,22 @@ packages: transitivePeerDependencies: - supports-color - /jest-snapshot/29.5.0: + /jest-snapshot@29.5.0: resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.19.6 - '@babel/generator': 7.20.1 - '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.19.6 - '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.19.6 - '@babel/traverse': 7.20.1 - '@babel/types': 7.20.0 + '@babel/core': 7.23.7 + '@babel/generator': 7.23.6 + '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.23.7) + '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.23.7) + '@babel/traverse': 7.23.7 + '@babel/types': 7.23.6 '@jest/expect-utils': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 '@types/babel__traverse': 7.18.2 '@types/prettier': 2.7.2 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.19.6 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.7) chalk: 4.1.2 expect: 29.5.0 graceful-fs: 4.2.10 @@ -10194,33 +9560,22 @@ packages: jest-util: 29.5.0 natural-compare: 1.4.0 pretty-format: 29.5.0 - semver: 7.3.8 + semver: 7.5.4 transitivePeerDependencies: - supports-color - /jest-util/29.4.0: - resolution: {integrity: sha512-lCCwlze7UEV8TpR9ArS8w0cTbcMry5tlBkg7QSc5og5kNyV59dnY2aKHu5fY2k5aDJMQpCUGpvL2w6ZU44lveA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.5.0 - '@types/node': 18.15.5 - chalk: 4.1.2 - ci-info: 3.7.1 - graceful-fs: 4.2.10 - picomatch: 2.3.1 - - /jest-util/29.5.0: + /jest-util@29.5.0: resolution: {integrity: sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.15.5 + '@types/node': 18.19.6 chalk: 4.1.2 ci-info: 3.7.1 graceful-fs: 4.2.10 picomatch: 2.3.1 - /jest-validate/29.5.0: + /jest-validate@29.5.0: resolution: {integrity: sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -10231,7 +9586,7 @@ packages: leven: 3.1.0 pretty-format: 29.5.0 - /jest-watch-typeahead/2.2.2_jest@29.5.0: + /jest-watch-typeahead@2.2.2(jest@29.5.0): resolution: {integrity: sha512-+QgOFW4o5Xlgd6jGS5X37i08tuuXNW8X0CV9WNFi+3n8ExCIP+E1melYhvYLjv5fE6D0yyzk74vsSO8I6GqtvQ==} engines: {node: ^14.17.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -10239,51 +9594,37 @@ packages: dependencies: ansi-escapes: 6.0.0 chalk: 5.2.0 - jest: 29.5.0_@types+node@18.15.5 - jest-regex-util: 29.2.0 - jest-watcher: 29.4.0 + jest: 29.5.0(@types/node@18.19.6)(ts-node@10.9.1) + jest-regex-util: 29.4.3 + jest-watcher: 29.5.0 slash: 5.0.0 string-length: 5.0.1 strip-ansi: 7.0.1 dev: false - /jest-watcher/29.4.0: - resolution: {integrity: sha512-PnnfLygNKelWOJwpAYlcsQjB+OxRRdckD0qiGmYng4Hkz1ZwK3jvCaJJYiywz2msQn4rBNLdriasJtv7YpWHpA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/test-result': 29.4.0 - '@jest/types': 29.5.0 - '@types/node': 18.15.5 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.13.1 - jest-util: 29.5.0 - string-length: 4.0.2 - dev: false - - /jest-watcher/29.5.0: + /jest-watcher@29.5.0: resolution: {integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.5 + '@types/node': 18.19.6 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 jest-util: 29.5.0 string-length: 4.0.2 - /jest-worker/29.5.0: + /jest-worker@29.5.0: resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 18.15.5 + '@types/node': 18.19.6 jest-util: 29.5.0 merge-stream: 2.0.0 supports-color: 8.1.1 - /jest/29.5.0_757mb262zsxkcnuknwfdsckmku: + /jest@29.5.0(@types/node@18.19.6)(ts-node@10.9.1): resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -10293,36 +9634,21 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.5.0_ts-node@10.9.1 + '@jest/core': 29.5.0(ts-node@10.9.1) '@jest/types': 29.5.0 import-local: 3.1.0 - jest-cli: 29.5.0_757mb262zsxkcnuknwfdsckmku + jest-cli: 29.5.0(@types/node@18.19.6)(ts-node@10.9.1) transitivePeerDependencies: - '@types/node' - supports-color - ts-node - dev: true - /jest/29.5.0_@types+node@18.15.5: - resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/core': 29.5.0 - '@jest/types': 29.5.0 - import-local: 3.1.0 - jest-cli: 29.5.0_@types+node@18.15.5 - transitivePeerDependencies: - - '@types/node' - - supports-color - - ts-node + dev: true - /joi/17.7.0: + /joi@17.7.0: resolution: {integrity: sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==} dependencies: '@hapi/hoek': 9.3.0 @@ -10332,32 +9658,23 @@ packages: '@sideway/pinpoint': 2.0.0 dev: true - /js-cookie/2.2.1: - resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} - dev: false - - /js-string-escape/1.0.1: - resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} - engines: {node: '>= 0.8'} - dev: true - - /js-tokens/4.0.0: + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - /js-yaml/3.14.1: + /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 - /js-yaml/4.1.0: + /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true dependencies: argparse: 2.0.1 - /jsdom/20.0.2: + /jsdom@20.0.2(bufferutil@4.0.7)(utf-8-validate@6.0.3): resolution: {integrity: sha512-AHWa+QO/cgRg4N+DsmHg1Y7xnz+8KU3EflM0LVDTdmrYOc1WWTSkOjtpUveQH+1Bqd5rtcVnb/DuxV/UjDO4rA==} engines: {node: '>=14'} peerDependencies: @@ -10367,7 +9684,7 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.8.1 + acorn: 8.11.3 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 @@ -10389,952 +9706,421 @@ packages: webidl-conversions: 7.0.0 whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 - whatwg-url: 11.0.0 - ws: 8.13.0 - xml-name-validator: 4.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /jsesc/2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - - /json-parse-even-better-errors/2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - /json-schema-traverse/1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - - /json5/2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - /jsonc-parser/3.2.0: - resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} - dev: false - - /jsonfile/4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - optionalDependencies: - graceful-fs: 4.2.10 - dev: true - - /jsonfile/6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - dependencies: - universalify: 2.0.0 - optionalDependencies: - graceful-fs: 4.2.10 - dev: false - - /khroma/2.0.0: - resolution: {integrity: sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==} - dev: false - - /kind-of/6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - - /kleur/3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - - /kleur/4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - - /leven/3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - - /levn/0.3.0: - resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.1.2 - type-check: 0.3.2 - dev: true - - /lie/3.1.1: - resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} - dependencies: - immediate: 3.0.6 - dev: false - - /light-my-request/5.6.1: - resolution: {integrity: sha512-sbJnC1UBRivi9L1kICr3CESb82pNiPNB3TvtdIrZZqW0Qh8uDXvoywMmWKZlihDcmw952CMICCzM+54LDf+E+g==} - dependencies: - cookie: 0.5.0 - process-warning: 2.0.0 - set-cookie-parser: 2.5.1 - - /lilconfig/2.0.6: - resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} - engines: {node: '>=10'} - - /lines-and-columns/1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - /load-json-file/7.0.1: - resolution: {integrity: sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - - /load-script/1.0.0: - resolution: {integrity: sha512-kPEjMFtZvwL9TaZo0uZ2ml+Ye9HUMmPwbYRJ324qF9tqMejwykJ5ggTyvzmrbBeapCAbk98BSbTeovHEEP1uCA==} - dev: false - - /load-yaml-file/0.2.0: - resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} - engines: {node: '>=6'} - dependencies: - graceful-fs: 4.2.10 - js-yaml: 3.14.1 - pify: 4.0.1 - strip-bom: 3.0.0 - dev: true - - /localforage/1.10.0: - resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} - dependencies: - lie: 3.1.1 - dev: false - - /locate-path/5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - dependencies: - p-locate: 4.1.0 - - /locate-path/6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - dependencies: - p-locate: 5.0.0 - dev: true - - /locate-path/7.1.1: - resolution: {integrity: sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - p-locate: 6.0.0 - dev: true - - /lodash-es/4.17.21: - resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - dev: true - - /lodash.flatmap/4.5.0: - resolution: {integrity: sha512-/OcpcAGWlrZyoHGeHh3cAoa6nGdX6QYtmzNP84Jqol6UEQQ2gIaU3H+0eICcjcKGl0/XF8LWOujNn9lffsnaOg==} - dev: false - - /lodash.get/4.4.2: - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} - dev: false - - /lodash.memoize/4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - - /lodash.merge/4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: false - - /lodash.mergewith/4.6.2: - resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} - dev: false - - /lodash.startcase/4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - dev: true - - /lodash.topath/4.5.2: - resolution: {integrity: sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==} - dev: false - - /lodash/4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - /longest-streak/3.0.1: - resolution: {integrity: sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==} - dev: false - - /loose-envify/1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - dependencies: - js-tokens: 4.0.0 - - /lower-case-first/2.0.2: - resolution: {integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==} - dependencies: - tslib: 2.5.0 - - /lower-case/2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - dependencies: - tslib: 2.5.0 - - /lru-cache/4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} - dependencies: - pseudomap: 1.0.2 - yallist: 2.1.2 + whatwg-url: 11.0.0 + ws: 8.13.0(bufferutil@4.0.7)(utf-8-validate@6.0.3) + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate dev: true - /lru-cache/6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - - /lru-cache/7.18.1: - resolution: {integrity: sha512-8/HcIENyQnfUTCDizRu9rrDyG6XG/21M4X7/YEGZeD76ZJilFPAUVb/2zysFf7VVO1LEjCDFyHp8pMMvozIrvg==} - engines: {node: '>=12'} + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true dev: true - /lz-string/1.4.4: - resolution: {integrity: sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==} + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} hasBin: true - dev: true - /make-dir/3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - dependencies: - semver: 6.3.0 + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true - /make-error/1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - /makeerror/1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + /json-schema-ref-resolver@1.0.1: + resolution: {integrity: sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==} dependencies: - tmpl: 1.0.5 + fast-deep-equal: 3.1.3 + dev: false - /map-age-cleaner/0.1.3: - resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} - engines: {node: '>=6'} - dependencies: - p-defer: 1.0.0 + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true - /map-cache/0.2.2: - resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} - engines: {node: '>=0.10.0'} - - /map-obj/1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - dev: true + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - /map-obj/4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true - /map-stream/0.1.0: - resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.7 dev: true - /markdown-extensions/1.1.1: - resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} - engines: {node: '>=0.10.0'} - dev: false - - /markdown-table/3.0.2: - resolution: {integrity: sha512-y8j3a5/DkJCmS5x4dMCQL+OR0+2EAq3DOtio1COSHsmW2BGXnNCK3v12hJt1LrUz5iZH5g0LmuYOjDdI+czghA==} - dev: false + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true - /matcher/5.0.0: - resolution: {integrity: sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - escape-string-regexp: 5.0.0 + /jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + optionalDependencies: + graceful-fs: 4.2.10 dev: true - /md5-hex/3.0.1: - resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==} - engines: {node: '>=8'} + /jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} dependencies: - blueimp-md5: 2.19.0 + array-includes: 3.1.7 + array.prototype.flat: 1.3.2 + object.assign: 4.1.4 + object.values: 1.1.7 dev: true - /mdast-util-definitions/5.1.1: - resolution: {integrity: sha512-rQ+Gv7mHttxHOBx2dkF4HWTg+EE+UR78ptQWDylzPKaQuVGdG4HIoY3SrS/pCp80nZ04greFvXbVFHT+uf0JVQ==} - dependencies: - '@types/mdast': 3.0.10 - '@types/unist': 2.0.6 - unist-util-visit: 4.1.1 + /just-extend@6.2.0: + resolution: {integrity: sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==} dev: false - /mdast-util-find-and-replace/2.2.1: - resolution: {integrity: sha512-SobxkQXFAdd4b5WmEakmkVoh18icjQRxGy5OWTCzgsLRm1Fu/KCtwD1HIQSsmq5ZRjVH0Ehwg6/Fn3xIUk+nKw==} - dependencies: - escape-string-regexp: 5.0.0 - unist-util-is: 5.1.1 - unist-util-visit-parents: 5.1.1 + /just-has@2.3.0: + resolution: {integrity: sha512-JzxCot/ETqLDullSSC5OtT/PLWiqgRNO5z33gVit6BoCXe/6BHut33o9ZunG5jQSqeY4EyzFnl8Wqc7S8Ci/wQ==} dev: false - /mdast-util-from-markdown/1.2.0: - resolution: {integrity: sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==} - dependencies: - '@types/mdast': 3.0.10 - '@types/unist': 2.0.6 - decode-named-character-reference: 1.0.2 - mdast-util-to-string: 3.1.0 - micromark: 3.1.0 - micromark-util-decode-numeric-character-reference: 1.0.0 - micromark-util-decode-string: 1.0.2 - micromark-util-normalize-identifier: 1.0.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - unist-util-stringify-position: 3.0.2 - uvu: 0.5.6 - transitivePeerDependencies: - - supports-color + /just-memoize@2.2.0: + resolution: {integrity: sha512-zriv+MY+61RXT0QsrO1ZJtL5umouqqSWmCGBkp2wJm35kniunBAA4qhUKx8Lvg/QcwrF9xuw9E6PkevKFf4boQ==} dev: false - /mdast-util-gfm-autolink-literal/1.0.2: - resolution: {integrity: sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg==} - dependencies: - '@types/mdast': 3.0.10 - ccount: 2.0.1 - mdast-util-find-and-replace: 2.2.1 - micromark-util-character: 1.1.0 + /just-safe-get@4.2.0: + resolution: {integrity: sha512-+tS4Bvgr/FnmYxOGbwziJ8I2BFk+cP1gQHm6rm7zo61w1SbxBwWGEq/Ryy9Gb6bvnloPq6pz7Bmm4a0rjTNlXA==} dev: false - /mdast-util-gfm-footnote/1.0.1: - resolution: {integrity: sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw==} - dependencies: - '@types/mdast': 3.0.10 - mdast-util-to-markdown: 1.3.0 - micromark-util-normalize-identifier: 1.0.0 + /just-safe-set@4.2.1: + resolution: {integrity: sha512-La5CP41Ycv52+E4g7w1sRV8XXk7Sp8a/TwWQAYQKn6RsQz1FD4Z/rDRRmqV3wJznS1MDF3YxK7BCudX1J8FxLg==} dev: false - /mdast-util-gfm-strikethrough/1.0.1: - resolution: {integrity: sha512-zKJbEPe+JP6EUv0mZ0tQUyLQOC+FADt0bARldONot/nefuISkaZFlmVK4tU6JgfyZGrky02m/I6PmehgAgZgqg==} - dependencies: - '@types/mdast': 3.0.10 - mdast-util-to-markdown: 1.3.0 - dev: false + /kebab-case@1.0.2: + resolution: {integrity: sha512-7n6wXq4gNgBELfDCpzKc+mRrZFs7D+wgfF5WRFLNAr4DA/qtr9Js8uOAVAfHhuLMfAcQ0pRKqbpjx+TcJVdE1Q==} + dev: true - /mdast-util-gfm-table/1.0.6: - resolution: {integrity: sha512-uHR+fqFq3IvB3Rd4+kzXW8dmpxUhvgCQZep6KdjsLK4O6meK5dYZEayLtIxNus1XO3gfjfcIFe8a7L0HZRGgag==} + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: - '@types/mdast': 3.0.10 - markdown-table: 3.0.2 - mdast-util-from-markdown: 1.2.0 - mdast-util-to-markdown: 1.3.0 - transitivePeerDependencies: - - supports-color - dev: false + json-buffer: 3.0.1 + dev: true - /mdast-util-gfm-task-list-item/1.0.1: - resolution: {integrity: sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA==} - dependencies: - '@types/mdast': 3.0.10 - mdast-util-to-markdown: 1.3.0 - dev: false + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: true - /mdast-util-gfm/2.0.1: - resolution: {integrity: sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==} - dependencies: - mdast-util-from-markdown: 1.2.0 - mdast-util-gfm-autolink-literal: 1.0.2 - mdast-util-gfm-footnote: 1.0.1 - mdast-util-gfm-strikethrough: 1.0.1 - mdast-util-gfm-table: 1.0.6 - mdast-util-gfm-task-list-item: 1.0.1 - mdast-util-to-markdown: 1.3.0 - transitivePeerDependencies: - - supports-color - dev: false + /kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} - /mdast-util-mdx-expression/1.3.1: - resolution: {integrity: sha512-TTb6cKyTA1RD+1su1iStZ5PAv3rFfOUKcoU5EstUpv/IZo63uDX03R8+jXjMEhcobXnNOiG6/ccekvVl4eV1zQ==} - dependencies: - '@types/estree-jsx': 1.0.0 - '@types/hast': 2.3.4 - '@types/mdast': 3.0.10 - mdast-util-from-markdown: 1.2.0 - mdast-util-to-markdown: 1.3.0 - transitivePeerDependencies: - - supports-color - dev: false + /kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + dev: true - /mdast-util-mdx-jsx/2.1.0: - resolution: {integrity: sha512-KzgzfWMhdteDkrY4mQtyvTU5bc/W4ppxhe9SzelO6QUUiwLAM+Et2Dnjjprik74a336kHdo0zKm7Tp+n6FFeRg==} - dependencies: - '@types/estree-jsx': 1.0.0 - '@types/hast': 2.3.4 - '@types/mdast': 3.0.10 - ccount: 2.0.1 - mdast-util-to-markdown: 1.3.0 - parse-entities: 4.0.0 - stringify-entities: 4.0.3 - unist-util-remove-position: 4.0.1 - unist-util-stringify-position: 3.0.2 - vfile-message: 3.1.2 - dev: false + /language-subtag-registry@0.3.22: + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + dev: true - /mdast-util-mdx/2.0.0: - resolution: {integrity: sha512-M09lW0CcBT1VrJUaF/PYxemxxHa7SLDHdSn94Q9FhxjCQfuW7nMAWKWimTmA3OyDMSTH981NN1csW1X+HPSluw==} + /language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} dependencies: - mdast-util-mdx-expression: 1.3.1 - mdast-util-mdx-jsx: 2.1.0 - mdast-util-mdxjs-esm: 1.3.0 - transitivePeerDependencies: - - supports-color - dev: false + language-subtag-registry: 0.3.22 + dev: true - /mdast-util-mdxjs-esm/1.3.0: - resolution: {integrity: sha512-7N5ihsOkAEGjFotIX9p/YPdl4TqUoMxL4ajNz7PbT89BqsdWJuBC9rvgt6wpbwTZqWWR0jKWqQbwsOWDBUZv4g==} - dependencies: - '@types/estree-jsx': 1.0.0 - '@types/hast': 2.3.4 - '@types/mdast': 3.0.10 - mdast-util-from-markdown: 1.2.0 - mdast-util-to-markdown: 1.3.0 - transitivePeerDependencies: - - supports-color - dev: false + /leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} - /mdast-util-to-hast/12.2.4: - resolution: {integrity: sha512-a21xoxSef1l8VhHxS1Dnyioz6grrJkoaCUgGzMD/7dWHvboYX3VW53esRUfB5tgTyz4Yos1n25SPcj35dJqmAg==} + /levn@0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} dependencies: - '@types/hast': 2.3.4 - '@types/mdast': 3.0.10 - mdast-util-definitions: 5.1.1 - micromark-util-sanitize-uri: 1.1.0 - trim-lines: 3.0.1 - unist-builder: 3.0.0 - unist-util-generated: 2.0.0 - unist-util-position: 4.0.3 - unist-util-visit: 4.1.1 - dev: false + prelude-ls: 1.1.2 + type-check: 0.3.2 + dev: true - /mdast-util-to-markdown/1.3.0: - resolution: {integrity: sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==} + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} dependencies: - '@types/mdast': 3.0.10 - '@types/unist': 2.0.6 - longest-streak: 3.0.1 - mdast-util-to-string: 3.1.0 - micromark-util-decode-string: 1.0.2 - unist-util-visit: 4.1.1 - zwitch: 2.0.2 - dev: false - - /mdast-util-to-string/3.1.0: - resolution: {integrity: sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==} - dev: false - - /mdn-data/2.0.14: - resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} - dev: false + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true - /mdx-mermaid/1.3.2_mermaid@9.1.7+react@17.0.2: - resolution: {integrity: sha512-8kw0tg3isKKBFzFwoe2DhIaEgKYtVeJXQtxZCCrdTPO0CTpXHnTHT0atDqsp7YkXi5iUCp/zAZPZu1cmr68T3w==} - peerDependencies: - mermaid: '>=8.11.0' - react: ^16.8.4 || ^17.0.0 || ^18.0.0 - unist-util-visit: ^2.0.0 - peerDependenciesMeta: - unist-util-visit: - optional: true + /light-my-request@5.11.0: + resolution: {integrity: sha512-qkFCeloXCOMpmEdZ/MV91P8AT4fjwFXWaAFz3lUeStM8RcoM1ks4J/F8r1b3r6y/H4u3ACEJ1T+Gv5bopj7oDA==} dependencies: - mermaid: 9.1.7 - react: 17.0.2 + cookie: 0.5.0 + process-warning: 2.0.0 + set-cookie-parser: 2.5.1 dev: false - /media-typer/0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} dev: true - /mem/9.0.2: - resolution: {integrity: sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A==} - engines: {node: '>=12.20'} - dependencies: - map-age-cleaner: 0.1.3 - mimic-fn: 4.0.0 + /lilconfig@3.0.0: + resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} + engines: {node: '>=14'} dev: true - /memoize-one/5.2.1: - resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} - dev: false + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - /meow/11.0.0: - resolution: {integrity: sha512-Cl0yeeIrko6d94KpUo1M+0X1sB14ikoaqlIGuTH1fW4I+E3+YljL54/hb/BWmVfrV9tTV9zU04+xjw08Fh2WkA==} - engines: {node: '>=14.16'} + /load-yaml-file@0.2.0: + resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} + engines: {node: '>=6'} dependencies: - '@types/minimist': 1.2.2 - camelcase-keys: 8.0.2 - decamelize: 6.0.0 - decamelize-keys: 1.1.1 - hard-rejection: 2.1.0 - minimist-options: 4.1.0 - normalize-package-data: 4.0.1 - read-pkg-up: 9.1.0 - redent: 4.0.0 - trim-newlines: 4.0.2 - type-fest: 3.2.0 - yargs-parser: 21.1.1 + graceful-fs: 4.2.10 + js-yaml: 3.14.1 + pify: 4.0.1 + strip-bom: 3.0.0 dev: true - /meow/6.1.1: - resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} dependencies: - '@types/minimist': 1.2.2 - camelcase-keys: 6.2.2 - decamelize-keys: 1.1.1 - hard-rejection: 2.1.0 - minimist-options: 4.1.0 - normalize-package-data: 2.5.0 - read-pkg-up: 7.0.1 - redent: 3.0.0 - trim-newlines: 3.0.1 - type-fest: 0.13.1 - yargs-parser: 18.1.3 - dev: true - - /merge-descriptors/1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} - dev: true + p-locate: 4.1.0 - /merge-options/3.0.4: - resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==} + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} dependencies: - is-plain-obj: 2.1.0 - dev: false - - /merge-stream/2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - - /merge2/1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - /mermaid/9.1.7: - resolution: {integrity: sha512-MRVHXy5FLjnUQUG7YS3UN9jEN6FXCJbFCXVGJQjVIbiR6Vhw0j/6pLIjqsiah9xoHmQU6DEaKOvB3S1g/1nBPA==} - dependencies: - '@braintree/sanitize-url': 6.0.1 - d3: 7.6.1 - dagre: 0.8.5 - dagre-d3: 0.6.4 - dompurify: 2.4.0 - graphlib: 2.1.8 - khroma: 2.0.0 - moment-mini: 2.24.0 - stylis: 4.1.3 - dev: false - - /methods/1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} + p-locate: 5.0.0 dev: true - /micromark-core-commonmark/1.0.6: - resolution: {integrity: sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==} - dependencies: - decode-named-character-reference: 1.0.2 - micromark-factory-destination: 1.0.0 - micromark-factory-label: 1.0.2 - micromark-factory-space: 1.0.0 - micromark-factory-title: 1.0.2 - micromark-factory-whitespace: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-chunked: 1.0.0 - micromark-util-classify-character: 1.0.0 - micromark-util-html-tag-name: 1.1.0 - micromark-util-normalize-identifier: 1.0.0 - micromark-util-resolve-all: 1.0.0 - micromark-util-subtokenize: 1.0.2 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - uvu: 0.5.6 - dev: false - - /micromark-extension-gfm-autolink-literal/1.0.3: - resolution: {integrity: sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==} - dependencies: - micromark-util-character: 1.1.0 - micromark-util-sanitize-uri: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - uvu: 0.5.6 - dev: false - - /micromark-extension-gfm-footnote/1.0.4: - resolution: {integrity: sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==} - dependencies: - micromark-core-commonmark: 1.0.6 - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-normalize-identifier: 1.0.0 - micromark-util-sanitize-uri: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - uvu: 0.5.6 - dev: false - - /micromark-extension-gfm-strikethrough/1.0.4: - resolution: {integrity: sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==} - dependencies: - micromark-util-chunked: 1.0.0 - micromark-util-classify-character: 1.0.0 - micromark-util-resolve-all: 1.0.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - uvu: 0.5.6 - dev: false - - /micromark-extension-gfm-table/1.0.5: - resolution: {integrity: sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==} - dependencies: - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - uvu: 0.5.6 - dev: false - - /micromark-extension-gfm-tagfilter/1.0.1: - resolution: {integrity: sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==} - dependencies: - micromark-util-types: 1.0.2 - dev: false - - /micromark-extension-gfm-task-list-item/1.0.3: - resolution: {integrity: sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==} - dependencies: - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - uvu: 0.5.6 - dev: false - - /micromark-extension-gfm/2.0.1: - resolution: {integrity: sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==} + /locate-path@7.1.1: + resolution: {integrity: sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - micromark-extension-gfm-autolink-literal: 1.0.3 - micromark-extension-gfm-footnote: 1.0.4 - micromark-extension-gfm-strikethrough: 1.0.4 - micromark-extension-gfm-table: 1.0.5 - micromark-extension-gfm-tagfilter: 1.0.1 - micromark-extension-gfm-task-list-item: 1.0.3 - micromark-util-combine-extensions: 1.0.0 - micromark-util-types: 1.0.2 - dev: false + p-locate: 6.0.0 + dev: true - /micromark-extension-mdx-expression/1.0.3: - resolution: {integrity: sha512-TjYtjEMszWze51NJCZmhv7MEBcgYRgb3tJeMAJ+HQCAaZHHRBaDCccqQzGizR/H4ODefP44wRTgOn2vE5I6nZA==} - dependencies: - micromark-factory-mdx-expression: 1.0.6 - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-events-to-acorn: 1.2.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - uvu: 0.5.6 - dev: false + /lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - /micromark-extension-mdx-jsx/1.0.3: - resolution: {integrity: sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==} - dependencies: - '@types/acorn': 4.0.6 - estree-util-is-identifier-name: 2.0.1 - micromark-factory-mdx-expression: 1.0.6 - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - uvu: 0.5.6 - vfile-message: 3.1.2 - dev: false + /lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: true - /micromark-extension-mdx-md/1.0.0: - resolution: {integrity: sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==} - dependencies: - micromark-util-types: 1.0.2 - dev: false + /lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: true - /micromark-extension-mdxjs-esm/1.0.3: - resolution: {integrity: sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==} - dependencies: - micromark-core-commonmark: 1.0.6 - micromark-util-character: 1.1.0 - micromark-util-events-to-acorn: 1.2.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - unist-util-position-from-estree: 1.1.1 - uvu: 0.5.6 - vfile-message: 3.1.2 - dev: false + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true - /micromark-extension-mdxjs/1.0.0: - resolution: {integrity: sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==} - dependencies: - acorn: 8.8.1 - acorn-jsx: 5.3.2_acorn@8.8.1 - micromark-extension-mdx-expression: 1.0.3 - micromark-extension-mdx-jsx: 1.0.3 - micromark-extension-mdx-md: 1.0.0 - micromark-extension-mdxjs-esm: 1.0.3 - micromark-util-combine-extensions: 1.0.0 - micromark-util-types: 1.0.2 + /lodash.mergewith@4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} dev: false - /micromark-factory-destination/1.0.0: - resolution: {integrity: sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==} - dependencies: - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - dev: false + /lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + dev: true - /micromark-factory-label/1.0.2: - resolution: {integrity: sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==} - dependencies: - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - uvu: 0.5.6 - dev: false + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - /micromark-factory-mdx-expression/1.0.6: - resolution: {integrity: sha512-WRQIc78FV7KrCfjsEf/sETopbYjElh3xAmNpLkd1ODPqxEngP42eVRGbiPEQWpRV27LzqW+XVTvQAMIIRLPnNA==} + /log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} dependencies: - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-events-to-acorn: 1.2.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - unist-util-position-from-estree: 1.1.1 - uvu: 0.5.6 - vfile-message: 3.1.2 + chalk: 4.1.2 + is-unicode-supported: 0.1.0 dev: false - /micromark-factory-space/1.0.0: - resolution: {integrity: sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==} + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true dependencies: - micromark-util-character: 1.1.0 - micromark-util-types: 1.0.2 - dev: false + js-tokens: 4.0.0 - /micromark-factory-title/1.0.2: - resolution: {integrity: sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==} + /lower-case-first@2.0.2: + resolution: {integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==} dependencies: - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - uvu: 0.5.6 + tslib: 2.5.0 dev: false - /micromark-factory-whitespace/1.0.0: - resolution: {integrity: sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==} + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 + tslib: 2.5.0 dev: false - /micromark-util-character/1.1.0: - resolution: {integrity: sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==} - dependencies: - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - dev: false + /lru-cache@10.1.0: + resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} + engines: {node: 14 || >=16.14} + dev: true - /micromark-util-chunked/1.0.0: - resolution: {integrity: sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==} + /lru-cache@4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} dependencies: - micromark-util-symbol: 1.0.1 - dev: false + pseudomap: 1.0.2 + yallist: 2.1.2 + dev: true - /micromark-util-classify-character/1.0.0: - resolution: {integrity: sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==} + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - dev: false + yallist: 3.1.1 - /micromark-util-combine-extensions/1.0.0: - resolution: {integrity: sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==} + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} dependencies: - micromark-util-chunked: 1.0.0 - micromark-util-types: 1.0.2 - dev: false + yallist: 4.0.0 - /micromark-util-decode-numeric-character-reference/1.0.0: - resolution: {integrity: sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==} - dependencies: - micromark-util-symbol: 1.0.1 - dev: false + /lru-cache@7.18.1: + resolution: {integrity: sha512-8/HcIENyQnfUTCDizRu9rrDyG6XG/21M4X7/YEGZeD76ZJilFPAUVb/2zysFf7VVO1LEjCDFyHp8pMMvozIrvg==} + engines: {node: '>=12'} + dev: true - /micromark-util-decode-string/1.0.2: - resolution: {integrity: sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==} + /lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + dev: true + + /make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} dependencies: - decode-named-character-reference: 1.0.2 - micromark-util-character: 1.1.0 - micromark-util-decode-numeric-character-reference: 1.0.0 - micromark-util-symbol: 1.0.1 - dev: false + semver: 6.3.1 - /micromark-util-encode/1.0.1: - resolution: {integrity: sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==} - dev: false + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - /micromark-util-events-to-acorn/1.2.0: - resolution: {integrity: sha512-WWp3bf7xT9MppNuw3yPjpnOxa8cj5ACivEzXJKu0WwnjBYfzaBvIAT9KfeyI0Qkll+bfQtfftSwdgTH6QhTOKw==} + /makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: - '@types/acorn': 4.0.6 - '@types/estree': 1.0.0 - estree-util-visit: 1.2.0 - micromark-util-types: 1.0.2 - uvu: 0.5.6 - vfile-location: 4.0.1 - vfile-message: 3.1.2 - dev: false + tmpl: 1.0.5 - /micromark-util-html-tag-name/1.1.0: - resolution: {integrity: sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==} + /map-cache@0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} dev: false - /micromark-util-normalize-identifier/1.0.0: - resolution: {integrity: sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==} - dependencies: - micromark-util-symbol: 1.0.1 - dev: false + /map-obj@1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + dev: true - /micromark-util-resolve-all/1.0.0: - resolution: {integrity: sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==} - dependencies: - micromark-util-types: 1.0.2 - dev: false + /map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + dev: true - /micromark-util-sanitize-uri/1.1.0: - resolution: {integrity: sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==} - dependencies: - micromark-util-character: 1.1.0 - micromark-util-encode: 1.0.1 - micromark-util-symbol: 1.0.1 - dev: false + /map-stream@0.1.0: + resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} + dev: true - /micromark-util-subtokenize/1.0.2: - resolution: {integrity: sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==} + /meow@11.0.0: + resolution: {integrity: sha512-Cl0yeeIrko6d94KpUo1M+0X1sB14ikoaqlIGuTH1fW4I+E3+YljL54/hb/BWmVfrV9tTV9zU04+xjw08Fh2WkA==} + engines: {node: '>=14.16'} dependencies: - micromark-util-chunked: 1.0.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - uvu: 0.5.6 - dev: false + '@types/minimist': 1.2.2 + camelcase-keys: 8.0.2 + decamelize: 6.0.0 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 4.0.1 + read-pkg-up: 9.1.0 + redent: 4.0.0 + trim-newlines: 4.0.2 + type-fest: 3.13.1 + yargs-parser: 21.1.1 + dev: true - /micromark-util-symbol/1.0.1: - resolution: {integrity: sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==} - dev: false + /meow@6.1.1: + resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} + engines: {node: '>=8'} + dependencies: + '@types/minimist': 1.2.2 + camelcase-keys: 6.2.2 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 2.5.0 + read-pkg-up: 7.0.1 + redent: 3.0.0 + trim-newlines: 3.0.1 + type-fest: 0.13.1 + yargs-parser: 18.1.3 + dev: true - /micromark-util-types/1.0.2: - resolution: {integrity: sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==} - dev: false + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - /micromark/3.1.0: - resolution: {integrity: sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==} - dependencies: - '@types/debug': 4.1.7 - debug: 4.3.4 - decode-named-character-reference: 1.0.2 - micromark-core-commonmark: 1.0.6 - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-chunked: 1.0.0 - micromark-util-combine-extensions: 1.0.0 - micromark-util-decode-numeric-character-reference: 1.0.0 - micromark-util-encode: 1.0.1 - micromark-util-normalize-identifier: 1.0.0 - micromark-util-resolve-all: 1.0.0 - micromark-util-sanitize-uri: 1.1.0 - micromark-util-subtokenize: 1.0.2 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - uvu: 0.5.6 - transitivePeerDependencies: - - supports-color - dev: false + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} - /micromatch/4.0.5: + /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} dependencies: braces: 3.0.2 picomatch: 2.3.1 - /mime-db/1.33.0: + /mime-db@1.33.0: resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} engines: {node: '>= 0.6'} dev: true - /mime-db/1.52.0: + /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} - /mime-types/2.1.18: + /mime-types@2.1.18: resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.33.0 dev: true - /mime-types/2.1.35: + /mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 - /mime/1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /mimic-fn/2.1.0: + /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - /mimic-fn/4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - dev: true - - /min-indent/1.0.1: + /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} dev: true - /minimatch/3.1.2: + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 - /minimatch/7.4.2: + /minimatch@7.4.2: resolution: {integrity: sha512-xy4q7wou3vUoC9k1xGTXc+awNdGaGVHtFUaey8tiX4H1QRc04DZ/rmDFwNm2EBsuYEhAZ6SgMmYf3InGY6OauA==} engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 dev: true - /minimist-options/4.1.0: + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimist-options@4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} dependencies: @@ -11343,71 +10129,67 @@ packages: kind-of: 6.0.3 dev: true - /minimist/1.2.7: + /minimist@1.2.7: resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} + dev: true - /minipass/4.2.4: + /minipass@4.2.4: resolution: {integrity: sha512-lwycX3cBMTvcejsHITUgYj6Gy6A7Nh4Q6h9NP4sTHY1ccJlC7yKzDmiShEHsJ16Jf1nKGDEaiHxiltsJEvk0nQ==} engines: {node: '>=8'} dev: true - /mixme/0.5.4: + /minipass@7.0.4: + resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + engines: {node: '>=16 || 14 >=14.17'} + dev: true + + /mixme@0.5.4: resolution: {integrity: sha512-3KYa4m4Vlqx98GPdOHghxSdNtTvcP8E0kkaJ5Dlh+h2DRzF7zpuVVcA8B0QpKd11YJeP9QQ7ASkKzOeu195Wzw==} engines: {node: '>= 8.0.0'} dev: true - /mkdirp/1.0.4: + /mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} hasBin: true dev: false - /mkdirp/2.1.5: + /mkdirp@2.1.5: resolution: {integrity: sha512-jbjfql+shJtAPrFoKxHOXip4xS+kul9W3OzfzzrqueWK2QMGon2bFH2opl6W9EagBThjEz+iysyi/swOoVfB/w==} engines: {node: '>=10'} hasBin: true - dev: true - /mnemonist/0.39.5: + /mnemonist@0.39.5: resolution: {integrity: sha512-FPUtkhtJ0efmEFGpU14x7jGbTB+s18LrzRL2KgoWz9YvcY3cPomz8tih01GbHwnGk/OmkOKfqd/RAQoc8Lm7DQ==} dependencies: obliterator: 2.0.4 - - /modern-normalize/1.1.0: - resolution: {integrity: sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==} - engines: {node: '>=6'} - dev: false - - /moment-mini/2.24.0: - resolution: {integrity: sha512-9ARkWHBs+6YJIvrIp0Ik5tyTTtP9PoV0Ssu2Ocq5y9v8+NOOpWiRshAp8c4rZVWTOe+157on/5G+zj5pwIQFEQ==} dev: false - /mri/1.2.0: + /mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} + dev: true - /mrmime/1.0.1: + /mrmime@1.0.1: resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} engines: {node: '>=10'} dev: true - /ms/2.0.0: + /ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} dev: true - /ms/2.1.2: + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - /ms/2.1.3: + /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true - /ms/3.0.0-canary.1: - resolution: {integrity: sha512-kh8ARjh8rMN7Du2igDRO9QJnqCb2xYTJxyQYK7vJJS4TvLLmsbyhiKpSW+t+y26gyOyMd0riphX0GeWKU3ky5g==} - engines: {node: '>=12.13'} + /multidict@1.0.6: + resolution: {integrity: sha512-URJf4Q7p/rYDSUt4rIo4PyAxSMQaG27YBNE6CFaEJ1HSxr1WeYaXe/b4Kv9dp2842qWjz/LYCWg9SpNXkGZ4Ww==} dev: false - /multimatch/4.0.0: + /multimatch@4.0.0: resolution: {integrity: sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==} engines: {node: '>=8'} dependencies: @@ -11418,92 +10200,42 @@ packages: minimatch: 3.1.2 dev: true - /nano-css/5.3.5_sfoxds7t5ydpegc3knd667wn6m: - resolution: {integrity: sha512-vSB9X12bbNu4ALBu7nigJgRViZ6ja3OU7CeuiV1zMIbXOdmkLahgtPmh3GBOlDxbKY0CitqlPdOReGlBLSp+yg==} - peerDependencies: - react: '*' - react-dom: '*' - dependencies: - css-tree: 1.1.3 - csstype: 3.1.1 - fastest-stable-stringify: 2.0.2 - inline-style-prefixer: 6.0.1 - react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 - rtl-css-js: 1.16.0 - sourcemap-codec: 1.4.8 - stacktrace-js: 2.0.2 - stylis: 4.1.3 + /mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} dev: false - /nanoid/3.3.4: - resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: true + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - /nanospinner/1.1.0: + /nanospinner@1.1.0: resolution: {integrity: sha512-yFvNYMig4AthKYfHFl1sLj7B2nkHL4lzdig4osvl9/LdGbXwrdFRoqBS98gsEsOakr0yH+r5NZ/1Y9gdVB8trA==} dependencies: picocolors: 1.0.0 dev: true - /natural-compare/1.4.0: + /natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + + /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - /negotiator/0.6.3: + /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} dev: true - /next-i18next/13.2.2_2ynmrf3odwjl6m6qwej4nuthfy: - resolution: {integrity: sha512-t0WU6K+HJoq2nVQ0n6OiiEZja9GyMqtDSU74FmOafgk4ljns+iZ18bsNJiI8rOUXfFfkW96ea1N7D5kbMyT+PA==} - engines: {node: '>=14'} - peerDependencies: - i18next: ^22.0.6 - next: '>= 12.0.0' - react: '>= 17.0.2' - react-i18next: ^12.2.0 - dependencies: - '@babel/runtime': 7.20.13 - '@types/hoist-non-react-statics': 3.3.1 - core-js: 3.26.0 - hoist-non-react-statics: 3.3.2 - i18next: 22.4.13 - i18next-fs-backend: 2.1.1 - next: 12.3.4_sfoxds7t5ydpegc3knd667wn6m - react: 17.0.2 - react-i18next: 12.2.0_ffdbohwx3htqpx4tpuhghjrmkq - dev: false - - /next-remote-watch/2.0.0_next@12.3.4: - resolution: {integrity: sha512-FyKDFMwbjKCPdu8ypZ8WTkDBzuxnH6rgfR89vgQwsND4ErrfXnDFZcZJAmSpwND6QA7G9f0DRzYMSdspY6t8Uw==} - engines: {node: '>= 10'} - hasBin: true - peerDependencies: - next: '>=10' - dependencies: - chalk: 4.1.2 - chokidar: 3.5.3 - commander: 5.1.0 - express: 4.18.2 - next: 12.3.4_sfoxds7t5ydpegc3knd667wn6m - transitivePeerDependencies: - - supports-color - dev: true - - /next-seo/5.15.0_dwjfwrt6uv2f53xn6wotzcxyoa: - resolution: {integrity: sha512-LGbcY91yDKGMb7YI+28n3g+RuChUkt6pXNpa8FkfKkEmNiJkeRDEXTnnjVtwT9FmMhG6NH8qwHTelGrlYm9rgg==} - peerDependencies: - next: ^8.1.1-canary.54 || >=9.0.0 - react: '>=16.0.0' - react-dom: '>=16.0.0' - dependencies: - next: 12.3.4_sfoxds7t5ydpegc3knd667wn6m - react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 - dev: false - - /next/12.3.4_sfoxds7t5ydpegc3knd667wn6m: + /next@12.3.4(@babel/core@7.23.7)(react-dom@17.0.2)(react@17.0.2): resolution: {integrity: sha512-VcyMJUtLZBGzLKo3oMxrEF0stxh8HwuW976pAzlHhI3t8qJ4SROjCrSh1T24bhrbjw55wfZXAbXPGwPt5FLRfQ==} engines: {node: '>=12.22.0'} hasBin: true @@ -11523,12 +10255,12 @@ packages: dependencies: '@next/env': 12.3.4 '@swc/helpers': 0.4.11 - caniuse-lite: 1.0.30001429 + caniuse-lite: 1.0.30001576 postcss: 8.4.14 react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 - styled-jsx: 5.0.7_react@17.0.2 - use-sync-external-store: 1.2.0_react@17.0.2 + react-dom: 17.0.2(react@17.0.2) + styled-jsx: 5.0.7(@babel/core@7.23.7)(react@17.0.2) + use-sync-external-store: 1.2.0(patch_hash=zifctuasxutqued7wp7lp4536i)(react@17.0.2) optionalDependencies: '@next/swc-android-arm-eabi': 12.3.4 '@next/swc-android-arm64': 12.3.4 @@ -11547,27 +10279,66 @@ packages: - '@babel/core' - babel-plugin-macros - /no-case/3.0.4: + /next@13.4.12(@babel/core@7.23.7)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-eHfnru9x6NRmTMcjQp6Nz0J4XH9OubmzOa7CkWL+AUrUxpibub3vWwttjduu9No16dug1kq04hiUUpo7J3m3Xw==} + engines: {node: '>=16.8.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + fibers: '>= 3.1.0' + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + fibers: + optional: true + sass: + optional: true + dependencies: + '@next/env': 13.4.12 + '@swc/helpers': 0.5.1 + busboy: 1.6.0 + caniuse-lite: 1.0.30001576 + postcss: 8.4.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.23.7)(react@18.2.0) + watchpack: 2.4.0 + zod: 3.21.4 + optionalDependencies: + '@next/swc-darwin-arm64': 13.4.12 + '@next/swc-darwin-x64': 13.4.12 + '@next/swc-linux-arm64-gnu': 13.4.12 + '@next/swc-linux-arm64-musl': 13.4.12 + '@next/swc-linux-x64-gnu': 13.4.12 + '@next/swc-linux-x64-musl': 13.4.12 + '@next/swc-win32-arm64-msvc': 13.4.12 + '@next/swc-win32-ia32-msvc': 13.4.12 + '@next/swc-win32-x64-msvc': 13.4.12 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + dev: false + + /no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: lower-case: 2.0.2 tslib: 2.5.0 + dev: false - /node-cleanup/2.1.2: + /node-cleanup@2.1.2: resolution: {integrity: sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw==} dev: true - /node-domexception/1.0.0: + /node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} - - /node-emoji/1.11.0: - resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} - dependencies: - lodash: 4.17.21 dev: false - /node-fetch/2.6.7: + /node-fetch@2.6.7: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} peerDependencies: @@ -11578,177 +10349,196 @@ packages: dependencies: whatwg-url: 5.0.0 - /node-fetch/3.3.0: - resolution: {integrity: sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - data-uri-to-buffer: 4.0.0 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 - dev: true - - /node-gyp-build/4.5.0: + /node-gyp-build@4.5.0: resolution: {integrity: sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==} hasBin: true - dev: true - /node-int64/0.4.0: + /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - /node-json-db/2.1.5: + /node-json-db@2.1.5: resolution: {integrity: sha512-LnzD9SPOVjtiMOgUB8oJfbj3927/2S/tWMjMen8QybZ3MBcgIFi9fKGpk6H3A4rMjnpuHX2J19JEvzqwB2p+/g==} dependencies: rwlock: 5.0.0 dev: false - /node-releases/2.0.6: - resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} - - /nofilter/3.1.0: - resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==} - engines: {node: '>=12.19'} - dev: true + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - /normalize-package-data/2.5.0: + /normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.1 + resolve: 1.22.8 semver: 5.7.1 validate-npm-package-license: 3.0.4 dev: true - /normalize-package-data/3.0.3: + /normalize-package-data@3.0.3: resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} engines: {node: '>=10'} dependencies: hosted-git-info: 4.1.0 - is-core-module: 2.11.0 - semver: 7.3.8 + is-core-module: 2.13.1 + semver: 7.5.4 validate-npm-package-license: 3.0.4 dev: true - /normalize-package-data/4.0.1: + /normalize-package-data@4.0.1: resolution: {integrity: sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: hosted-git-info: 5.2.1 - is-core-module: 2.11.0 - semver: 7.3.8 + is-core-module: 2.13.1 + semver: 7.5.4 validate-npm-package-license: 3.0.4 dev: true - /normalize-path/2.1.1: + /normalize-path@2.1.1: resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} engines: {node: '>=0.10.0'} dependencies: remove-trailing-separator: 1.1.0 dev: false - /normalize-path/3.0.0: + /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - /normalize-range/0.1.2: + /normalize-range@0.1.2: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} engines: {node: '>=0.10.0'} - dev: false + dev: true - /npm-run-path/1.0.0: + /npm-run-path@1.0.0: resolution: {integrity: sha512-PrGAi1SLlqNvKN5uGBjIgnrTb8fl0Jz0a3JJmeMcGnIBh7UE9Gc4zsAMlwDajOMg2b1OgP6UPvoLUboTmMZPFA==} engines: {node: '>=0.10.0'} dependencies: path-key: 1.0.0 dev: true - /npm-run-path/4.0.1: + /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} dependencies: path-key: 3.1.1 - /nprogress/0.2.0: - resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} - dev: false - - /nullthrows/1.1.1: + /nullthrows@1.1.1: resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} + dev: false - /nwsapi/2.2.2: + /nwsapi@2.2.2: resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} dev: true - /object-assign/4.1.1: + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - /object-hash/2.2.0: - resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - dev: false - /object-inspect/1.12.2: - resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} dev: true - /object-is/1.1.5: + /object-is@1.1.5: resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 + call-bind: 1.0.5 + define-properties: 1.2.1 dev: true - /object-keys/1.1.1: + /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} dev: true - /object-path/0.11.8: + /object-path@0.11.8: resolution: {integrity: sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==} engines: {node: '>= 10.12.0'} dev: false - /object.assign/4.1.4: + /object.assign@4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 + call-bind: 1.0.5 + define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 dev: true - /obliterator/2.0.4: - resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} + /object.entries@1.1.7: + resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true - /on-exit-leak-free/2.1.0: - resolution: {integrity: sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==} + /object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true - /on-finished/2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} + /object.groupby@1.0.1: + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + dev: true + + /object.hasown@1.1.3: + resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} dependencies: - ee-first: 1.1.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 dev: true - /on-headers/1.0.2: + /obliterator@2.0.4: + resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} + dev: false + + /on-exit-leak-free@2.1.0: + resolution: {integrity: sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==} + dev: false + + /on-headers@1.0.2: resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} engines: {node: '>= 0.8'} dev: true - /once/1.4.0: + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 - /onetime/5.1.2: + /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 - /open-cli/7.2.0: + /open-cli@7.2.0: resolution: {integrity: sha512-1ANJc8oJ92FiaNZ0o2Hw4WBvDJoXs1P74aFMtpAvlbkIPV4uPcQvDz7V6kMOrsZkmB4tglrHVMlLQaafuUuxXg==} engines: {node: '>=14.16'} hasBin: true @@ -11760,15 +10550,16 @@ packages: tempy: 3.0.0 dev: true - /open/8.4.2: + /open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} dependencies: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 + dev: true - /open/9.0.0: + /open@9.0.0: resolution: {integrity: sha512-yerrN5WPzgwuE3T6rxAkT1UuMLDzs4Szpug7hy9s4gru3iOTnaU0yKc1AYOVYrBzvykce5gUdr9RPNB4R+Zc/A==} engines: {node: '>=14.16'} dependencies: @@ -11778,12 +10569,12 @@ packages: is-wsl: 2.2.0 dev: true - /opener/1.5.2: + /opener@1.5.2: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} hasBin: true dev: true - /optionator/0.8.3: + /optionator@0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} dependencies: @@ -11795,315 +10586,285 @@ packages: word-wrap: 1.2.3 dev: true - /os-tmpdir/1.0.2: + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + dev: false + + /os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} - dev: true - /outdent/0.5.0: + /outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} dev: true - /p-defer/1.0.0: - resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} - engines: {node: '>=4'} - dev: true + /p-debounce@4.0.0: + resolution: {integrity: sha512-4Ispi9I9qYGO4lueiLDhe4q4iK5ERK8reLsuzH6BPaXn53EGaua8H66PXIFGrW897hwjXp+pVLrm/DLxN0RF0A==} + engines: {node: '>=12'} + dev: false - /p-event/5.0.1: - resolution: {integrity: sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - p-timeout: 5.1.0 - dev: true + /p-defer@3.0.0: + resolution: {integrity: sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==} + engines: {node: '>=8'} + dev: false - /p-filter/2.1.0: + /p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} dependencies: p-map: 2.1.0 dev: true - /p-limit/2.3.0: + /p-lazy@3.1.0: + resolution: {integrity: sha512-sCJn0Cdahs6G6SX9+DUihVFUhrzDEduzE5xeViVBGtoqy5dBWko7W8T6Kk6TjR2uevRXJO7CShfWrqdH5s3w3g==} + engines: {node: '>=8'} + + /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} dependencies: p-try: 2.2.0 - /p-limit/3.1.0: + /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 - /p-limit/4.0.0: + /p-limit@4.0.0: resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: yocto-queue: 1.0.0 dev: true - /p-locate/4.1.0: + /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} dependencies: p-limit: 2.3.0 - /p-locate/5.0.0: + /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} dependencies: p-limit: 3.1.0 dev: true - /p-locate/6.0.0: + /p-locate@6.0.0: resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: p-limit: 4.0.0 dev: true - /p-map/2.1.0: + /p-map@2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} dev: true - /p-map/5.5.0: - resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==} - engines: {node: '>=12'} - dependencies: - aggregate-error: 4.0.1 - dev: true - - /p-timeout/5.1.0: - resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==} - engines: {node: '>=12'} - dev: true - - /p-try/2.2.0: + /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - /param-case/3.0.4: + /param-case@3.0.4: resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} dependencies: dot-case: 3.0.4 tslib: 2.5.0 + dev: false - /parent-module/1.0.1: + /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} dependencies: callsites: 3.1.0 - /parse-entities/4.0.0: - resolution: {integrity: sha512-5nk9Fn03x3rEhGaX1FU6IDwG/k+GxLXlFAkgrbM1asuAFl3BhdQWvASaIsmwWypRNcZKHPYnIuOSfIWEyEQnPQ==} - dependencies: - '@types/unist': 2.0.6 - character-entities: 2.0.2 - character-entities-legacy: 3.0.0 - character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.0.2 - is-alphanumerical: 2.0.1 - is-decimal: 2.0.1 - is-hexadecimal: 2.0.1 - dev: false - - /parse-filepath/1.0.2: + /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: false - /parse-json/5.2.0: + /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.23.5 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - /parse-ms/3.0.0: - resolution: {integrity: sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==} - engines: {node: '>=12'} - dev: true - - /parse-numeric-range/1.3.0: - resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} - dev: false - - /parse5/7.1.1: + /parse5@7.1.1: resolution: {integrity: sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==} dependencies: entities: 4.4.0 dev: true - /parseurl/1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - dev: true - - /pascal-case/3.1.2: + /pascal-case@3.1.2: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} dependencies: no-case: 3.0.4 tslib: 2.5.0 + dev: false - /path-case/3.0.4: + /path-case@3.0.4: resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} dependencies: dot-case: 3.0.4 tslib: 2.5.0 + dev: false - /path-exists/4.0.0: + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - /path-exists/5.0.0: + /path-exists@5.0.0: resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /path-is-absolute/1.0.1: + /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - /path-is-inside/1.0.2: + /path-is-inside@1.0.2: resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} dev: true - /path-key/1.0.0: + /path-key@1.0.0: resolution: {integrity: sha512-T3hWy7tyXlk3QvPFnT+o2tmXRzU4GkitkUWLp/WZ0S/FXd7XMx176tRurgTvHTNMJOQzTcesHNpBqetH86mQ9g==} engines: {node: '>=0.10.0'} dev: true - /path-key/3.1.1: + /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - /path-parse/1.0.7: + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - /path-root-regex/0.1.2: + /path-root-regex@0.1.2: resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==} engines: {node: '>=0.10.0'} + dev: false - /path-root/0.1.1: + /path-root@0.1.1: resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} engines: {node: '>=0.10.0'} dependencies: path-root-regex: 0.1.2 + dev: false - /path-scurry/1.6.1: - resolution: {integrity: sha512-OW+5s+7cw6253Q4E+8qQ/u1fVvcJQCJo/VFD8pje+dbJCF1n5ZRMV2AEHbGp+5Q7jxQIYJxkHopnj6nzdGeZLA==} - engines: {node: '>=14'} + /path-scurry@1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 7.18.1 - minipass: 4.2.4 - dev: true - - /path-to-regexp/0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + lru-cache: 10.1.0 + minipass: 7.0.4 dev: true - /path-to-regexp/2.2.1: + /path-to-regexp@2.2.1: resolution: {integrity: sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==} dev: true - /path-type/4.0.0: + /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - /pause-stream/0.0.11: + /pause-stream@0.0.11: resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} dependencies: through: 2.3.8 dev: true - /peek-readable/5.0.0: + /peek-readable@5.0.0: resolution: {integrity: sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==} engines: {node: '>=14.16'} dev: true - /periscopic/3.0.4: - resolution: {integrity: sha512-SFx68DxCv0Iyo6APZuw/AKewkkThGwssmU0QWtTlvov3VAtPX+QJ4CadwSaz8nrT5jPIuxdvJWB4PnD2KNDxQg==} - dependencies: - estree-walker: 3.0.1 - is-reference: 3.0.0 - dev: false - - /picocolors/1.0.0: + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - /picomatch/2.3.1: + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - /pify/4.0.1: + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: true + + /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} dev: true - /pino-abstract-transport/1.0.0: - resolution: {integrity: sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==} + /pino-abstract-transport@1.1.0: + resolution: {integrity: sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==} dependencies: readable-stream: 4.2.0 split2: 4.1.0 + dev: false - /pino-std-serializers/6.0.0: + /pino-std-serializers@6.0.0: resolution: {integrity: sha512-mMMOwSKrmyl+Y12Ri2xhH1lbzQxwwpuru9VjyJpgFIH4asSj88F2csdMwN6+M5g1Ll4rmsYghHLQJw81tgZ7LQ==} + dev: false - /pino/8.7.0: - resolution: {integrity: sha512-l9sA5uPxmZzwydhMWUcm1gI0YxNnYl8MfSr2h8cwLvOAzQLBLewzF247h/vqHe3/tt6fgtXeG9wdjjoetdI/vA==} + /pino@8.17.2: + resolution: {integrity: sha512-LA6qKgeDMLr2ux2y/YiUt47EfgQ+S9LznBWOJdN3q1dx2sv0ziDLUBeVpyVv17TEcGCBuWf0zNtg3M5m1NhhWQ==} hasBin: true dependencies: atomic-sleep: 1.0.0 fast-redact: 3.1.2 on-exit-leak-free: 2.1.0 - pino-abstract-transport: 1.0.0 + pino-abstract-transport: 1.1.0 pino-std-serializers: 6.0.0 - process-warning: 2.0.0 + process-warning: 3.0.0 quick-format-unescaped: 4.0.4 real-require: 0.2.0 safe-stable-stringify: 2.4.1 - sonic-boom: 3.2.0 + sonic-boom: 3.8.0 thread-stream: 2.2.0 + dev: false - /pirates/4.0.5: - resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} - engines: {node: '>= 6'} - - /pkg-conf/4.0.0: - resolution: {integrity: sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - find-up: 6.3.0 - load-json-file: 7.0.1 - dev: true + /pirates@4.0.5: + resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} + engines: {node: '>= 6'} - /pkg-dir/4.2.0: + /pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} dependencies: find-up: 4.1.0 - /plur/5.1.0: - resolution: {integrity: sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - irregular-plurals: 3.3.0 - dev: true - - /polished/4.2.2: - resolution: {integrity: sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==} - engines: {node: '>=10'} - dependencies: - '@babel/runtime': 7.20.13 - dev: false - - /popmotion/11.0.3: + /popmotion@11.0.3: resolution: {integrity: sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==} dependencies: framesync: 6.0.1 @@ -12112,17 +10873,31 @@ packages: tslib: 2.5.0 dev: false - /postcss-js/3.0.3: - resolution: {integrity: sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==} - engines: {node: '>=10.0'} + /postcss-import@15.1.0(postcss@8.4.33): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + dev: true + + /postcss-js@4.0.1(postcss@8.4.33): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 dependencies: camelcase-css: 2.0.1 - postcss: 8.4.21 - dev: false + postcss: 8.4.33 + dev: true - /postcss-load-config/3.1.4_postcss@8.4.21: - resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} - engines: {node: '>= 10'} + /postcss-load-config@4.0.2(postcss@8.4.33)(ts-node@10.9.1): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} peerDependencies: postcss: '>=8.0.9' ts-node: '>=9.0.0' @@ -12132,58 +10907,61 @@ packages: ts-node: optional: true dependencies: - lilconfig: 2.0.6 - postcss: 8.4.21 - yaml: 1.10.2 - dev: false + lilconfig: 3.0.0 + postcss: 8.4.33 + ts-node: 10.9.1(@types/node@18.19.6)(typescript@5.3.3) + yaml: 2.3.4 + dev: true - /postcss-nested/5.0.6_postcss@8.4.21: - resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==} + /postcss-nested@6.0.1(postcss@8.4.33): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: 8.4.21 - postcss-selector-parser: 6.0.10 - dev: false + postcss: 8.4.33 + postcss-selector-parser: 6.0.15 + dev: true - /postcss-selector-parser/6.0.10: - resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + /postcss-selector-parser@6.0.15: + resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} engines: {node: '>=4'} dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - dev: false - - /postcss-value-parser/3.3.1: - resolution: {integrity: sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==} - dev: false + dev: true - /postcss-value-parser/4.2.0: + /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: false + dev: true - /postcss/8.4.14: + /postcss@8.4.14: resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.4 + nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 - /postcss/8.4.21: + /postcss@8.4.21: resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.4 + nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 + dev: true - /preact/10.11.2: - resolution: {integrity: sha512-skAwGDFmgxhq1DCBHke/9e12ewkhc7WYwjuhHB8HHS8zkdtITXLRmUMTeol2ldxvLwYtwbFeifZ9uDDWuyL4Iw==} - dev: false + /postcss@8.4.33: + resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true - /preferred-pm/3.0.3: + /preferred-pm@3.0.3: resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} engines: {node: '>=10'} dependencies: @@ -12193,23 +10971,28 @@ packages: which-pm: 2.0.0 dev: true - /prelude-ls/1.1.2: + /prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} dev: true - /prettier/2.8.1: - resolution: {integrity: sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==} - engines: {node: '>=10.13.0'} - hasBin: true - dev: false + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true - /prettier/2.8.6: + /prettier@2.8.6: resolution: {integrity: sha512-mtuzdiBbHwPEgl7NxWlqOkithPyp4VN93V7VeHVWBF+ad3I5avc0RVDT4oImXQy9H/AqxA2NSQH8pSxHW6FYbQ==} engines: {node: '>=10.13.0'} hasBin: true - /pretty-format/27.5.1: + /prettier@3.2.0: + resolution: {integrity: sha512-/vBUecTGaPlRVwyZVROVC58bYIScqaoEJzZmzQXXrZOzqn0TwWz0EnOozOlFO/YAImRnb7XsKpTCd3m1SjS2Ww==} + engines: {node: '>=14'} + hasBin: true + dev: false + + /pretty-format@27.5.1: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: @@ -12218,7 +11001,7 @@ packages: react-is: 17.0.2 dev: true - /pretty-format/29.5.0: + /pretty-format@29.5.0: resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: @@ -12226,19 +11009,7 @@ packages: ansi-styles: 5.2.0 react-is: 18.2.0 - /pretty-hrtime/1.0.3: - resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} - engines: {node: '>= 0.8'} - dev: false - - /pretty-ms/8.0.0: - resolution: {integrity: sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==} - engines: {node: '>=14.16'} - dependencies: - parse-ms: 3.0.0 - dev: true - - /pretty-quick/3.1.3_prettier@2.8.6: + /pretty-quick@3.1.3(prettier@2.8.6): resolution: {integrity: sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA==} engines: {node: '>=10.13'} hasBin: true @@ -12254,45 +11025,48 @@ packages: prettier: 2.8.6 dev: true - /process-warning/2.0.0: + /process-warning@2.0.0: resolution: {integrity: sha512-+MmoAXoUX+VTHAlwns0h+kFUWFs/3FZy+ZuchkgjyOu3oioLAo2LB5aCfKPh2+P9O18i3m43tUEv3YqttSy0Ww==} + dev: false + + /process-warning@3.0.0: + resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} + dev: false - /process/0.11.10: + /process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + dev: false - /promise/7.3.1: + /promise@7.3.1: resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} dependencies: asap: 2.0.6 + dev: false - /prompts/2.4.2: + /prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} dependencies: kleur: 3.0.3 sisteransi: 1.0.5 - /prop-types/15.8.1: + /prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - dev: false - /property-information/6.1.1: - resolution: {integrity: sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w==} - dev: false - - /proxy-addr/2.0.7: + /proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 + dev: false - /ps-tree/1.2.0: + /ps-tree@1.2.0: resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} engines: {node: '>= 0.10'} hasBin: true @@ -12300,79 +11074,58 @@ packages: event-stream: 3.3.4 dev: true - /pseudomap/1.0.2: + /pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} dev: true - /psl/1.9.0: + /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} dev: true - /pump/3.0.0: + /pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 dev: true - /punycode/1.4.1: + /punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} dev: true - /punycode/2.1.1: + /punycode@2.1.1: resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} engines: {node: '>=6'} - /pure-rand/6.0.0: + /pure-rand@6.0.0: resolution: {integrity: sha512-rLSBxJjP+4DQOgcJAx6RZHT2he2pkhQdSnofG5VWyVl6GRq/K02ISOuOLcsMOrtKDIJb8JN2zm3FFzWNbezdPw==} - /purgecss/4.1.3: - resolution: {integrity: sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw==} - hasBin: true - dependencies: - commander: 8.3.0 - glob: 7.2.3 - postcss: 8.4.21 - postcss-selector-parser: 6.0.10 - dev: false - - /qs/6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} - engines: {node: '>=0.6'} - dependencies: - side-channel: 1.0.4 - dev: true - - /querystringify/2.2.0: + /querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} dev: true - /queue-microtask/1.2.3: + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - /quick-format-unescaped/4.0.4: + /quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + dev: false - /quick-lru/4.0.1: + /quick-lru@4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} engines: {node: '>=8'} dev: true - /quick-lru/5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - dev: false - - /quick-lru/6.1.1: + /quick-lru@6.1.1: resolution: {integrity: sha512-S27GBT+F0NTRiehtbrgaSE1idUAJ5bX8dPAQTdylEyNlrdcH5X4Lz7Edz3DYzecbsCluD5zO8ZNEe04z3D3u6Q==} engines: {node: '>=12'} dev: true - /randombytes/2.0.3: + /randombytes@2.0.3: resolution: {integrity: sha512-lDVjxQQFoCG1jcrP06LNo2lbWp4QTShEXnhActFBwYuHprllQV6VUpwreApsYqCgD+N1mHoqJ/BI/4eV4R2GYg==} dev: false - /randomstring/1.2.3: + /randomstring@1.2.3: resolution: {integrity: sha512-3dEFySepTzp2CvH6W/ASYGguPPveBuz5MpZ7MuoUkoVehmyNl9+F9c9GFVrz2QPbM9NXTIHGcmJDY/3j4677kQ==} hasBin: true dependencies: @@ -12380,27 +11133,12 @@ packages: randombytes: 2.0.3 dev: false - /range-parser/1.2.0: + /range-parser@1.2.0: resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==} engines: {node: '>= 0.6'} dev: true - /range-parser/1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - dev: true - - /raw-body/2.5.1: - resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} - engines: {node: '>= 0.8'} - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - dev: true - - /rc/1.2.8: + /rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true dependencies: @@ -12410,24 +11148,16 @@ packages: strip-json-comments: 2.0.1 dev: true - /react-children-utilities/2.7.0_react@17.0.2: - resolution: {integrity: sha512-8vvGyL8+MTB/WZnTZKll3ph8rKhYQ3s0TOeojFcSi9yF8hMHwYmCS3y5RZyPxTg4/gGW6ev299ehV9DrNU8dow==} - peerDependencies: - react: 17.x.x || 16.x.x || 15.x.x - dependencies: - react: 17.0.2 - dev: false - - /react-clientside-effect/1.2.6_react@17.0.2: + /react-clientside-effect@1.2.6(react@17.0.2): resolution: {integrity: sha512-XGGGRQAKY+q25Lz9a/4EPqom7WRjz3z9R2k4jhVKA/puQFH/5Nt27vFZYql4m4NVNdUvX8PS3O7r/Zzm7cjUlg==} peerDependencies: react: ^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.23.8 react: 17.0.2 dev: false - /react-dom/17.0.2_react@17.0.2: + /react-dom@17.0.2(react@17.0.2): resolution: {integrity: sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==} peerDependencies: react: 17.0.2 @@ -12437,104 +11167,36 @@ packages: react: 17.0.2 scheduler: 0.20.2 - /react-error-boundary/3.1.4_react@17.0.2: - resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==} - engines: {node: '>=10', npm: '>=6'} + /react-dom@18.2.0(react@18.2.0): + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: - react: '>=16.13.1' + react: ^18.2.0 dependencies: - '@babel/runtime': 7.20.1 - react: 17.0.2 + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 - /react-fast-compare/3.2.0: + /react-fast-compare@3.2.0: resolution: {integrity: sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==} dev: false - /react-focus-lock/2.5.2_h7fc2el62uaa77gho3xhys6ola: + /react-focus-lock@2.5.2(@types/react@17.0.53)(react@17.0.2): resolution: {integrity: sha512-WzpdOnEqjf+/A3EH9opMZWauag7gV0BxFl+EY4ElA4qFqYsUsBLnmo2sELbN5OC30S16GAWMy16B9DLPpdJKAQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.23.8 focus-lock: 0.9.2 prop-types: 15.8.1 react: 17.0.2 - react-clientside-effect: 1.2.6_react@17.0.2 - use-callback-ref: 1.3.0_h7fc2el62uaa77gho3xhys6ola - use-sidecar: 1.1.2_h7fc2el62uaa77gho3xhys6ola + react-clientside-effect: 1.2.6(react@17.0.2) + use-callback-ref: 1.3.0(@types/react@17.0.53)(react@17.0.2) + use-sidecar: 1.1.2(@types/react@17.0.53)(react@17.0.2) transitivePeerDependencies: - '@types/react' dev: false - /react-i18next/12.2.0_ffdbohwx3htqpx4tpuhghjrmkq: - resolution: {integrity: sha512-5XeVgSygaGfyFmDd2WcXvINRw2WEC1XviW1LXY/xLOEMzsCFRwKqfnHN+hUjla8ZipbVJR27GCMSuTr0BhBBBQ==} - peerDependencies: - i18next: '>= 19.0.0' - react: '>= 16.8.0' - react-dom: '*' - react-native: '*' - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true - dependencies: - '@babel/runtime': 7.20.13 - html-parse-stringify: 3.0.1 - i18next: 22.4.13 - react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 - dev: false - - /react-icons/4.8.0_react@17.0.2: - resolution: {integrity: sha512-N6+kOLcihDiAnj5Czu637waJqSnwlMNROzVZMhfX68V/9bu9qHaMIJC4UdozWoOk57gahFCNHwVvWzm0MTzRjg==} - peerDependencies: - react: '*' - dependencies: - react: 17.0.2 - dev: false - - /react-instantsearch-core/6.38.0_pybjzmhtnpk62btmxi5dirminu: - resolution: {integrity: sha512-Y5denvptL+qDOHY3LxipULNun8f3t2WeO9UdiWJd9FER1vn1VBrDdSyZ5b+idxqVWhSeVbncbf98zr7EW/kFvA==} - peerDependencies: - algoliasearch: '>= 3.1 < 5' - react: '>= 16.3.0 < 19' - dependencies: - '@babel/runtime': 7.20.13 - algoliasearch: 4.14.2 - algoliasearch-helper: 3.11.1_algoliasearch@4.14.2 - prop-types: 15.8.1 - react: 17.0.2 - react-fast-compare: 3.2.0 - dev: false - - /react-instantsearch-dom/6.17.0_kr5x6cjikajrhwznglqptdxk4q: - resolution: {integrity: sha512-KwQJ0HqD9YBvO1VBS+GZC2binTfrGFRClXxDwmd014I9lyqr05m1U2NR81zD0xoBkoZwELP5RWvfpuvbEL0Gdg==} - peerDependencies: - react: '>= 16.3.0 < 18' - react-dom: '>= 16.3.0 < 18' - dependencies: - '@babel/runtime': 7.20.13 - algoliasearch-helper: 3.11.1_algoliasearch@4.14.2 - classnames: 2.3.2 - prop-types: 15.8.1 - react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 - react-fast-compare: 3.2.0 - react-instantsearch-core: 6.38.0_pybjzmhtnpk62btmxi5dirminu - transitivePeerDependencies: - - algoliasearch - dev: false - - /react-intersection-observer/8.33.1_react@17.0.2: - resolution: {integrity: sha512-3v+qaJvp3D1MlGHyM+KISVg/CMhPiOlO6FgPHcluqHkx4YFCLuyXNlQ/LE6UkbODXlQcLOppfX6UMxCEkUhDLw==} - peerDependencies: - react: ^15.0.0 || ^16.0.0 || ^17.0.0|| ^18.0.0 - dependencies: - react: 17.0.2 - dev: false - - /react-intersection-observer/9.4.3_react@17.0.2: + /react-intersection-observer@9.4.3(react@17.0.2): resolution: {integrity: sha512-WNRqMQvKpupr6MzecAQI0Pj0+JQong307knLP4g/nBex7kYfIaZsPpXaIhKHR+oV8z+goUbH9e10j6lGRnTzlQ==} peerDependencies: react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 @@ -12542,45 +11204,22 @@ packages: react: 17.0.2 dev: false - /react-is/16.13.1: + /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: false - /react-is/17.0.2: + /react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} dev: true - /react-is/18.2.0: + /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - /react-paginate/7.1.5_react@17.0.2: - resolution: {integrity: sha512-CpyWSwsIIsFhWAQvmXDWuEl+yzfzisgvsUoZTj2IR1mFvm9oPTmeNBFc1wg8/i6ASmETeOmOnc78/U/MXyjd0w==} - peerDependencies: - react: ^16 || ^17 - dependencies: - prop-types: 15.8.1 - react: 17.0.2 - dev: false - - /react-player/2.11.0_react@17.0.2: - resolution: {integrity: sha512-fIrwpuXOBXdEg1FiyV9isKevZOaaIsAAtZy5fcjkQK9Nhmk1I2NXzY/hkPos8V0zb/ZX416LFy8gv7l/1k3a5w==} - peerDependencies: - react: '>=16.6.0' - dependencies: - deepmerge: 4.2.2 - load-script: 1.0.0 - memoize-one: 5.2.1 - prop-types: 15.8.1 - react: 17.0.2 - react-fast-compare: 3.2.0 - dev: false - - /react-refresh/0.10.0: + /react-refresh@0.10.0: resolution: {integrity: sha512-PgidR3wST3dDYKr6b4pJoqQFpPGNKDSCDx4cZoshjXipw3LzO7mG1My2pwEzz2JVkF+inx3xRpDeQLFQGH/hsQ==} engines: {node: '>=0.10.0'} dev: true - /react-remove-scroll-bar/2.3.4_h7fc2el62uaa77gho3xhys6ola: + /react-remove-scroll-bar@2.3.4(@types/react@17.0.53)(react@17.0.2): resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} engines: {node: '>=10'} peerDependencies: @@ -12592,11 +11231,11 @@ packages: dependencies: '@types/react': 17.0.53 react: 17.0.2 - react-style-singleton: 2.2.1_h7fc2el62uaa77gho3xhys6ola + react-style-singleton: 2.2.1(@types/react@17.0.53)(react@17.0.2) tslib: 2.5.0 dev: false - /react-remove-scroll/2.4.1_h7fc2el62uaa77gho3xhys6ola: + /react-remove-scroll@2.4.1(@types/react@17.0.53)(react@17.0.2): resolution: {integrity: sha512-K7XZySEzOHMTq7dDwcHsZA6Y7/1uX5RsWhRXVYv8rdh+y9Qz2nMwl9RX/Mwnj/j7JstCGmxyfyC0zbVGXYh3mA==} engines: {node: '>=8.5.0'} peerDependencies: @@ -12608,41 +11247,32 @@ packages: dependencies: '@types/react': 17.0.53 react: 17.0.2 - react-remove-scroll-bar: 2.3.4_h7fc2el62uaa77gho3xhys6ola - react-style-singleton: 2.2.1_h7fc2el62uaa77gho3xhys6ola + react-remove-scroll-bar: 2.3.4(@types/react@17.0.53)(react@17.0.2) + react-style-singleton: 2.2.1(@types/react@17.0.53)(react@17.0.2) tslib: 1.14.1 - use-callback-ref: 1.3.0_h7fc2el62uaa77gho3xhys6ola - use-sidecar: 1.1.2_h7fc2el62uaa77gho3xhys6ola + use-callback-ref: 1.3.0(@types/react@17.0.53)(react@17.0.2) + use-sidecar: 1.1.2(@types/react@17.0.53)(react@17.0.2) dev: false - /react-shallow-renderer/16.15.0_react@17.0.2: + /react-shallow-renderer@16.15.0(react@18.2.0): resolution: {integrity: sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==} peerDependencies: react: ^16.0.0 || ^17.0.0 || ^18.0.0 dependencies: object-assign: 4.1.1 - react: 17.0.2 - react-is: 17.0.2 + react: 18.2.0 + react-is: 18.2.0 dev: true - /react-ssr-prepass/1.5.0_react@17.0.2: + /react-ssr-prepass@1.5.0(react@18.2.0): resolution: {integrity: sha512-yFNHrlVEReVYKsLI5lF05tZoHveA5pGzjFbFJY/3pOqqjGOmMmqx83N4hIjN2n6E1AOa+eQEUxs3CgRnPmT0RQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - react: 17.0.2 - dev: false - - /react-sticky-box/1.0.2_react@17.0.2: - resolution: {integrity: sha512-Kyvtppdtv1KqJyNU4DtrSMI0unyQRgtraZvVQ0GAazVbYiTsIVpyhpr+5R0Aavzu4uJNSe1awj2rk/qI7i6Zfw==} - peerDependencies: - react: '>=16.8.0' - dependencies: - react: 17.0.2 - resize-observer-polyfill: 1.5.1 + react: 18.2.0 dev: false - /react-style-singleton/2.2.1_h7fc2el62uaa77gho3xhys6ola: + /react-style-singleton@2.2.1(@types/react@17.0.53)(react@17.0.2): resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} peerDependencies: @@ -12659,60 +11289,37 @@ packages: tslib: 2.5.0 dev: false - /react-test-renderer/17.0.2_react@17.0.2: - resolution: {integrity: sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==} + /react-test-renderer@18.2.0(react@18.2.0): + resolution: {integrity: sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA==} peerDependencies: - react: 17.0.2 + react: ^18.2.0 dependencies: - object-assign: 4.1.1 - react: 17.0.2 - react-is: 17.0.2 - react-shallow-renderer: 16.15.0_react@17.0.2 - scheduler: 0.20.2 + react: 18.2.0 + react-is: 18.2.0 + react-shallow-renderer: 16.15.0(react@18.2.0) + scheduler: 0.23.0 dev: true - /react-universal-interface/0.6.2_react@17.0.2+tslib@2.4.1: - resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==} - peerDependencies: - react: '*' - tslib: '*' - dependencies: - react: 17.0.2 - tslib: 2.4.1 - dev: false - - /react-use/17.4.0_sfoxds7t5ydpegc3knd667wn6m: - resolution: {integrity: sha512-TgbNTCA33Wl7xzIJegn1HndB4qTS9u03QUwyNycUnXaweZkE4Kq2SB+Yoxx8qbshkZGYBDvUXbXWRUmQDcZZ/Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@types/js-cookie': 2.2.7 - '@xobotyi/scrollbar-width': 1.9.5 - copy-to-clipboard: 3.3.2 - fast-deep-equal: 3.1.3 - fast-shallow-equal: 1.0.0 - js-cookie: 2.2.1 - nano-css: 5.3.5_sfoxds7t5ydpegc3knd667wn6m - react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 - react-universal-interface: 0.6.2_react@17.0.2+tslib@2.4.1 - resize-observer-polyfill: 1.5.1 - screenfull: 5.2.0 - set-harmonic-interval: 1.0.1 - throttle-debounce: 3.0.1 - ts-easing: 0.2.0 - tslib: 2.4.1 - dev: false - - /react/17.0.2: + /react@17.0.2: resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==} engines: {node: '>=0.10.0'} dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 - /read-pkg-up/7.0.1: + /react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + + /read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + dev: true + + /read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} dependencies: @@ -12721,7 +11328,7 @@ packages: type-fest: 0.8.1 dev: true - /read-pkg-up/9.1.0: + /read-pkg-up@9.1.0: resolution: {integrity: sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: @@ -12730,7 +11337,7 @@ packages: type-fest: 2.19.0 dev: true - /read-pkg/5.2.0: + /read-pkg@5.2.0: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} dependencies: @@ -12740,7 +11347,7 @@ packages: type-fest: 0.6.0 dev: true - /read-pkg/7.1.0: + /read-pkg@7.1.0: resolution: {integrity: sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==} engines: {node: '>=12.20'} dependencies: @@ -12750,7 +11357,7 @@ packages: type-fest: 2.19.0 dev: true - /read-yaml-file/1.1.0: + /read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} dependencies: @@ -12760,16 +11367,15 @@ packages: strip-bom: 3.0.0 dev: true - /readable-stream/3.6.0: + /readable-stream@3.6.0: resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} engines: {node: '>= 6'} dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: true - /readable-stream/4.2.0: + /readable-stream@4.2.0: resolution: {integrity: sha512-gJrBHsaI3lgBoGMW/jHZsQ/o/TIWiu5ENCJG1BB7fuCKzpFM8GaS2UoBVt9NO+oI+3FcrBNbUkl3ilDe09aY4A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -12777,25 +11383,28 @@ packages: buffer: 6.0.3 events: 3.3.0 process: 0.11.10 + dev: false - /readable-web-to-node-stream/3.0.2: + /readable-web-to-node-stream@3.0.2: resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} engines: {node: '>=8'} dependencies: readable-stream: 3.6.0 dev: true - /readdirp/3.6.0: + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 + dev: true - /real-require/0.2.0: + /real-require@0.2.0: resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} engines: {node: '>= 12.13.0'} + dev: false - /redent/3.0.0: + /redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} dependencies: @@ -12803,7 +11412,7 @@ packages: strip-indent: 3.0.0 dev: true - /redent/4.0.0: + /redent@4.0.0: resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} engines: {node: '>=12'} dependencies: @@ -12811,380 +11420,330 @@ packages: strip-indent: 4.0.0 dev: true - /reduce-css-calc/2.1.8: - resolution: {integrity: sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==} + /reflect.getprototypeof@1.0.4: + resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} + engines: {node: '>= 0.4'} dependencies: - css-unit-converter: 1.1.2 - postcss-value-parser: 3.3.1 - dev: false + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + globalthis: 1.0.3 + which-builtin-type: 1.1.3 + dev: true + + /regenerate-unicode-properties@10.1.1: + resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + dev: true + + /regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: true - /regenerator-runtime/0.13.11: + /regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: true + + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + /regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + dependencies: + '@babel/runtime': 7.23.8 + dev: true - /regexp.prototype.flags/1.4.3: - resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} + /regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - functions-have-names: 1.2.3 + call-bind: 1.0.5 + define-properties: 1.2.1 + set-function-name: 2.0.1 + dev: true + + /regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + dependencies: + '@babel/regjsgen': 0.8.0 + regenerate: 1.4.2 + regenerate-unicode-properties: 10.1.1 + regjsparser: 0.9.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.1.0 dev: true - /registry-auth-token/3.3.2: + /registry-auth-token@3.3.2: resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==} dependencies: rc: 1.2.8 safe-buffer: 5.2.1 dev: true - /registry-url/3.1.0: + /registry-url@3.1.0: resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} engines: {node: '>=0.10.0'} dependencies: rc: 1.2.8 dev: true - /rehype-slug/5.0.1: - resolution: {integrity: sha512-X5v3wV/meuOX9NFcGhJvUpEjIvQl2gDvjg3z40RVprYFt7q3th4qMmYLULiu3gXvbNX1ppx+oaa6JyY1W67pTA==} + /regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true dependencies: - '@types/hast': 2.3.4 - github-slugger: 1.4.0 - hast-util-has-property: 2.0.0 - hast-util-heading-rank: 2.1.0 - hast-util-to-string: 2.0.0 - unified: 10.1.2 - unist-util-visit: 4.1.1 - dev: false + jsesc: 0.5.0 + dev: true - /relay-runtime/12.0.0: + /relay-runtime@12.0.0: resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==} dependencies: - '@babel/runtime': 7.20.13 + '@babel/runtime': 7.23.8 fbjs: 3.0.4 invariant: 2.2.4 transitivePeerDependencies: - encoding - - /remark-emoji/3.0.2: - resolution: {integrity: sha512-hEgxEv2sBtvhT3tNG/tQeeFY3EbslftaOoG14dDZndLo25fWJ6Fbg4ukFbIotOWWrfXyASjXjyHT+6n366k3mg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - emoticon: 4.0.1 - node-emoji: 1.11.0 - unist-util-visit: 4.1.1 - dev: false - - /remark-gfm/3.0.1: - resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} - dependencies: - '@types/mdast': 3.0.10 - mdast-util-gfm: 2.0.1 - micromark-extension-gfm: 2.0.1 - unified: 10.1.2 - transitivePeerDependencies: - - supports-color - dev: false - - /remark-mdx/2.1.5: - resolution: {integrity: sha512-A8vw5s+BgOa968Irt8BO7DfWJTE0Fe7Ge3hX8zzDB1DnwMZTNdK6qF2IcFao+/7nzk1vSysKcFp+3ku4vhMpaQ==} - dependencies: - mdast-util-mdx: 2.0.0 - micromark-extension-mdxjs: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /remark-parse/10.0.1: - resolution: {integrity: sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==} - dependencies: - '@types/mdast': 3.0.10 - mdast-util-from-markdown: 1.2.0 - unified: 10.1.2 - transitivePeerDependencies: - - supports-color - dev: false - - /remark-rehype/10.1.0: - resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} - dependencies: - '@types/hast': 2.3.4 - '@types/mdast': 3.0.10 - mdast-util-to-hast: 12.2.4 - unified: 10.1.2 - dev: false - - /remove-markdown/0.3.0: - resolution: {integrity: sha512-5392eIuy1mhjM74739VunOlsOYKjsH82rQcTBlJ1bkICVC3dQ3ksQzTHh4jGHQFnM+1xzLzcFOMH+BofqXhroQ==} dev: false - /remove-trailing-separator/1.1.0: + /remove-trailing-separator@1.1.0: resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} dev: false - /require-directory/2.1.1: + /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - /require-from-string/2.0.2: + /require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - /require-main-filename/2.0.0: + /require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - /requires-port/1.0.0: + /requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} dev: true - /resize-observer-polyfill/1.5.1: - resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} - dev: false - - /resolve-cwd/3.0.0: + /resolve-cwd@3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 - /resolve-from/4.0.0: + /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - /resolve-from/5.0.0: + /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - /resolve.exports/2.0.0: + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + + /resolve.exports@2.0.0: resolution: {integrity: sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==} engines: {node: '>=10'} - /resolve/1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + /resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true dependencies: - is-core-module: 2.11.0 + is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: false - /ret/0.2.2: + /ret@0.2.2: resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==} engines: {node: '>=4'} + dev: false - /reusify/1.0.4: + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - /rfdc/1.3.0: + /rfdc@1.3.0: resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} - - /rgb-regex/1.0.1: - resolution: {integrity: sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==} - dev: false - - /rgba-regex/1.0.0: - resolution: {integrity: sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==} dev: false - /rimraf/3.0.2: + /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.3 + dev: true - /rimraf/4.4.0: + /rimraf@4.4.0: resolution: {integrity: sha512-X36S+qpCUR0HjXlkDe4NAOhS//aHH0Z+h8Ckf2auGJk3PTnx5rLmrHkwNdbVQuCSUhOyFrlRvFEllZOYE+yZGQ==} engines: {node: '>=14'} hasBin: true dependencies: glob: 9.2.1 - dev: true - - /robust-predicates/3.0.1: - resolution: {integrity: sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==} - dev: false + dev: true - /rollup/2.79.1: + /rollup@2.79.1: resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: 2.3.2 - dev: true + fsevents: 2.3.3 - /rollup/3.19.1: + /rollup@3.19.1: resolution: {integrity: sha512-lAbrdN7neYCg/8WaoWn/ckzCtz+jr70GFfYdlf50OF7387HTg+wiuiqJRFYawwSPpqfqDNYqK7smY/ks2iAudg==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true - /rtl-css-js/1.16.0: - resolution: {integrity: sha512-Oc7PnzwIEU4M0K1J4h/7qUUaljXhQ0kCObRsZjxs2HjkpKsnoTMvSmvJ4sqgJZd0zBoEfAyTdnK/jMIYvrjySQ==} - dependencies: - '@babel/runtime': 7.20.13 - dev: false - - /run-applescript/5.0.0: + /run-applescript@5.0.0: resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} engines: {node: '>=12'} dependencies: execa: 5.1.1 dev: true - /run-parallel/1.2.0: + /run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + dev: false + + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 - /rw/1.3.3: - resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} - dev: false - - /rwlock/5.0.0: + /rwlock@5.0.0: resolution: {integrity: sha512-XgzRqLMfCcm9QfZuPav9cV3Xin5TRcIlp4X/SH3CvB+x5D2AakdlEepfJKDd8ByncvfpcxNWdRZVUl38PS6ZJg==} dev: false - /rxjs/7.5.7: - resolution: {integrity: sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==} - dependencies: - tslib: 2.5.0 - dev: true - - /rxjs/7.8.0: + /rxjs@7.8.0: resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} dependencies: tslib: 2.5.0 - dev: true - /sade/1.8.1: - resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} - engines: {node: '>=6'} + /safe-array-concat@1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + engines: {node: '>=0.4'} dependencies: - mri: 1.2.0 - dev: false + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true - /safe-buffer/5.1.2: + /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true - /safe-buffer/5.2.1: + /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true - /safe-regex-test/1.0.0: + /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.3 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 is-regex: 1.1.4 dev: true - /safe-regex2/2.0.0: + /safe-regex2@2.0.0: resolution: {integrity: sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==} dependencies: ret: 0.2.2 + dev: false - /safe-stable-stringify/2.4.1: + /safe-stable-stringify@2.4.1: resolution: {integrity: sha512-dVHE6bMtS/bnL2mwualjc6IxEv1F+OCUpA46pKUj6F8uDbUM0jCCulPqRNPSnWwGNKx5etqMjZYdXtrm5KJZGA==} engines: {node: '>=10'} + dev: false - /safer-buffer/2.1.2: + /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - /saxes/6.0.0: + /saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} dependencies: xmlchars: 2.2.0 dev: true - /scheduler/0.20.2: + /scheduler@0.20.2: resolution: {integrity: sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==} dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 - /screenfull/5.2.0: - resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} - engines: {node: '>=0.10.0'} - dev: false - - /search-insights/2.2.1: - resolution: {integrity: sha512-JDfVGZbKqTtiKVZjAVbkNw9C9f0ib80yx6Ea17M3z4RvPmuD0GYWXuFwA9++dpbreBEMH4TC3lQ29Zq7O4b5oA==} - engines: {node: '>=8.16.0'} - dev: false - - /section-matter/1.0.0: - resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} - engines: {node: '>=4'} + /scheduler@0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} dependencies: - extend-shallow: 2.0.1 - kind-of: 6.0.3 - dev: false + loose-envify: 1.4.0 - /secure-json-parse/2.5.0: - resolution: {integrity: sha512-ZQruFgZnIWH+WyO9t5rWt4ZEGqCKPwhiw+YbzTwpmT9elgLrLcfuyUiSnwwjUiVy9r4VM3urtbNF1xmEh9IL2w==} + /secure-json-parse@2.7.0: + resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + dev: false - /semver/5.7.1: + /semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true dev: true - /semver/6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - /semver/7.3.8: + /semver@7.3.8: resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} engines: {node: '>=10'} hasBin: true dependencies: lru-cache: 6.0.0 + dev: true - /send/0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - dev: true + lru-cache: 6.0.0 - /sentence-case/3.0.4: + /sentence-case@3.0.4: resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} dependencies: no-case: 3.0.4 tslib: 2.5.0 upper-case-first: 2.0.2 + dev: false - /serialize-error/11.0.0: + /serialize-error@11.0.0: resolution: {integrity: sha512-YKrURWDqcT3VGX/s/pCwaWtpfJEEaEw5Y4gAnQDku92b/HjVj4r4UhA5QrMVMFotymK2wIWs5xthny5SMFu7Vw==} engines: {node: '>=14.16'} dependencies: type-fest: 2.19.0 dev: false - /serialize-error/7.0.1: - resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} - engines: {node: '>=10'} - dependencies: - type-fest: 0.13.1 - dev: true - - /serve-handler/6.1.5: + /serve-handler@6.1.5: resolution: {integrity: sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==} dependencies: bytes: 3.0.0 @@ -13197,19 +11756,7 @@ packages: range-parser: 1.2.0 dev: true - /serve-static/1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} - dependencies: - encodeurl: 1.0.2 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.18.0 - transitivePeerDependencies: - - supports-color - dev: true - - /serve/14.2.0: + /serve@14.2.0: resolution: {integrity: sha512-+HOw/XK1bW8tw5iBilBz/mJLWRzM8XM6MPxL4J/dKzdxq1vfdEWSwhaR7/yS8EJp5wzvP92p1qirysJvnEtjXg==} engines: {node: '>= 14'} hasBin: true @@ -13229,94 +11776,87 @@ packages: - supports-color dev: true - /set-blocking/2.0.0: + /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - /set-cookie-parser/2.5.1: + /set-cookie-parser@2.5.1: resolution: {integrity: sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==} - - /set-harmonic-interval/1.0.1: - resolution: {integrity: sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==} - engines: {node: '>=6.9'} dev: false - /setimmediate/1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - - /setprototypeof/1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + /set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.0 + dev: true - /sha1/1.1.1: - resolution: {integrity: sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==} + /set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} dependencies: - charenc: 0.0.2 - crypt: 0.0.2 + define-data-property: 1.1.1 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.0 dev: true - /shebang-command/1.2.0: + /setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + dev: false + + /setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: false + + /shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} dependencies: shebang-regex: 1.0.0 dev: true - /shebang-command/2.0.0: + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 - /shebang-regex/1.0.0: + /shebang-regex@1.0.0: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} engines: {node: '>=0.10.0'} dev: true - /shebang-regex/3.0.0: + /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - /shell-quote/1.7.4: + /shell-quote@1.7.4: resolution: {integrity: sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==} dev: true - /shiki-renderer-hast/1.1.5_shiki@0.12.1: - resolution: {integrity: sha512-XOHX0/mIRJZnqPNGoyyJ9bUrqUwj/tLUJQ5SuU/UkQLTiSJjiHaCP17HRB7/VSQoor4+WJF3QkT8BXbipyJN0Q==} - peerDependencies: - shiki: ^0.9 || ^0.10.0 - dependencies: - hastscript: 7.1.0 - shiki: 0.12.1 - dev: false - - /shiki/0.12.1: - resolution: {integrity: sha512-aieaV1m349rZINEBkjxh2QbBvFFQOlgqYTNtCal82hHj4dDZ76oMlQIX+C7ryerBTDiga3e5NfH6smjdJ02BbQ==} - dependencies: - jsonc-parser: 3.2.0 - vscode-oniguruma: 1.7.0 - vscode-textmate: 8.0.0 - dev: false - - /side-channel/1.0.4: + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.3 - object-inspect: 1.12.2 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + object-inspect: 1.13.1 dev: true - /signal-exit/3.0.7: + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - /signedsource/1.0.0: - resolution: {integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==} + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true - /simple-swizzle/0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} - dependencies: - is-arrayish: 0.3.2 + /signedsource@1.0.0: + resolution: {integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==} dev: false - /sirv/1.0.19: + /sirv@1.0.19: resolution: {integrity: sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==} engines: {node: '>= 10'} dependencies: @@ -13325,10 +11865,10 @@ packages: totalist: 1.1.0 dev: true - /sisteransi/1.0.5: + /sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - /size-limit/8.2.4: + /size-limit@8.2.4: resolution: {integrity: sha512-Un16nSreD1v2CYwSorattiJcHuAWqXvg4TsGgzpjnoByqQwsSfCIEQHuaD14HNStzredR8cdsO9oGH91ibypTA==} engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} hasBin: true @@ -13336,38 +11876,31 @@ packages: bytes-iec: 3.1.1 chokidar: 3.5.3 globby: 11.1.0 - lilconfig: 2.0.6 + lilconfig: 2.1.0 nanospinner: 1.1.0 picocolors: 1.0.0 dev: true - /slash/3.0.0: + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - /slash/4.0.0: + /slash@4.0.0: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} engines: {node: '>=12'} + dev: true - /slash/5.0.0: + /slash@5.0.0: resolution: {integrity: sha512-n6KkmvKS0623igEVj3FF0OZs1gYYJ0o0Hj939yc1fyxl2xt+xYpLnzJB6xBSqOfV9ZFLEWodBBN/heZJahuIJQ==} engines: {node: '>=14.16'} dev: false - /slice-ansi/5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} - dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 4.0.0 - dev: true - - /smartwrap/2.0.2: + /smartwrap@2.0.2: resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} engines: {node: '>=6'} hasBin: true dependencies: - array.prototype.flat: 1.3.0 + array.prototype.flat: 1.3.2 breakword: 1.0.5 grapheme-splitter: 1.0.4 strip-ansi: 6.0.1 @@ -13375,170 +11908,137 @@ packages: yargs: 15.4.1 dev: true - /snake-case/3.0.4: + /snake-case@3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} dependencies: dot-case: 3.0.4 tslib: 2.5.0 + dev: false - /sonic-boom/3.2.0: - resolution: {integrity: sha512-SbbZ+Kqj/XIunvIAgUZRlqd6CGQYq71tRRbXR92Za8J/R3Yh4Av+TWENiSiEgnlwckYLyP0YZQWVfyNC0dzLaA==} + /sonic-boom@3.8.0: + resolution: {integrity: sha512-ybz6OYOUjoQQCQ/i4LU8kaToD8ACtYP+Cj5qd2AO36bwbdewxWJ3ArmJ2cr6AvxlL2o0PqnCcPGUgkILbfkaCA==} dependencies: atomic-sleep: 1.0.0 + dev: false - /source-map-js/1.0.2: + /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - /source-map-support/0.5.13: + /source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - /source-map/0.5.6: - resolution: {integrity: sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==} - engines: {node: '>=0.10.0'} - dev: false - - /source-map/0.5.7: + /source-map@0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} dev: false - /source-map/0.6.1: + /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - /source-map/0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - dev: false - - /sourcemap-codec/1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - dev: false - - /space-separated-tokens/2.0.1: - resolution: {integrity: sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==} - dev: false - - /spawn-command/0.0.2-1: + /spawn-command@0.0.2-1: resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==} dev: true - /spawndamnit/2.0.0: + /spawndamnit@2.0.0: resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} dependencies: cross-spawn: 5.1.0 signal-exit: 3.0.7 dev: true - /spdx-correct/3.1.1: + /spdx-correct@3.1.1: resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.12 dev: true - /spdx-exceptions/2.3.0: + /spdx-exceptions@2.3.0: resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} dev: true - /spdx-expression-parse/3.0.1: + /spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 spdx-license-ids: 3.0.12 dev: true - /spdx-license-ids/3.0.12: + /spdx-license-ids@3.0.12: resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==} dev: true - /split/0.3.3: + /split2@4.1.0: + resolution: {integrity: sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==} + engines: {node: '>= 10.x'} + dev: false + + /split@0.3.3: resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} dependencies: through: 2.3.8 dev: true - /split2/4.1.0: - resolution: {integrity: sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==} - engines: {node: '>= 10.x'} - - /sponge-case/1.0.1: + /sponge-case@1.0.1: resolution: {integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==} dependencies: tslib: 2.5.0 + dev: false - /sprintf-js/1.0.3: + /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - /stack-generator/2.0.10: - resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==} - dependencies: - stackframe: 1.3.4 - dev: false - - /stack-utils/2.0.6: + /stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 - /stackframe/1.3.4: - resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} - dev: false - - /stacktrace-gps/3.1.2: - resolution: {integrity: sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==} - dependencies: - source-map: 0.5.6 - stackframe: 1.3.4 - dev: false - - /stacktrace-js/2.0.2: - resolution: {integrity: sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==} - dependencies: - error-stack-parser: 2.1.4 - stack-generator: 2.0.10 - stacktrace-gps: 3.1.2 + /statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} dev: false - /statuses/2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - - /stream-combiner/0.0.4: + /stream-combiner@0.0.4: resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} dependencies: duplexer: 0.1.2 dev: true - /stream-transform/2.1.3: + /stream-transform@2.1.3: resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} dependencies: mixme: 0.5.4 dev: true - /streamsearch/1.1.0: + /streamsearch@0.1.2: + resolution: {integrity: sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA==} + engines: {node: '>=0.8.0'} + dev: false + + /streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} dev: false - /string-argv/0.3.1: + /string-argv@0.3.1: resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} engines: {node: '>=0.6.19'} dev: true - /string-length/4.0.2: + /string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} dependencies: char-regex: 1.0.2 strip-ansi: 6.0.1 - /string-length/5.0.1: + /string-length@5.0.1: resolution: {integrity: sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==} engines: {node: '>=12.20'} dependencies: @@ -13546,11 +12046,7 @@ packages: strip-ansi: 7.0.1 dev: false - /string-similarity/4.0.4: - resolution: {integrity: sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==} - dev: false - - /string-width/4.2.3: + /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} dependencies: @@ -13558,7 +12054,7 @@ packages: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - /string-width/5.1.2: + /string-width@5.1.2: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} dependencies: @@ -13567,94 +12063,104 @@ packages: strip-ansi: 7.0.1 dev: true - /string.prototype.trimend/1.0.5: - resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==} + /string.prototype.matchall@4.0.10: + resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + internal-slot: 1.0.6 + regexp.prototype.flags: 1.5.1 + set-function-name: 2.0.1 + side-channel: 1.0.4 dev: true - /string.prototype.trimstart/1.0.5: - resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==} + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 dev: true - /string_decoder/1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + /string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: - safe-buffer: 5.2.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 dev: true - /stringify-entities/4.0.3: - resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} + /string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: - character-entities-html4: 2.1.0 - character-entities-legacy: 3.0.0 - dev: false + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true - /strip-ansi/6.0.1: + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 - /strip-ansi/7.0.1: + /strip-ansi@7.0.1: resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 - /strip-bom-string/1.0.0: - resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} - engines: {node: '>=0.10.0'} - dev: false - - /strip-bom/3.0.0: + /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} dev: true - /strip-bom/4.0.0: + /strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} - /strip-eof/1.0.0: + /strip-eof@1.0.0: resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} engines: {node: '>=0.10.0'} dev: true - /strip-final-newline/2.0.0: + /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - /strip-indent/3.0.0: + /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} dependencies: min-indent: 1.0.1 dev: true - /strip-indent/4.0.0: + /strip-indent@4.0.0: resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} engines: {node: '>=12'} dependencies: min-indent: 1.0.1 dev: true - /strip-json-comments/2.0.1: + /strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} dev: true - /strip-json-comments/3.1.1: + /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - /strtok3/7.0.0: + /strtok3@7.0.0: resolution: {integrity: sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==} engines: {node: '>=14.16'} dependencies: @@ -13662,20 +12168,14 @@ packages: peek-readable: 5.0.0 dev: true - /style-to-object/0.3.0: - resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==} - dependencies: - inline-style-parser: 0.1.1 - dev: false - - /style-value-types/5.0.0: + /style-value-types@5.0.0: resolution: {integrity: sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA==} dependencies: hey-listen: 1.0.8 tslib: 2.5.0 dev: false - /styled-jsx/5.0.7_react@17.0.2: + /styled-jsx@5.0.7(@babel/core@7.23.7)(react@17.0.2): resolution: {integrity: sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -13688,132 +12188,137 @@ packages: babel-plugin-macros: optional: true dependencies: + '@babel/core': 7.23.7 react: 17.0.2 - /stylis/4.1.3: + /styled-jsx@5.1.1(@babel/core@7.23.7)(react@18.2.0): + resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + dependencies: + '@babel/core': 7.23.7 + client-only: 0.0.1 + react: 18.2.0 + dev: false + + /stylis@4.1.3: resolution: {integrity: sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==} dev: false - /subscriptions-transport-ws-envelop/2.0.2_graphql@16.6.0+ws@8.11.0: + /subscriptions-transport-ws-envelop@2.0.2(graphql@16.8.1)(ws@8.13.0): resolution: {integrity: sha512-HMwQgdiMBgWC48LplRtDsgrdQKnsns7VvLZTN1eIFNT01XJd6yuuudrl85TbO5QnTAiw6g2Sh5bjTFYKjFIGwQ==} peerDependencies: - graphql: '*' + graphql: '>=0.10.0' ws: ^7.5.0 || ^8.4.0 dependencies: backo2: 1.0.2 eventemitter3: 4.0.7 - graphql: 16.6.0 - isomorphic-ws: 4.0.1_ws@8.11.0 + graphql: 16.8.1 + isomorphic-ws: 4.0.1(ws@8.13.0) iterall: 1.3.0 symbol-observable: 4.0.0 - ws: 8.11.0 + ws: 8.13.0(bufferutil@4.0.7)(utf-8-validate@6.0.3) - /supertap/3.0.1: - resolution: {integrity: sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true dependencies: - indent-string: 5.0.0 - js-yaml: 3.14.1 - serialize-error: 7.0.1 - strip-ansi: 7.0.1 + '@jridgewell/gen-mapping': 0.3.2 + commander: 4.1.1 + glob: 10.3.10 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.5 + ts-interface-checker: 0.1.13 dev: true - /supports-color/5.5.0: + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} dependencies: has-flag: 3.0.0 - /supports-color/7.2.0: + /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - /supports-color/8.1.1: + /supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} dependencies: has-flag: 4.0.0 - /supports-preserve-symlinks-flag/1.0.0: + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /swap-case/2.0.2: + /swap-case@2.0.2: resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==} dependencies: tslib: 2.5.0 + dev: false - /symbol-observable/4.0.0: + /symbol-observable@4.0.0: resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} engines: {node: '>=0.10'} - /symbol-tree/3.2.4: + /symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true - /tabbable/5.3.3: - resolution: {integrity: sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA==} - dev: false - - /tailwindcss/2.2.19_gbtt6ss3tbiz4yjtvdr6fbrj44: - resolution: {integrity: sha512-6Ui7JSVtXadtTUo2NtkBBacobzWiQYVjYW0ZnKaP9S1ZCKQ0w7KVNz+YSDI/j7O7KCMHbOkz94ZMQhbT9pOqjw==} - engines: {node: '>=12.13.0'} + /tailwindcss@3.4.1(ts-node@10.9.1): + resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==} + engines: {node: '>=14.0.0'} hasBin: true - peerDependencies: - autoprefixer: ^10.0.2 - postcss: ^8.0.9 dependencies: + '@alloc/quick-lru': 5.2.0 arg: 5.0.2 - autoprefixer: 10.4.13_postcss@8.4.21 - bytes: 3.1.2 - chalk: 4.1.2 chokidar: 3.5.3 - color: 4.2.3 - cosmiconfig: 7.1.0 - detective: 5.2.1 didyoumean: 1.2.2 dlv: 1.1.3 - fast-glob: 3.2.12 - fs-extra: 10.1.0 + fast-glob: 3.3.2 glob-parent: 6.0.2 - html-tags: 3.2.0 - is-color-stop: 1.1.0 is-glob: 4.0.3 - lodash: 4.17.21 - lodash.topath: 4.5.2 - modern-normalize: 1.1.0 - node-emoji: 1.11.0 + jiti: 1.21.0 + lilconfig: 2.1.0 + micromatch: 4.0.5 normalize-path: 3.0.0 - object-hash: 2.2.0 - postcss: 8.4.21 - postcss-js: 3.0.3 - postcss-load-config: 3.1.4_postcss@8.4.21 - postcss-nested: 5.0.6_postcss@8.4.21 - postcss-selector-parser: 6.0.10 - postcss-value-parser: 4.2.0 - pretty-hrtime: 1.0.3 - purgecss: 4.1.3 - quick-lru: 5.1.1 - reduce-css-calc: 2.1.8 - resolve: 1.22.1 - tmp: 0.2.1 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.33 + postcss-import: 15.1.0(postcss@8.4.33) + postcss-js: 4.0.1(postcss@8.4.33) + postcss-load-config: 4.0.2(postcss@8.4.33)(ts-node@10.9.1) + postcss-nested: 6.0.1(postcss@8.4.33) + postcss-selector-parser: 6.0.15 + resolve: 1.22.8 + sucrase: 3.35.0 transitivePeerDependencies: - ts-node - dev: false + dev: true - /temp-dir/2.0.0: - resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} - engines: {node: '>=8'} + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} dev: true - /temp-dir/3.0.0: - resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} - engines: {node: '>=14.16'} + /temp-dir@2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} dev: true - /tempy/3.0.0: + /tempy@3.0.0: resolution: {integrity: sha512-B2I9X7+o2wOaW4r/CWMkpOO9mdiTRCxXNgob6iGvPmfPWgH/KyUD6Uy5crtWBxIBe3YrNZKR2lSzv1JJKWD4vA==} engines: {node: '>=14.16'} dependencies: @@ -13823,12 +12328,12 @@ packages: unique-string: 3.0.0 dev: true - /term-size/2.2.1: + /term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} dev: true - /test-exclude/6.0.0: + /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} dependencies: @@ -13836,97 +12341,98 @@ packages: glob: 7.2.3 minimatch: 3.1.2 - /thread-stream/2.2.0: - resolution: {integrity: sha512-rUkv4/fnb4rqy/gGy7VuqK6wE1+1DOCOWy4RMeaV69ZHMP11tQKZvZSip1yTgrKCMZzEMcCL/bKfHvSfDHx+iQ==} - dependencies: - real-require: 0.2.0 - - /throttle-debounce/3.0.1: - resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} - engines: {node: '>=10'} - dev: false + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true - /through/2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 dev: true - /time-zone/1.0.0: - resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==} - engines: {node: '>=4'} + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 dev: true - /timsort/0.3.0: - resolution: {integrity: sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==} + /thread-stream@2.2.0: + resolution: {integrity: sha512-rUkv4/fnb4rqy/gGy7VuqK6wE1+1DOCOWy4RMeaV69ZHMP11tQKZvZSip1yTgrKCMZzEMcCL/bKfHvSfDHx+iQ==} + dependencies: + real-require: 0.2.0 dev: false - /tiny-invariant/1.3.1: + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + /tiny-invariant@1.3.1: resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} dev: false - /tiny-lru/10.0.1: + /tiny-lru@10.0.1: resolution: {integrity: sha512-Vst+6kEsWvb17Zpz14sRJV/f8bUWKhqm6Dc+v08iShmIJ/WxqWytHzCTd6m88pS33rE2zpX34TRmOpAJPloNCA==} engines: {node: '>=6'} - /tiny-lru/8.0.2: - resolution: {integrity: sha512-ApGvZ6vVvTNdsmt676grvCkUCGwzG9IqXma5Z07xJgiC5L7akUMof5U8G2JTI9Rz/ovtVhJBlY6mNhEvtjzOIg==} - engines: {node: '>=6'} - dev: false - - /tinykeys/1.4.0: - resolution: {integrity: sha512-ysnVd2E4nWbNXIbHaUidcKGLTmNimqP0hdpsD0Ph5hPJ84ntCF6PHj+Jg3im9nZt9/hNsBg/E6m1psHc2KaPnQ==} - dev: false - - /title-case/3.0.3: + /title-case@3.0.3: resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} dependencies: tslib: 2.5.0 + dev: false - /titleize/1.0.1: + /titleize@1.0.1: resolution: {integrity: sha512-rUwGDruKq1gX+FFHbTl5qjI7teVO7eOe+C8IcQ7QT+1BK3eEUXJqbZcBOeaRP4FwSC/C1A5jDoIVta0nIQ9yew==} engines: {node: '>=0.10.0'} dev: true - /tmp-promise/3.0.3: + /tmp-promise@3.0.3: resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} dependencies: tmp: 0.2.1 dev: true - /tmp/0.0.33: + /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} dependencies: os-tmpdir: 1.0.2 - dev: true - /tmp/0.2.1: + /tmp@0.2.1: resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} engines: {node: '>=8.17.0'} dependencies: rimraf: 3.0.2 + dev: true - /tmpl/1.0.5: + /tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - /to-fast-properties/2.0.0: + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} - /to-regex-range/5.0.1: + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - /toggle-selection/1.0.6: + /toad-cache@3.7.0: + resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==} + engines: {node: '>=12'} + dev: false + + /toggle-selection@1.0.6: resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} dev: false - /toidentifier/1.0.1: + /toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + dev: false - /token-types/5.0.1: + /token-types@5.0.1: resolution: {integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==} engines: {node: '>=14.16'} dependencies: @@ -13934,12 +12440,12 @@ packages: ieee754: 1.2.1 dev: true - /totalist/1.1.0: + /totalist@1.1.0: resolution: {integrity: sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==} engines: {node: '>=6'} dev: true - /tough-cookie/4.1.2: + /tough-cookie@4.1.2: resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} engines: {node: '>=6'} dependencies: @@ -13949,80 +12455,45 @@ packages: url-parse: 1.5.10 dev: true - /tr46/0.0.3: + /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - /tr46/3.0.0: + /tr46@3.0.0: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} dependencies: punycode: 2.1.1 dev: true - /tree-kill/1.2.2: + /trading-signals@3.7.0: + resolution: {integrity: sha512-+32o/02mwZPUw0x9kLtxnmZn0+NeJVg6ljFjyav7XOHJo53eLgxEd5qHXW79erOzBkvWtN4ebGsqO1/Q7HynsQ==} + engines: {node: '>= 10.9', yarn: '>= 1'} + dependencies: + '@types/big.js': 6.1.6 + big.js: 6.2.1 + dev: false + + /tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true dev: true - /trim-lines/3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - dev: false - - /trim-newlines/3.0.1: + /trim-newlines@3.0.1: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} dev: true - /trim-newlines/4.0.2: + /trim-newlines@4.0.2: resolution: {integrity: sha512-GJtWyq9InR/2HRiLZgpIKv+ufIKrVrvjQWEj7PxAXNc5dwbNJkqhAUoAGgzRmULAnoOM5EIpveYd3J2VeSAIew==} engines: {node: '>=12'} dev: true - /trough/2.1.0: - resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} - dev: false - - /ts-easing/0.2.0: - resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==} - dev: false - - /ts-jest/29.0.5_7zwficsud2wmcwakxus3xxpqke: - resolution: {integrity: sha512-PL3UciSgIpQ7f6XjVOmbi96vmDHUqAyqDr8YxzopDqX3kfgYtX1cuNeBjP+L9sFXi6nzsGGA6R3fP3DDDJyrxA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/types': ^29.0.0 - babel-jest: ^29.0.0 - esbuild: '*' - jest: ^29.0.0 - typescript: '>=4.3' - peerDependenciesMeta: - '@babel/core': - optional: true - '@jest/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - dependencies: - '@jest/types': 29.5.0 - bs-logger: 0.2.6 - esbuild: 0.17.12 - fast-json-stable-stringify: 2.1.0 - jest: 29.5.0_@types+node@18.15.5 - jest-util: 29.4.0 - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.3.8 - typescript: 4.9.5 - yargs-parser: 21.1.1 - dev: false + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: true - /ts-jest/29.0.5_kxkw7io5lipdvgpiby7d7545le: - resolution: {integrity: sha512-PL3UciSgIpQ7f6XjVOmbi96vmDHUqAyqDr8YxzopDqX3kfgYtX1cuNeBjP+L9sFXi6nzsGGA6R3fP3DDDJyrxA==} + /ts-jest@29.1.1(@babel/core@7.23.7)(esbuild@0.18.20)(jest@29.5.0)(typescript@5.3.3): + resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -14031,7 +12502,7 @@ packages: babel-jest: ^29.0.0 esbuild: '*' jest: ^29.0.0 - typescript: '>=4.3' + typescript: '>=4.3 <6' peerDependenciesMeta: '@babel/core': optional: true @@ -14042,20 +12513,21 @@ packages: esbuild: optional: true dependencies: + '@babel/core': 7.23.7 bs-logger: 0.2.6 - esbuild: 0.17.12 + esbuild: 0.18.20 fast-json-stable-stringify: 2.1.0 - jest: 29.5.0_757mb262zsxkcnuknwfdsckmku - jest-util: 29.4.0 + jest: 29.5.0(@types/node@18.19.6)(ts-node@10.9.1) + jest-util: 29.5.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.3.8 - typescript: 4.9.5 + semver: 7.5.4 + typescript: 5.3.3 yargs-parser: 21.1.1 dev: true - /ts-node/10.9.1_345kigqis4fipgyy5xb3ndshmq: + /ts-node@10.9.1(@types/node@18.19.6)(typescript@5.3.3): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -14074,19 +12546,18 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 18.15.5 - acorn: 8.8.1 + '@types/node': 18.19.6 + acorn: 8.11.3 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 4.9.5 + typescript: 5.3.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - dev: true - /tsc-watch/6.0.0_typescript@4.9.5: + /tsc-watch@6.0.0(typescript@5.3.3): resolution: {integrity: sha512-zgpju+/z5z29/kK5V28Nz16CMkX2voFOUxkTlCim/R25hxzbyUqu2NfTnmJBQfESBSPbEQUGqDdB9A8opAcB4A==} engines: {node: '>=12.12.0'} hasBin: true @@ -14097,24 +12568,39 @@ packages: node-cleanup: 2.1.2 ps-tree: 1.2.0 string-argv: 0.3.1 - typescript: 4.9.5 + typescript: 5.3.3 dev: true - /tslib/1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: false + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.7 + strip-bom: 3.0.0 + dev: true - /tslib/2.4.0: - resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - /tslib/2.4.1: + /tslib@2.4.1: resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} dev: false - /tslib/2.5.0: + /tslib@2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - /tty-table/4.1.6: + /tsutils@3.21.0(typescript@5.3.3): + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 5.3.3 + dev: true + + /tty-table@4.1.6: resolution: {integrity: sha512-kRj5CBzOrakV4VRRY5kUWbNYvo/FpOsz65DzI5op9P+cHov3+IqPbo1JE1ZnQGkHdZgNFDsrEjrfqqy/Ply9fw==} engines: {node: '>=8.0.0'} hasBin: true @@ -14128,262 +12614,224 @@ packages: yargs: 17.6.2 dev: true - /twin.macro/2.8.2: - resolution: {integrity: sha512-2Vg09mp+nA70AWUedJ8WRgB2me3buq7JGbOnjHnFnNaBzomVu5k7lJ9YGpByIlre+UYr7QRhtlj7+IUKxvCrUA==} - engines: {node: '>=12.13.0'} - dependencies: - '@babel/parser': 7.20.1 - '@babel/template': 7.18.10 - autoprefixer: 10.4.13_postcss@8.4.21 - babel-plugin-macros: 2.8.0 - chalk: 4.1.2 - clean-set: 1.1.2 - color: 3.2.1 - dset: 3.1.2 - lodash.flatmap: 4.5.0 - lodash.get: 4.4.2 - lodash.merge: 4.6.2 - postcss: 8.4.21 - string-similarity: 4.0.4 - tailwindcss: 2.2.19_gbtt6ss3tbiz4yjtvdr6fbrj44 - timsort: 0.3.0 - transitivePeerDependencies: - - ts-node - dev: false - - /type-check/0.3.2: + /type-check@0.3.2: resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 dev: true - /type-detect/4.0.8: + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} - /type-fest/0.13.1: + /type-fest@0.13.1: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} engines: {node: '>=10'} dev: true - /type-fest/0.21.3: + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - /type-fest/0.6.0: + /type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} dev: true - /type-fest/0.8.1: + /type-fest@0.8.1: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} dev: true - /type-fest/1.4.0: + /type-fest@1.4.0: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} dev: true - /type-fest/2.19.0: + /type-fest@2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - /type-fest/3.2.0: - resolution: {integrity: sha512-Il3wdLRzWvbAEtocgxGQA9YOoRVeVUGOMBtel5LdEpNeEAol6GJTLw8GbX6Z8EIMfvfhoOXs2bwOijtAZdK5og==} + /type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} engines: {node: '>=14.16'} - /type-is/1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + is-typed-array: 1.1.12 dev: true - /typescript/4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} + /typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} hasBin: true - /ua-parser-js/0.7.32: + /ua-parser-js@0.7.32: resolution: {integrity: sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==} + dev: false - /unbox-primitive/1.0.2: + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 dev: true - /unc-path-regex/0.1.2: + /unc-path-regex@0.1.2: resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} engines: {node: '>=0.10.0'} + dev: false + + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - /undici/5.7.0: + /undici@5.7.0: resolution: {integrity: sha512-ORgxwDkiPS+gK2VxE7iyVeR7JliVn5DqhZ4LgQqYLBXsuK+lwOEmnJ66dhvlpLM0tC3fC7eYF1Bti2frbw2eAA==} engines: {node: '>=12.18'} + dev: false - /unfetch/5.0.0: - resolution: {integrity: sha512-3xM2c89siXg0nHvlmYsQ2zkLASvVMBisZm5lF3gFDqfF2xonNStDJyMpvaOBe0a1Edxmqrf2E0HBdmy9QyZaeg==} + /unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} dev: true - /unified/10.1.2: - resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + /unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} dependencies: - '@types/unist': 2.0.6 - bail: 2.0.2 - extend: 3.0.2 - is-buffer: 2.0.5 - is-plain-obj: 4.1.0 - trough: 2.1.0 - vfile: 5.3.2 - dev: false + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.1.0 + dev: true + + /unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + dev: true + + /unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + dev: true - /unique-string/3.0.0: + /unique-string@3.0.0: resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} engines: {node: '>=12'} dependencies: crypto-random-string: 4.0.0 dev: true - /unist-builder/3.0.0: - resolution: {integrity: sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ==} - dependencies: - '@types/unist': 2.0.6 - dev: false - - /unist-util-generated/2.0.0: - resolution: {integrity: sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==} - dev: false - - /unist-util-is/5.1.1: - resolution: {integrity: sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==} - dev: false - - /unist-util-position-from-estree/1.1.1: - resolution: {integrity: sha512-xtoY50b5+7IH8tFbkw64gisG9tMSpxDjhX9TmaJJae/XuxQ9R/Kc8Nv1eOsf43Gt4KV/LkriMy9mptDr7XLcaw==} - dependencies: - '@types/unist': 2.0.6 - dev: false - - /unist-util-position/4.0.3: - resolution: {integrity: sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==} - dependencies: - '@types/unist': 2.0.6 - dev: false - - /unist-util-remove-position/4.0.1: - resolution: {integrity: sha512-0yDkppiIhDlPrfHELgB+NLQD5mfjup3a8UYclHruTJWmY74je8g+CIFr79x5f6AkmzSwlvKLbs63hC0meOMowQ==} - dependencies: - '@types/unist': 2.0.6 - unist-util-visit: 4.1.1 - dev: false - - /unist-util-remove/3.1.0: - resolution: {integrity: sha512-rO/sIghl13eN8irs5OBN2a4RC10MsJdiePCfwrvnzGtgIbHcDXr2REr0qi9F2r/CIb1r9FyyFmcMRIGs+EyUFw==} - dependencies: - '@types/unist': 2.0.6 - unist-util-is: 5.1.1 - unist-util-visit-parents: 5.1.1 - dev: false - - /unist-util-stringify-position/3.0.2: - resolution: {integrity: sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==} - dependencies: - '@types/unist': 2.0.6 - dev: false - - /unist-util-visit-parents/5.1.1: - resolution: {integrity: sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==} - dependencies: - '@types/unist': 2.0.6 - unist-util-is: 5.1.1 - dev: false - - /unist-util-visit/4.1.1: - resolution: {integrity: sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==} - dependencies: - '@types/unist': 2.0.6 - unist-util-is: 5.1.1 - unist-util-visit-parents: 5.1.1 - dev: false - - /universalify/0.1.2: + /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} dev: true - /universalify/0.2.0: + /universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} dev: true - /universalify/2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} - engines: {node: '>= 10.0.0'} - dev: false - - /unixify/1.0.0: + /unixify@1.0.0: resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} engines: {node: '>=0.10.0'} dependencies: normalize-path: 2.1.1 dev: false - /unpipe/1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - dev: true - - /untildify/4.0.0: + /untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} dev: true - /update-browserslist-db/1.0.10_browserslist@4.21.4: - resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} + /update-browserslist-db@1.0.13(browserslist@4.22.2): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.21.4 + browserslist: 4.22.2 escalade: 3.1.1 picocolors: 1.0.0 - /update-check/1.5.4: + /update-check@1.5.4: resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} dependencies: registry-auth-token: 3.3.2 registry-url: 3.1.0 dev: true - /upper-case-first/2.0.2: + /upper-case-first@2.0.2: resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} dependencies: tslib: 2.5.0 + dev: false - /upper-case/2.0.2: + /upper-case@2.0.2: resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} dependencies: tslib: 2.5.0 + dev: false - /uri-js/4.4.1: + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.1.1 - /url-parse/1.5.10: + /url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} dependencies: querystringify: 2.2.0 requires-port: 1.0.0 dev: true - /use-callback-ref/1.3.0_h7fc2el62uaa77gho3xhys6ola: + /use-callback-ref@1.3.0(@types/react@17.0.53)(react@17.0.2): resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} engines: {node: '>=10'} peerDependencies: @@ -14398,39 +12846,7 @@ packages: tslib: 2.5.0 dev: false - /use-debounce/8.0.4_react@17.0.2: - resolution: {integrity: sha512-fGqsYQzl8kLHF2QpQSgIwgOgJmnh6j5L6SIzQiHdLfwp3q1egUL3btq5Bg2SJysH6A0ILLgT2IqXZKoNJr0nFw==} - engines: {node: '>= 10.0.0'} - peerDependencies: - react: '>=16.8.0' - dependencies: - react: 17.0.2 - dev: false - - /use-error-boundary/2.0.6_sfoxds7t5ydpegc3knd667wn6m: - resolution: {integrity: sha512-AWCVKSAanLe6R/on/ZkHYtGKfXs8BQX6z/TUGYqtvkajLqQyrGKJJscbahtq8OyN8L3LqTRjJWx4gCOLmfIObw==} - peerDependencies: - react: '>=16.9.0' - react-dom: '>=16.9.0' - peerDependenciesMeta: - react-dom: - optional: true - dependencies: - react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 - dev: false - - /use-immer/0.6.0_immer@9.0.12+react@17.0.2: - resolution: {integrity: sha512-dFGRfvWCqPDTOt/S431ETYTg6+uxbpb7A1pptufwXVzGJY3RlXr38+3wyLNpc6SbbmAKjWl6+EP6uW74fkEsXQ==} - peerDependencies: - immer: '>=2.0.0' - react: ^16.8.0 || ^17.0.1 - dependencies: - immer: 9.0.12 - react: 17.0.2 - dev: false - - /use-sidecar/1.1.2_h7fc2el62uaa77gho3xhys6ola: + /use-sidecar@1.1.2(@types/react@17.0.53)(react@17.0.2): resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} peerDependencies: @@ -14446,45 +12862,45 @@ packages: tslib: 2.5.0 dev: false - /use-sync-external-store/1.2.0_react@17.0.2: + /use-sync-external-store@1.2.0(patch_hash=zifctuasxutqued7wp7lp4536i)(react@17.0.2): resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: react: 17.0.2 + patched: true - /utf-8-validate/6.0.3: - resolution: {integrity: sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA==} + /use-sync-external-store@1.2.0(patch_hash=zifctuasxutqued7wp7lp4536i)(react@18.2.0): + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + patched: true + + /utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} engines: {node: '>=6.14.2'} requiresBuild: true dependencies: node-gyp-build: 4.5.0 dev: true - /util-deprecate/1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - /utils-merge/1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - dev: true - - /uvu/0.5.6: - resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} - engines: {node: '>=8'} - hasBin: true + /utf-8-validate@6.0.3: + resolution: {integrity: sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA==} + engines: {node: '>=6.14.2'} + requiresBuild: true dependencies: - dequal: 2.0.3 - diff: 5.1.0 - kleur: 4.1.5 - sade: 1.8.1 - dev: false + node-gyp-build: 4.5.0 + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - /v8-compile-cache-lib/3.0.1: + /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true - /v8-to-istanbul/9.0.1: + /v8-to-istanbul@9.0.1: resolution: {integrity: sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==} engines: {node: '>=10.12.0'} dependencies: @@ -14492,68 +12908,29 @@ packages: '@types/istanbul-lib-coverage': 2.0.4 convert-source-map: 1.9.0 - /validate-npm-package-license/3.0.4: + /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: spdx-correct: 3.1.1 spdx-expression-parse: 3.0.1 dev: true - /value-or-promise/1.0.11: + /value-or-promise@1.0.11: resolution: {integrity: sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==} engines: {node: '>=12'} dev: false - /value-or-promise/1.0.12: + /value-or-promise@1.0.12: resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==} engines: {node: '>=12'} - dev: true + dev: false - /vary/1.1.2: + /vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + dev: true - /vfile-location/4.0.1: - resolution: {integrity: sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==} - dependencies: - '@types/unist': 2.0.6 - vfile: 5.3.5 - dev: false - - /vfile-matter/3.0.1: - resolution: {integrity: sha512-CAAIDwnh6ZdtrqAuxdElUqQRQDQgbbIrYtDYI8gCjXS1qQ+1XdLoK8FIZWxJwn0/I+BkSSZpar3SOgjemQz4fg==} - dependencies: - '@types/js-yaml': 4.0.5 - is-buffer: 2.0.5 - js-yaml: 4.1.0 - dev: false - - /vfile-message/3.1.2: - resolution: {integrity: sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==} - dependencies: - '@types/unist': 2.0.6 - unist-util-stringify-position: 3.0.2 - dev: false - - /vfile/5.3.2: - resolution: {integrity: sha512-w0PLIugRY3Crkgw89TeMvHCzqCs/zpreR31hl4D92y6SOE07+bfJe+dK5Q2akwS+i/c801kzjoOr9gMcTe6IAA==} - dependencies: - '@types/unist': 2.0.6 - is-buffer: 2.0.5 - unist-util-stringify-position: 3.0.2 - vfile-message: 3.1.2 - dev: false - - /vfile/5.3.5: - resolution: {integrity: sha512-U1ho2ga33eZ8y8pkbQLH54uKqGhFJ6GYIHnnG5AhRpAh3OWjkrRHKa/KogbmQn8We+c0KVV3rTOgR9V/WowbXQ==} - dependencies: - '@types/unist': 2.0.6 - is-buffer: 2.0.5 - unist-util-stringify-position: 3.0.2 - vfile-message: 3.1.2 - dev: false - - /vite/4.2.1_@types+node@18.15.5: + /vite@4.2.1(@types/node@18.19.6): resolution: {integrity: sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -14578,40 +12955,27 @@ packages: terser: optional: true dependencies: - '@types/node': 18.15.5 - esbuild: 0.17.12 + '@types/node': 18.19.6 + esbuild: 0.17.19 postcss: 8.4.21 - resolve: 1.22.1 + resolve: 1.22.8 rollup: 3.19.1 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true - /void-elements/3.1.0: - resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} - engines: {node: '>=0.10.0'} - dev: false - - /vscode-oniguruma/1.7.0: - resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} - dev: false - - /vscode-textmate/8.0.0: - resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} - dev: false - - /w3c-xmlserializer/3.0.0: + /w3c-xmlserializer@3.0.0: resolution: {integrity: sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==} engines: {node: '>=12'} dependencies: xml-name-validator: 4.0.0 dev: true - /wait-for-expect/3.0.2: + /wait-for-expect@3.0.2: resolution: {integrity: sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag==} dev: false - /wait-on/7.0.1: + /wait-on@7.0.1: resolution: {integrity: sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog==} engines: {node: '>=12.0.0'} hasBin: true @@ -14625,77 +12989,80 @@ packages: - debug dev: true - /walker/1.0.8: + /walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: makeerror: 1.0.12 - /warning/4.0.3: + /warning@4.0.3: resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==} dependencies: loose-envify: 1.4.0 dev: false - /wcwidth/1.0.1: + /watchpack@2.4.0: + resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + engines: {node: '>=10.13.0'} + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.10 + dev: false + + /wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 - dev: true - /web-streams-polyfill/3.2.1: + /web-streams-polyfill@3.2.1: resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} engines: {node: '>= 8'} + dev: false - /web-streams-polyfill/4.0.0-beta.3: + /web-streams-polyfill@4.0.0-beta.3: resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} engines: {node: '>= 14'} dev: false - /webidl-conversions/3.0.1: + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - /webidl-conversions/7.0.0: + /webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} dev: true - /webpack-bundle-analyzer/4.3.0: - resolution: {integrity: sha512-J3TPm54bPARx6QG8z4cKBszahnUglcv70+N+8gUqv2I5KOFHJbzBiLx+pAp606so0X004fxM7hqRu10MLjJifA==} + /webpack-bundle-analyzer@4.7.0(bufferutil@4.0.7)(utf-8-validate@5.0.10): + resolution: {integrity: sha512-j9b8ynpJS4K+zfO5GGwsAcQX4ZHpWV+yRiHDiL+bE0XHJ8NiPYLTNVQdlFYWxtpg9lfAQNlwJg16J9AJtFSXRg==} engines: {node: '>= 10.13.0'} hasBin: true dependencies: - acorn: 8.8.1 + acorn: 8.11.3 acorn-walk: 8.2.0 chalk: 4.1.2 - commander: 6.2.1 + commander: 7.2.0 gzip-size: 6.0.0 lodash: 4.17.21 opener: 1.5.2 sirv: 1.0.19 - ws: 7.5.9 + ws: 7.5.9(bufferutil@4.0.7)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate dev: true - /well-known-symbols/2.0.0: - resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==} - engines: {node: '>=6'} - dev: true - - /whatwg-encoding/2.0.0: + /whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} dependencies: iconv-lite: 0.6.3 dev: true - /whatwg-mimetype/3.0.0: + /whatwg-mimetype@3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} dev: true - /whatwg-url/11.0.0: + /whatwg-url@11.0.0: resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} engines: {node: '>=12'} dependencies: @@ -14703,13 +13070,13 @@ packages: webidl-conversions: 7.0.0 dev: true - /whatwg-url/5.0.0: + /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - /which-boxed-primitive/1.0.2: + /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: is-bigint: 1.0.4 @@ -14719,7 +13086,25 @@ packages: is-symbol: 1.0.4 dev: true - /which-collection/1.0.1: + /which-builtin-type@1.1.3: + resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + engines: {node: '>= 0.4'} + dependencies: + function.prototype.name: 1.1.6 + has-tostringtag: 1.0.0 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.0.2 + is-generator-function: 1.0.10 + is-regex: 1.1.4 + is-weakref: 1.0.2 + isarray: 2.0.5 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.13 + dev: true + + /which-collection@1.0.1: resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} dependencies: is-map: 2.0.2 @@ -14728,10 +13113,10 @@ packages: is-weakset: 2.0.2 dev: true - /which-module/2.0.0: + /which-module@2.0.0: resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} - /which-pm/2.0.0: + /which-pm@2.0.0: resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} engines: {node: '>=8.15'} dependencies: @@ -14739,45 +13124,44 @@ packages: path-exists: 4.0.0 dev: true - /which-typed-array/1.1.8: - resolution: {integrity: sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==} + /which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-abstract: 1.20.4 + call-bind: 1.0.5 for-each: 0.3.3 + gopd: 1.0.1 has-tostringtag: 1.0.0 - is-typed-array: 1.1.9 dev: true - /which/1.3.1: + /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true dependencies: isexe: 2.0.0 dev: true - /which/2.0.2: + /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true dependencies: isexe: 2.0.0 - /widest-line/4.0.1: + /widest-line@4.0.1: resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} engines: {node: '>=12'} dependencies: string-width: 5.1.2 dev: true - /word-wrap/1.2.3: + /word-wrap@1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true - /wrap-ansi/6.2.0: + /wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} dependencies: @@ -14785,7 +13169,7 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 - /wrap-ansi/7.0.0: + /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} dependencies: @@ -14793,8 +13177,8 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 - /wrap-ansi/8.0.1: - resolution: {integrity: sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==} + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} dependencies: ansi-styles: 6.2.1 @@ -14802,25 +13186,17 @@ packages: strip-ansi: 7.0.1 dev: true - /wrappy/1.0.2: + /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - /write-file-atomic/4.0.2: + /write-file-atomic@4.0.2: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 - /write-file-atomic/5.0.0: - resolution: {integrity: sha512-R7NYMnHSlV42K54lwY9lvW6MnSm1HSJqZL3xiSgi9E7//FYaI74r2G0rd+/X6VAMkHEdzxQaU5HUOXWUz5kA/w==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - dev: true - - /ws/7.5.9: + /ws@7.5.9(bufferutil@4.0.7)(utf-8-validate@5.0.10): resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} engines: {node: '>=8.3.0'} peerDependencies: @@ -14831,21 +13207,12 @@ packages: optional: true utf-8-validate: optional: true + dependencies: + bufferutil: 4.0.7 + utf-8-validate: 5.0.10 dev: true - /ws/8.11.0: - resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - /ws/8.13.0: + /ws@8.13.0(bufferutil@4.0.7)(utf-8-validate@6.0.3): resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} engines: {node: '>=10.0.0'} peerDependencies: @@ -14856,8 +13223,11 @@ packages: optional: true utf-8-validate: optional: true + dependencies: + bufferutil: 4.0.7 + utf-8-validate: 6.0.3 - /xdg-default-browser/2.1.0: + /xdg-default-browser@2.1.0: resolution: {integrity: sha512-HY4G725+IDQr16N8XOjAms5qJGArdJaWIuC7Q7A8UXIwj2mifqnPXephazyL7sIkQPvmEoPX3E0v2yFv6hQUNg==} engines: {node: '>=4'} dependencies: @@ -14865,56 +13235,54 @@ packages: titleize: 1.0.1 dev: true - /xml-name-validator/4.0.0: + /xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} dev: true - /xmlchars/2.2.0: + /xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true - /xtend/4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - dev: false - - /y18n/4.0.3: + /y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - /y18n/5.0.8: + /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - /yallist/2.1.2: + /yallist@2.1.2: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} dev: true - /yallist/4.0.0: + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - /yaml/1.10.2: + /yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} dev: false - /yargs-parser/18.1.3: + /yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + engines: {node: '>= 14'} + dev: true + + /yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} dependencies: camelcase: 5.3.1 decamelize: 1.2.0 - /yargs-parser/20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - dev: true - - /yargs-parser/21.1.1: + /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - /yargs/15.4.1: + /yargs@15.4.1: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} engines: {node: '>=8'} dependencies: @@ -14930,20 +13298,7 @@ packages: y18n: 4.0.3 yargs-parser: 18.1.3 - /yargs/16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - dependencies: - cliui: 7.0.4 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 20.2.9 - dev: true - - /yargs/17.6.2: + /yargs@17.6.2: resolution: {integrity: sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==} engines: {node: '>=12'} dependencies: @@ -14955,66 +13310,19 @@ packages: y18n: 5.0.8 yargs-parser: 21.1.1 - /yn/3.1.1: + /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} - dev: true - /yocto-queue/0.1.0: + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - /yocto-queue/1.0.0: + /yocto-queue@1.0.0: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} dev: true - /zustand/3.7.2_react@17.0.2: - resolution: {integrity: sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==} - engines: {node: '>=12.7.0'} - peerDependencies: - react: '>=16.8' - peerDependenciesMeta: - react: - optional: true - dependencies: - react: 17.0.2 - dev: false - - /zwitch/2.0.2: - resolution: {integrity: sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==} + /zod@3.21.4: + resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} dev: false - - file:packages/cli_graphql@17.0.0-alpha.2: - resolution: {directory: packages/cli, type: directory} - id: file:packages/cli - name: '@gqty/cli' - version: 3.3.0 - engines: {node: ^12.20.0 || >=14.13.0} - hasBin: true - peerDependencies: - graphql: '*' - peerDependenciesMeta: - graphql: - optional: true - dependencies: - gqty: link:packages/gqty - graphql: 17.0.0-alpha.2 - undici: 5.7.0 - dev: true - - file:packages/gqty_graphql@17.0.0-alpha.2: - resolution: {directory: packages/gqty, type: directory} - id: file:packages/gqty - name: gqty - version: 2.3.0 - engines: {node: ^12.20.0 || >=14.13.0} - peerDependencies: - graphql: '*' - peerDependenciesMeta: - graphql: - optional: true - dependencies: - '@gqty/utils': link:packages/utils - graphql: 17.0.0-alpha.2 - dev: true diff --git a/renovate.json b/renovate.json index 3567d7de8..c6ba43b68 100644 --- a/renovate.json +++ b/renovate.json @@ -15,5 +15,6 @@ "platformAutomerge": true } ], - "ignoreDeps": ["pnpm"] + "ignoreDeps": ["pnpm"], + "enabled": false } diff --git a/scripts/canary-release.cjs b/scripts/canary-release.cjs deleted file mode 100644 index 4f002e749..000000000 --- a/scripts/canary-release.cjs +++ /dev/null @@ -1,103 +0,0 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ -const semver = require('semver'); -const cp = require('child_process'); -const { basename } = require('path'); - -const { read: readConfig } = require('@changesets/config'); -const readChangesets = require('@changesets/read').default; -const assembleReleasePlan = - require('@changesets/assemble-release-plan').default; -const applyReleasePlan = require('@changesets/apply-release-plan').default; -const { getPackages } = require('@manypkg/get-packages'); - -function getNewVersion(version, type) { - const gitHash = cp - .spawnSync('git', ['rev-parse', '--short', 'HEAD']) - .stdout.toString() - .trim(); - - return semver.inc(version, `pre${type}`, true, 'alpha-' + gitHash); -} - -function getRelevantChangesets(baseBranch) { - const comparePoint = cp - .spawnSync('git', ['merge-base', `origin/${baseBranch}`, 'HEAD']) - .stdout.toString() - .trim(); - console.log('compare point', comparePoint); - const listModifiedFiles = cp - .spawnSync('git', ['diff', '--name-only', comparePoint]) - .stdout.toString() - .trim() - .split('\n'); - console.log('listModifiedFiles', listModifiedFiles); - - const items = listModifiedFiles - .filter((f) => f.startsWith('.changeset')) - .map((f) => basename(f, '.md')); - console.log('items', items); - - return items; -} - -async function updateVersions() { - const cwd = process.cwd(); - const packages = await getPackages(cwd); - const config = await readConfig(cwd, packages); - const modifiedChangesets = getRelevantChangesets(config.baseBranch); - const changesets = (await readChangesets(cwd)).filter((change) => - modifiedChangesets.includes(change.id) - ); - - if (changesets.length === 0) { - console.warn( - `Unable to find any relevant package for canary publishing. Please make sure changesets exists!` - ); - process.exit(0); - } else { - const releasePlan = assembleReleasePlan( - changesets, - packages, - config, - [], - false - ); - - if (releasePlan.releases.length === 0) { - console.warn( - `Unable to find any relevant package for canary releasing. Please make sure changesets exists!` - ); - process.exit(0); - } else { - for (const release of releasePlan.releases) { - if (release.type !== 'none') { - release.newVersion = getNewVersion(release.oldVersion, release.type); - } - } - - await applyReleasePlan( - releasePlan, - packages, - { - ...config, - commit: false, - }, - false, - true - ); - - cp.execSync(`pnpm ci:release`, { - stdio: 'inherit', - }); - } - } -} - -updateVersions() - .then(() => { - console.info(`Done!`); - }) - .catch((err) => { - console.error(err); - process.exit(1); - }); diff --git a/tsconfig.json b/tsconfig.json index fe54c7682..09c122fd3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,33 +1,31 @@ { "compilerOptions": { - "rootDir": ".", - "outDir": "dist", + "allowJs": false, + "baseUrl": ".", "declaration": true, - "target": "esnext", - "module": "esnext", - "strict": true, "esModuleInterop": true, - "allowJs": false, "jsx": "preserve", - "resolveJsonModule": true, - "skipLibCheck": true, - "noUnusedLocals": true, + "module": "esnext", "moduleResolution": "node", - "noUnusedParameters": true, - "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, - "baseUrl": ".", + "noImplicitReturns": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "outDir": "dist", "paths": { - "gqty": ["packages/gqty/src/index.ts"], - "gqty/*": ["packages/gqty/src/*"], "@gqty/cli": ["packages/cli/src/index.ts"], "@gqty/cli/*": ["packages/cli/src/*"], - "@gqty/utils/sha1": ["packages/utils/lib/sha1.ts"], - "@gqty/utils/mergeWith": ["packages/utils/lib/mergeWith.ts"], + "gqty": ["packages/gqty/src/index.ts"], + "gqty/*": ["packages/gqty/src/*"], "test-utils": ["internal/test-utils/src/index.ts"] }, - "importsNotUsedAsValues": "error" + "resolveJsonModule": true, + "rootDir": ".", + "skipLibCheck": true, + "strict": true, + "target": "esnext", + "verbatimModuleSyntax": true }, - "include": ["packages", "internal"], - "exclude": ["**/dist", "**/test", "**/website", "**/docs-website"] + "exclude": ["**/dist", "**/test", "**/website", "**/docs-website"], + "include": ["packages", "internal"] }