@graphitation/supermassive 3.17.2-canary.1 → 3.18.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.
package/CHANGELOG.md CHANGED
@@ -1,9 +1,25 @@
1
1
  # Change Log - @graphitation/supermassive
2
2
 
3
- <!-- This log was last generated on Wed, 15 Apr 2026 15:45:05 GMT and should not be manually modified. -->
3
+ <!-- This log was last generated on Thu, 16 Jul 2026 09:12:12 GMT and should not be manually modified. -->
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
+ ## 3.18.0
8
+
9
+ Thu, 16 Jul 2026 09:12:12 GMT
10
+
11
+ ### Minor changes
12
+
13
+ - early execution and merge (pavelglac@microsoft.com)
14
+
15
+ ## 3.17.1
16
+
17
+ Tue, 14 Jul 2026 09:11:43 GMT
18
+
19
+ ### Patches
20
+
21
+ - yarn upgrade (pavelglac@gmail.com)
22
+
7
23
  ## 3.17.0
8
24
 
9
25
  Wed, 15 Apr 2026 15:45:05 GMT
package/README.md CHANGED
@@ -63,6 +63,31 @@ However, APIs and response format _will_ change, expect breaking changes.
63
63
  > Note: see [this discussion](https://github.com/graphql/defer-stream-wg) of the new response format in the
64
64
  > defer and stream working group
65
65
 
66
+ #### Incremental delivery flags
67
+
68
+ The following optional execution arguments tune how deferred/streamed payloads are executed and delivered.
69
+
70
+ - **`enableEarlyExecution`** (`boolean`, default `false`) — When enabled, deferred fragments (`@defer`
71
+ patches) start executing immediately alongside the main selection set, instead of only after the initial
72
+ result has been resolved. This can reduce the overall latency of incremental payloads at the cost of doing
73
+ more work up front.
74
+
75
+ - **`enableDeferredMerge`** (`boolean`, default `false`) — When enabled, deferred fragments that have already
76
+ completed by the time the response is built are merged directly into their parent result instead of being
77
+ emitted as separate incremental payloads. This reduces the number of payloads a client has to process and
78
+ re-normalize.
79
+
80
+ - **`incrementalPayloadBatchingTimeoutMs`** (`number`, optional) — Sets a time window (in milliseconds) used to
81
+ batch incremental payloads together before they are delivered:
82
+ - In combination with `enableDeferredMerge`, execution waits up to this many milliseconds for pending
83
+ deferred fragments so they can be merged into the initial result rather than streamed separately.
84
+ - For the subsequent payload stream, multiple incremental results that complete within the window are
85
+ grouped into a single delivery.
86
+
87
+ A value of `0` (or a non-finite value) disables the wait. Note that the merge-into-initial-result behavior
88
+ requires `enableDeferredMerge`; without it the timeout only affects batching of the subsequent payload
89
+ stream.
90
+
66
91
  ### Possible future - pre-normalized executor
67
92
 
68
93
  In a scenario where executor is running close to the client (sometimes even in same process or at least in same browser), it might be worth exploring removing some of the requirements imposed by the usual GraphQL transport - for example serialization. Not only GraphQL executors do the JSON serialization, but also they return the data that is optimized for transport and that matches the query tree. This means clients need to perform often expensive normazilation. As traffic and message size might be less important in same process / same browser scenarios, it might be worthwhile exploring return pre-normalized data from supermassive. This offers massive speedups for some clients like Apollo ([see benchmarks](https://github.com/vladar/graphql-normalized)).
@@ -1,4 +1,4 @@
1
1
  import { PromiseOrValue } from "./jsutils/PromiseOrValue";
2
2
  import { ExecutionResult, ExecutionWithSchemaArgs } from "./types";
3
- export declare function executeWithSchema({ document, definitions, resolvers, rootValue, contextValue, variableValues, operationName, fieldResolver, typeResolver, fieldExecutionHooks, enablePerEventContext, }: ExecutionWithSchemaArgs): PromiseOrValue<ExecutionResult>;
3
+ export declare function executeWithSchema({ document, definitions, resolvers, rootValue, contextValue, variableValues, operationName, fieldResolver, typeResolver, fieldExecutionHooks, enablePerEventContext, enableEarlyExecution, enableDeferredMerge, incrementalPayloadBatchingTimeoutMs, }: ExecutionWithSchemaArgs): PromiseOrValue<ExecutionResult>;
4
4
  //# sourceMappingURL=executeWithSchema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"executeWithSchema.d.ts","sourceRoot":"","sources":["../src/executeWithSchema.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAGnE,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,GACtB,EAAE,uBAAuB,GAAG,cAAc,CAAC,eAAe,CAAC,CAqB3D"}
1
+ {"version":3,"file":"executeWithSchema.d.ts","sourceRoot":"","sources":["../src/executeWithSchema.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAGnE,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,mCAAmC,GACpC,EAAE,uBAAuB,GAAG,cAAc,CAAC,eAAe,CAAC,CAwB3D"}
@@ -35,7 +35,10 @@ function executeWithSchema({
35
35
  fieldResolver,
36
36
  typeResolver,
37
37
  fieldExecutionHooks,
38
- enablePerEventContext
38
+ enablePerEventContext,
39
+ enableEarlyExecution,
40
+ enableDeferredMerge,
41
+ incrementalPayloadBatchingTimeoutMs
39
42
  }) {
40
43
  const extracted = (0, import_extractMinimalViableSchemaForRequestDocument.extractMinimalViableSchemaForRequestDocument)(
41
44
  (0, import_graphql.buildASTSchema)(definitions),
@@ -55,6 +58,9 @@ function executeWithSchema({
55
58
  fieldResolver,
56
59
  typeResolver,
57
60
  fieldExecutionHooks,
58
- enablePerEventContext
61
+ enablePerEventContext,
62
+ enableEarlyExecution,
63
+ enableDeferredMerge,
64
+ incrementalPayloadBatchingTimeoutMs
59
65
  });
60
66
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/executeWithSchema.ts"],
4
- "sourcesContent": ["import { buildASTSchema } from \"graphql\";\nimport { executeWithoutSchema } from \"./index\";\nimport { PromiseOrValue } from \"./jsutils/PromiseOrValue\";\nimport { ExecutionResult, ExecutionWithSchemaArgs } from \"./types\";\nimport { extractMinimalViableSchemaForRequestDocument } from \"./utilities/extractMinimalViableSchemaForRequestDocument\";\n\nexport function executeWithSchema({\n document,\n definitions,\n resolvers,\n rootValue,\n contextValue,\n variableValues,\n operationName,\n fieldResolver,\n typeResolver,\n fieldExecutionHooks,\n enablePerEventContext,\n}: ExecutionWithSchemaArgs): PromiseOrValue<ExecutionResult> {\n const extracted = extractMinimalViableSchemaForRequestDocument(\n buildASTSchema(definitions),\n document,\n );\n return executeWithoutSchema({\n document,\n schemaFragment: {\n schemaId: \"executeWithSchema\",\n definitions: extracted.definitions,\n resolvers,\n },\n rootValue,\n contextValue,\n variableValues,\n operationName,\n fieldResolver,\n typeResolver,\n fieldExecutionHooks,\n enablePerEventContext,\n });\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA+B;AAC/B,mBAAqC;AAGrC,0DAA6D;AAEtD,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA6D;AAC3D,QAAM,gBAAY;AAAA,QAChB,+BAAe,WAAW;AAAA,IAC1B;AAAA,EACF;AACA,aAAO,mCAAqB;AAAA,IAC1B;AAAA,IACA,gBAAgB;AAAA,MACd,UAAU;AAAA,MACV,aAAa,UAAU;AAAA,MACvB;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;",
4
+ "sourcesContent": ["import { buildASTSchema } from \"graphql\";\nimport { executeWithoutSchema } from \"./index\";\nimport { PromiseOrValue } from \"./jsutils/PromiseOrValue\";\nimport { ExecutionResult, ExecutionWithSchemaArgs } from \"./types\";\nimport { extractMinimalViableSchemaForRequestDocument } from \"./utilities/extractMinimalViableSchemaForRequestDocument\";\n\nexport function executeWithSchema({\n document,\n definitions,\n resolvers,\n rootValue,\n contextValue,\n variableValues,\n operationName,\n fieldResolver,\n typeResolver,\n fieldExecutionHooks,\n enablePerEventContext,\n enableEarlyExecution,\n enableDeferredMerge,\n incrementalPayloadBatchingTimeoutMs,\n}: ExecutionWithSchemaArgs): PromiseOrValue<ExecutionResult> {\n const extracted = extractMinimalViableSchemaForRequestDocument(\n buildASTSchema(definitions),\n document,\n );\n return executeWithoutSchema({\n document,\n schemaFragment: {\n schemaId: \"executeWithSchema\",\n definitions: extracted.definitions,\n resolvers,\n },\n rootValue,\n contextValue,\n variableValues,\n operationName,\n fieldResolver,\n typeResolver,\n fieldExecutionHooks,\n enablePerEventContext,\n enableEarlyExecution,\n enableDeferredMerge,\n incrementalPayloadBatchingTimeoutMs,\n });\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA+B;AAC/B,mBAAqC;AAGrC,0DAA6D;AAEtD,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA6D;AAC3D,QAAM,gBAAY;AAAA,QAChB,+BAAe,WAAW;AAAA,IAC1B;AAAA,EACF;AACA,aAAO,mCAAqB;AAAA,IAC1B;AAAA,IACA,gBAAgB;AAAA,MACd,UAAU;AAAA,MACV,aAAa,UAAU;AAAA,MACvB;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;",
6
6
  "names": []
7
7
  }
@@ -13,7 +13,10 @@ function executeWithSchema({
13
13
  fieldResolver,
14
14
  typeResolver,
15
15
  fieldExecutionHooks,
16
- enablePerEventContext
16
+ enablePerEventContext,
17
+ enableEarlyExecution,
18
+ enableDeferredMerge,
19
+ incrementalPayloadBatchingTimeoutMs
17
20
  }) {
18
21
  const extracted = extractMinimalViableSchemaForRequestDocument(
19
22
  buildASTSchema(definitions),
@@ -33,7 +36,10 @@ function executeWithSchema({
33
36
  fieldResolver,
34
37
  typeResolver,
35
38
  fieldExecutionHooks,
36
- enablePerEventContext
39
+ enablePerEventContext,
40
+ enableEarlyExecution,
41
+ enableDeferredMerge,
42
+ incrementalPayloadBatchingTimeoutMs
37
43
  });
38
44
  }
39
45
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/executeWithSchema.ts"],
4
- "sourcesContent": ["import { buildASTSchema } from \"graphql\";\nimport { executeWithoutSchema } from \"./index\";\nimport { PromiseOrValue } from \"./jsutils/PromiseOrValue\";\nimport { ExecutionResult, ExecutionWithSchemaArgs } from \"./types\";\nimport { extractMinimalViableSchemaForRequestDocument } from \"./utilities/extractMinimalViableSchemaForRequestDocument\";\n\nexport function executeWithSchema({\n document,\n definitions,\n resolvers,\n rootValue,\n contextValue,\n variableValues,\n operationName,\n fieldResolver,\n typeResolver,\n fieldExecutionHooks,\n enablePerEventContext,\n}: ExecutionWithSchemaArgs): PromiseOrValue<ExecutionResult> {\n const extracted = extractMinimalViableSchemaForRequestDocument(\n buildASTSchema(definitions),\n document,\n );\n return executeWithoutSchema({\n document,\n schemaFragment: {\n schemaId: \"executeWithSchema\",\n definitions: extracted.definitions,\n resolvers,\n },\n rootValue,\n contextValue,\n variableValues,\n operationName,\n fieldResolver,\n typeResolver,\n fieldExecutionHooks,\n enablePerEventContext,\n });\n}\n"],
5
- "mappings": ";AAAA,SAAS,sBAAsB;AAC/B,SAAS,4BAA4B;AAGrC,SAAS,oDAAoD;AAEtD,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA6D;AAC3D,QAAM,YAAY;AAAA,IAChB,eAAe,WAAW;AAAA,IAC1B;AAAA,EACF;AACA,SAAO,qBAAqB;AAAA,IAC1B;AAAA,IACA,gBAAgB;AAAA,MACd,UAAU;AAAA,MACV,aAAa,UAAU;AAAA,MACvB;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;",
4
+ "sourcesContent": ["import { buildASTSchema } from \"graphql\";\nimport { executeWithoutSchema } from \"./index\";\nimport { PromiseOrValue } from \"./jsutils/PromiseOrValue\";\nimport { ExecutionResult, ExecutionWithSchemaArgs } from \"./types\";\nimport { extractMinimalViableSchemaForRequestDocument } from \"./utilities/extractMinimalViableSchemaForRequestDocument\";\n\nexport function executeWithSchema({\n document,\n definitions,\n resolvers,\n rootValue,\n contextValue,\n variableValues,\n operationName,\n fieldResolver,\n typeResolver,\n fieldExecutionHooks,\n enablePerEventContext,\n enableEarlyExecution,\n enableDeferredMerge,\n incrementalPayloadBatchingTimeoutMs,\n}: ExecutionWithSchemaArgs): PromiseOrValue<ExecutionResult> {\n const extracted = extractMinimalViableSchemaForRequestDocument(\n buildASTSchema(definitions),\n document,\n );\n return executeWithoutSchema({\n document,\n schemaFragment: {\n schemaId: \"executeWithSchema\",\n definitions: extracted.definitions,\n resolvers,\n },\n rootValue,\n contextValue,\n variableValues,\n operationName,\n fieldResolver,\n typeResolver,\n fieldExecutionHooks,\n enablePerEventContext,\n enableEarlyExecution,\n enableDeferredMerge,\n incrementalPayloadBatchingTimeoutMs,\n });\n}\n"],
5
+ "mappings": ";AAAA,SAAS,sBAAsB;AAC/B,SAAS,4BAA4B;AAGrC,SAAS,oDAAoD;AAEtD,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA6D;AAC3D,QAAM,YAAY;AAAA,IAChB,eAAe,WAAW;AAAA,IAC1B;AAAA,EACF;AACA,SAAO,qBAAqB;AAAA,IAC1B;AAAA,IACA,gBAAgB;AAAA,MACd,UAAU;AAAA,MACV,aAAa,UAAU;AAAA,MACvB;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;",
6
6
  "names": []
7
7
  }
@@ -49,6 +49,9 @@ export interface ExecutionContext {
49
49
  fieldExecutionHooks?: ExecutionHooks;
50
50
  subsequentPayloads: Set<IncrementalDataRecord>;
51
51
  enablePerEventContext: boolean;
52
+ enableEarlyExecution: boolean;
53
+ enableDeferredMerge: boolean;
54
+ incrementalPayloadBatchingTimeoutMs?: number;
52
55
  }
53
56
  /**
54
57
  * Implements the "Executing requests" section of the GraphQL specification.
@@ -111,6 +114,7 @@ declare class DeferredFragmentRecord {
111
114
  parentContext: IncrementalDataRecord | undefined;
112
115
  exeContext: ExecutionContext;
113
116
  });
117
+ private complete;
114
118
  addData(data: PromiseOrValue<ObjMap<unknown> | null>): void;
115
119
  }
116
120
  declare class StreamItemsRecord {
@@ -1 +1 @@
1
- {"version":3,"file":"executeWithoutSchema.d.ts","sourceRoot":"","sources":["../src/executeWithoutSchema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"executeWithoutSchema.d.ts","sourceRoot":"","sources":["../src/executeWithoutSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAIZ,YAAY,EACZ,sBAAsB,EACtB,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,SAAS,CAAC;AACjB,OAAO,EAGL,UAAU,EAGX,MAAM,iBAAiB,CAAC;AAQzB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAG3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,KAAK,EACV,0BAA0B,EAC1B,qBAAqB,EACrB,WAAW,EACX,YAAY,EACZ,eAAe,EACf,oBAAoB,EAKpB,0BAA0B,EAC1B,cAAc,EACd,oBAAoB,EAErB,MAAM,SAAS,CAAC;AAMjB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAgCpD;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,SAAS,EAAE,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC;IACxD,SAAS,EAAE,uBAAuB,CAAC;IACnC,cAAc,EAAE;QAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAChD,aAAa,EAAE,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACvD,YAAY,EAAE,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,sBAAsB,EAAE,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChE,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5B,mBAAmB,CAAC,EAAE,cAAc,CAAC;IACrC,kBAAkB,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAC/C,qBAAqB,EAAE,OAAO,CAAC;IAC/B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,mCAAmC,CAAC,EAAE,MAAM,CAAC;CAC9C;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,0BAA0B,GAC/B,cAAc,CAAC,eAAe,CAAC,CAWjC;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,YAAY,EACtB,iBAAiB,EAAE,KAAK,CAAC;IAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,GACxD,IAAI,CAQN;AAu6BD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,gBAAgB,EAC5B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,IAAI,GACT,WAAW,CAcb;AAk3CD;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,EAAE,YAAY,CAAC,OAAO,EAAE,OAAO,CAM9D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAWtE,CAAC;AAEJ,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,uBAAuB,GAAG,2BAA2B,GAC/D,MAAM,CAcR;AAgdD,MAAM,MAAM,qBAAqB,GAAG,sBAAsB,GAAG,iBAAiB,CAAC;AAc/E,cAAM,sBAAsB;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACjD,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;gBAErD,IAAI,EAAE;QAChB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;QACvB,aAAa,EAAE,qBAAqB,GAAG,SAAS,CAAC;QACjD,UAAU,EAAE,gBAAgB,CAAC;KAC9B;IAiBD,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;CAWrD;AAED,cAAM,iBAAiB;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAC7B,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,aAAa,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACjD,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IAClD,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;gBAEpD,IAAI,EAAE;QAChB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;QACvB,aAAa,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;QACvC,aAAa,EAAE,qBAAqB,GAAG,SAAS,CAAC;QACjD,UAAU,EAAE,gBAAgB,CAAC;KAC9B;IAsBD,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IASrD,2BAA2B;CAG5B;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,EACvB,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,EAE7B,MAAM,EAAE,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,GAC1C,MAAM,IAAI,0BAA0B,CAAC,KAAK,EAAE,WAAW,CAAC,CAE1D;AAED,wBAAgB,sBAAsB,CACpC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,EACvB,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,EAE7B,MAAM,EAAE,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,GAC1C,MAAM,IAAI,oBAAoB,CAAC,KAAK,EAAE,WAAW,CAAC,CAEpD"}
@@ -41,6 +41,7 @@ module.exports = __toCommonJS(executeWithoutSchema_exports);
41
41
  var import_graphql = require("graphql");
42
42
  var import_collectFields = require("./collectFields");
43
43
  var import_devAssert = require("./jsutils/devAssert");
44
+ var import_getObjectAtPath = require("./jsutils/getObjectAtPath");
44
45
  var import_inspect = require("./jsutils/inspect");
45
46
  var import_invariant = require("./jsutils/invariant");
46
47
  var import_isIterableObject = require("./jsutils/isIterableObject");
@@ -91,7 +92,10 @@ function buildExecutionContext(args) {
91
92
  typeResolver,
92
93
  subscribeFieldResolver,
93
94
  fieldExecutionHooks,
94
- enablePerEventContext
95
+ enablePerEventContext,
96
+ enableEarlyExecution,
97
+ enableDeferredMerge,
98
+ incrementalPayloadBatchingTimeoutMs
95
99
  } = args;
96
100
  assertValidExecutionArguments(document, variableValues);
97
101
  let operation;
@@ -149,7 +153,10 @@ function buildExecutionContext(args) {
149
153
  errors: [],
150
154
  fieldExecutionHooks,
151
155
  subsequentPayloads: /* @__PURE__ */ new Set(),
152
- enablePerEventContext: enablePerEventContext != null ? enablePerEventContext : true
156
+ enablePerEventContext: enablePerEventContext != null ? enablePerEventContext : true,
157
+ enableEarlyExecution: enableEarlyExecution != null ? enableEarlyExecution : false,
158
+ enableDeferredMerge: enableDeferredMerge != null ? enableDeferredMerge : false,
159
+ incrementalPayloadBatchingTimeoutMs
153
160
  };
154
161
  }
155
162
  function buildPerEventExecutionContext(exeContext, payload) {
@@ -198,7 +205,8 @@ function executeOperation(exeContext) {
198
205
  rootValue,
199
206
  path,
200
207
  groupedFieldSet,
201
- void 0
208
+ void 0,
209
+ exeContext.enableEarlyExecution ? patches : void 0
202
210
  );
203
211
  result = buildResponse(exeContext, result);
204
212
  break;
@@ -208,7 +216,8 @@ function executeOperation(exeContext) {
208
216
  rootTypeName,
209
217
  rootValue,
210
218
  path,
211
- groupedFieldSet
219
+ groupedFieldSet,
220
+ exeContext.enableEarlyExecution ? patches : void 0
212
221
  );
213
222
  result = buildResponse(exeContext, result);
214
223
  break;
@@ -229,16 +238,18 @@ function executeOperation(exeContext) {
229
238
  `Operation "${operation.operation}" is not a part of GraphQL spec`
230
239
  );
231
240
  }
232
- for (const patch of patches) {
233
- const { label, groupedFieldSet: patchGroupedFieldSet } = patch;
234
- executeDeferredFragment(
235
- exeContext,
236
- rootTypeName,
237
- rootValue,
238
- patchGroupedFieldSet,
239
- label,
240
- path
241
- );
241
+ if (!exeContext.enableEarlyExecution) {
242
+ for (const patch of patches) {
243
+ const { label, groupedFieldSet: patchGroupedFieldSet } = patch;
244
+ executeDeferredFragment(
245
+ exeContext,
246
+ rootTypeName,
247
+ rootValue,
248
+ patchGroupedFieldSet,
249
+ label,
250
+ path
251
+ );
252
+ }
242
253
  }
243
254
  return result;
244
255
  } catch (error) {
@@ -246,7 +257,7 @@ function executeOperation(exeContext) {
246
257
  return buildResponse(exeContext, null);
247
258
  }
248
259
  }
249
- function buildResponse(exeContext, data) {
260
+ function buildResponse(exeContext, data, deferredMergeAwaited = false) {
250
261
  var _a, _b;
251
262
  if ((0, import_isPromise.isPromise)(data)) {
252
263
  return data.then(
@@ -259,6 +270,16 @@ function buildResponse(exeContext, data) {
259
270
  }
260
271
  const hooks = exeContext.fieldExecutionHooks;
261
272
  try {
273
+ if (exeContext.enableDeferredMerge && data !== null) {
274
+ const pendingDeferredFragments = includeCompletedDeferredFragmentsInResult(exeContext, data);
275
+ const batchTimeout = exeContext.incrementalPayloadBatchingTimeoutMs;
276
+ if (typeof batchTimeout === "number" && !deferredMergeAwaited && pendingDeferredFragments.length > 0) {
277
+ return raceIncrementalPayloadBatch(
278
+ pendingDeferredFragments,
279
+ batchTimeout
280
+ ).then(() => buildResponse(exeContext, data, true));
281
+ }
282
+ }
262
283
  const initialResult = exeContext.errors.length === 0 ? { data } : { errors: exeContext.errors, data };
263
284
  if (exeContext.subsequentPayloads.size > 0) {
264
285
  return {
@@ -288,7 +309,17 @@ function buildResponse(exeContext, data) {
288
309
  return buildResponse(exeContext, null);
289
310
  }
290
311
  }
291
- function executeFieldsSerially(exeContext, parentTypeName, sourceValue, path, groupedFieldSet) {
312
+ function executeFieldsSerially(exeContext, parentTypeName, sourceValue, path, groupedFieldSet, patches) {
313
+ if (exeContext.enableEarlyExecution) {
314
+ startExecutingPatches(
315
+ exeContext,
316
+ parentTypeName,
317
+ sourceValue,
318
+ path,
319
+ patches,
320
+ void 0
321
+ );
322
+ }
292
323
  return (0, import_promiseReduce.promiseReduce)(
293
324
  groupedFieldSet,
294
325
  (results, [responseName, fieldGroup]) => {
@@ -319,9 +350,19 @@ function executeFieldsSerially(exeContext, parentTypeName, sourceValue, path, gr
319
350
  /* @__PURE__ */ Object.create(null)
320
351
  );
321
352
  }
322
- function executeFields(exeContext, parentTypeName, sourceValue, path, groupedFieldSet, incrementalDataRecord) {
353
+ function executeFields(exeContext, parentTypeName, sourceValue, path, groupedFieldSet, incrementalDataRecord, patches) {
323
354
  const results = /* @__PURE__ */ Object.create(null);
324
355
  let containsPromise = false;
356
+ if (exeContext.enableEarlyExecution) {
357
+ startExecutingPatches(
358
+ exeContext,
359
+ parentTypeName,
360
+ sourceValue,
361
+ path,
362
+ patches,
363
+ incrementalDataRecord
364
+ );
365
+ }
325
366
  try {
326
367
  for (const [responseName, fieldGroup] of groupedFieldSet) {
327
368
  const fieldPath = (0, import_Path.addPath)(path, responseName, parentTypeName);
@@ -353,6 +394,46 @@ function executeFields(exeContext, parentTypeName, sourceValue, path, groupedFie
353
394
  }
354
395
  return (0, import_promiseForObject.promiseForObject)(results);
355
396
  }
397
+ function startExecutingPatches(exeContext, parentTypeName, sourceValue, path, patches, incrementalDataRecord) {
398
+ if (!patches) {
399
+ return;
400
+ }
401
+ for (const { label, groupedFieldSet: patchGroupedFieldSet } of patches) {
402
+ executeDeferredFragment(
403
+ exeContext,
404
+ parentTypeName,
405
+ sourceValue,
406
+ patchGroupedFieldSet,
407
+ label,
408
+ path,
409
+ incrementalDataRecord
410
+ );
411
+ }
412
+ }
413
+ function includeCompletedDeferredFragmentsInResult(exeContext, result) {
414
+ const pendingDeferredFragments = [];
415
+ for (const incrementalDataRecord of exeContext.subsequentPayloads) {
416
+ if (!isDeferredFragmentRecord(incrementalDataRecord)) {
417
+ continue;
418
+ }
419
+ if (!incrementalDataRecord.isCompleted) {
420
+ pendingDeferredFragments.push(incrementalDataRecord.promise);
421
+ continue;
422
+ }
423
+ const target = (0, import_getObjectAtPath.getObjectAtPath)(result, incrementalDataRecord.path);
424
+ if (!target) {
425
+ continue;
426
+ }
427
+ if (incrementalDataRecord.data != null) {
428
+ Object.assign(target, incrementalDataRecord.data);
429
+ }
430
+ if (incrementalDataRecord.errors.length > 0) {
431
+ exeContext.errors.push(...incrementalDataRecord.errors);
432
+ }
433
+ exeContext.subsequentPayloads.delete(incrementalDataRecord);
434
+ }
435
+ return pendingDeferredFragments;
436
+ }
356
437
  function executeField(exeContext, parentTypeName, source, fieldGroup, path, incrementalDataRecord) {
357
438
  const schemaFragment = exeContext.schemaFragment;
358
439
  const fieldName = fieldGroup[0].name.value;
@@ -1330,6 +1411,17 @@ function completeObjectValue(exeContext, returnTypeName, fieldGroup, path, resul
1330
1411
  }
1331
1412
  function collectAndExecuteSubfields(exeContext, returnTypeName, fieldGroup, path, result, incrementalDataRecord) {
1332
1413
  const { groupedFieldSet: subGroupedFieldSet, patches: subPatches } = collectSubfields(exeContext, { name: returnTypeName }, fieldGroup);
1414
+ if (exeContext.enableEarlyExecution) {
1415
+ return executeFields(
1416
+ exeContext,
1417
+ returnTypeName,
1418
+ result,
1419
+ path,
1420
+ subGroupedFieldSet,
1421
+ incrementalDataRecord,
1422
+ subPatches
1423
+ );
1424
+ }
1333
1425
  const subFields = executeFields(
1334
1426
  exeContext,
1335
1427
  returnTypeName,
@@ -1948,6 +2040,34 @@ function getCompletedIncrementalResults(exeContext) {
1948
2040
  }
1949
2041
  return incrementalResults;
1950
2042
  }
2043
+ async function getCompletedIncrementalResultsWithBatching(exeContext, batchTimeout) {
2044
+ const incremental = getCompletedIncrementalResults(exeContext);
2045
+ if (incremental.length && exeContext.subsequentPayloads.size > 0) {
2046
+ await raceIncrementalPayloadBatch(
2047
+ Array.from(exeContext.subsequentPayloads).map((p) => p.promise),
2048
+ batchTimeout
2049
+ );
2050
+ incremental.push(...getCompletedIncrementalResults(exeContext));
2051
+ }
2052
+ return incremental;
2053
+ }
2054
+ function raceIncrementalPayloadBatch(promises, batchTimeout) {
2055
+ if (!Number.isFinite(batchTimeout) || batchTimeout <= 0) {
2056
+ return Promise.resolve();
2057
+ }
2058
+ let timeoutId;
2059
+ const timeoutPromise = new Promise((resolve) => {
2060
+ timeoutId = setTimeout(resolve, batchTimeout);
2061
+ });
2062
+ return Promise.race([
2063
+ Promise.all(promises).then(() => void 0),
2064
+ timeoutPromise
2065
+ ]).finally(() => {
2066
+ if (timeoutId !== void 0) {
2067
+ clearTimeout(timeoutId);
2068
+ }
2069
+ });
2070
+ }
1951
2071
  function yieldSubsequentPayloads(exeContext) {
1952
2072
  let isDone = false;
1953
2073
  async function next() {
@@ -1960,7 +2080,11 @@ function yieldSubsequentPayloads(exeContext) {
1960
2080
  if (isDone) {
1961
2081
  return { value: void 0, done: true };
1962
2082
  }
1963
- const incremental = getCompletedIncrementalResults(exeContext);
2083
+ const batchTimeout = exeContext.incrementalPayloadBatchingTimeoutMs;
2084
+ const incremental = typeof batchTimeout === "number" ? await getCompletedIncrementalResultsWithBatching(
2085
+ exeContext,
2086
+ batchTimeout
2087
+ ) : getCompletedIncrementalResults(exeContext);
1964
2088
  const hasNext = exeContext.subsequentPayloads.size > 0;
1965
2089
  if (!incremental.length && hasNext) {
1966
2090
  return next();
@@ -2003,6 +2127,9 @@ function yieldSubsequentPayloads(exeContext) {
2003
2127
  function isStreamItemsRecord(incrementalDataRecord) {
2004
2128
  return incrementalDataRecord.type === "stream";
2005
2129
  }
2130
+ function isDeferredFragmentRecord(incrementalDataRecord) {
2131
+ return incrementalDataRecord.type === "defer";
2132
+ }
2006
2133
  class DeferredFragmentRecord {
2007
2134
  constructor(opts) {
2008
2135
  this.type = "defer";
@@ -2018,10 +2145,11 @@ class DeferredFragmentRecord {
2018
2145
  this._resolve = (promiseOrValue) => {
2019
2146
  resolve(promiseOrValue);
2020
2147
  };
2021
- }).then((data) => {
2022
- this.data = data;
2023
- this.isCompleted = true;
2024
- });
2148
+ }).then((data) => this.complete(data));
2149
+ }
2150
+ complete(data) {
2151
+ this.data = data;
2152
+ this.isCompleted = true;
2025
2153
  }
2026
2154
  addData(data) {
2027
2155
  var _a, _b, _c;
@@ -2030,6 +2158,9 @@ class DeferredFragmentRecord {
2030
2158
  (_b = this._resolve) == null ? void 0 : _b.call(this, parentData.then(() => data));
2031
2159
  return;
2032
2160
  }
2161
+ if (!(0, import_isPromise.isPromise)(data)) {
2162
+ this.complete(data);
2163
+ }
2033
2164
  (_c = this._resolve) == null ? void 0 : _c.call(this, data);
2034
2165
  }
2035
2166
  }