@graphql-tools/executor 0.0.7 → 0.0.8-alpha-20221111130709-2fa1f285
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/cjs/execution/execute.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isIncrementalResult = exports.getFieldDef = exports.createSourceEventStream = exports.subscribe = exports.defaultFieldResolver = exports.defaultTypeResolver = exports.buildResolveInfo = exports.buildExecutionContext = exports.assertValidExecutionArguments = exports.executeSync = exports.execute = void 0;
|
|
3
|
+
exports.isIncrementalResult = exports.getFieldDef = exports.createSourceEventStream = exports.flattenIncrementalResults = exports.subscribe = exports.defaultFieldResolver = exports.defaultTypeResolver = exports.buildResolveInfo = exports.buildExecutionContext = exports.assertValidExecutionArguments = exports.executeSync = exports.execute = void 0;
|
|
4
4
|
const graphql_1 = require("graphql");
|
|
5
5
|
const utils_1 = require("@graphql-tools/utils");
|
|
6
6
|
const values_js_1 = require("./values.js");
|
|
@@ -762,10 +762,44 @@ function subscribe(args) {
|
|
|
762
762
|
return mapSourceToResponse(exeContext, resultOrStream);
|
|
763
763
|
}
|
|
764
764
|
exports.subscribe = subscribe;
|
|
765
|
+
function flattenIncrementalResults(incrementalResults) {
|
|
766
|
+
const subsequentIterator = incrementalResults.subsequentResults;
|
|
767
|
+
let initialResultSent = false;
|
|
768
|
+
let done = false;
|
|
769
|
+
return {
|
|
770
|
+
[Symbol.asyncIterator]() {
|
|
771
|
+
return this;
|
|
772
|
+
},
|
|
773
|
+
async next() {
|
|
774
|
+
if (done) {
|
|
775
|
+
return {
|
|
776
|
+
value: undefined,
|
|
777
|
+
done,
|
|
778
|
+
};
|
|
779
|
+
}
|
|
780
|
+
if (initialResultSent) {
|
|
781
|
+
return subsequentIterator.next();
|
|
782
|
+
}
|
|
783
|
+
initialResultSent = true;
|
|
784
|
+
return Promise.resolve({
|
|
785
|
+
value: incrementalResults.initialResult,
|
|
786
|
+
done,
|
|
787
|
+
});
|
|
788
|
+
},
|
|
789
|
+
return() {
|
|
790
|
+
done = true;
|
|
791
|
+
return subsequentIterator.return();
|
|
792
|
+
},
|
|
793
|
+
throw(error) {
|
|
794
|
+
done = true;
|
|
795
|
+
return subsequentIterator.throw(error);
|
|
796
|
+
},
|
|
797
|
+
};
|
|
798
|
+
}
|
|
799
|
+
exports.flattenIncrementalResults = flattenIncrementalResults;
|
|
765
800
|
async function* ensureAsyncIterable(someExecutionResult) {
|
|
766
801
|
if ('initialResult' in someExecutionResult) {
|
|
767
|
-
yield someExecutionResult
|
|
768
|
-
yield* someExecutionResult.subsequentResults;
|
|
802
|
+
yield* flattenIncrementalResults(someExecutionResult);
|
|
769
803
|
}
|
|
770
804
|
else {
|
|
771
805
|
yield someExecutionResult;
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.normalizedExecutor = void 0;
|
|
4
|
-
const utils_1 = require("@graphql-tools/utils");
|
|
5
4
|
const graphql_1 = require("graphql");
|
|
6
5
|
const execute_js_1 = require("./execute.js");
|
|
7
|
-
const repeater_1 = require("@repeaterjs/repeater");
|
|
8
6
|
const value_or_promise_1 = require("value-or-promise");
|
|
9
7
|
function normalizedExecutor(args) {
|
|
10
8
|
const operationAST = (0, graphql_1.getOperationAST)(args.document, args.operationName);
|
|
@@ -12,56 +10,12 @@ function normalizedExecutor(args) {
|
|
|
12
10
|
throw new Error('Must provide an operation.');
|
|
13
11
|
}
|
|
14
12
|
if (operationAST.operation === 'subscription') {
|
|
15
|
-
return
|
|
16
|
-
.then((result) => {
|
|
17
|
-
if ((0, utils_1.isAsyncIterable)(result)) {
|
|
18
|
-
return new repeater_1.Repeater(async (push, stop) => {
|
|
19
|
-
let stopped = false;
|
|
20
|
-
stop.then(() => {
|
|
21
|
-
stopped = true;
|
|
22
|
-
});
|
|
23
|
-
let err;
|
|
24
|
-
try {
|
|
25
|
-
for await (const value of result) {
|
|
26
|
-
if (stopped) {
|
|
27
|
-
break;
|
|
28
|
-
}
|
|
29
|
-
await push(value);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
catch (e) {
|
|
33
|
-
err = e;
|
|
34
|
-
}
|
|
35
|
-
stop(err);
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
return result;
|
|
39
|
-
})
|
|
40
|
-
.resolve();
|
|
13
|
+
return (0, execute_js_1.subscribe)(args);
|
|
41
14
|
}
|
|
42
15
|
return new value_or_promise_1.ValueOrPromise(() => (0, execute_js_1.execute)(args))
|
|
43
16
|
.then((result) => {
|
|
44
17
|
if ('initialResult' in result) {
|
|
45
|
-
return
|
|
46
|
-
let stopped = false;
|
|
47
|
-
stop.then(() => {
|
|
48
|
-
stopped = true;
|
|
49
|
-
});
|
|
50
|
-
let err;
|
|
51
|
-
try {
|
|
52
|
-
await push(result.initialResult);
|
|
53
|
-
for await (const value of result.subsequentResults) {
|
|
54
|
-
if (stopped) {
|
|
55
|
-
break;
|
|
56
|
-
}
|
|
57
|
-
await push(value);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
catch (e) {
|
|
61
|
-
err = e;
|
|
62
|
-
}
|
|
63
|
-
stop(err);
|
|
64
|
-
});
|
|
18
|
+
return (0, execute_js_1.flattenIncrementalResults)(result);
|
|
65
19
|
}
|
|
66
20
|
return result;
|
|
67
21
|
})
|
package/esm/execution/execute.js
CHANGED
|
@@ -751,10 +751,43 @@ export function subscribe(args) {
|
|
|
751
751
|
}
|
|
752
752
|
return mapSourceToResponse(exeContext, resultOrStream);
|
|
753
753
|
}
|
|
754
|
+
export function flattenIncrementalResults(incrementalResults) {
|
|
755
|
+
const subsequentIterator = incrementalResults.subsequentResults;
|
|
756
|
+
let initialResultSent = false;
|
|
757
|
+
let done = false;
|
|
758
|
+
return {
|
|
759
|
+
[Symbol.asyncIterator]() {
|
|
760
|
+
return this;
|
|
761
|
+
},
|
|
762
|
+
async next() {
|
|
763
|
+
if (done) {
|
|
764
|
+
return {
|
|
765
|
+
value: undefined,
|
|
766
|
+
done,
|
|
767
|
+
};
|
|
768
|
+
}
|
|
769
|
+
if (initialResultSent) {
|
|
770
|
+
return subsequentIterator.next();
|
|
771
|
+
}
|
|
772
|
+
initialResultSent = true;
|
|
773
|
+
return Promise.resolve({
|
|
774
|
+
value: incrementalResults.initialResult,
|
|
775
|
+
done,
|
|
776
|
+
});
|
|
777
|
+
},
|
|
778
|
+
return() {
|
|
779
|
+
done = true;
|
|
780
|
+
return subsequentIterator.return();
|
|
781
|
+
},
|
|
782
|
+
throw(error) {
|
|
783
|
+
done = true;
|
|
784
|
+
return subsequentIterator.throw(error);
|
|
785
|
+
},
|
|
786
|
+
};
|
|
787
|
+
}
|
|
754
788
|
async function* ensureAsyncIterable(someExecutionResult) {
|
|
755
789
|
if ('initialResult' in someExecutionResult) {
|
|
756
|
-
yield someExecutionResult
|
|
757
|
-
yield* someExecutionResult.subsequentResults;
|
|
790
|
+
yield* flattenIncrementalResults(someExecutionResult);
|
|
758
791
|
}
|
|
759
792
|
else {
|
|
760
793
|
yield someExecutionResult;
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import { isAsyncIterable } from '@graphql-tools/utils';
|
|
2
1
|
import { getOperationAST } from 'graphql';
|
|
3
|
-
import { execute, subscribe } from './execute.js';
|
|
4
|
-
import { Repeater } from '@repeaterjs/repeater';
|
|
2
|
+
import { execute, flattenIncrementalResults, subscribe } from './execute.js';
|
|
5
3
|
import { ValueOrPromise } from 'value-or-promise';
|
|
6
4
|
export function normalizedExecutor(args) {
|
|
7
5
|
const operationAST = getOperationAST(args.document, args.operationName);
|
|
@@ -9,56 +7,12 @@ export function normalizedExecutor(args) {
|
|
|
9
7
|
throw new Error('Must provide an operation.');
|
|
10
8
|
}
|
|
11
9
|
if (operationAST.operation === 'subscription') {
|
|
12
|
-
return
|
|
13
|
-
.then((result) => {
|
|
14
|
-
if (isAsyncIterable(result)) {
|
|
15
|
-
return new Repeater(async (push, stop) => {
|
|
16
|
-
let stopped = false;
|
|
17
|
-
stop.then(() => {
|
|
18
|
-
stopped = true;
|
|
19
|
-
});
|
|
20
|
-
let err;
|
|
21
|
-
try {
|
|
22
|
-
for await (const value of result) {
|
|
23
|
-
if (stopped) {
|
|
24
|
-
break;
|
|
25
|
-
}
|
|
26
|
-
await push(value);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
catch (e) {
|
|
30
|
-
err = e;
|
|
31
|
-
}
|
|
32
|
-
stop(err);
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
return result;
|
|
36
|
-
})
|
|
37
|
-
.resolve();
|
|
10
|
+
return subscribe(args);
|
|
38
11
|
}
|
|
39
12
|
return new ValueOrPromise(() => execute(args))
|
|
40
13
|
.then((result) => {
|
|
41
14
|
if ('initialResult' in result) {
|
|
42
|
-
return
|
|
43
|
-
let stopped = false;
|
|
44
|
-
stop.then(() => {
|
|
45
|
-
stopped = true;
|
|
46
|
-
});
|
|
47
|
-
let err;
|
|
48
|
-
try {
|
|
49
|
-
await push(result.initialResult);
|
|
50
|
-
for await (const value of result.subsequentResults) {
|
|
51
|
-
if (stopped) {
|
|
52
|
-
break;
|
|
53
|
-
}
|
|
54
|
-
await push(value);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
catch (e) {
|
|
58
|
-
err = e;
|
|
59
|
-
}
|
|
60
|
-
stop(err);
|
|
61
|
-
});
|
|
15
|
+
return flattenIncrementalResults(result);
|
|
62
16
|
}
|
|
63
17
|
return result;
|
|
64
18
|
})
|
package/package.json
CHANGED
|
@@ -202,6 +202,7 @@ export declare const defaultFieldResolver: GraphQLFieldResolver<unknown, unknown
|
|
|
202
202
|
* Accepts an object with named arguments.
|
|
203
203
|
*/
|
|
204
204
|
export declare function subscribe<TData = any, TVariables = any, TContext = any>(args: ExecutionArgs<TData, TVariables, TContext>): MaybePromise<AsyncGenerator<SingularExecutionResult<TData> | InitialIncrementalExecutionResult<TData> | SubsequentIncrementalExecutionResult<TData>, void, void> | SingularExecutionResult<TData>>;
|
|
205
|
+
export declare function flattenIncrementalResults<TData>(incrementalResults: IncrementalExecutionResults<TData>): AsyncGenerator<SubsequentIncrementalExecutionResult<TData, Record<string, unknown>>, void, void>;
|
|
205
206
|
/**
|
|
206
207
|
* Implements the "CreateSourceEventStream" algorithm described in the
|
|
207
208
|
* GraphQL specification, resolving the subscription source event stream.
|
|
@@ -202,6 +202,7 @@ export declare const defaultFieldResolver: GraphQLFieldResolver<unknown, unknown
|
|
|
202
202
|
* Accepts an object with named arguments.
|
|
203
203
|
*/
|
|
204
204
|
export declare function subscribe<TData = any, TVariables = any, TContext = any>(args: ExecutionArgs<TData, TVariables, TContext>): MaybePromise<AsyncGenerator<SingularExecutionResult<TData> | InitialIncrementalExecutionResult<TData> | SubsequentIncrementalExecutionResult<TData>, void, void> | SingularExecutionResult<TData>>;
|
|
205
|
+
export declare function flattenIncrementalResults<TData>(incrementalResults: IncrementalExecutionResults<TData>): AsyncGenerator<SubsequentIncrementalExecutionResult<TData, Record<string, unknown>>, void, void>;
|
|
205
206
|
/**
|
|
206
207
|
* Implements the "CreateSourceEventStream" algorithm described in the
|
|
207
208
|
* GraphQL specification, resolving the subscription source event stream.
|