graphql
Version:
A Query Language and Runtime which can target any service.
1 lines • 32.1 kB
Source Map (JSON)
{"version":3,"file":"WorkQueue.js","sourceRoot":"","sources":["../../../src/execution/incremental/WorkQueue.ts"],"names":[],"mappings":"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","sourcesContent":["import { isPromise } from '../../jsutils/isPromise.ts';\nimport type { PromiseOrValue } from '../../jsutils/PromiseOrValue.ts';\n\nimport type { Computation } from './Computation.ts';\nimport { Queue } from './Queue.ts';\n\n/** @internal */\nexport interface Group<TSelf extends Group<TSelf>> {\n parent?: TSelf | undefined;\n}\n\ninterface WorkResult<\n TValue,\n T,\n I,\n G extends Group<G>,\n S extends Stream<T, I, G, S>,\n> {\n value: TValue;\n work?: Work<T, I, G, S> | undefined;\n}\n\n/** @internal */\nexport interface Stream<\n T,\n I,\n G extends Group<G>,\n S extends Stream<T, I, G, S>,\n> {\n queue: Queue<StreamItem<T, I, G, S>>;\n}\n\n/** @internal */\nexport interface Work<T, I, G extends Group<G>, S extends Stream<T, I, G, S>> {\n groups?: ReadonlyArray<G>;\n tasks?: ReadonlyArray<Task<T, I, G, S>>;\n streams?: ReadonlyArray<S>;\n}\n\ninterface NewWork<T, I, G extends Group<G>, S extends Stream<T, I, G, S>> {\n newGroups: ReadonlyArray<G>;\n newStreams: ReadonlyArray<S>;\n}\n\n/** @internal */\nexport interface WorkQueue<\n T,\n I,\n G extends Group<G>,\n S extends Stream<T, I, G, S>,\n> {\n initialGroups: ReadonlyArray<G>;\n initialStreams: ReadonlyArray<S>;\n events: AsyncGenerator<ReadonlyArray<WorkQueueEvent<T, I, G, S>>, void, void>;\n}\n\n/** @internal */\nexport type StreamItem<\n T,\n I,\n G extends Group<G>,\n S extends Stream<T, I, G, S>,\n> = WorkResult<I, T, I, G, S>;\n\n/** @internal */\nexport type TaskResult<\n T,\n I,\n G extends Group<G>,\n S extends Stream<T, I, G, S>,\n> = WorkResult<T, T, I, G, S>;\n\n/** @internal */\nexport interface Task<T, I, G extends Group<G>, S extends Stream<T, I, G, S>> {\n groups: ReadonlyArray<G>;\n computation: Computation<TaskResult<T, I, G, S>>;\n}\n\ninterface TaskSuccessGraphEvent<\n T,\n I,\n G extends Group<G>,\n S extends Stream<T, I, G, S>,\n> {\n kind: 'TASK_SUCCESS';\n task: Task<T, I, G, S>;\n result: TaskResult<T, I, G, S>;\n}\n\ninterface TaskFailureGraphEvent<\n T,\n I,\n G extends Group<G>,\n S extends Stream<T, I, G, S>,\n> {\n kind: 'TASK_FAILURE';\n task: Task<T, I, G, S>;\n error: unknown;\n}\n\ninterface StreamItemsEvent<\n T,\n I,\n G extends Group<G>,\n S extends Stream<T, I, G, S>,\n> {\n kind: 'STREAM_ITEMS';\n stream: S;\n items: Generator<StreamItem<T, I, G, S>>;\n}\n\ninterface StreamSuccessEvent<\n T,\n I,\n G extends Group<G>,\n S extends Stream<T, I, G, S>,\n> {\n kind: 'STREAM_SUCCESS';\n stream: S;\n}\n\ninterface StreamFailureEvent<\n T,\n I,\n G extends Group<G>,\n S extends Stream<T, I, G, S>,\n> {\n kind: 'STREAM_FAILURE';\n stream: S;\n error: unknown;\n}\n\ntype GraphEvent<T, I, G extends Group<G>, S extends Stream<T, I, G, S>> =\n | TaskSuccessGraphEvent<T, I, G, S>\n | TaskFailureGraphEvent<T, I, G, S>\n | StreamItemsEvent<T, I, G, S>\n | StreamSuccessEvent<T, I, G, S>\n | StreamFailureEvent<T, I, G, S>;\n\ninterface GroupValuesEvent<\n T,\n I,\n G extends Group<G>,\n S extends Stream<T, I, G, S>,\n> {\n kind: 'GROUP_VALUES';\n group: G;\n values: ReadonlyArray<T>;\n}\n\ninterface GroupSuccessEvent<\n T,\n I,\n G extends Group<G>,\n S extends Stream<T, I, G, S>,\n> extends NewWork<T, I, G, S> {\n kind: 'GROUP_SUCCESS';\n group: G;\n}\n\ninterface GroupFailureEvent<G extends Group<G>> {\n kind: 'GROUP_FAILURE';\n group: G;\n error: unknown;\n}\n\ninterface StreamValuesEvent<\n T,\n I,\n G extends Group<G>,\n S extends Stream<T, I, G, S>,\n> extends NewWork<T, I, G, S> {\n kind: 'STREAM_VALUES';\n stream: S;\n values: ReadonlyArray<I>;\n}\n\ninterface WorkQueueTerminationEvent {\n kind: 'WORK_QUEUE_TERMINATION';\n}\n\n/** @internal */\nexport type WorkQueueEvent<\n T,\n I,\n G extends Group<G>,\n S extends Stream<T, I, G, S>,\n> =\n | GroupValuesEvent<T, I, G, S>\n | GroupSuccessEvent<T, I, G, S>\n | GroupFailureEvent<G>\n | StreamValuesEvent<T, I, G, S>\n | StreamSuccessEvent<T, I, G, S>\n | StreamFailureEvent<T, I, G, S>\n | WorkQueueTerminationEvent;\n\ninterface GroupNode<T, I, G extends Group<G>, S extends Stream<T, I, G, S>> {\n childGroups: Array<G>;\n tasks: Set<Task<T, I, G, S>>;\n pending: number;\n}\n\ninterface TaskNode<T, I, G extends Group<G>, S extends Stream<T, I, G, S>> {\n value: T | undefined;\n childStreams: Array<S>;\n}\n\n/** @internal */\nexport function createWorkQueue<\n T,\n I,\n G extends Group<G>,\n S extends Stream<T, I, G, S>,\n>(initialWork: Work<T, I, G, S> | undefined): WorkQueue<T, I, G, S> {\n const rootGroups = new Set<G>();\n const rootStreams = new Set<S>();\n const groupNodes = new Map<G, GroupNode<T, I, G, S>>();\n const taskNodes = new Map<Task<T, I, G, S>, TaskNode<T, I, G, S>>();\n let pushGraphEvent!: (e: GraphEvent<T, I, G, S>) => PromiseOrValue<void>;\n let stopGraphEvents!: (err?: unknown) => PromiseOrValue<void>;\n\n const { newGroups: initialRootGroups, newStreams: initialRootStreams } =\n maybeIntegrateWork(initialWork);\n const nonEmptyInitialRootGroups = pruneEmptyGroups(initialRootGroups);\n // Initialize root groups and streams at startup to prepare for cancellation\n // prior to starting the work queue\n for (const group of nonEmptyInitialRootGroups) {\n rootGroups.add(group);\n }\n for (const stream of initialRootStreams) {\n rootStreams.add(stream);\n }\n\n const events = new Queue<GraphEvent<T, I, G, S>>(\n ({ push: _push, stop: _stop, onStop, started }) => {\n pushGraphEvent = _push;\n stopGraphEvents = _stop;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n started.then(() => {\n for (const group of rootGroups) {\n startGroup(group);\n }\n for (const stream of rootStreams) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n startStream(stream);\n }\n });\n onStop((reason) => cancel(reason));\n },\n 1,\n ).subscribe((graphEvents) => handleGraphEvents(graphEvents));\n\n return {\n initialGroups: nonEmptyInitialRootGroups,\n initialStreams: initialRootStreams,\n events,\n };\n\n function cancel(reason?: unknown): PromiseOrValue<void> {\n const cancelPromises: Array<Promise<unknown>> = [];\n for (const group of rootGroups) {\n cancelGroup(group, reason, cancelPromises);\n }\n for (const stream of rootStreams) {\n cancelStream(stream, reason, cancelPromises);\n }\n if (cancelPromises.length > 0) {\n return Promise.allSettled(cancelPromises).then(() => undefined);\n }\n }\n\n function cancelGroup(\n group: G,\n reason: unknown,\n cancelPromises: Array<Promise<unknown>>,\n ): void {\n const groupNode = groupNodes.get(group);\n if (groupNode) {\n for (const task of groupNode.tasks) {\n cancelTask(task, reason, cancelPromises);\n }\n for (const childGroup of groupNode.childGroups) {\n cancelGroup(childGroup, reason, cancelPromises);\n }\n }\n }\n\n function cancelTask(\n task: Task<T, I, G, S>,\n reason: unknown,\n cancelPromises: Array<Promise<unknown>>,\n ): void {\n const abortResult = task.computation.abort(reason);\n if (isPromise(abortResult)) {\n cancelPromises.push(abortResult);\n }\n const taskNode = taskNodes.get(task);\n if (taskNode) {\n for (const childStream of taskNode.childStreams) {\n cancelStream(childStream, reason, cancelPromises);\n }\n }\n }\n\n function cancelStream(\n stream: S,\n reason: unknown,\n cancelPromises: Array<Promise<unknown>>,\n ): void {\n const abortResult = stream.queue.abort(reason);\n if (isPromise(abortResult)) {\n cancelPromises.push(abortResult);\n }\n }\n\n function maybeIntegrateWork(\n work: Work<T, I, G, S> | undefined,\n parentTask?: Task<T, I, G, S>,\n ): NewWork<T, I, G, S> {\n if (!work) {\n return { newGroups: [], newStreams: [] };\n }\n const { groups, tasks, streams } = work;\n const newGroups = groups ? addGroups(groups, parentTask) : [];\n if (tasks) {\n for (const task of tasks) {\n addTask(task);\n }\n }\n const newStreams = streams ? addStreams(streams, parentTask) : [];\n return { newGroups, newStreams };\n }\n\n function addGroups(\n originalGroups: ReadonlyArray<G>,\n parentTask?: Task<T, I, G, S>,\n ): Array<G> {\n const groupSet = new Set(originalGroups);\n const visited = new Set<G>();\n const newRootGroups: Array<G> = [];\n for (const group of originalGroups) {\n addGroup(group, groupSet, newRootGroups, visited, parentTask);\n }\n return newRootGroups;\n }\n\n function addGroup(\n group: G,\n groupSet: ReadonlySet<G>,\n newRootGroups: Array<G>,\n visited: Set<G>,\n parentTask?: Task<T, I, G, S>,\n ): void {\n if (visited.has(group)) {\n return;\n }\n visited.add(group);\n const parent = group.parent;\n if (parent !== undefined && groupSet.has(parent)) {\n addGroup(parent, groupSet, newRootGroups, visited, parentTask);\n }\n\n const groupNode: GroupNode<T, I, G, S> = {\n childGroups: [],\n tasks: new Set(),\n pending: 0,\n };\n groupNodes.set(group, groupNode);\n\n if (parentTask === undefined && !parent) {\n newRootGroups.push(group);\n } else if (parent) {\n groupNodes.get(parent)?.childGroups.push(group);\n }\n }\n\n function addTask(task: Task<T, I, G, S>): void {\n for (const group of task.groups) {\n const groupNode = groupNodes.get(group);\n if (groupNode) {\n groupNode.tasks.add(task);\n groupNode.pending++;\n if (rootGroups.has(group)) {\n startTask(task);\n }\n }\n }\n }\n\n function addStreams(\n streams: ReadonlyArray<S>,\n parentTask?: Task<T, I, G, S>,\n ): ReadonlyArray<S> {\n if (!parentTask) {\n return streams;\n }\n const taskNode = taskNodes.get(parentTask);\n if (taskNode) {\n taskNode.childStreams.push(...streams);\n }\n return [];\n }\n\n function pruneEmptyGroups(\n newGroups: ReadonlyArray<G>,\n nonEmptyNewGroups: Array<G> = [],\n ): ReadonlyArray<G> {\n for (const newGroup of newGroups) {\n const newGroupState = groupNodes.get(newGroup);\n if (newGroupState) {\n if (newGroupState.pending === 0) {\n groupNodes.delete(newGroup);\n pruneEmptyGroups(newGroupState.childGroups, nonEmptyNewGroups);\n } else {\n nonEmptyNewGroups.push(newGroup);\n }\n }\n }\n return nonEmptyNewGroups;\n }\n\n function startNewWork(\n newGroups: ReadonlyArray<G>,\n newStreams: ReadonlyArray<S>,\n ): void {\n for (const group of newGroups) {\n rootGroups.add(group);\n startGroup(group);\n }\n for (const stream of newStreams) {\n rootStreams.add(stream);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n startStream(stream);\n }\n }\n\n function startGroup(group: G): void {\n const groupNode = groupNodes.get(group);\n if (groupNode) {\n for (const task of groupNode.tasks) {\n startTask(task);\n }\n }\n }\n\n function startTask(task: Task<T, I, G, S>): void {\n if (taskNodes.has(task)) {\n return;\n }\n taskNodes.set(task, {\n value: undefined,\n childStreams: [],\n });\n try {\n const result = task.computation.result();\n if (isPromise(result)) {\n result.then(\n (resolved) => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n pushGraphEvent({ kind: 'TASK_SUCCESS', task, result: resolved });\n },\n (error: unknown) => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n pushGraphEvent({ kind: 'TASK_FAILURE', task, error });\n },\n );\n } else {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n pushGraphEvent({ kind: 'TASK_SUCCESS', task, result });\n }\n } catch (error) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n pushGraphEvent({ kind: 'TASK_FAILURE', task, error });\n }\n }\n\n async function startStream(stream: S): Promise<void> {\n try {\n await stream.queue.forEachBatch(async (items) => {\n const pushed = pushGraphEvent({\n kind: 'STREAM_ITEMS',\n stream,\n items,\n });\n if (isPromise(pushed)) {\n await pushed;\n }\n });\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n pushGraphEvent({ kind: 'STREAM_SUCCESS', stream });\n } catch (error) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n pushGraphEvent({ kind: 'STREAM_FAILURE', stream, error });\n }\n }\n\n function handleGraphEvents(\n graphEvents: Generator<GraphEvent<T, I, G, S>>,\n ): ReadonlyArray<WorkQueueEvent<T, I, G, S>> | undefined {\n const workQueueEvents: Array<WorkQueueEvent<T, I, G, S>> = [];\n for (const graphEvent of graphEvents) {\n switch (graphEvent.kind) {\n case 'TASK_SUCCESS':\n workQueueEvents.push(...taskSuccess(graphEvent));\n break;\n case 'TASK_FAILURE':\n workQueueEvents.push(...taskFailure(graphEvent));\n break;\n case 'STREAM_ITEMS':\n workQueueEvents.push(...streamItems(graphEvent));\n break;\n case 'STREAM_SUCCESS':\n // check whether already deleted within streamItems()\n if (rootStreams.has(graphEvent.stream)) {\n rootStreams.delete(graphEvent.stream);\n workQueueEvents.push(graphEvent);\n }\n break;\n case 'STREAM_FAILURE':\n rootStreams.delete(graphEvent.stream);\n workQueueEvents.push(graphEvent);\n break;\n }\n }\n\n if (rootGroups.size === 0 && rootStreams.size === 0) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n stopGraphEvents();\n workQueueEvents.push({ kind: 'WORK_QUEUE_TERMINATION' });\n }\n\n return workQueueEvents.length > 0 ? workQueueEvents : undefined;\n }\n\n function taskSuccess(\n graphEvent: TaskSuccessGraphEvent<T, I, G, S>,\n ): ReadonlyArray<\n GroupValuesEvent<T, I, G, S> | GroupSuccessEvent<T, I, G, S>\n > {\n const { task, result } = graphEvent;\n const { value, work } = result;\n const taskNode = taskNodes.get(task);\n if (taskNode) {\n taskNode.value = value;\n }\n maybeIntegrateWork(work, task);\n\n const groupEvents: Array<\n GroupValuesEvent<T, I, G, S> | GroupSuccessEvent<T, I, G, S>\n > = [];\n const newGroups: Array<G> = [];\n const newStreams: Array<S> = [];\n for (const group of task.groups) {\n const groupNode = groupNodes.get(group);\n if (groupNode) {\n groupNode.pending--;\n if (rootGroups.has(group) && groupNode.pending === 0) {\n const {\n groupValuesEvent,\n groupSuccessEvent,\n newGroups: childNewGroups,\n newStreams: childNewStreams,\n } = finishGroupSuccess(group, groupNode);\n if (groupValuesEvent) {\n groupEvents.push(groupValuesEvent);\n }\n groupEvents.push(groupSuccessEvent);\n newGroups.push(...childNewGroups);\n newStreams.push(...childNewStreams);\n }\n }\n }\n\n startNewWork(newGroups, newStreams);\n return groupEvents;\n }\n\n function taskFailure(\n graphEvent: TaskFailureGraphEvent<T, I, G, S>,\n ): ReadonlyArray<GroupFailureEvent<G>> {\n const { task, error } = graphEvent;\n taskNodes.delete(task);\n const groupFailureEvents: Array<GroupFailureEvent<G>> = [];\n for (const group of task.groups) {\n const groupNode = groupNodes.get(group);\n if (groupNode) {\n groupFailureEvents.push(finishGroupFailure(group, groupNode, error));\n }\n }\n return groupFailureEvents;\n }\n\n function streamItems(\n graphEvent: StreamItemsEvent<T, I, G, S>,\n ):\n | [StreamValuesEvent<T, I, G, S>]\n | [StreamValuesEvent<T, I, G, S>, StreamSuccessEvent<T, I, G, S>] {\n const { stream, items } = graphEvent;\n const values: Array<I> = [];\n const newGroups: Array<G> = [];\n const newStreams: Array<S> = [];\n for (const { value, work } of items) {\n const { newGroups: itemNewGroups, newStreams: itemNewStreams } =\n maybeIntegrateWork(work);\n const nonEmptyNewGroups = pruneEmptyGroups(itemNewGroups);\n startNewWork(nonEmptyNewGroups, itemNewStreams);\n values.push(value);\n newGroups.push(...nonEmptyNewGroups);\n newStreams.push(...itemNewStreams);\n }\n const streamValuesEvent: StreamValuesEvent<T, I, G, S> = {\n kind: 'STREAM_VALUES',\n stream,\n values,\n newGroups,\n newStreams,\n };\n\n // queues allow peeking ahead see if stream has stopped\n if (stream.queue.isStopped()) {\n rootStreams.delete(stream);\n return [streamValuesEvent, { kind: 'STREAM_SUCCESS', stream }];\n }\n return [streamValuesEvent];\n }\n\n function finishGroupSuccess(\n group: G,\n groupNode: GroupNode<T, I, G, S>,\n ): {\n groupValuesEvent: GroupValuesEvent<T, I, G, S> | undefined;\n groupSuccessEvent: GroupSuccessEvent<T, I, G, S>;\n newGroups: ReadonlyArray<G>;\n newStreams: ReadonlyArray<S>;\n } {\n groupNodes.delete(group);\n const values: Array<T> = [];\n const newStreams: Array<S> = [];\n for (const task of groupNode.tasks) {\n const taskNode = taskNodes.get(task);\n if (taskNode) {\n const { value, childStreams } = taskNode;\n if (value !== undefined) {\n values.push(value);\n }\n for (const childStream of childStreams) {\n newStreams.push(childStream);\n }\n removeTask(task);\n }\n }\n const newGroups = pruneEmptyGroups(groupNode.childGroups);\n rootGroups.delete(group);\n return {\n groupValuesEvent: values.length\n ? { kind: 'GROUP_VALUES', group, values }\n : undefined,\n groupSuccessEvent: {\n kind: 'GROUP_SUCCESS',\n group,\n newGroups,\n newStreams,\n },\n newGroups,\n newStreams,\n };\n }\n\n function finishGroupFailure(\n group: G,\n groupNode: GroupNode<T, I, G, S>,\n error: unknown,\n ): GroupFailureEvent<G> {\n removeGroup(group, groupNode);\n rootGroups.delete(group);\n return { kind: 'GROUP_FAILURE', group, error };\n }\n\n function removeGroup(group: G, groupNode: GroupNode<T, I, G, S>): void {\n groupNodes.delete(group);\n for (const task of groupNode.tasks) {\n if (task.groups.every((taskGroup) => !groupNodes.has(taskGroup))) {\n removeTask(task);\n }\n }\n for (const childGroup of groupNode.childGroups) {\n const childGroupState = groupNodes.get(childGroup);\n if (childGroupState) {\n removeGroup(childGroup, childGroupState);\n }\n }\n }\n\n function removeTask(task: Task<T, I, G, S>): void {\n for (const group of task.groups) {\n const groupNode = groupNodes.get(group);\n groupNode?.tasks.delete(task);\n }\n taskNodes.delete(task);\n }\n}\n"]}