@graphitation/supermassive 3.2.7 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/.eslintcache +1 -1
  2. package/CHANGELOG.md +10 -2
  3. package/lib/IncrementalPublisher.d.ts +131 -0
  4. package/lib/IncrementalPublisher.d.ts.map +1 -0
  5. package/lib/IncrementalPublisher.js +519 -0
  6. package/lib/IncrementalPublisher.js.map +7 -0
  7. package/lib/IncrementalPublisher.mjs +503 -0
  8. package/lib/IncrementalPublisher.mjs.map +7 -0
  9. package/lib/benchmarks/swapi-schema/resolvers.d.ts.map +1 -1
  10. package/lib/benchmarks/swapi-schema/resolvers.js +25 -0
  11. package/lib/benchmarks/swapi-schema/resolvers.js.map +2 -2
  12. package/lib/benchmarks/swapi-schema/resolvers.mjs +25 -0
  13. package/lib/benchmarks/swapi-schema/resolvers.mjs.map +2 -2
  14. package/lib/buildFieldPlan.d.ts +18 -0
  15. package/lib/buildFieldPlan.d.ts.map +1 -0
  16. package/lib/buildFieldPlan.js +120 -0
  17. package/lib/buildFieldPlan.js.map +7 -0
  18. package/lib/buildFieldPlan.mjs +101 -0
  19. package/lib/buildFieldPlan.mjs.map +7 -0
  20. package/lib/collectFields.d.ts +21 -8
  21. package/lib/collectFields.d.ts.map +1 -1
  22. package/lib/collectFields.js +97 -95
  23. package/lib/collectFields.js.map +2 -2
  24. package/lib/collectFields.mjs +97 -95
  25. package/lib/collectFields.mjs.map +2 -2
  26. package/lib/executeWithoutSchema.d.ts +6 -50
  27. package/lib/executeWithoutSchema.d.ts.map +1 -1
  28. package/lib/executeWithoutSchema.js +603 -485
  29. package/lib/executeWithoutSchema.js.map +3 -3
  30. package/lib/executeWithoutSchema.mjs +614 -486
  31. package/lib/executeWithoutSchema.mjs.map +3 -3
  32. package/lib/index.d.ts +1 -1
  33. package/lib/index.d.ts.map +1 -1
  34. package/lib/index.js.map +1 -1
  35. package/lib/index.mjs.map +1 -1
  36. package/lib/jsutils/getBySet.d.ts +2 -0
  37. package/lib/jsutils/getBySet.d.ts.map +1 -0
  38. package/lib/jsutils/getBySet.js +32 -0
  39. package/lib/jsutils/getBySet.js.map +7 -0
  40. package/lib/jsutils/getBySet.mjs +13 -0
  41. package/lib/jsutils/getBySet.mjs.map +7 -0
  42. package/lib/jsutils/isSameSet.d.ts +2 -0
  43. package/lib/jsutils/isSameSet.d.ts.map +1 -0
  44. package/lib/jsutils/isSameSet.js +34 -0
  45. package/lib/jsutils/isSameSet.js.map +7 -0
  46. package/lib/jsutils/isSameSet.mjs +15 -0
  47. package/lib/jsutils/isSameSet.mjs.map +7 -0
  48. package/lib/jsutils/promiseWithResolvers.d.ts +11 -0
  49. package/lib/jsutils/promiseWithResolvers.d.ts.map +1 -0
  50. package/lib/jsutils/promiseWithResolvers.js +32 -0
  51. package/lib/jsutils/promiseWithResolvers.js.map +7 -0
  52. package/lib/jsutils/promiseWithResolvers.mjs +13 -0
  53. package/lib/jsutils/promiseWithResolvers.mjs.map +7 -0
  54. package/lib/types.d.ts +63 -27
  55. package/lib/types.d.ts.map +1 -1
  56. package/lib/types.js.map +1 -1
  57. package/lib/values.d.ts +5 -4
  58. package/lib/values.d.ts.map +1 -1
  59. package/lib/values.js +13 -8
  60. package/lib/values.js.map +2 -2
  61. package/lib/values.mjs +13 -8
  62. package/lib/values.mjs.map +2 -2
  63. package/package.json +1 -1
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/IncrementalPublisher.ts"],
4
+ "sourcesContent": ["import type { GraphQLError } from \"graphql\";\n\nimport type { ObjMap } from \"./jsutils/ObjMap\";\nimport type { Path } from \"./jsutils/Path\";\nimport { pathToArray } from \"./jsutils/Path\";\nimport { promiseWithResolvers } from \"./jsutils/promiseWithResolvers\";\n\nimport type { GroupedFieldSet } from \"./buildFieldPlan\";\nimport {\n CompletedResult,\n IncrementalDeferResult,\n IncrementalResult,\n IncrementalStreamResult,\n IncrementalUpdate,\n PendingResult,\n SubsequentIncrementalExecutionResult,\n TotalExecutionResult,\n IncrementalExecutionResults,\n} from \"./types\";\n\n/**\n * This class is used to publish incremental results to the client, enabling semi-concurrent\n * execution while preserving result order.\n *\n * The internal publishing state is managed as follows:\n *\n * '_released': the set of Subsequent Result records that are ready to be sent to the client,\n * i.e. their parents have completed and they have also completed.\n *\n * `_pending`: the set of Subsequent Result records that are definitely pending, i.e. their\n * parents have completed so that they can no longer be filtered. This includes all Subsequent\n * Result records in `released`, as well as the records that have not yet completed.\n *\n * @internal\n */\nexport class IncrementalPublisher {\n private _nextId = 0;\n private _released: Set<SubsequentResultRecord>;\n private _pending: Set<SubsequentResultRecord>;\n\n // these are assigned within the Promise executor called synchronously within the constructor\n private _signalled!: Promise<unknown>;\n private _resolve!: () => void;\n\n constructor() {\n this._released = new Set();\n this._pending = new Set();\n this._reset();\n }\n\n reportNewDeferFragmentRecord(\n deferredFragmentRecord: DeferredFragmentRecord,\n parentIncrementalResultRecord:\n | InitialResultRecord\n | DeferredFragmentRecord\n | StreamItemsRecord,\n ): void {\n parentIncrementalResultRecord.children.add(deferredFragmentRecord);\n }\n\n reportNewDeferredGroupedFieldSetRecord(\n deferredGroupedFieldSetRecord: DeferredGroupedFieldSetRecord,\n ): void {\n for (const deferredFragmentRecord of deferredGroupedFieldSetRecord.deferredFragmentRecords) {\n deferredFragmentRecord._pending.add(deferredGroupedFieldSetRecord);\n deferredFragmentRecord.deferredGroupedFieldSetRecords.add(\n deferredGroupedFieldSetRecord,\n );\n }\n }\n\n reportNewStreamItemsRecord(\n streamItemsRecord: StreamItemsRecord,\n parentIncrementalDataRecord: IncrementalDataRecord,\n ): void {\n if (isDeferredGroupedFieldSetRecord(parentIncrementalDataRecord)) {\n for (const parent of parentIncrementalDataRecord.deferredFragmentRecords) {\n parent.children.add(streamItemsRecord);\n }\n } else {\n parentIncrementalDataRecord.children.add(streamItemsRecord);\n }\n }\n\n completeDeferredGroupedFieldSet(\n deferredGroupedFieldSetRecord: DeferredGroupedFieldSetRecord,\n data: ObjMap<unknown>,\n ): void {\n deferredGroupedFieldSetRecord.data = data;\n for (const deferredFragmentRecord of deferredGroupedFieldSetRecord.deferredFragmentRecords) {\n deferredFragmentRecord._pending.delete(deferredGroupedFieldSetRecord);\n if (deferredFragmentRecord._pending.size === 0) {\n this.completeDeferredFragmentRecord(deferredFragmentRecord);\n }\n }\n }\n\n markErroredDeferredGroupedFieldSet(\n deferredGroupedFieldSetRecord: DeferredGroupedFieldSetRecord,\n error: GraphQLError,\n ): void {\n for (const deferredFragmentRecord of deferredGroupedFieldSetRecord.deferredFragmentRecords) {\n deferredFragmentRecord.errors.push(error);\n this.completeDeferredFragmentRecord(deferredFragmentRecord);\n }\n }\n\n completeDeferredFragmentRecord(\n deferredFragmentRecord: DeferredFragmentRecord,\n ): void {\n this._release(deferredFragmentRecord);\n }\n\n completeStreamItemsRecord(\n streamItemsRecord: StreamItemsRecord,\n items: Array<unknown>,\n ) {\n streamItemsRecord.items = items;\n streamItemsRecord.isCompleted = true;\n this._release(streamItemsRecord);\n }\n\n markErroredStreamItemsRecord(\n streamItemsRecord: StreamItemsRecord,\n error: GraphQLError,\n ) {\n streamItemsRecord.streamRecord.errors.push(error);\n this.setIsFinalRecord(streamItemsRecord);\n streamItemsRecord.isCompleted = true;\n streamItemsRecord.streamRecord.earlyReturn?.().catch(() => {\n // ignore error\n });\n this._release(streamItemsRecord);\n }\n\n setIsFinalRecord(streamItemsRecord: StreamItemsRecord) {\n streamItemsRecord.isFinalRecord = true;\n }\n\n setIsCompletedAsyncIterator(streamItemsRecord: StreamItemsRecord) {\n streamItemsRecord.isCompletedAsyncIterator = true;\n this.setIsFinalRecord(streamItemsRecord);\n }\n\n addFieldError(\n incrementalDataRecord: IncrementalDataRecord,\n error: GraphQLError,\n ) {\n incrementalDataRecord.errors.push(error);\n }\n\n buildDataResponse(\n initialResultRecord: InitialResultRecord,\n data: ObjMap<unknown> | null,\n ): TotalExecutionResult | IncrementalExecutionResults {\n for (const child of initialResultRecord.children) {\n if (child.filtered) {\n continue;\n }\n this._publish(child);\n }\n\n const errors = initialResultRecord.errors;\n const initialResult = errors.length === 0 ? { data } : { errors, data };\n const pending = this._pending;\n if (pending.size > 0) {\n const pendingSources = new Set<DeferredFragmentRecord | StreamRecord>();\n for (const subsequentResultRecord of pending) {\n const pendingSource = isStreamItemsRecord(subsequentResultRecord)\n ? subsequentResultRecord.streamRecord\n : subsequentResultRecord;\n pendingSources.add(pendingSource);\n }\n\n return {\n initialResult: {\n ...initialResult,\n pending: this._pendingSourcesToResults(pendingSources),\n hasNext: true,\n },\n subsequentResults: this._subscribe(),\n };\n }\n return initialResult;\n }\n\n buildErrorResponse(\n initialResultRecord: InitialResultRecord,\n error: GraphQLError,\n ): TotalExecutionResult {\n const errors = initialResultRecord.errors;\n errors.push(error);\n return { data: null, errors };\n }\n\n filter(\n nullPath: Path | undefined,\n erroringIncrementalDataRecord: IncrementalDataRecord,\n ): void {\n const nullPathArray = pathToArray(nullPath);\n\n const streams = new Set<StreamRecord>();\n\n const children = this._getChildren(erroringIncrementalDataRecord);\n const descendants = this._getDescendants(children);\n\n for (const child of descendants) {\n if (!this._nullsChildSubsequentResultRecord(child, nullPathArray)) {\n continue;\n }\n\n child.filtered = true;\n\n if (isStreamItemsRecord(child)) {\n streams.add(child.streamRecord);\n }\n }\n\n streams.forEach((stream) => {\n stream.earlyReturn?.().catch(() => {\n // ignore error\n });\n });\n }\n\n private _pendingSourcesToResults(\n pendingSources: ReadonlySet<DeferredFragmentRecord | StreamRecord>,\n ): Array<PendingResult> {\n const pendingResults: Array<PendingResult> = [];\n for (const pendingSource of pendingSources) {\n pendingSource.pendingSent = true;\n const id = this._getNextId();\n pendingSource.id = id;\n const pendingResult: PendingResult = {\n id,\n path: pendingSource.path,\n };\n if (pendingSource.label !== undefined) {\n pendingResult.label = pendingSource.label;\n }\n pendingResults.push(pendingResult);\n }\n return pendingResults;\n }\n\n private _getNextId(): string {\n return String(this._nextId++);\n }\n\n private _subscribe(): AsyncGenerator<\n SubsequentIncrementalExecutionResult,\n void,\n void\n > {\n let isDone = false;\n\n const _next = async (): Promise<\n IteratorResult<SubsequentIncrementalExecutionResult, void>\n > => {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (isDone) {\n return { value: undefined, done: true };\n }\n\n for (const item of this._released) {\n this._pending.delete(item);\n }\n const released = this._released;\n this._released = new Set();\n\n const result = this._getIncrementalResult(released);\n\n if (this._pending.size === 0) {\n isDone = true;\n }\n\n if (result !== undefined) {\n return { value: result, done: false };\n }\n\n // eslint-disable-next-line no-await-in-loop\n await this._signalled;\n }\n };\n\n const returnStreamIterators = async (): Promise<void> => {\n const streams = new Set<StreamRecord>();\n const descendants = this._getDescendants(this._pending);\n for (const subsequentResultRecord of descendants) {\n if (isStreamItemsRecord(subsequentResultRecord)) {\n streams.add(subsequentResultRecord.streamRecord);\n }\n }\n const promises: Array<Promise<unknown>> = [];\n streams.forEach((streamRecord) => {\n if (streamRecord.earlyReturn) {\n promises.push(streamRecord.earlyReturn());\n }\n });\n await Promise.all(promises);\n };\n\n const _return = async (): Promise<\n IteratorResult<SubsequentIncrementalExecutionResult, void>\n > => {\n isDone = true;\n await returnStreamIterators();\n return { value: undefined, done: true };\n };\n\n const _throw = async (\n error?: unknown,\n ): Promise<IteratorResult<SubsequentIncrementalExecutionResult, void>> => {\n isDone = true;\n await returnStreamIterators();\n return Promise.reject(error);\n };\n\n return {\n [Symbol.asyncIterator]() {\n return this;\n },\n next: _next,\n return: _return,\n throw: _throw,\n };\n }\n\n private _trigger() {\n this._resolve();\n this._reset();\n }\n\n private _reset() {\n // promiseWithResolvers uses void only as a generic type parameter\n // see: https://typescript-eslint.io/rules/no-invalid-void-type/\n // eslint-disable-next-line @typescript-eslint/no-invalid-void-type\n const { promise: signalled, resolve } = promiseWithResolvers<void>();\n this._resolve = resolve;\n this._signalled = signalled;\n }\n\n private _introduce(item: SubsequentResultRecord) {\n this._pending.add(item);\n }\n\n private _release(item: SubsequentResultRecord): void {\n if (this._pending.has(item)) {\n this._released.add(item);\n this._trigger();\n }\n }\n\n private _push(item: SubsequentResultRecord): void {\n this._released.add(item);\n this._pending.add(item);\n this._trigger();\n }\n\n private _getIncrementalResult(\n completedRecords: ReadonlySet<SubsequentResultRecord>,\n ): SubsequentIncrementalExecutionResult | undefined {\n const { pending, incremental, completed } =\n this._processPending(completedRecords);\n\n const hasNext = this._pending.size > 0;\n if (incremental.length === 0 && completed.length === 0 && hasNext) {\n return undefined;\n }\n\n const result: SubsequentIncrementalExecutionResult = { hasNext };\n if (pending.length) {\n result.pending = pending;\n }\n if (incremental.length) {\n result.incremental = incremental;\n }\n if (completed.length) {\n result.completed = completed;\n }\n\n return result;\n }\n\n private _processPending(\n completedRecords: ReadonlySet<SubsequentResultRecord>,\n ): IncrementalUpdate {\n const newPendingSources = new Set<DeferredFragmentRecord | StreamRecord>();\n const incrementalResults: Array<IncrementalResult> = [];\n const completedResults: Array<CompletedResult> = [];\n for (const subsequentResultRecord of completedRecords) {\n for (const child of subsequentResultRecord.children) {\n if (child.filtered) {\n continue;\n }\n const pendingSource = isStreamItemsRecord(child)\n ? child.streamRecord\n : child;\n if (!pendingSource.pendingSent) {\n newPendingSources.add(pendingSource);\n }\n this._publish(child);\n }\n if (isStreamItemsRecord(subsequentResultRecord)) {\n if (subsequentResultRecord.isFinalRecord) {\n newPendingSources.delete(subsequentResultRecord.streamRecord);\n completedResults.push(\n this._completedRecordToResult(subsequentResultRecord.streamRecord),\n );\n }\n if (subsequentResultRecord.isCompletedAsyncIterator) {\n // async iterable resolver just finished but there may be pending payloads\n continue;\n }\n if (subsequentResultRecord.streamRecord.errors.length > 0) {\n continue;\n }\n const incrementalResult: IncrementalStreamResult = {\n // safe because `items` is always defined when the record is completed\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n items: subsequentResultRecord.items!,\n // safe because `id` is defined once the stream has been released as pending\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n id: subsequentResultRecord.streamRecord.id!,\n };\n if (subsequentResultRecord.errors.length > 0) {\n incrementalResult.errors = subsequentResultRecord.errors;\n }\n incrementalResults.push(incrementalResult);\n } else {\n newPendingSources.delete(subsequentResultRecord);\n completedResults.push(\n this._completedRecordToResult(subsequentResultRecord),\n );\n if (subsequentResultRecord.errors.length > 0) {\n continue;\n }\n for (const deferredGroupedFieldSetRecord of subsequentResultRecord.deferredGroupedFieldSetRecords) {\n if (!deferredGroupedFieldSetRecord.sent) {\n deferredGroupedFieldSetRecord.sent = true;\n const incrementalResult: IncrementalDeferResult =\n this._getIncrementalDeferResult(deferredGroupedFieldSetRecord);\n if (deferredGroupedFieldSetRecord.errors.length > 0) {\n incrementalResult.errors = deferredGroupedFieldSetRecord.errors;\n }\n incrementalResults.push(incrementalResult);\n }\n }\n }\n }\n\n return {\n pending: this._pendingSourcesToResults(newPendingSources),\n incremental: incrementalResults,\n completed: completedResults,\n };\n }\n\n private _getIncrementalDeferResult(\n deferredGroupedFieldSetRecord: DeferredGroupedFieldSetRecord,\n ): IncrementalDeferResult {\n const { data, deferredFragmentRecords } = deferredGroupedFieldSetRecord;\n let maxLength: number | undefined;\n let idWithLongestPath: string | undefined;\n for (const deferredFragmentRecord of deferredFragmentRecords) {\n const id = deferredFragmentRecord.id;\n if (id === undefined) {\n continue;\n }\n const length = deferredFragmentRecord.path.length;\n if (maxLength === undefined || length > maxLength) {\n maxLength = length;\n idWithLongestPath = id;\n }\n }\n const subPath = deferredGroupedFieldSetRecord.path.slice(maxLength);\n const incrementalDeferResult: IncrementalDeferResult = {\n // safe because `data``is always defined when the record is completed\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n data: data!,\n // safe because `id` is always defined once the fragment has been released\n // as pending and at least one fragment has been completed, so must have been\n // released as pending\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n id: idWithLongestPath!,\n };\n\n if (subPath.length > 0) {\n incrementalDeferResult.subPath = subPath;\n }\n\n return incrementalDeferResult;\n }\n\n private _completedRecordToResult(\n completedRecord: DeferredFragmentRecord | StreamRecord,\n ): CompletedResult {\n const result: CompletedResult = {\n // safe because `id` is defined once the stream has been released as pending\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n id: completedRecord.id!,\n };\n if (completedRecord.errors.length > 0) {\n result.errors = completedRecord.errors;\n }\n return result;\n }\n\n private _publish(subsequentResultRecord: SubsequentResultRecord): void {\n if (isStreamItemsRecord(subsequentResultRecord)) {\n if (subsequentResultRecord.isCompleted) {\n this._push(subsequentResultRecord);\n return;\n }\n\n this._introduce(subsequentResultRecord);\n return;\n }\n\n if (subsequentResultRecord._pending.size > 0) {\n this._introduce(subsequentResultRecord);\n } else if (\n subsequentResultRecord.deferredGroupedFieldSetRecords.size > 0 ||\n subsequentResultRecord.children.size > 0\n ) {\n this._push(subsequentResultRecord);\n }\n }\n\n private _getChildren(\n erroringIncrementalDataRecord: IncrementalDataRecord,\n ): ReadonlySet<SubsequentResultRecord> {\n const children = new Set<SubsequentResultRecord>();\n if (isDeferredGroupedFieldSetRecord(erroringIncrementalDataRecord)) {\n for (const erroringIncrementalResultRecord of erroringIncrementalDataRecord.deferredFragmentRecords) {\n for (const child of erroringIncrementalResultRecord.children) {\n children.add(child);\n }\n }\n } else {\n for (const child of erroringIncrementalDataRecord.children) {\n children.add(child);\n }\n }\n return children;\n }\n\n private _getDescendants(\n children: ReadonlySet<SubsequentResultRecord>,\n descendants = new Set<SubsequentResultRecord>(),\n ): ReadonlySet<SubsequentResultRecord> {\n for (const child of children) {\n descendants.add(child);\n this._getDescendants(child.children, descendants);\n }\n return descendants;\n }\n\n private _nullsChildSubsequentResultRecord(\n subsequentResultRecord: SubsequentResultRecord,\n nullPath: ReadonlyArray<string | number>,\n ): boolean {\n const incrementalDataRecords = isStreamItemsRecord(subsequentResultRecord)\n ? [subsequentResultRecord]\n : subsequentResultRecord.deferredGroupedFieldSetRecords;\n\n for (const incrementalDataRecord of incrementalDataRecords) {\n if (this._matchesPath(incrementalDataRecord.path, nullPath)) {\n return true;\n }\n }\n\n return false;\n }\n\n private _matchesPath(\n testPath: ReadonlyArray<string | number>,\n basePath: ReadonlyArray<string | number>,\n ): boolean {\n for (let i = 0; i < basePath.length; i++) {\n if (basePath[i] !== testPath[i]) {\n // testPath points to a path unaffected at basePath\n return false;\n }\n }\n return true;\n }\n}\n\nfunction isDeferredGroupedFieldSetRecord(\n incrementalDataRecord: unknown,\n): incrementalDataRecord is DeferredGroupedFieldSetRecord {\n return incrementalDataRecord instanceof DeferredGroupedFieldSetRecord;\n}\n\nfunction isStreamItemsRecord(\n subsequentResultRecord: unknown,\n): subsequentResultRecord is StreamItemsRecord {\n return subsequentResultRecord instanceof StreamItemsRecord;\n}\n\n/** @internal */\nexport class InitialResultRecord {\n errors: Array<GraphQLError>;\n children: Set<SubsequentResultRecord>;\n constructor() {\n this.errors = [];\n this.children = new Set();\n }\n}\n\n/** @internal */\nexport class DeferredGroupedFieldSetRecord {\n path: ReadonlyArray<string | number>;\n deferredFragmentRecords: ReadonlyArray<DeferredFragmentRecord>;\n groupedFieldSet: GroupedFieldSet;\n shouldInitiateDefer: boolean;\n errors: Array<GraphQLError>;\n data: ObjMap<unknown> | undefined;\n sent: boolean;\n\n constructor(opts: {\n path: Path | undefined;\n deferredFragmentRecords: ReadonlyArray<DeferredFragmentRecord>;\n groupedFieldSet: GroupedFieldSet;\n shouldInitiateDefer: boolean;\n }) {\n this.path = pathToArray(opts.path);\n this.deferredFragmentRecords = opts.deferredFragmentRecords;\n this.groupedFieldSet = opts.groupedFieldSet;\n this.shouldInitiateDefer = opts.shouldInitiateDefer;\n this.errors = [];\n this.sent = false;\n }\n}\n\n/** @internal */\nexport class DeferredFragmentRecord {\n path: ReadonlyArray<string | number>;\n label: string | undefined;\n id: string | undefined;\n children: Set<SubsequentResultRecord>;\n deferredGroupedFieldSetRecords: Set<DeferredGroupedFieldSetRecord>;\n errors: Array<GraphQLError>;\n filtered: boolean;\n pendingSent?: boolean;\n _pending: Set<DeferredGroupedFieldSetRecord>;\n\n constructor(opts: { path: Path | undefined; label: string | undefined }) {\n this.path = pathToArray(opts.path);\n this.label = opts.label;\n this.children = new Set();\n this.filtered = false;\n this.deferredGroupedFieldSetRecords = new Set();\n this.errors = [];\n this._pending = new Set();\n }\n}\n\n/** @internal */\nexport class StreamRecord {\n label: string | undefined;\n path: ReadonlyArray<string | number>;\n id: string | undefined;\n errors: Array<GraphQLError>;\n earlyReturn?: (() => Promise<unknown>) | undefined;\n pendingSent?: boolean;\n constructor(opts: {\n label: string | undefined;\n path: Path;\n earlyReturn?: (() => Promise<unknown>) | undefined;\n }) {\n this.label = opts.label;\n this.path = pathToArray(opts.path);\n this.errors = [];\n this.earlyReturn = opts.earlyReturn;\n }\n}\n\n/** @internal */\nexport class StreamItemsRecord {\n errors: Array<GraphQLError>;\n streamRecord: StreamRecord;\n path: ReadonlyArray<string | number>;\n items: Array<unknown> | undefined;\n children: Set<SubsequentResultRecord>;\n isFinalRecord?: boolean;\n isCompletedAsyncIterator?: boolean;\n isCompleted: boolean;\n filtered: boolean;\n\n constructor(opts: { streamRecord: StreamRecord; path: Path | undefined }) {\n this.streamRecord = opts.streamRecord;\n this.path = pathToArray(opts.path);\n this.children = new Set();\n this.errors = [];\n this.isCompleted = false;\n this.filtered = false;\n }\n}\n\nexport type IncrementalDataRecord =\n | InitialResultRecord\n | DeferredGroupedFieldSetRecord\n | StreamItemsRecord;\n\ntype SubsequentResultRecord = DeferredFragmentRecord | StreamItemsRecord;\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,503 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ var __async = (__this, __arguments, generator) => {
21
+ return new Promise((resolve, reject) => {
22
+ var fulfilled = (value) => {
23
+ try {
24
+ step(generator.next(value));
25
+ } catch (e) {
26
+ reject(e);
27
+ }
28
+ };
29
+ var rejected = (value) => {
30
+ try {
31
+ step(generator.throw(value));
32
+ } catch (e) {
33
+ reject(e);
34
+ }
35
+ };
36
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
37
+ step((generator = generator.apply(__this, __arguments)).next());
38
+ });
39
+ };
40
+
41
+ // src/IncrementalPublisher.ts
42
+ import { pathToArray } from "./jsutils/Path.mjs";
43
+ import { promiseWithResolvers } from "./jsutils/promiseWithResolvers.mjs";
44
+ var IncrementalPublisher = class {
45
+ constructor() {
46
+ this._nextId = 0;
47
+ this._released = /* @__PURE__ */ new Set();
48
+ this._pending = /* @__PURE__ */ new Set();
49
+ this._reset();
50
+ }
51
+ reportNewDeferFragmentRecord(deferredFragmentRecord, parentIncrementalResultRecord) {
52
+ parentIncrementalResultRecord.children.add(deferredFragmentRecord);
53
+ }
54
+ reportNewDeferredGroupedFieldSetRecord(deferredGroupedFieldSetRecord) {
55
+ for (const deferredFragmentRecord of deferredGroupedFieldSetRecord.deferredFragmentRecords) {
56
+ deferredFragmentRecord._pending.add(deferredGroupedFieldSetRecord);
57
+ deferredFragmentRecord.deferredGroupedFieldSetRecords.add(
58
+ deferredGroupedFieldSetRecord
59
+ );
60
+ }
61
+ }
62
+ reportNewStreamItemsRecord(streamItemsRecord, parentIncrementalDataRecord) {
63
+ if (isDeferredGroupedFieldSetRecord(parentIncrementalDataRecord)) {
64
+ for (const parent of parentIncrementalDataRecord.deferredFragmentRecords) {
65
+ parent.children.add(streamItemsRecord);
66
+ }
67
+ } else {
68
+ parentIncrementalDataRecord.children.add(streamItemsRecord);
69
+ }
70
+ }
71
+ completeDeferredGroupedFieldSet(deferredGroupedFieldSetRecord, data) {
72
+ deferredGroupedFieldSetRecord.data = data;
73
+ for (const deferredFragmentRecord of deferredGroupedFieldSetRecord.deferredFragmentRecords) {
74
+ deferredFragmentRecord._pending.delete(deferredGroupedFieldSetRecord);
75
+ if (deferredFragmentRecord._pending.size === 0) {
76
+ this.completeDeferredFragmentRecord(deferredFragmentRecord);
77
+ }
78
+ }
79
+ }
80
+ markErroredDeferredGroupedFieldSet(deferredGroupedFieldSetRecord, error) {
81
+ for (const deferredFragmentRecord of deferredGroupedFieldSetRecord.deferredFragmentRecords) {
82
+ deferredFragmentRecord.errors.push(error);
83
+ this.completeDeferredFragmentRecord(deferredFragmentRecord);
84
+ }
85
+ }
86
+ completeDeferredFragmentRecord(deferredFragmentRecord) {
87
+ this._release(deferredFragmentRecord);
88
+ }
89
+ completeStreamItemsRecord(streamItemsRecord, items) {
90
+ streamItemsRecord.items = items;
91
+ streamItemsRecord.isCompleted = true;
92
+ this._release(streamItemsRecord);
93
+ }
94
+ markErroredStreamItemsRecord(streamItemsRecord, error) {
95
+ var _a, _b;
96
+ streamItemsRecord.streamRecord.errors.push(error);
97
+ this.setIsFinalRecord(streamItemsRecord);
98
+ streamItemsRecord.isCompleted = true;
99
+ (_b = (_a = streamItemsRecord.streamRecord).earlyReturn) == null ? void 0 : _b.call(_a).catch(() => {
100
+ });
101
+ this._release(streamItemsRecord);
102
+ }
103
+ setIsFinalRecord(streamItemsRecord) {
104
+ streamItemsRecord.isFinalRecord = true;
105
+ }
106
+ setIsCompletedAsyncIterator(streamItemsRecord) {
107
+ streamItemsRecord.isCompletedAsyncIterator = true;
108
+ this.setIsFinalRecord(streamItemsRecord);
109
+ }
110
+ addFieldError(incrementalDataRecord, error) {
111
+ incrementalDataRecord.errors.push(error);
112
+ }
113
+ buildDataResponse(initialResultRecord, data) {
114
+ for (const child of initialResultRecord.children) {
115
+ if (child.filtered) {
116
+ continue;
117
+ }
118
+ this._publish(child);
119
+ }
120
+ const errors = initialResultRecord.errors;
121
+ const initialResult = errors.length === 0 ? { data } : { errors, data };
122
+ const pending = this._pending;
123
+ if (pending.size > 0) {
124
+ const pendingSources = /* @__PURE__ */ new Set();
125
+ for (const subsequentResultRecord of pending) {
126
+ const pendingSource = isStreamItemsRecord(subsequentResultRecord) ? subsequentResultRecord.streamRecord : subsequentResultRecord;
127
+ pendingSources.add(pendingSource);
128
+ }
129
+ return {
130
+ initialResult: __spreadProps(__spreadValues({}, initialResult), {
131
+ pending: this._pendingSourcesToResults(pendingSources),
132
+ hasNext: true
133
+ }),
134
+ subsequentResults: this._subscribe()
135
+ };
136
+ }
137
+ return initialResult;
138
+ }
139
+ buildErrorResponse(initialResultRecord, error) {
140
+ const errors = initialResultRecord.errors;
141
+ errors.push(error);
142
+ return { data: null, errors };
143
+ }
144
+ filter(nullPath, erroringIncrementalDataRecord) {
145
+ const nullPathArray = pathToArray(nullPath);
146
+ const streams = /* @__PURE__ */ new Set();
147
+ const children = this._getChildren(erroringIncrementalDataRecord);
148
+ const descendants = this._getDescendants(children);
149
+ for (const child of descendants) {
150
+ if (!this._nullsChildSubsequentResultRecord(child, nullPathArray)) {
151
+ continue;
152
+ }
153
+ child.filtered = true;
154
+ if (isStreamItemsRecord(child)) {
155
+ streams.add(child.streamRecord);
156
+ }
157
+ }
158
+ streams.forEach((stream) => {
159
+ var _a;
160
+ (_a = stream.earlyReturn) == null ? void 0 : _a.call(stream).catch(() => {
161
+ });
162
+ });
163
+ }
164
+ _pendingSourcesToResults(pendingSources) {
165
+ const pendingResults = [];
166
+ for (const pendingSource of pendingSources) {
167
+ pendingSource.pendingSent = true;
168
+ const id = this._getNextId();
169
+ pendingSource.id = id;
170
+ const pendingResult = {
171
+ id,
172
+ path: pendingSource.path
173
+ };
174
+ if (pendingSource.label !== void 0) {
175
+ pendingResult.label = pendingSource.label;
176
+ }
177
+ pendingResults.push(pendingResult);
178
+ }
179
+ return pendingResults;
180
+ }
181
+ _getNextId() {
182
+ return String(this._nextId++);
183
+ }
184
+ _subscribe() {
185
+ let isDone = false;
186
+ const _next = () => __async(this, null, function* () {
187
+ while (true) {
188
+ if (isDone) {
189
+ return { value: void 0, done: true };
190
+ }
191
+ for (const item of this._released) {
192
+ this._pending.delete(item);
193
+ }
194
+ const released = this._released;
195
+ this._released = /* @__PURE__ */ new Set();
196
+ const result = this._getIncrementalResult(released);
197
+ if (this._pending.size === 0) {
198
+ isDone = true;
199
+ }
200
+ if (result !== void 0) {
201
+ return { value: result, done: false };
202
+ }
203
+ yield this._signalled;
204
+ }
205
+ });
206
+ const returnStreamIterators = () => __async(this, null, function* () {
207
+ const streams = /* @__PURE__ */ new Set();
208
+ const descendants = this._getDescendants(this._pending);
209
+ for (const subsequentResultRecord of descendants) {
210
+ if (isStreamItemsRecord(subsequentResultRecord)) {
211
+ streams.add(subsequentResultRecord.streamRecord);
212
+ }
213
+ }
214
+ const promises = [];
215
+ streams.forEach((streamRecord) => {
216
+ if (streamRecord.earlyReturn) {
217
+ promises.push(streamRecord.earlyReturn());
218
+ }
219
+ });
220
+ yield Promise.all(promises);
221
+ });
222
+ const _return = () => __async(this, null, function* () {
223
+ isDone = true;
224
+ yield returnStreamIterators();
225
+ return { value: void 0, done: true };
226
+ });
227
+ const _throw = (error) => __async(this, null, function* () {
228
+ isDone = true;
229
+ yield returnStreamIterators();
230
+ return Promise.reject(error);
231
+ });
232
+ return {
233
+ [Symbol.asyncIterator]() {
234
+ return this;
235
+ },
236
+ next: _next,
237
+ return: _return,
238
+ throw: _throw
239
+ };
240
+ }
241
+ _trigger() {
242
+ this._resolve();
243
+ this._reset();
244
+ }
245
+ _reset() {
246
+ const { promise: signalled, resolve } = promiseWithResolvers();
247
+ this._resolve = resolve;
248
+ this._signalled = signalled;
249
+ }
250
+ _introduce(item) {
251
+ this._pending.add(item);
252
+ }
253
+ _release(item) {
254
+ if (this._pending.has(item)) {
255
+ this._released.add(item);
256
+ this._trigger();
257
+ }
258
+ }
259
+ _push(item) {
260
+ this._released.add(item);
261
+ this._pending.add(item);
262
+ this._trigger();
263
+ }
264
+ _getIncrementalResult(completedRecords) {
265
+ const { pending, incremental, completed } = this._processPending(completedRecords);
266
+ const hasNext = this._pending.size > 0;
267
+ if (incremental.length === 0 && completed.length === 0 && hasNext) {
268
+ return void 0;
269
+ }
270
+ const result = { hasNext };
271
+ if (pending.length) {
272
+ result.pending = pending;
273
+ }
274
+ if (incremental.length) {
275
+ result.incremental = incremental;
276
+ }
277
+ if (completed.length) {
278
+ result.completed = completed;
279
+ }
280
+ return result;
281
+ }
282
+ _processPending(completedRecords) {
283
+ const newPendingSources = /* @__PURE__ */ new Set();
284
+ const incrementalResults = [];
285
+ const completedResults = [];
286
+ for (const subsequentResultRecord of completedRecords) {
287
+ for (const child of subsequentResultRecord.children) {
288
+ if (child.filtered) {
289
+ continue;
290
+ }
291
+ const pendingSource = isStreamItemsRecord(child) ? child.streamRecord : child;
292
+ if (!pendingSource.pendingSent) {
293
+ newPendingSources.add(pendingSource);
294
+ }
295
+ this._publish(child);
296
+ }
297
+ if (isStreamItemsRecord(subsequentResultRecord)) {
298
+ if (subsequentResultRecord.isFinalRecord) {
299
+ newPendingSources.delete(subsequentResultRecord.streamRecord);
300
+ completedResults.push(
301
+ this._completedRecordToResult(subsequentResultRecord.streamRecord)
302
+ );
303
+ }
304
+ if (subsequentResultRecord.isCompletedAsyncIterator) {
305
+ continue;
306
+ }
307
+ if (subsequentResultRecord.streamRecord.errors.length > 0) {
308
+ continue;
309
+ }
310
+ const incrementalResult = {
311
+ // safe because `items` is always defined when the record is completed
312
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
313
+ items: subsequentResultRecord.items,
314
+ // safe because `id` is defined once the stream has been released as pending
315
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
316
+ id: subsequentResultRecord.streamRecord.id
317
+ };
318
+ if (subsequentResultRecord.errors.length > 0) {
319
+ incrementalResult.errors = subsequentResultRecord.errors;
320
+ }
321
+ incrementalResults.push(incrementalResult);
322
+ } else {
323
+ newPendingSources.delete(subsequentResultRecord);
324
+ completedResults.push(
325
+ this._completedRecordToResult(subsequentResultRecord)
326
+ );
327
+ if (subsequentResultRecord.errors.length > 0) {
328
+ continue;
329
+ }
330
+ for (const deferredGroupedFieldSetRecord of subsequentResultRecord.deferredGroupedFieldSetRecords) {
331
+ if (!deferredGroupedFieldSetRecord.sent) {
332
+ deferredGroupedFieldSetRecord.sent = true;
333
+ const incrementalResult = this._getIncrementalDeferResult(deferredGroupedFieldSetRecord);
334
+ if (deferredGroupedFieldSetRecord.errors.length > 0) {
335
+ incrementalResult.errors = deferredGroupedFieldSetRecord.errors;
336
+ }
337
+ incrementalResults.push(incrementalResult);
338
+ }
339
+ }
340
+ }
341
+ }
342
+ return {
343
+ pending: this._pendingSourcesToResults(newPendingSources),
344
+ incremental: incrementalResults,
345
+ completed: completedResults
346
+ };
347
+ }
348
+ _getIncrementalDeferResult(deferredGroupedFieldSetRecord) {
349
+ const { data, deferredFragmentRecords } = deferredGroupedFieldSetRecord;
350
+ let maxLength;
351
+ let idWithLongestPath;
352
+ for (const deferredFragmentRecord of deferredFragmentRecords) {
353
+ const id = deferredFragmentRecord.id;
354
+ if (id === void 0) {
355
+ continue;
356
+ }
357
+ const length = deferredFragmentRecord.path.length;
358
+ if (maxLength === void 0 || length > maxLength) {
359
+ maxLength = length;
360
+ idWithLongestPath = id;
361
+ }
362
+ }
363
+ const subPath = deferredGroupedFieldSetRecord.path.slice(maxLength);
364
+ const incrementalDeferResult = {
365
+ // safe because `data``is always defined when the record is completed
366
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
367
+ data,
368
+ // safe because `id` is always defined once the fragment has been released
369
+ // as pending and at least one fragment has been completed, so must have been
370
+ // released as pending
371
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
372
+ id: idWithLongestPath
373
+ };
374
+ if (subPath.length > 0) {
375
+ incrementalDeferResult.subPath = subPath;
376
+ }
377
+ return incrementalDeferResult;
378
+ }
379
+ _completedRecordToResult(completedRecord) {
380
+ const result = {
381
+ // safe because `id` is defined once the stream has been released as pending
382
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
383
+ id: completedRecord.id
384
+ };
385
+ if (completedRecord.errors.length > 0) {
386
+ result.errors = completedRecord.errors;
387
+ }
388
+ return result;
389
+ }
390
+ _publish(subsequentResultRecord) {
391
+ if (isStreamItemsRecord(subsequentResultRecord)) {
392
+ if (subsequentResultRecord.isCompleted) {
393
+ this._push(subsequentResultRecord);
394
+ return;
395
+ }
396
+ this._introduce(subsequentResultRecord);
397
+ return;
398
+ }
399
+ if (subsequentResultRecord._pending.size > 0) {
400
+ this._introduce(subsequentResultRecord);
401
+ } else if (subsequentResultRecord.deferredGroupedFieldSetRecords.size > 0 || subsequentResultRecord.children.size > 0) {
402
+ this._push(subsequentResultRecord);
403
+ }
404
+ }
405
+ _getChildren(erroringIncrementalDataRecord) {
406
+ const children = /* @__PURE__ */ new Set();
407
+ if (isDeferredGroupedFieldSetRecord(erroringIncrementalDataRecord)) {
408
+ for (const erroringIncrementalResultRecord of erroringIncrementalDataRecord.deferredFragmentRecords) {
409
+ for (const child of erroringIncrementalResultRecord.children) {
410
+ children.add(child);
411
+ }
412
+ }
413
+ } else {
414
+ for (const child of erroringIncrementalDataRecord.children) {
415
+ children.add(child);
416
+ }
417
+ }
418
+ return children;
419
+ }
420
+ _getDescendants(children, descendants = /* @__PURE__ */ new Set()) {
421
+ for (const child of children) {
422
+ descendants.add(child);
423
+ this._getDescendants(child.children, descendants);
424
+ }
425
+ return descendants;
426
+ }
427
+ _nullsChildSubsequentResultRecord(subsequentResultRecord, nullPath) {
428
+ const incrementalDataRecords = isStreamItemsRecord(subsequentResultRecord) ? [subsequentResultRecord] : subsequentResultRecord.deferredGroupedFieldSetRecords;
429
+ for (const incrementalDataRecord of incrementalDataRecords) {
430
+ if (this._matchesPath(incrementalDataRecord.path, nullPath)) {
431
+ return true;
432
+ }
433
+ }
434
+ return false;
435
+ }
436
+ _matchesPath(testPath, basePath) {
437
+ for (let i = 0; i < basePath.length; i++) {
438
+ if (basePath[i] !== testPath[i]) {
439
+ return false;
440
+ }
441
+ }
442
+ return true;
443
+ }
444
+ };
445
+ function isDeferredGroupedFieldSetRecord(incrementalDataRecord) {
446
+ return incrementalDataRecord instanceof DeferredGroupedFieldSetRecord;
447
+ }
448
+ function isStreamItemsRecord(subsequentResultRecord) {
449
+ return subsequentResultRecord instanceof StreamItemsRecord;
450
+ }
451
+ var InitialResultRecord = class {
452
+ constructor() {
453
+ this.errors = [];
454
+ this.children = /* @__PURE__ */ new Set();
455
+ }
456
+ };
457
+ var DeferredGroupedFieldSetRecord = class {
458
+ constructor(opts) {
459
+ this.path = pathToArray(opts.path);
460
+ this.deferredFragmentRecords = opts.deferredFragmentRecords;
461
+ this.groupedFieldSet = opts.groupedFieldSet;
462
+ this.shouldInitiateDefer = opts.shouldInitiateDefer;
463
+ this.errors = [];
464
+ this.sent = false;
465
+ }
466
+ };
467
+ var DeferredFragmentRecord = class {
468
+ constructor(opts) {
469
+ this.path = pathToArray(opts.path);
470
+ this.label = opts.label;
471
+ this.children = /* @__PURE__ */ new Set();
472
+ this.filtered = false;
473
+ this.deferredGroupedFieldSetRecords = /* @__PURE__ */ new Set();
474
+ this.errors = [];
475
+ this._pending = /* @__PURE__ */ new Set();
476
+ }
477
+ };
478
+ var StreamRecord = class {
479
+ constructor(opts) {
480
+ this.label = opts.label;
481
+ this.path = pathToArray(opts.path);
482
+ this.errors = [];
483
+ this.earlyReturn = opts.earlyReturn;
484
+ }
485
+ };
486
+ var StreamItemsRecord = class {
487
+ constructor(opts) {
488
+ this.streamRecord = opts.streamRecord;
489
+ this.path = pathToArray(opts.path);
490
+ this.children = /* @__PURE__ */ new Set();
491
+ this.errors = [];
492
+ this.isCompleted = false;
493
+ this.filtered = false;
494
+ }
495
+ };
496
+ export {
497
+ DeferredFragmentRecord,
498
+ DeferredGroupedFieldSetRecord,
499
+ IncrementalPublisher,
500
+ InitialResultRecord,
501
+ StreamItemsRecord,
502
+ StreamRecord
503
+ };
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/IncrementalPublisher.ts"],
4
+ "sourcesContent": ["import type { GraphQLError } from \"graphql\";\n\nimport type { ObjMap } from \"./jsutils/ObjMap\";\nimport type { Path } from \"./jsutils/Path\";\nimport { pathToArray } from \"./jsutils/Path\";\nimport { promiseWithResolvers } from \"./jsutils/promiseWithResolvers\";\n\nimport type { GroupedFieldSet } from \"./buildFieldPlan\";\nimport {\n CompletedResult,\n IncrementalDeferResult,\n IncrementalResult,\n IncrementalStreamResult,\n IncrementalUpdate,\n PendingResult,\n SubsequentIncrementalExecutionResult,\n TotalExecutionResult,\n IncrementalExecutionResults,\n} from \"./types\";\n\n/**\n * This class is used to publish incremental results to the client, enabling semi-concurrent\n * execution while preserving result order.\n *\n * The internal publishing state is managed as follows:\n *\n * '_released': the set of Subsequent Result records that are ready to be sent to the client,\n * i.e. their parents have completed and they have also completed.\n *\n * `_pending`: the set of Subsequent Result records that are definitely pending, i.e. their\n * parents have completed so that they can no longer be filtered. This includes all Subsequent\n * Result records in `released`, as well as the records that have not yet completed.\n *\n * @internal\n */\nexport class IncrementalPublisher {\n private _nextId = 0;\n private _released: Set<SubsequentResultRecord>;\n private _pending: Set<SubsequentResultRecord>;\n\n // these are assigned within the Promise executor called synchronously within the constructor\n private _signalled!: Promise<unknown>;\n private _resolve!: () => void;\n\n constructor() {\n this._released = new Set();\n this._pending = new Set();\n this._reset();\n }\n\n reportNewDeferFragmentRecord(\n deferredFragmentRecord: DeferredFragmentRecord,\n parentIncrementalResultRecord:\n | InitialResultRecord\n | DeferredFragmentRecord\n | StreamItemsRecord,\n ): void {\n parentIncrementalResultRecord.children.add(deferredFragmentRecord);\n }\n\n reportNewDeferredGroupedFieldSetRecord(\n deferredGroupedFieldSetRecord: DeferredGroupedFieldSetRecord,\n ): void {\n for (const deferredFragmentRecord of deferredGroupedFieldSetRecord.deferredFragmentRecords) {\n deferredFragmentRecord._pending.add(deferredGroupedFieldSetRecord);\n deferredFragmentRecord.deferredGroupedFieldSetRecords.add(\n deferredGroupedFieldSetRecord,\n );\n }\n }\n\n reportNewStreamItemsRecord(\n streamItemsRecord: StreamItemsRecord,\n parentIncrementalDataRecord: IncrementalDataRecord,\n ): void {\n if (isDeferredGroupedFieldSetRecord(parentIncrementalDataRecord)) {\n for (const parent of parentIncrementalDataRecord.deferredFragmentRecords) {\n parent.children.add(streamItemsRecord);\n }\n } else {\n parentIncrementalDataRecord.children.add(streamItemsRecord);\n }\n }\n\n completeDeferredGroupedFieldSet(\n deferredGroupedFieldSetRecord: DeferredGroupedFieldSetRecord,\n data: ObjMap<unknown>,\n ): void {\n deferredGroupedFieldSetRecord.data = data;\n for (const deferredFragmentRecord of deferredGroupedFieldSetRecord.deferredFragmentRecords) {\n deferredFragmentRecord._pending.delete(deferredGroupedFieldSetRecord);\n if (deferredFragmentRecord._pending.size === 0) {\n this.completeDeferredFragmentRecord(deferredFragmentRecord);\n }\n }\n }\n\n markErroredDeferredGroupedFieldSet(\n deferredGroupedFieldSetRecord: DeferredGroupedFieldSetRecord,\n error: GraphQLError,\n ): void {\n for (const deferredFragmentRecord of deferredGroupedFieldSetRecord.deferredFragmentRecords) {\n deferredFragmentRecord.errors.push(error);\n this.completeDeferredFragmentRecord(deferredFragmentRecord);\n }\n }\n\n completeDeferredFragmentRecord(\n deferredFragmentRecord: DeferredFragmentRecord,\n ): void {\n this._release(deferredFragmentRecord);\n }\n\n completeStreamItemsRecord(\n streamItemsRecord: StreamItemsRecord,\n items: Array<unknown>,\n ) {\n streamItemsRecord.items = items;\n streamItemsRecord.isCompleted = true;\n this._release(streamItemsRecord);\n }\n\n markErroredStreamItemsRecord(\n streamItemsRecord: StreamItemsRecord,\n error: GraphQLError,\n ) {\n streamItemsRecord.streamRecord.errors.push(error);\n this.setIsFinalRecord(streamItemsRecord);\n streamItemsRecord.isCompleted = true;\n streamItemsRecord.streamRecord.earlyReturn?.().catch(() => {\n // ignore error\n });\n this._release(streamItemsRecord);\n }\n\n setIsFinalRecord(streamItemsRecord: StreamItemsRecord) {\n streamItemsRecord.isFinalRecord = true;\n }\n\n setIsCompletedAsyncIterator(streamItemsRecord: StreamItemsRecord) {\n streamItemsRecord.isCompletedAsyncIterator = true;\n this.setIsFinalRecord(streamItemsRecord);\n }\n\n addFieldError(\n incrementalDataRecord: IncrementalDataRecord,\n error: GraphQLError,\n ) {\n incrementalDataRecord.errors.push(error);\n }\n\n buildDataResponse(\n initialResultRecord: InitialResultRecord,\n data: ObjMap<unknown> | null,\n ): TotalExecutionResult | IncrementalExecutionResults {\n for (const child of initialResultRecord.children) {\n if (child.filtered) {\n continue;\n }\n this._publish(child);\n }\n\n const errors = initialResultRecord.errors;\n const initialResult = errors.length === 0 ? { data } : { errors, data };\n const pending = this._pending;\n if (pending.size > 0) {\n const pendingSources = new Set<DeferredFragmentRecord | StreamRecord>();\n for (const subsequentResultRecord of pending) {\n const pendingSource = isStreamItemsRecord(subsequentResultRecord)\n ? subsequentResultRecord.streamRecord\n : subsequentResultRecord;\n pendingSources.add(pendingSource);\n }\n\n return {\n initialResult: {\n ...initialResult,\n pending: this._pendingSourcesToResults(pendingSources),\n hasNext: true,\n },\n subsequentResults: this._subscribe(),\n };\n }\n return initialResult;\n }\n\n buildErrorResponse(\n initialResultRecord: InitialResultRecord,\n error: GraphQLError,\n ): TotalExecutionResult {\n const errors = initialResultRecord.errors;\n errors.push(error);\n return { data: null, errors };\n }\n\n filter(\n nullPath: Path | undefined,\n erroringIncrementalDataRecord: IncrementalDataRecord,\n ): void {\n const nullPathArray = pathToArray(nullPath);\n\n const streams = new Set<StreamRecord>();\n\n const children = this._getChildren(erroringIncrementalDataRecord);\n const descendants = this._getDescendants(children);\n\n for (const child of descendants) {\n if (!this._nullsChildSubsequentResultRecord(child, nullPathArray)) {\n continue;\n }\n\n child.filtered = true;\n\n if (isStreamItemsRecord(child)) {\n streams.add(child.streamRecord);\n }\n }\n\n streams.forEach((stream) => {\n stream.earlyReturn?.().catch(() => {\n // ignore error\n });\n });\n }\n\n private _pendingSourcesToResults(\n pendingSources: ReadonlySet<DeferredFragmentRecord | StreamRecord>,\n ): Array<PendingResult> {\n const pendingResults: Array<PendingResult> = [];\n for (const pendingSource of pendingSources) {\n pendingSource.pendingSent = true;\n const id = this._getNextId();\n pendingSource.id = id;\n const pendingResult: PendingResult = {\n id,\n path: pendingSource.path,\n };\n if (pendingSource.label !== undefined) {\n pendingResult.label = pendingSource.label;\n }\n pendingResults.push(pendingResult);\n }\n return pendingResults;\n }\n\n private _getNextId(): string {\n return String(this._nextId++);\n }\n\n private _subscribe(): AsyncGenerator<\n SubsequentIncrementalExecutionResult,\n void,\n void\n > {\n let isDone = false;\n\n const _next = async (): Promise<\n IteratorResult<SubsequentIncrementalExecutionResult, void>\n > => {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (isDone) {\n return { value: undefined, done: true };\n }\n\n for (const item of this._released) {\n this._pending.delete(item);\n }\n const released = this._released;\n this._released = new Set();\n\n const result = this._getIncrementalResult(released);\n\n if (this._pending.size === 0) {\n isDone = true;\n }\n\n if (result !== undefined) {\n return { value: result, done: false };\n }\n\n // eslint-disable-next-line no-await-in-loop\n await this._signalled;\n }\n };\n\n const returnStreamIterators = async (): Promise<void> => {\n const streams = new Set<StreamRecord>();\n const descendants = this._getDescendants(this._pending);\n for (const subsequentResultRecord of descendants) {\n if (isStreamItemsRecord(subsequentResultRecord)) {\n streams.add(subsequentResultRecord.streamRecord);\n }\n }\n const promises: Array<Promise<unknown>> = [];\n streams.forEach((streamRecord) => {\n if (streamRecord.earlyReturn) {\n promises.push(streamRecord.earlyReturn());\n }\n });\n await Promise.all(promises);\n };\n\n const _return = async (): Promise<\n IteratorResult<SubsequentIncrementalExecutionResult, void>\n > => {\n isDone = true;\n await returnStreamIterators();\n return { value: undefined, done: true };\n };\n\n const _throw = async (\n error?: unknown,\n ): Promise<IteratorResult<SubsequentIncrementalExecutionResult, void>> => {\n isDone = true;\n await returnStreamIterators();\n return Promise.reject(error);\n };\n\n return {\n [Symbol.asyncIterator]() {\n return this;\n },\n next: _next,\n return: _return,\n throw: _throw,\n };\n }\n\n private _trigger() {\n this._resolve();\n this._reset();\n }\n\n private _reset() {\n // promiseWithResolvers uses void only as a generic type parameter\n // see: https://typescript-eslint.io/rules/no-invalid-void-type/\n // eslint-disable-next-line @typescript-eslint/no-invalid-void-type\n const { promise: signalled, resolve } = promiseWithResolvers<void>();\n this._resolve = resolve;\n this._signalled = signalled;\n }\n\n private _introduce(item: SubsequentResultRecord) {\n this._pending.add(item);\n }\n\n private _release(item: SubsequentResultRecord): void {\n if (this._pending.has(item)) {\n this._released.add(item);\n this._trigger();\n }\n }\n\n private _push(item: SubsequentResultRecord): void {\n this._released.add(item);\n this._pending.add(item);\n this._trigger();\n }\n\n private _getIncrementalResult(\n completedRecords: ReadonlySet<SubsequentResultRecord>,\n ): SubsequentIncrementalExecutionResult | undefined {\n const { pending, incremental, completed } =\n this._processPending(completedRecords);\n\n const hasNext = this._pending.size > 0;\n if (incremental.length === 0 && completed.length === 0 && hasNext) {\n return undefined;\n }\n\n const result: SubsequentIncrementalExecutionResult = { hasNext };\n if (pending.length) {\n result.pending = pending;\n }\n if (incremental.length) {\n result.incremental = incremental;\n }\n if (completed.length) {\n result.completed = completed;\n }\n\n return result;\n }\n\n private _processPending(\n completedRecords: ReadonlySet<SubsequentResultRecord>,\n ): IncrementalUpdate {\n const newPendingSources = new Set<DeferredFragmentRecord | StreamRecord>();\n const incrementalResults: Array<IncrementalResult> = [];\n const completedResults: Array<CompletedResult> = [];\n for (const subsequentResultRecord of completedRecords) {\n for (const child of subsequentResultRecord.children) {\n if (child.filtered) {\n continue;\n }\n const pendingSource = isStreamItemsRecord(child)\n ? child.streamRecord\n : child;\n if (!pendingSource.pendingSent) {\n newPendingSources.add(pendingSource);\n }\n this._publish(child);\n }\n if (isStreamItemsRecord(subsequentResultRecord)) {\n if (subsequentResultRecord.isFinalRecord) {\n newPendingSources.delete(subsequentResultRecord.streamRecord);\n completedResults.push(\n this._completedRecordToResult(subsequentResultRecord.streamRecord),\n );\n }\n if (subsequentResultRecord.isCompletedAsyncIterator) {\n // async iterable resolver just finished but there may be pending payloads\n continue;\n }\n if (subsequentResultRecord.streamRecord.errors.length > 0) {\n continue;\n }\n const incrementalResult: IncrementalStreamResult = {\n // safe because `items` is always defined when the record is completed\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n items: subsequentResultRecord.items!,\n // safe because `id` is defined once the stream has been released as pending\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n id: subsequentResultRecord.streamRecord.id!,\n };\n if (subsequentResultRecord.errors.length > 0) {\n incrementalResult.errors = subsequentResultRecord.errors;\n }\n incrementalResults.push(incrementalResult);\n } else {\n newPendingSources.delete(subsequentResultRecord);\n completedResults.push(\n this._completedRecordToResult(subsequentResultRecord),\n );\n if (subsequentResultRecord.errors.length > 0) {\n continue;\n }\n for (const deferredGroupedFieldSetRecord of subsequentResultRecord.deferredGroupedFieldSetRecords) {\n if (!deferredGroupedFieldSetRecord.sent) {\n deferredGroupedFieldSetRecord.sent = true;\n const incrementalResult: IncrementalDeferResult =\n this._getIncrementalDeferResult(deferredGroupedFieldSetRecord);\n if (deferredGroupedFieldSetRecord.errors.length > 0) {\n incrementalResult.errors = deferredGroupedFieldSetRecord.errors;\n }\n incrementalResults.push(incrementalResult);\n }\n }\n }\n }\n\n return {\n pending: this._pendingSourcesToResults(newPendingSources),\n incremental: incrementalResults,\n completed: completedResults,\n };\n }\n\n private _getIncrementalDeferResult(\n deferredGroupedFieldSetRecord: DeferredGroupedFieldSetRecord,\n ): IncrementalDeferResult {\n const { data, deferredFragmentRecords } = deferredGroupedFieldSetRecord;\n let maxLength: number | undefined;\n let idWithLongestPath: string | undefined;\n for (const deferredFragmentRecord of deferredFragmentRecords) {\n const id = deferredFragmentRecord.id;\n if (id === undefined) {\n continue;\n }\n const length = deferredFragmentRecord.path.length;\n if (maxLength === undefined || length > maxLength) {\n maxLength = length;\n idWithLongestPath = id;\n }\n }\n const subPath = deferredGroupedFieldSetRecord.path.slice(maxLength);\n const incrementalDeferResult: IncrementalDeferResult = {\n // safe because `data``is always defined when the record is completed\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n data: data!,\n // safe because `id` is always defined once the fragment has been released\n // as pending and at least one fragment has been completed, so must have been\n // released as pending\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n id: idWithLongestPath!,\n };\n\n if (subPath.length > 0) {\n incrementalDeferResult.subPath = subPath;\n }\n\n return incrementalDeferResult;\n }\n\n private _completedRecordToResult(\n completedRecord: DeferredFragmentRecord | StreamRecord,\n ): CompletedResult {\n const result: CompletedResult = {\n // safe because `id` is defined once the stream has been released as pending\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n id: completedRecord.id!,\n };\n if (completedRecord.errors.length > 0) {\n result.errors = completedRecord.errors;\n }\n return result;\n }\n\n private _publish(subsequentResultRecord: SubsequentResultRecord): void {\n if (isStreamItemsRecord(subsequentResultRecord)) {\n if (subsequentResultRecord.isCompleted) {\n this._push(subsequentResultRecord);\n return;\n }\n\n this._introduce(subsequentResultRecord);\n return;\n }\n\n if (subsequentResultRecord._pending.size > 0) {\n this._introduce(subsequentResultRecord);\n } else if (\n subsequentResultRecord.deferredGroupedFieldSetRecords.size > 0 ||\n subsequentResultRecord.children.size > 0\n ) {\n this._push(subsequentResultRecord);\n }\n }\n\n private _getChildren(\n erroringIncrementalDataRecord: IncrementalDataRecord,\n ): ReadonlySet<SubsequentResultRecord> {\n const children = new Set<SubsequentResultRecord>();\n if (isDeferredGroupedFieldSetRecord(erroringIncrementalDataRecord)) {\n for (const erroringIncrementalResultRecord of erroringIncrementalDataRecord.deferredFragmentRecords) {\n for (const child of erroringIncrementalResultRecord.children) {\n children.add(child);\n }\n }\n } else {\n for (const child of erroringIncrementalDataRecord.children) {\n children.add(child);\n }\n }\n return children;\n }\n\n private _getDescendants(\n children: ReadonlySet<SubsequentResultRecord>,\n descendants = new Set<SubsequentResultRecord>(),\n ): ReadonlySet<SubsequentResultRecord> {\n for (const child of children) {\n descendants.add(child);\n this._getDescendants(child.children, descendants);\n }\n return descendants;\n }\n\n private _nullsChildSubsequentResultRecord(\n subsequentResultRecord: SubsequentResultRecord,\n nullPath: ReadonlyArray<string | number>,\n ): boolean {\n const incrementalDataRecords = isStreamItemsRecord(subsequentResultRecord)\n ? [subsequentResultRecord]\n : subsequentResultRecord.deferredGroupedFieldSetRecords;\n\n for (const incrementalDataRecord of incrementalDataRecords) {\n if (this._matchesPath(incrementalDataRecord.path, nullPath)) {\n return true;\n }\n }\n\n return false;\n }\n\n private _matchesPath(\n testPath: ReadonlyArray<string | number>,\n basePath: ReadonlyArray<string | number>,\n ): boolean {\n for (let i = 0; i < basePath.length; i++) {\n if (basePath[i] !== testPath[i]) {\n // testPath points to a path unaffected at basePath\n return false;\n }\n }\n return true;\n }\n}\n\nfunction isDeferredGroupedFieldSetRecord(\n incrementalDataRecord: unknown,\n): incrementalDataRecord is DeferredGroupedFieldSetRecord {\n return incrementalDataRecord instanceof DeferredGroupedFieldSetRecord;\n}\n\nfunction isStreamItemsRecord(\n subsequentResultRecord: unknown,\n): subsequentResultRecord is StreamItemsRecord {\n return subsequentResultRecord instanceof StreamItemsRecord;\n}\n\n/** @internal */\nexport class InitialResultRecord {\n errors: Array<GraphQLError>;\n children: Set<SubsequentResultRecord>;\n constructor() {\n this.errors = [];\n this.children = new Set();\n }\n}\n\n/** @internal */\nexport class DeferredGroupedFieldSetRecord {\n path: ReadonlyArray<string | number>;\n deferredFragmentRecords: ReadonlyArray<DeferredFragmentRecord>;\n groupedFieldSet: GroupedFieldSet;\n shouldInitiateDefer: boolean;\n errors: Array<GraphQLError>;\n data: ObjMap<unknown> | undefined;\n sent: boolean;\n\n constructor(opts: {\n path: Path | undefined;\n deferredFragmentRecords: ReadonlyArray<DeferredFragmentRecord>;\n groupedFieldSet: GroupedFieldSet;\n shouldInitiateDefer: boolean;\n }) {\n this.path = pathToArray(opts.path);\n this.deferredFragmentRecords = opts.deferredFragmentRecords;\n this.groupedFieldSet = opts.groupedFieldSet;\n this.shouldInitiateDefer = opts.shouldInitiateDefer;\n this.errors = [];\n this.sent = false;\n }\n}\n\n/** @internal */\nexport class DeferredFragmentRecord {\n path: ReadonlyArray<string | number>;\n label: string | undefined;\n id: string | undefined;\n children: Set<SubsequentResultRecord>;\n deferredGroupedFieldSetRecords: Set<DeferredGroupedFieldSetRecord>;\n errors: Array<GraphQLError>;\n filtered: boolean;\n pendingSent?: boolean;\n _pending: Set<DeferredGroupedFieldSetRecord>;\n\n constructor(opts: { path: Path | undefined; label: string | undefined }) {\n this.path = pathToArray(opts.path);\n this.label = opts.label;\n this.children = new Set();\n this.filtered = false;\n this.deferredGroupedFieldSetRecords = new Set();\n this.errors = [];\n this._pending = new Set();\n }\n}\n\n/** @internal */\nexport class StreamRecord {\n label: string | undefined;\n path: ReadonlyArray<string | number>;\n id: string | undefined;\n errors: Array<GraphQLError>;\n earlyReturn?: (() => Promise<unknown>) | undefined;\n pendingSent?: boolean;\n constructor(opts: {\n label: string | undefined;\n path: Path;\n earlyReturn?: (() => Promise<unknown>) | undefined;\n }) {\n this.label = opts.label;\n this.path = pathToArray(opts.path);\n this.errors = [];\n this.earlyReturn = opts.earlyReturn;\n }\n}\n\n/** @internal */\nexport class StreamItemsRecord {\n errors: Array<GraphQLError>;\n streamRecord: StreamRecord;\n path: ReadonlyArray<string | number>;\n items: Array<unknown> | undefined;\n children: Set<SubsequentResultRecord>;\n isFinalRecord?: boolean;\n isCompletedAsyncIterator?: boolean;\n isCompleted: boolean;\n filtered: boolean;\n\n constructor(opts: { streamRecord: StreamRecord; path: Path | undefined }) {\n this.streamRecord = opts.streamRecord;\n this.path = pathToArray(opts.path);\n this.children = new Set();\n this.errors = [];\n this.isCompleted = false;\n this.filtered = false;\n }\n}\n\nexport type IncrementalDataRecord =\n | InitialResultRecord\n | DeferredGroupedFieldSetRecord\n | StreamItemsRecord;\n\ntype SubsequentResultRecord = DeferredFragmentRecord | StreamItemsRecord;\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../../src/benchmarks/swapi-schema/resolvers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAkPpE,QAAA,MAAM,SAAS,EAAE,2BAA2B,CAAC,WAAW,CA2LvD,CAAC;AAKF,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../../src/benchmarks/swapi-schema/resolvers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAkPpE,QAAA,MAAM,SAAS,EAAE,2BAA2B,CAAC,WAAW,CAkNvD,CAAC;AAKF,eAAe,SAAS,CAAC"}