@graphql-tools/executor 0.0.7 → 0.0.8-alpha-20221111130406-e9278934

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.
@@ -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.initialResult;
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 new value_or_promise_1.ValueOrPromise(() => (0, execute_js_1.subscribe)(args))
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 new repeater_1.Repeater(async (push, stop) => {
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
  })
@@ -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.initialResult;
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 new ValueOrPromise(() => subscribe(args))
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 new Repeater(async (push, stop) => {
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@graphql-tools/executor",
3
- "version": "0.0.7",
3
+ "version": "0.0.8-alpha-20221111130406-e9278934",
4
4
  "sideEffects": false,
5
5
  "peerDependencies": {
6
6
  "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0"
@@ -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.