Skip to content

Commit 364cd71

Browse files
authored
incrementalDelivery: remove singleResult wrapper (#3733)
extracted from #3732
1 parent a358757 commit 364cd71

File tree

5 files changed

+36
-36
lines changed

5 files changed

+36
-36
lines changed

src/execution/__tests__/defer-test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ async function complete(document: DocumentNode) {
9999
}
100100
return results;
101101
}
102-
return result.singleResult;
102+
return result;
103103
}
104104

105105
describe('Execute: defer directive', () => {

src/execution/__tests__/stream-test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ async function complete(document: DocumentNode, rootValue: unknown = {}) {
9898
}
9999
return results;
100100
}
101-
return result.singleResult;
101+
return result;
102102
}
103103

104104
async function completeAsync(

src/execution/execute.ts

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -151,19 +151,17 @@ export interface FormattedExecutionResult<
151151
extensions?: TExtensions;
152152
}
153153

154-
export type ExperimentalExecuteIncrementallyResults<
154+
export interface ExperimentalIncrementalExecutionResults<
155155
TData = ObjMap<unknown>,
156156
TExtensions = ObjMap<unknown>,
157-
> =
158-
| { singleResult: ExecutionResult<TData, TExtensions> }
159-
| {
160-
initialResult: InitialIncrementalExecutionResult<TData, TExtensions>;
161-
subsequentResults: AsyncGenerator<
162-
SubsequentIncrementalExecutionResult<TData, TExtensions>,
163-
void,
164-
void
165-
>;
166-
};
157+
> {
158+
initialResult: InitialIncrementalExecutionResult<TData, TExtensions>;
159+
subsequentResults: AsyncGenerator<
160+
SubsequentIncrementalExecutionResult<TData, TExtensions>,
161+
void,
162+
void
163+
>;
164+
}
167165

168166
export interface InitialIncrementalExecutionResult<
169167
TData = ObjMap<unknown>,
@@ -287,19 +285,19 @@ const UNEXPECTED_MULTIPLE_PAYLOADS =
287285
export function execute(args: ExecutionArgs): PromiseOrValue<ExecutionResult> {
288286
const result = experimentalExecuteIncrementally(args);
289287
if (!isPromise(result)) {
290-
if ('singleResult' in result) {
291-
return result.singleResult;
288+
if ('initialResult' in result) {
289+
throw new Error(UNEXPECTED_MULTIPLE_PAYLOADS);
292290
}
293-
throw new Error(UNEXPECTED_MULTIPLE_PAYLOADS);
291+
return result;
294292
}
295293

296294
return result.then((incrementalResult) => {
297-
if ('singleResult' in incrementalResult) {
298-
return incrementalResult.singleResult;
295+
if ('initialResult' in incrementalResult) {
296+
return {
297+
errors: [new GraphQLError(UNEXPECTED_MULTIPLE_PAYLOADS)],
298+
};
299299
}
300-
return {
301-
errors: [new GraphQLError(UNEXPECTED_MULTIPLE_PAYLOADS)],
302-
};
300+
return incrementalResult;
303301
});
304302
}
305303

@@ -308,31 +306,31 @@ export function execute(args: ExecutionArgs): PromiseOrValue<ExecutionResult> {
308306
* including `@defer` and `@stream` as proposed in
309307
* https://github.com/graphql/graphql-spec/pull/742
310308
*
311-
* This function returns a Promise of an ExperimentalExecuteIncrementallyResults
312-
* object. This object either contains a single ExecutionResult as
313-
* `singleResult`, or an `initialResult` and a stream of `subsequentResults`.
309+
* This function returns a Promise of an ExperimentalIncrementalExecutionResults
310+
* object. This object either consists of a single ExecutionResult, or an
311+
* object containing an `initialResult` and a stream of `subsequentResults`.
314312
*
315313
* If the arguments to this function do not result in a legal execution context,
316314
* a GraphQLError will be thrown immediately explaining the invalid input.
317315
*/
318316
export function experimentalExecuteIncrementally(
319317
args: ExecutionArgs,
320-
): PromiseOrValue<ExperimentalExecuteIncrementallyResults> {
318+
): PromiseOrValue<ExecutionResult | ExperimentalIncrementalExecutionResults> {
321319
// If a valid execution context cannot be created due to incorrect arguments,
322320
// a "Response" with only errors is returned.
323321
const exeContext = buildExecutionContext(args);
324322

325323
// Return early errors if execution context failed.
326324
if (!('schema' in exeContext)) {
327-
return { singleResult: { errors: exeContext } };
325+
return { errors: exeContext };
328326
}
329327

330328
return executeImpl(exeContext);
331329
}
332330

333331
function executeImpl(
334332
exeContext: ExecutionContext,
335-
): PromiseOrValue<ExperimentalExecuteIncrementallyResults> {
333+
): PromiseOrValue<ExecutionResult | ExperimentalIncrementalExecutionResults> {
336334
// Return a Promise that will eventually resolve to the data described by
337335
// The "Response" section of the GraphQL specification.
338336
//
@@ -359,11 +357,11 @@ function executeImpl(
359357
subsequentResults: yieldSubsequentPayloads(exeContext),
360358
};
361359
}
362-
return { singleResult: initialResult };
360+
return initialResult;
363361
},
364362
(error) => {
365363
exeContext.errors.push(error);
366-
return { singleResult: buildResponse(null, exeContext.errors) };
364+
return buildResponse(null, exeContext.errors);
367365
},
368366
);
369367
}
@@ -377,10 +375,10 @@ function executeImpl(
377375
subsequentResults: yieldSubsequentPayloads(exeContext),
378376
};
379377
}
380-
return { singleResult: initialResult };
378+
return initialResult;
381379
} catch (error) {
382380
exeContext.errors.push(error);
383-
return { singleResult: buildResponse(null, exeContext.errors) };
381+
return buildResponse(null, exeContext.errors);
384382
}
385383
}
386384

