diff --git a/.changeset/spotty-toes-help.md b/.changeset/spotty-toes-help.md new file mode 100644 index 00000000000..35727079b16 --- /dev/null +++ b/.changeset/spotty-toes-help.md @@ -0,0 +1,12 @@ +--- +'@graphql-hive/yoga': patch +--- + +Align with the latest yoga; + +- Remove \`tiny-lru\` dependency, and use `createLruCache` from `graphql-yoga` +- Use Explicit Resource Management of GraphQL Yoga plugins for disposal which already respect Node.js process termination +- Use \`context.waitUntil\` which is handled by the environment automatically, if not `@whatwg-node/server` already takes care of it with above. +- Respect the given `fetchAPI` by GraphQL Yoga(might be Hive Gateway) for the `fetch` function +- Avoid using `async/await` for performance reasons, because in case of cache-hit, it returns synchronously +- Respect Yoga's \`logger\` for logging \ No newline at end of file diff --git a/packages/libraries/core/src/client/persisted-documents.ts b/packages/libraries/core/src/client/persisted-documents.ts index 0c5b19c51c3..7fa54669b4b 100644 --- a/packages/libraries/core/src/client/persisted-documents.ts +++ b/packages/libraries/core/src/client/persisted-documents.ts @@ -12,7 +12,7 @@ export function createPersistedDocuments( logger: Logger; }, ): null | { - resolve(documentId: string): Promise; + resolve(documentId: string): Promise | string; allowArbitraryDocuments(context: { headers?: HeadersObject }): PromiseOrValue; } { const persistedDocumentsCache = LRU(config.cache ?? 10_000); @@ -32,7 +32,7 @@ export function createPersistedDocuments( const fetchCache = new Map>(); /** Batch load a persisted documents */ - async function loadPersistedDocument(documentId: string) { + function loadPersistedDocument(documentId: string) { const document = persistedDocumentsCache.get(documentId); if (document) { return document; diff --git a/packages/libraries/yoga/package.json b/packages/libraries/yoga/package.json index b23167753c3..0944e471d70 100644 --- a/packages/libraries/yoga/package.json +++ b/packages/libraries/yoga/package.json @@ -44,12 +44,11 @@ }, "peerDependencies": { "graphql": "^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", - "graphql-yoga": "^5.9.0" + "graphql-yoga": "^5.10.4" }, "dependencies": { "@graphql-hive/core": "workspace:*", - "@graphql-yoga/plugin-persisted-operations": "^3.9.0", - "tiny-lru": "8.0.2" + "@graphql-yoga/plugin-persisted-operations": "^3.9.0" }, "devDependencies": { "@graphql-tools/schema": "10.0.8", @@ -59,7 +58,7 @@ "@graphql-yoga/plugin-response-cache": "3.9.0", "@whatwg-node/fetch": "0.9.22", "graphql-ws": "5.16.0", - "graphql-yoga": "5.9.0", + "graphql-yoga": "5.10.5", "nock": "14.0.0-beta.7", "vitest": "2.0.5", "ws": "8.18.0" diff --git a/packages/libraries/yoga/src/index.ts b/packages/libraries/yoga/src/index.ts index 2510cdfd3ca..5cf4e38e3b4 100644 --- a/packages/libraries/yoga/src/index.ts +++ b/packages/libraries/yoga/src/index.ts @@ -1,6 +1,5 @@ import { DocumentNode, ExecutionArgs, GraphQLError, GraphQLSchema, Kind, parse } from 'graphql'; -import type { GraphQLParams, Plugin } from 'graphql-yoga'; -import LRU from 'tiny-lru'; +import { createLRUCache, type GraphQLParams, type Plugin, type YogaLogger, mapMaybePromise, DisposableSymbols } from 'graphql-yoga'; import { autoDisposeSymbol, CollectUsageCallback, @@ -42,31 +41,30 @@ export function createHive(clientOrOptions: HivePluginOptions) { export function useHive(clientOrOptions: HiveClient): Plugin; export function useHive(clientOrOptions: HivePluginOptions): Plugin; export function useHive(clientOrOptions: HiveClient | HivePluginOptions): Plugin { - const hive = isHiveClient(clientOrOptions) ? clientOrOptions : createHive(clientOrOptions); - void hive.info(); - - if (hive[autoDisposeSymbol]) { - if (global.process) { - const signals = Array.isArray(hive[autoDisposeSymbol]) - ? hive[autoDisposeSymbol] - : ['SIGINT', 'SIGTERM']; - for (const signal of signals) { - process.once(signal, () => hive.dispose()); - } - } else { - console.error( - 'It seems that GraphQL Hive is not being executed in Node.js. ' + - 'Please attempt manual client disposal and use autoDispose: false option.', - ); - } - } - - const parsedDocumentCache = LRU(10_000); + const parsedDocumentCache = createLRUCache(); let latestSchema: GraphQLSchema | null = null; const contextualCache = new WeakMap(); + let hive: HiveClient; + let logger: YogaLogger; return { + onYogaInit({ yoga }) { + logger = yoga.logger; + hive = isHiveClient(clientOrOptions) ? clientOrOptions : createHive({ + ...clientOrOptions, + agent: clientOrOptions.agent ? { + logger: yoga.logger, + ...clientOrOptions.agent, + __testing: { + ...clientOrOptions.agent.__testing, + // Hive Plugin should respect the given FetchAPI, note that this is not `yoga.fetch` + fetch: yoga.fetchAPI.fetch, + }, + } : undefined, + }); + void hive.info(); + }, onSchemaChange({ schema }) { hive.reportSchema({ schema }); latestSchema = schema; @@ -103,13 +101,15 @@ export function useHive(clientOrOptions: HiveClient | HivePluginOptions): Plugin record.executionArgs = args; if (!isAsyncIterable(result)) { - void record.callback( - { - ...record.executionArgs, - document: record.parsedDocument ?? record.executionArgs.document, - }, - result, - record.experimental__documentId, + args.contextValue.waitUntil( + record.callback( + { + ...record.executionArgs, + document: record.parsedDocument ?? record.executionArgs.document, + }, + result, + record.experimental__documentId, + ) ); return; } @@ -124,10 +124,12 @@ export function useHive(clientOrOptions: HiveClient | HivePluginOptions): Plugin errors.push(...ctx.result.errors); }, onEnd() { - void record.callback( - args, - errors.length ? { errors } : {}, - record.experimental__documentId, + args.contextValue.waitUntil( + record.callback( + args, + errors.length ? { errors } : {}, + record.experimental__documentId, + ) ); }, }; @@ -147,13 +149,16 @@ export function useHive(clientOrOptions: HiveClient | HivePluginOptions): Plugin }, }; }, - onResultProcess(context) { - const record = contextualCache.get(context.serverContext); + onResultProcess({ + serverContext, + result, + }) { + const record = contextualCache.get(serverContext); if ( !record || - Array.isArray(context.result) || - isAsyncIterable(context.result) || + Array.isArray(result) || + isAsyncIterable(result) || record.executionArgs ) { return; @@ -163,7 +168,7 @@ export function useHive(clientOrOptions: HiveClient | HivePluginOptions): Plugin if ( record.paramsArgs.query && latestSchema && - Symbol.for('servedFromResponseCache') in context.result + Symbol.for('servedFromResponseCache') in result ) { try { let document = parsedDocumentCache.get(record.paramsArgs.query); @@ -171,18 +176,20 @@ export function useHive(clientOrOptions: HiveClient | HivePluginOptions): Plugin document = parse(record.paramsArgs.query); parsedDocumentCache.set(record.paramsArgs.query, document); } - void record.callback( - { - document, - schema: latestSchema, - variableValues: record.paramsArgs.variables, - operationName: record.paramsArgs.operationName, - }, - context.result, - record.experimental__documentId, + serverContext.waitUntil( + record.callback( + { + document, + schema: latestSchema, + variableValues: record.paramsArgs.variables, + operationName: record.paramsArgs.operationName, + }, + result, + record.experimental__documentId, + ) ); } catch (err) { - console.error(err); + logger.error(err); } } }, @@ -206,21 +213,21 @@ export function useHive(clientOrOptions: HiveClient | HivePluginOptions): Plugin return null; }, - async getPersistedOperation(key, request, context) { - const document = await experimental__persistedDocuments.resolve(key); - // after we resolve the document we need to update the cache record to contain the resolved document - if (document) { - const record = contextualCache.get(context); - if (record) { - record.experimental__documentId = key; - record.paramsArgs = { - ...record.paramsArgs, - query: document, - }; + getPersistedOperation(key, _request, context) { + return mapMaybePromise(experimental__persistedDocuments.resolve(key), document => { + // after we resolve the document we need to update the cache record to contain the resolved document + if (document) { + const record = contextualCache.get(context); + if (record) { + record.experimental__documentId = key; + record.paramsArgs = { + ...record.paramsArgs, + query: document, + }; + } } - } - - return document; + return document; + }) as Promise; }, allowArbitraryOperations(request) { return experimental__persistedDocuments.allowArbitraryDocuments({ @@ -247,5 +254,10 @@ export function useHive(clientOrOptions: HiveClient | HivePluginOptions): Plugin }), ); }, + [DisposableSymbols.asyncDispose]() { + if (hive[autoDisposeSymbol]) { + return hive.dispose(); + } + } }; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 333f39c7fba..ae93e6d9ab1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -541,29 +541,26 @@ importers: version: link:../core/dist '@graphql-yoga/plugin-persisted-operations': specifier: ^3.9.0 - version: 3.9.0(@graphql-tools/utils@10.5.6(graphql@16.9.0))(graphql-yoga@5.9.0(graphql@16.9.0))(graphql@16.9.0) + version: 3.9.0(@graphql-tools/utils@10.6.3(graphql@16.9.0))(graphql-yoga@5.10.5(graphql@16.9.0))(graphql@16.9.0) graphql: specifier: ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 version: 16.9.0 - tiny-lru: - specifier: 8.0.2 - version: 8.0.2 devDependencies: '@graphql-tools/schema': specifier: 10.0.8 version: 10.0.8(graphql@16.9.0) '@graphql-yoga/plugin-defer-stream': specifier: 3.7.0 - version: 3.7.0(graphql-yoga@5.9.0(graphql@16.9.0))(graphql@16.9.0) + version: 3.7.0(graphql-yoga@5.10.5(graphql@16.9.0))(graphql@16.9.0) '@graphql-yoga/plugin-disable-introspection': specifier: 2.7.0 - version: 2.7.0(graphql-yoga@5.9.0(graphql@16.9.0))(graphql@16.9.0) + version: 2.7.0(graphql-yoga@5.10.5(graphql@16.9.0))(graphql@16.9.0) '@graphql-yoga/plugin-graphql-sse': specifier: 3.7.0 - version: 3.7.0(graphql-yoga@5.9.0(graphql@16.9.0))(graphql@16.9.0) + version: 3.7.0(graphql-yoga@5.10.5(graphql@16.9.0))(graphql@16.9.0) '@graphql-yoga/plugin-response-cache': specifier: 3.9.0 - version: 3.9.0(@envelop/core@5.0.2)(graphql-yoga@5.9.0(graphql@16.9.0))(graphql@16.9.0) + version: 3.9.0(@envelop/core@5.0.2)(graphql-yoga@5.10.5(graphql@16.9.0))(graphql@16.9.0) '@whatwg-node/fetch': specifier: 0.9.22 version: 0.9.22 @@ -571,8 +568,8 @@ importers: specifier: 5.16.0 version: 5.16.0(graphql@16.9.0) graphql-yoga: - specifier: 5.9.0 - version: 5.9.0(graphql@16.9.0) + specifier: 5.10.5 + version: 5.10.5(graphql@16.9.0) nock: specifier: 14.0.0-beta.7 version: 14.0.0-beta.7 @@ -1181,7 +1178,7 @@ importers: version: link:../../libraries/yoga/dist '@graphql-yoga/plugin-persisted-operations': specifier: 3.9.0 - version: 3.9.0(@graphql-tools/utils@10.5.6(graphql@16.9.0))(graphql-yoga@5.9.0(graphql@16.9.0))(graphql@16.9.0) + version: 3.9.0(@graphql-tools/utils@10.6.3(graphql@16.9.0))(graphql-yoga@5.9.0(graphql@16.9.0))(graphql@16.9.0) '@graphql-yoga/plugin-response-cache': specifier: 3.9.0 version: 3.9.0(@envelop/core@5.0.2)(graphql-yoga@5.9.0(graphql@16.9.0))(graphql@16.9.0) @@ -4285,6 +4282,12 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/executor@1.3.8': + resolution: {integrity: sha512-tiZ8/PaQ+wkdZeCSyHa7vOUqCJndnpnN5ilUpi5UwsFrFFyN71sr4NJeib7Txf1VdufJNB4ed/0yFd39O0L3AQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/git-loader@8.0.1': resolution: {integrity: sha512-ivNtxD+iEfpPONYKip0kbpZMRdMCNR3HrIui8NCURmUdvBYGaGcbB3VrGMhxwZuzc+ybhs2ralPt1F8Oxq2jLA==} engines: {node: '>=16.0.0'} @@ -4363,6 +4366,12 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/merge@9.0.13': + resolution: {integrity: sha512-OSEOaFOjdkAwR6umRHrTrKjYANbh/0OBb1W8B21dxu8XPaOeoCuShDGXY6ZpragiO8Ke0qFXZGwJGg8ZbDPfvQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/merge@9.0.8': resolution: {integrity: sha512-RG9NEp4fi0MoFi0te4ahqTMYuavQnXlpEZxxMomdCa6CI5tfekcVm/rsLF5Zt8O4HY+esDt9+4dCL+aOKvG79w==} engines: {node: '>=16.0.0'} @@ -4399,6 +4408,12 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/schema@10.0.12': + resolution: {integrity: sha512-ukIZBdD4jI94ren5GK6nnHe+YvDVOfoI8cz50pdE1+FYf9NSFUu7HJXmIBHGIIWFbE5lz4qb5MfUeuBkffs3lw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/schema@10.0.8': resolution: {integrity: sha512-jkCSq+DdT6Rf/MN3oVz250AMFWZO0E5kh0C2K+kJfS80iBW7/7kLjiSbKz+WD9UBtsJPW2zyzKYC4ylU4jmnLw==} engines: {node: '>=16.0.0'} @@ -4451,6 +4466,12 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/utils@10.6.3': + resolution: {integrity: sha512-hEaQTGyQUG3DJqCaIsiu4M+jUgWUf+h6kDwC8MtGElwkL1HWi+qX2qyynw8h9WoV7STmmHDSwkk2ET1IC3nRPw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/utils@9.2.1': resolution: {integrity: sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==} peerDependencies: @@ -4536,6 +4557,10 @@ packages: resolution: {integrity: sha512-1wCB1DfAnaLzS+IdoOzELGGnx1ODEg9nzQXFh4u2j02vAnne6d+v4A7HIH9EqzVdPLoAaMKXCZUUdKs+j3z1fg==} engines: {node: '>=18.0.0'} + '@graphql-yoga/subscription@5.0.2': + resolution: {integrity: sha512-KGacW1FtUXR5e3qk4YmEFQRGTov8lOkpW7syjTD3EN2t5HRWrSsut2LwjVdK+HcP3H9UEuZ9RXw/+shqV+1exQ==} + engines: {node: '>=18.0.0'} + '@graphql-yoga/typed-event-target@2.0.0': resolution: {integrity: sha512-oA/VGxGmaSDym1glOHrltw43qZsFwLLjBwvh57B79UKX/vo3+UQcRgOyE44c5RP7DCYjkrC2tuArZmb6jCzysw==} engines: {node: '>=16.0.0'} @@ -4544,6 +4569,10 @@ packages: resolution: {integrity: sha512-w+liuBySifrstuHbFrHoHAEyVnDFVib+073q8AeAJ/qqJfvFvAwUPLLtNohR/WDVRgSasfXtl3dcNuVJWN+rjg==} engines: {node: '>=18.0.0'} + '@graphql-yoga/typed-event-target@3.0.1': + resolution: {integrity: sha512-SWVkyFivzlDqGTBrGTWTNg+aFGP/cIiotirUFnvwuUGt2gla6UJoKhII6aPoHNg3/5vpUAL1KzyoaXMK2PO0JA==} + engines: {node: '>=18.0.0'} + '@grpc/grpc-js@1.10.9': resolution: {integrity: sha512-5tcgUctCG0qoNyfChZifz2tJqbRbXVO9J7X6duFcOjY3HUNCxg5D0ZCK7EP9vIcZ0zRpLU9bWkyCqVCLZ46IbQ==} engines: {node: '>=12.10.0'} @@ -8056,6 +8085,10 @@ packages: '@webassemblyjs/wast-printer@1.12.1': resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} + '@whatwg-node/disposablestack@0.0.5': + resolution: {integrity: sha512-9lXugdknoIequO4OYvIjhygvfSEgnO8oASLqLelnDhkRjgBZhc39shC3QSlZuyDO9bgYSIVa2cHAiN+St3ty4w==} + engines: {node: '>=18.0.0'} + '@whatwg-node/events@0.0.3': resolution: {integrity: sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA==} @@ -8063,6 +8096,10 @@ packages: resolution: {integrity: sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==} engines: {node: '>=16.0.0'} + '@whatwg-node/fetch@0.10.1': + resolution: {integrity: sha512-gmPOLrsjSZWEZlr9Oe5+wWFBq3CG6fN13rGlM91Jsj/vZ95G9CCvrORGBAxMXy0AJGiC83aYiHXn3JzTzXQmbA==} + engines: {node: '>=18.0.0'} + '@whatwg-node/fetch@0.8.8': resolution: {integrity: sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg==} @@ -8077,10 +8114,18 @@ packages: resolution: {integrity: sha512-0OaMj5W4fzWimRSFq07qFiWfquaUMNB+695GwE76LYKVuah+jwCdzSgsIOtwPkiyJ35w0XGhXmJPiIJCdLwopg==} engines: {node: '>=18.0.0'} + '@whatwg-node/node-fetch@0.7.5': + resolution: {integrity: sha512-t7kGrt2fdfNvzy1LCAE9/OnIyMtizgFhgJmk7iLJwQsLmR7S86F8Q4aDRPbCfo7pISJP6Fx/tPdfFNjHS23WTA==} + engines: {node: '>=18.0.0'} + '@whatwg-node/server@0.9.50': resolution: {integrity: sha512-7Vd8k6iu+ps8bkZT+Y/wPm42EDh8KojAL+APKa79mntgkyPtdq0r1//CO+0eYqQBz6HGrDxHRT4KChSOy4jGIw==} engines: {node: '>=18.0.0'} + '@whatwg-node/server@0.9.63': + resolution: {integrity: sha512-rHBN2murCcuuhQru/AQjA13lA9SzQAH9k8ENy4iZrAmY+C0yFYPud3HiFgPUgzR1B2KYUpIYKwC1UAUlkzASOQ==} + engines: {node: '>=18.0.0'} + '@xtuc/ieee754@1.2.0': resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} @@ -10710,6 +10755,12 @@ packages: peerDependencies: graphql: ^15.2.0 || ^16.0.0 + graphql-yoga@5.10.5: + resolution: {integrity: sha512-W5bpXHRb6S3H3Th8poDm6b+ZMRjke8hsy9WVFgRriDTGh0AenIkpJzZT5VgXUD+j1yLCMrvhUNc6MNmgaRExsw==} + engines: {node: '>=18.0.0'} + peerDependencies: + graphql: ^15.2.0 || ^16.0.0 + graphql-yoga@5.9.0: resolution: {integrity: sha512-zeSu77bnl+id+MaKpS8dQPA9Dix0DgdibWM5GFrQxKBwrdpW9XOH33ofrZvs+BXVici+pJvuxo+LeUpHopiBrg==} engines: {node: '>=18.0.0'} @@ -19161,6 +19212,16 @@ snapshots: tslib: 2.8.1 value-or-promise: 1.0.12 + '@graphql-tools/executor@1.3.8(graphql@16.9.0)': + dependencies: + '@graphql-tools/utils': 10.6.3(graphql@16.9.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) + '@repeaterjs/repeater': 3.0.6 + '@whatwg-node/disposablestack': 0.0.5 + graphql: 16.9.0 + tslib: 2.8.1 + value-or-promise: 1.0.12 + '@graphql-tools/git-loader@8.0.1(@babel/core@7.22.9)(graphql@16.9.0)': dependencies: '@graphql-tools/graphql-tag-pluck': 8.0.1(@babel/core@7.22.9)(graphql@16.9.0) @@ -19311,6 +19372,12 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 + '@graphql-tools/merge@9.0.13(graphql@16.9.0)': + dependencies: + '@graphql-tools/utils': 10.6.3(graphql@16.9.0) + graphql: 16.9.0 + tslib: 2.8.1 + '@graphql-tools/merge@9.0.8(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.5.6(graphql@16.9.0) @@ -19374,6 +19441,14 @@ snapshots: - encoding - supports-color + '@graphql-tools/schema@10.0.12(graphql@16.9.0)': + dependencies: + '@graphql-tools/merge': 9.0.13(graphql@16.9.0) + '@graphql-tools/utils': 10.6.3(graphql@16.9.0) + graphql: 16.9.0 + tslib: 2.8.1 + value-or-promise: 1.0.12 + '@graphql-tools/schema@10.0.8(graphql@16.9.0)': dependencies: '@graphql-tools/merge': 9.0.9(graphql@16.9.0) @@ -19477,6 +19552,14 @@ snapshots: graphql: 16.9.0 tslib: 2.8.1 + '@graphql-tools/utils@10.6.3(graphql@16.9.0)': + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) + cross-inspect: 1.0.1 + dset: 3.1.4 + graphql: 16.9.0 + tslib: 2.8.1 + '@graphql-tools/utils@9.2.1(graphql@16.9.0)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) @@ -19522,29 +19605,43 @@ snapshots: dependencies: tslib: 2.8.1 - '@graphql-yoga/plugin-defer-stream@3.7.0(graphql-yoga@5.9.0(graphql@16.9.0))(graphql@16.9.0)': + '@graphql-yoga/plugin-defer-stream@3.7.0(graphql-yoga@5.10.5(graphql@16.9.0))(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.5.6(graphql@16.9.0) graphql: 16.9.0 - graphql-yoga: 5.9.0(graphql@16.9.0) + graphql-yoga: 5.10.5(graphql@16.9.0) - '@graphql-yoga/plugin-disable-introspection@2.7.0(graphql-yoga@5.9.0(graphql@16.9.0))(graphql@16.9.0)': + '@graphql-yoga/plugin-disable-introspection@2.7.0(graphql-yoga@5.10.5(graphql@16.9.0))(graphql@16.9.0)': dependencies: graphql: 16.9.0 - graphql-yoga: 5.9.0(graphql@16.9.0) + graphql-yoga: 5.10.5(graphql@16.9.0) - '@graphql-yoga/plugin-graphql-sse@3.7.0(graphql-yoga@5.9.0(graphql@16.9.0))(graphql@16.9.0)': + '@graphql-yoga/plugin-graphql-sse@3.7.0(graphql-yoga@5.10.5(graphql@16.9.0))(graphql@16.9.0)': dependencies: graphql: 16.9.0 graphql-sse: 2.5.3(graphql@16.9.0) - graphql-yoga: 5.9.0(graphql@16.9.0) + graphql-yoga: 5.10.5(graphql@16.9.0) - '@graphql-yoga/plugin-persisted-operations@3.9.0(@graphql-tools/utils@10.5.6(graphql@16.9.0))(graphql-yoga@5.9.0(graphql@16.9.0))(graphql@16.9.0)': + '@graphql-yoga/plugin-persisted-operations@3.9.0(@graphql-tools/utils@10.6.3(graphql@16.9.0))(graphql-yoga@5.10.5(graphql@16.9.0))(graphql@16.9.0)': dependencies: - '@graphql-tools/utils': 10.5.6(graphql@16.9.0) + '@graphql-tools/utils': 10.6.3(graphql@16.9.0) + graphql: 16.9.0 + graphql-yoga: 5.10.5(graphql@16.9.0) + + '@graphql-yoga/plugin-persisted-operations@3.9.0(@graphql-tools/utils@10.6.3(graphql@16.9.0))(graphql-yoga@5.9.0(graphql@16.9.0))(graphql@16.9.0)': + dependencies: + '@graphql-tools/utils': 10.6.3(graphql@16.9.0) graphql: 16.9.0 graphql-yoga: 5.9.0(graphql@16.9.0) + '@graphql-yoga/plugin-response-cache@3.9.0(@envelop/core@5.0.2)(graphql-yoga@5.10.5(graphql@16.9.0))(graphql@16.9.0)': + dependencies: + '@envelop/response-cache': 6.1.2(@envelop/core@5.0.2)(graphql@16.9.0) + graphql: 16.9.0 + graphql-yoga: 5.10.5(graphql@16.9.0) + transitivePeerDependencies: + - '@envelop/core' + '@graphql-yoga/plugin-response-cache@3.9.0(@envelop/core@5.0.2)(graphql-yoga@5.9.0(graphql@16.9.0))(graphql@16.9.0)': dependencies: '@envelop/response-cache': 6.1.2(@envelop/core@5.0.2)(graphql@16.9.0) @@ -19573,6 +19670,13 @@ snapshots: '@whatwg-node/events': 0.1.1 tslib: 2.8.1 + '@graphql-yoga/subscription@5.0.2': + dependencies: + '@graphql-yoga/typed-event-target': 3.0.1 + '@repeaterjs/repeater': 3.0.6 + '@whatwg-node/events': 0.1.1 + tslib: 2.8.1 + '@graphql-yoga/typed-event-target@2.0.0': dependencies: '@repeaterjs/repeater': 3.0.6 @@ -19583,6 +19687,11 @@ snapshots: '@repeaterjs/repeater': 3.0.6 tslib: 2.8.1 + '@graphql-yoga/typed-event-target@3.0.1': + dependencies: + '@repeaterjs/repeater': 3.0.6 + tslib: 2.8.1 + '@grpc/grpc-js@1.10.9': dependencies: '@grpc/proto-loader': 0.7.13 @@ -23391,8 +23500,8 @@ snapshots: '@typescript-eslint/parser': 7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3) eslint: 8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva) eslint-config-prettier: 9.1.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) eslint-plugin-jsonc: 2.11.1(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) eslint-plugin-mdx: 3.0.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) @@ -24096,10 +24205,19 @@ snapshots: '@webassemblyjs/ast': 1.12.1 '@xtuc/long': 4.2.2 + '@whatwg-node/disposablestack@0.0.5': + dependencies: + tslib: 2.8.1 + '@whatwg-node/events@0.0.3': {} '@whatwg-node/events@0.1.1': {} + '@whatwg-node/fetch@0.10.1': + dependencies: + '@whatwg-node/node-fetch': 0.7.5 + urlpattern-polyfill: 10.0.0 + '@whatwg-node/fetch@0.8.8': dependencies: '@peculiar/webcrypto': 1.4.0 @@ -24128,11 +24246,25 @@ snapshots: fast-querystring: 1.1.2 tslib: 2.8.1 + '@whatwg-node/node-fetch@0.7.5': + dependencies: + '@kamilkisiela/fast-url-parser': 1.1.4 + '@whatwg-node/disposablestack': 0.0.5 + busboy: 1.6.0 + fast-querystring: 1.1.2 + tslib: 2.8.1 + '@whatwg-node/server@0.9.50': dependencies: '@whatwg-node/fetch': 0.9.22 tslib: 2.8.1 + '@whatwg-node/server@0.9.63': + dependencies: + '@whatwg-node/disposablestack': 0.0.5 + '@whatwg-node/fetch': 0.10.1 + tslib: 2.8.1 + '@xtuc/ieee754@1.2.0': {} '@xtuc/long@4.2.2': {} @@ -26100,13 +26232,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)): + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)): dependencies: debug: 4.3.7(supports-color@8.1.1) enhanced-resolve: 5.17.1 eslint: 8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva) - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) fast-glob: 3.3.2 get-tsconfig: 4.7.5 is-core-module: 2.13.1 @@ -26137,14 +26269,14 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)): + eslint-module-utils@2.8.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)): dependencies: debug: 3.2.7(supports-color@8.1.1) optionalDependencies: '@typescript-eslint/parser': 7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3) eslint: 8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1)(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) transitivePeerDependencies: - supports-color @@ -26160,7 +26292,7 @@ snapshots: eslint: 8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva) eslint-compat-utils: 0.1.2(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)): dependencies: array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 @@ -26170,7 +26302,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))(typescript@5.6.3))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)))(eslint@8.57.1(patch_hash=fjbpfrtrjd6idngyeqxnwopfva)) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -27381,6 +27513,21 @@ snapshots: lru-cache: 10.2.0 tslib: 2.8.1 + graphql-yoga@5.10.5(graphql@16.9.0): + dependencies: + '@envelop/core': 5.0.2 + '@graphql-tools/executor': 1.3.8(graphql@16.9.0) + '@graphql-tools/schema': 10.0.12(graphql@16.9.0) + '@graphql-tools/utils': 10.6.3(graphql@16.9.0) + '@graphql-yoga/logger': 2.0.0 + '@graphql-yoga/subscription': 5.0.2 + '@whatwg-node/fetch': 0.10.1 + '@whatwg-node/server': 0.9.63 + dset: 3.1.4 + graphql: 16.9.0 + lru-cache: 10.2.0 + tslib: 2.8.1 + graphql-yoga@5.9.0(graphql@16.9.0): dependencies: '@envelop/core': 5.0.2