@@ -397,7 +395,7 @@ export function executeSync(args: ExecutionArgs): ExecutionResult {
397395
throw new Error('GraphQL execution failed to complete synchronously.');
398396
}
399397

400-
return result.singleResult;
398+
return result;
401399
}
402400

403401
/**
@@ -1586,7 +1584,9 @@ export function experimentalSubscribeIncrementally(
15861584
}
15871585

15881586
async function* ensureAsyncIterable(
1589-
someExecutionResult: ExperimentalExecuteIncrementallyResults,
1587+
someExecutionResult:
1588+
| ExecutionResult
1589+
| ExperimentalIncrementalExecutionResults,
15901590
): AsyncGenerator<
15911591
| ExecutionResult
15921592
| InitialIncrementalExecutionResult
@@ -1598,7 +1598,7 @@ async function* ensureAsyncIterable(
15981598
yield someExecutionResult.initialResult;
15991599
yield* someExecutionResult.subsequentResults;
16001600
} else {
1601-
yield someExecutionResult.singleResult;
1601+
yield someExecutionResult;
16021602
}
16031603
}
16041604

src/execution/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export {
1414
export type {
1515
ExecutionArgs,
1616
ExecutionResult,
17-
ExperimentalExecuteIncrementallyResults,
17+
ExperimentalIncrementalExecutionResults,
1818
InitialIncrementalExecutionResult,
1919
SubsequentIncrementalExecutionResult,
2020
IncrementalDeferResult,

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ export {
335335
export type {
336336
ExecutionArgs,
337337
ExecutionResult,
338-
ExperimentalExecuteIncrementallyResults,
338+
ExperimentalIncrementalExecutionResults,
339339
InitialIncrementalExecutionResult,
340340
SubsequentIncrementalExecutionResult,
341341
IncrementalDeferResult,

0 commit comments

Comments
 (0)