@apollo/client 3.7.7 → 3.7.9

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.
Files changed (36) hide show
  1. package/README.md +1 -1
  2. package/apollo-client.cjs +169 -162
  3. package/apollo-client.cjs.map +1 -1
  4. package/apollo-client.min.cjs +1 -1
  5. package/cache/cache.cjs +20 -21
  6. package/cache/cache.cjs.map +1 -1
  7. package/cache/cache.cjs.native.js +20 -21
  8. package/cache/inmemory/helpers.d.ts +2 -2
  9. package/cache/inmemory/helpers.d.ts.map +1 -1
  10. package/cache/inmemory/helpers.js +2 -2
  11. package/cache/inmemory/helpers.js.map +1 -1
  12. package/core/core.cjs +1 -1
  13. package/core/core.cjs.map +1 -1
  14. package/core/core.cjs.native.js +1 -1
  15. package/invariantErrorCodes.js +1 -1
  16. package/link/core/types.d.ts +5 -6
  17. package/link/core/types.d.ts.map +1 -1
  18. package/link/core/types.js.map +1 -1
  19. package/package.json +12 -12
  20. package/testing/core/mocking/mockLink.d.ts +2 -2
  21. package/testing/core/mocking/mockLink.d.ts.map +1 -1
  22. package/testing/core/mocking/mockLink.js.map +1 -1
  23. package/utilities/common/arrays.d.ts +1 -0
  24. package/utilities/common/arrays.d.ts.map +1 -1
  25. package/utilities/common/arrays.js +1 -0
  26. package/utilities/common/arrays.js.map +1 -1
  27. package/utilities/graphql/transform.d.ts.map +1 -1
  28. package/utilities/graphql/transform.js +167 -90
  29. package/utilities/graphql/transform.js.map +1 -1
  30. package/utilities/observables/Concast.d.ts.map +1 -1
  31. package/utilities/observables/Concast.js +2 -2
  32. package/utilities/observables/Concast.js.map +1 -1
  33. package/utilities/utilities.cjs +170 -102
  34. package/utilities/utilities.cjs.map +1 -1
  35. package/utilities/utilities.cjs.native.js +170 -102
  36. package/version.js +1 -1
@@ -15,7 +15,7 @@ var utils = require('../link/utils');
15
15
  var tsInvariant = require('ts-invariant');
16
16
  var graphqlTag = require('graphql-tag');
17
17
 
18
- var version = '3.7.7';
18
+ var version = '3.7.9';
19
19
 
20
20
  function isNonEmptyArray(value) {
21
21
  return Array.isArray(value) && value.length > 0;
@@ -5,7 +5,7 @@
5
5
  // consult the @apollo/client/invariantErrorCodes.js file specific to
6
6
  // your @apollo/client version. This file is not meant to be imported.
7
7
  {
8
- "@apollo/client version": "3.7.7",
8
+ "@apollo/client version": "3.7.9",
9
9
 
10
10
  1: {
11
11
  file: "@apollo/client/cache/inmemory/entityStore.js",
@@ -3,18 +3,17 @@ import { DefaultContext } from "../../core";
3
3
  export { DocumentNode };
4
4
  import { Observable } from "../../utilities";
5
5
  export type Path = ReadonlyArray<string | number>;
6
- type Data<T> = T | null | undefined;
7
6
  interface ExecutionPatchResultBase {
8
7
  hasNext?: boolean;
9
8
  }
10
9
  export interface ExecutionPatchInitialResult<TData = Record<string, any>, TExtensions = Record<string, any>> extends ExecutionPatchResultBase {
11
- data: Data<TData>;
10
+ data: TData | null | undefined;
12
11
  incremental?: never;
13
12
  errors?: ReadonlyArray<GraphQLError>;
14
13
  extensions?: TExtensions;
15
14
  }
16
15
  export interface IncrementalPayload<TData, TExtensions> {
17
- data: Data<TData>;
16
+ data: TData | null;
18
17
  label?: string;
19
18
  path: Path;
20
19
  errors?: ReadonlyArray<GraphQLError>;
@@ -27,9 +26,9 @@ export interface ExecutionPatchIncrementalResult<TData = Record<string, any>, TE
27
26
  extensions?: never;
28
27
  }
29
28
  export type ExecutionPatchResult<TData = Record<string, any>, TExtensions = Record<string, any>> = ExecutionPatchInitialResult<TData, TExtensions> | ExecutionPatchIncrementalResult<TData, TExtensions>;
30
- export interface GraphQLRequest {
29
+ export interface GraphQLRequest<TVariables = Record<string, any>> {
31
30
  query: DocumentNode;
32
- variables?: Record<string, any>;
31
+ variables?: TVariables;
33
32
  operationName?: string;
34
33
  context?: DefaultContext;
35
34
  extensions?: Record<string, any>;
@@ -43,7 +42,7 @@ export interface Operation {
43
42
  getContext: () => DefaultContext;
44
43
  }
45
44
  export interface SingleExecutionResult<TData = Record<string, any>, TContext = DefaultContext, TExtensions = Record<string, any>> extends ExecutionResult<TData, TExtensions> {
46
- data?: Data<TData>;
45
+ data?: TData | null;
47
46
  context?: TContext;
48
47
  }
49
48
  export type FetchResult<TData = Record<string, any>, TContext = Record<string, any>, TExtensions = Record<string, any>> = SingleExecutionResult<TData, TContext, TExtensions> | ExecutionPatchResult<TData, TExtensions>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/link/core/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/link/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AAElD,UAAU,wBAAwB;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B,CAC1C,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACjC,SAAQ,wBAAwB;IAEhC,IAAI,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC;IAC/B,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,MAAM,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IACrC,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB,CACjC,KAAK,EACL,WAAW;IAIX,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IACrC,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,+BAA+B,CAC9C,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACjC,SAAQ,wBAAwB;IAGhC,WAAW,CAAC,EAAE,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC;IACvD,IAAI,CAAC,EAAE,KAAK,CAAC;IAGb,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,UAAU,CAAC,EAAE,KAAK,CAAC;CACpB;AAED,MAAM,MAAM,oBAAoB,CAC9B,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAE/B,2BAA2B,CAAC,KAAK,EAAE,WAAW,CAAC,GAC/C,+BAA+B,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAExD,MAAM,WAAW,cAAc,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC9D,KAAK,EAAE,YAAY,CAAC;IACpB,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,YAAY,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,UAAU,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,cAAc,CAAC;IACxD,UAAU,EAAE,MAAM,cAAc,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB,CACpC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,QAAQ,GAAG,cAAc,EACzB,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACjC,SAAQ,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC;IAC3C,IAAI,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,MAAM,WAAW,CACrB,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC9B,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAE/B,qBAAqB,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,GACnD,oBAAoB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAE7C,MAAM,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,SAAS,KAAK,UAAU,CAAC,WAAW,CAAC,CAAC;AAEzE,MAAM,MAAM,cAAc,GAAG,CAC3B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,QAAQ,KACd,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/link/core/types.ts"],"names":[],"mappings":"","sourcesContent":["import { DocumentNode, ExecutionResult, GraphQLError } from \"graphql\";\nimport { DefaultContext } from \"../../core\";\nexport { DocumentNode };\n\nimport { Observable } from \"../../utilities\";\n\nexport type Path = ReadonlyArray<string | number>;\ntype Data<T> = T | null | undefined;\n\n\ninterface ExecutionPatchResultBase {\n hasNext?: boolean;\n}\n\nexport interface ExecutionPatchInitialResult<\n TData = Record<string, any>,\n TExtensions = Record<string, any>\n> extends ExecutionPatchResultBase {\n // if data is present, incremental is not\n data: Data<TData>;\n incremental?: never;\n errors?: ReadonlyArray<GraphQLError>;\n extensions?: TExtensions;\n}\n\nexport interface IncrementalPayload<\n TData,\n TExtensions,\n> {\n // data and path must both be present\n // https://github.com/graphql/graphql-spec/pull/742/files#diff-98d0cd153b72b63c417ad4238e8cc0d3385691ccbde7f7674bc0d2a718b896ecR288-R293\n data: Data<TData>;\n label?: string;\n path: Path;\n errors?: ReadonlyArray<GraphQLError>;\n extensions?: TExtensions;\n}\n\nexport interface ExecutionPatchIncrementalResult<\n TData = Record<string, any>,\n TExtensions = Record<string, any>\n> extends ExecutionPatchResultBase {\n // the reverse is also true: if incremental is present,\n // data (and errors and extensions) are not\n incremental?: IncrementalPayload<TData, TExtensions>[];\n data?: never;\n // Errors only exist for chunks, not at the top level\n // https://github.com/robrichard/defer-stream-wg/discussions/50#discussioncomment-3466739\n errors?: never;\n extensions?: never;\n}\n\nexport type ExecutionPatchResult<\n TData = Record<string, any>,\n TExtensions = Record<string, any>\n> =\n | ExecutionPatchInitialResult<TData, TExtensions>\n | ExecutionPatchIncrementalResult<TData, TExtensions>;\n\nexport interface GraphQLRequest {\n query: DocumentNode;\n variables?: Record<string, any>;\n operationName?: string;\n context?: DefaultContext;\n extensions?: Record<string, any>;\n}\n\nexport interface Operation {\n query: DocumentNode;\n variables: Record<string, any>;\n operationName: string;\n extensions: Record<string, any>;\n setContext: (context: DefaultContext) => DefaultContext;\n getContext: () => DefaultContext;\n}\n\nexport interface SingleExecutionResult<\n TData = Record<string, any>,\n TContext = DefaultContext,\n TExtensions = Record<string, any>\n> extends ExecutionResult<TData, TExtensions> {\n data?: Data<TData>;\n context?: TContext;\n}\n\nexport type FetchResult<\n TData = Record<string, any>,\n TContext = Record<string, any>,\n TExtensions = Record<string, any>\n> =\n | SingleExecutionResult<TData, TContext, TExtensions>\n | ExecutionPatchResult<TData, TExtensions>;\n\nexport type NextLink = (operation: Operation) => Observable<FetchResult>;\n\nexport type RequestHandler = (\n operation: Operation,\n forward: NextLink\n) => Observable<FetchResult> | null;\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/link/core/types.ts"],"names":[],"mappings":"","sourcesContent":["import { DocumentNode, ExecutionResult, GraphQLError } from \"graphql\";\nimport { DefaultContext } from \"../../core\";\nexport { DocumentNode };\n\nimport { Observable } from \"../../utilities\";\n\nexport type Path = ReadonlyArray<string | number>;\n\ninterface ExecutionPatchResultBase {\n hasNext?: boolean;\n}\n\nexport interface ExecutionPatchInitialResult<\n TData = Record<string, any>,\n TExtensions = Record<string, any>\n> extends ExecutionPatchResultBase {\n // if data is present, incremental is not\n data: TData | null | undefined;\n incremental?: never;\n errors?: ReadonlyArray<GraphQLError>;\n extensions?: TExtensions;\n}\n\nexport interface IncrementalPayload<\n TData,\n TExtensions,\n> {\n // data and path must both be present\n // https://github.com/graphql/graphql-spec/pull/742/files#diff-98d0cd153b72b63c417ad4238e8cc0d3385691ccbde7f7674bc0d2a718b896ecR288-R293\n data: TData | null;\n label?: string;\n path: Path;\n errors?: ReadonlyArray<GraphQLError>;\n extensions?: TExtensions;\n}\n\nexport interface ExecutionPatchIncrementalResult<\n TData = Record<string, any>,\n TExtensions = Record<string, any>\n> extends ExecutionPatchResultBase {\n // the reverse is also true: if incremental is present,\n // data (and errors and extensions) are not\n incremental?: IncrementalPayload<TData, TExtensions>[];\n data?: never;\n // Errors only exist for chunks, not at the top level\n // https://github.com/robrichard/defer-stream-wg/discussions/50#discussioncomment-3466739\n errors?: never;\n extensions?: never;\n}\n\nexport type ExecutionPatchResult<\n TData = Record<string, any>,\n TExtensions = Record<string, any>\n> =\n | ExecutionPatchInitialResult<TData, TExtensions>\n | ExecutionPatchIncrementalResult<TData, TExtensions>;\n\nexport interface GraphQLRequest<TVariables = Record<string, any>> {\n query: DocumentNode;\n variables?: TVariables;\n operationName?: string;\n context?: DefaultContext;\n extensions?: Record<string, any>;\n}\n\nexport interface Operation {\n query: DocumentNode;\n variables: Record<string, any>;\n operationName: string;\n extensions: Record<string, any>;\n setContext: (context: DefaultContext) => DefaultContext;\n getContext: () => DefaultContext;\n}\n\nexport interface SingleExecutionResult<\n TData = Record<string, any>,\n TContext = DefaultContext,\n TExtensions = Record<string, any>\n> extends ExecutionResult<TData, TExtensions> {\n data?: TData | null;\n context?: TContext;\n}\n\nexport type FetchResult<\n TData = Record<string, any>,\n TContext = Record<string, any>,\n TExtensions = Record<string, any>\n> =\n | SingleExecutionResult<TData, TContext, TExtensions>\n | ExecutionPatchResult<TData, TExtensions>;\n\nexport type NextLink = (operation: Operation) => Observable<FetchResult>;\n\nexport type RequestHandler = (\n operation: Operation,\n forward: NextLink\n) => Observable<FetchResult> | null;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apollo/client",
3
- "version": "3.7.7",
3
+ "version": "3.7.9",
4
4
  "description": "A fully-featured caching GraphQL client.",
5
5
  "private": false,
6
6
  "keywords": [
@@ -66,10 +66,10 @@
66
66
  "zen-observable-ts": "^1.2.5"
67
67
  },
68
68
  "devDependencies": {
69
- "@babel/parser": "7.20.13",
69
+ "@babel/parser": "7.20.15",
70
70
  "@changesets/changelog-github": "0.4.8",
71
71
  "@changesets/cli": "2.26.0",
72
- "@graphql-tools/schema": "9.0.14",
72
+ "@graphql-tools/schema": "9.0.16",
73
73
  "@rollup/plugin-node-resolve": "11.2.1",
74
74
  "@testing-library/react": "13.4.0",
75
75
  "@testing-library/react-12": "npm:@testing-library/react@^12",
@@ -81,23 +81,23 @@
81
81
  "@types/hoist-non-react-statics": "3.3.1",
82
82
  "@types/jest": "29.2.6",
83
83
  "@types/lodash": "4.14.191",
84
- "@types/node": "18.11.18",
84
+ "@types/node": "18.13.0",
85
85
  "@types/node-fetch": "2.6.2",
86
- "@types/react": "18.0.27",
86
+ "@types/react": "18.0.28",
87
87
  "@types/react-dom": "18.0.10",
88
88
  "@types/use-sync-external-store": "0.0.3",
89
- "@typescript-eslint/eslint-plugin": "5.49.0",
90
- "@typescript-eslint/parser": "5.49.0",
89
+ "@typescript-eslint/eslint-plugin": "5.51.0",
90
+ "@typescript-eslint/parser": "5.51.0",
91
91
  "acorn": "8.8.2",
92
92
  "blob-polyfill": "7.0.20220408",
93
93
  "bytes": "3.1.2",
94
94
  "cross-fetch": "3.1.5",
95
- "eslint": "8.33.0",
96
- "eslint-plugin-testing-library": "5.10.0",
95
+ "eslint": "8.34.0",
96
+ "eslint-plugin-testing-library": "5.10.1",
97
97
  "fetch-mock": "9.11.0",
98
98
  "glob": "8.1.0",
99
99
  "graphql": "16.6.0",
100
- "graphql-ws": "5.11.2",
100
+ "graphql-ws": "5.11.3",
101
101
  "jest": "29.3.1",
102
102
  "jest-environment-jsdom": "29.3.1",
103
103
  "jest-junit": "15.0.0",
@@ -114,11 +114,11 @@
114
114
  "rollup-plugin-terser": "7.0.2",
115
115
  "rxjs": "7.8.0",
116
116
  "subscriptions-transport-ws": "0.11.0",
117
- "terser": "5.16.1",
117
+ "terser": "5.16.3",
118
118
  "ts-jest": "29.0.5",
119
119
  "ts-node": "10.9.1",
120
120
  "typedoc": "0.22.18",
121
- "typescript": "4.9.4",
121
+ "typescript": "4.9.5",
122
122
  "wait-for-observables": "1.0.3",
123
123
  "web-streams-polyfill": "3.2.1",
124
124
  "whatwg-fetch": "3.6.2"
@@ -1,8 +1,8 @@
1
1
  import { ApolloLink, Operation, GraphQLRequest, FetchResult } from '../../../link/core';
2
2
  import { Observable } from '../../../utilities';
3
3
  export type ResultFunction<T> = () => T;
4
- export interface MockedResponse<TData = Record<string, any>> {
5
- request: GraphQLRequest;
4
+ export interface MockedResponse<TData = Record<string, any>, TVariables = Record<string, any>> {
5
+ request: GraphQLRequest<TVariables>;
6
6
  result?: FetchResult<TData> | ResultFunction<FetchResult<TData>>;
7
7
  error?: Error;
8
8
  delay?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"mockLink.d.ts","sourceRoot":"","sources":["../../../../src/testing/core/mocking/mockLink.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,UAAU,EACV,SAAS,EACT,cAAc,EACd,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,UAAU,EAMX,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AAExC,MAAM,WAAW,cAAc,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACzD,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAUD,qBAAa,QAAS,SAAQ,UAAU;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,OAAO,CAAQ;IAC5B,YAAY,EAAE,OAAO,CAAQ;IACpC,OAAO,CAAC,oBAAoB,CAA2C;gBAGrE,eAAe,EAAE,aAAa,CAAC,cAAc,CAAC,EAC9C,WAAW,GAAE,OAAc,EAC3B,OAAO,GAAE,eAAqC;IAazC,iBAAiB,CAAC,cAAc,EAAE,cAAc;IAgBhD,OAAO,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI;IA4FpE,OAAO,CAAC,uBAAuB;CAehC;AAED,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAKD,wBAAgB,cAAc,CAC5B,GAAG,eAAe,EAAE,KAAK,CAAC,GAAG,CAAC,GAC7B,cAAc,CAYhB"}
1
+ {"version":3,"file":"mockLink.d.ts","sourceRoot":"","sources":["../../../../src/testing/core/mocking/mockLink.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,UAAU,EACV,SAAS,EACT,cAAc,EACd,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,UAAU,EAMX,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AAExC,MAAM,WAAW,cAAc,CAC7B,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAEhC,OAAO,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACpC,MAAM,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAUD,qBAAa,QAAS,SAAQ,UAAU;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,OAAO,CAAQ;IAC5B,YAAY,EAAE,OAAO,CAAQ;IACpC,OAAO,CAAC,oBAAoB,CAA2C;gBAGrE,eAAe,EAAE,aAAa,CAAC,cAAc,CAAC,EAC9C,WAAW,GAAE,OAAc,EAC3B,OAAO,GAAE,eAAqC;IAazC,iBAAiB,CAAC,cAAc,EAAE,cAAc;IAgBhD,OAAO,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI;IA4FpE,OAAO,CAAC,uBAAuB;CAehC;AAED,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAKD,wBAAgB,cAAc,CAC5B,GAAG,eAAe,EAAE,KAAK,CAAC,GAAG,CAAC,GAC7B,cAAc,CAYhB"}
@@ -1 +1 @@
1
- {"version":3,"file":"mockLink.js","sourceRoot":"","sources":["../../../../src/testing/core/mocking/mockLink.ts"],"names":[],"mappings":"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","sourcesContent":["import { invariant } from '../../../utilities/globals';\n\nimport { print } from 'graphql';\nimport { equal } from '@wry/equality';\n\nimport {\n ApolloLink,\n Operation,\n GraphQLRequest,\n FetchResult,\n} from '../../../link/core';\n\nimport {\n Observable,\n addTypenameToDocument,\n removeClientSetsFromDocument,\n removeConnectionDirectiveFromDocument,\n cloneDeep,\n stringifyForDisplay,\n} from '../../../utilities';\n\nexport type ResultFunction<T> = () => T;\n\nexport interface MockedResponse<TData = Record<string, any>> {\n request: GraphQLRequest;\n result?: FetchResult<TData> | ResultFunction<FetchResult<TData>>;\n error?: Error;\n delay?: number;\n newData?: ResultFunction<FetchResult>;\n}\n\nexport interface MockLinkOptions {\n showWarnings?: boolean;\n}\n\nfunction requestToKey(request: GraphQLRequest, addTypename: Boolean): string {\n const queryString =\n request.query &&\n print(addTypename ? addTypenameToDocument(request.query) : request.query);\n const requestKey = { query: queryString };\n return JSON.stringify(requestKey);\n}\n\nexport class MockLink extends ApolloLink {\n public operation: Operation;\n public addTypename: Boolean = true;\n public showWarnings: boolean = true;\n private mockedResponsesByKey: { [key: string]: MockedResponse[] } = {};\n\n constructor(\n mockedResponses: ReadonlyArray<MockedResponse>,\n addTypename: Boolean = true,\n options: MockLinkOptions = Object.create(null)\n ) {\n super();\n this.addTypename = addTypename;\n this.showWarnings = options.showWarnings ?? true;\n\n if (mockedResponses) {\n mockedResponses.forEach(mockedResponse => {\n this.addMockedResponse(mockedResponse);\n });\n }\n }\n\n public addMockedResponse(mockedResponse: MockedResponse) {\n const normalizedMockedResponse = this.normalizeMockedResponse(\n mockedResponse\n );\n const key = requestToKey(\n normalizedMockedResponse.request,\n this.addTypename\n );\n let mockedResponses = this.mockedResponsesByKey[key];\n if (!mockedResponses) {\n mockedResponses = [];\n this.mockedResponsesByKey[key] = mockedResponses;\n }\n mockedResponses.push(normalizedMockedResponse);\n }\n\n public request(operation: Operation): Observable<FetchResult> | null {\n this.operation = operation;\n const key = requestToKey(operation, this.addTypename);\n const unmatchedVars: Array<Record<string, any>> = [];\n const requestVariables = operation.variables || {};\n const mockedResponses = this.mockedResponsesByKey[key];\n const responseIndex = mockedResponses ? mockedResponses.findIndex((res, index) => {\n const mockedResponseVars = res.request.variables || {};\n if (equal(requestVariables, mockedResponseVars)) {\n return true;\n }\n unmatchedVars.push(mockedResponseVars);\n return false;\n }) : -1;\n\n const response = responseIndex >= 0\n ? mockedResponses[responseIndex]\n : void 0;\n\n let configError: Error;\n\n if (!response) {\n configError = new Error(\n`No more mocked responses for the query: ${print(operation.query)}\nExpected variables: ${stringifyForDisplay(operation.variables)}\n${unmatchedVars.length > 0 ? `\nFailed to match ${unmatchedVars.length} mock${\n unmatchedVars.length === 1 ? \"\" : \"s\"\n} for this query. The mocked response had the following variables:\n${unmatchedVars.map(d => ` ${stringifyForDisplay(d)}`).join('\\n')}\n` : \"\"}`);\n\n if (this.showWarnings) {\n console.warn(\n configError.message + \n '\\nThis typically indicates a configuration error in your mocks ' +\n 'setup, usually due to a typo or mismatched variable.'\n );\n }\n } else {\n mockedResponses.splice(responseIndex, 1);\n\n const { newData } = response;\n if (newData) {\n response.result = newData();\n mockedResponses.push(response);\n }\n\n if (!response.result && !response.error) {\n configError = new Error(\n `Mocked response should contain either result or error: ${key}`\n );\n }\n }\n\n return new Observable(observer => {\n const timer = setTimeout(() => {\n if (configError) {\n try {\n // The onError function can return false to indicate that\n // configError need not be passed to observer.error. For\n // example, the default implementation of onError calls\n // observer.error(configError) and then returns false to\n // prevent this extra (harmless) observer.error call.\n if (this.onError(configError, observer) !== false) {\n throw configError;\n }\n } catch (error) {\n observer.error(error);\n }\n } else if (response) {\n if (response.error) {\n observer.error(response.error);\n } else {\n if (response.result) {\n observer.next(\n typeof response.result === 'function'\n ? (response.result as ResultFunction<FetchResult>)()\n : response.result\n );\n }\n observer.complete();\n }\n }\n }, response && response.delay || 0);\n\n return () => {\n clearTimeout(timer);\n };\n });\n }\n\n private normalizeMockedResponse(\n mockedResponse: MockedResponse\n ): MockedResponse {\n const newMockedResponse = cloneDeep(mockedResponse);\n const queryWithoutConnection = removeConnectionDirectiveFromDocument(\n newMockedResponse.request.query\n );\n invariant(queryWithoutConnection, \"query is required\");\n newMockedResponse.request.query = queryWithoutConnection!;\n const query = removeClientSetsFromDocument(newMockedResponse.request.query);\n if (query) {\n newMockedResponse.request.query = query;\n }\n return newMockedResponse;\n }\n}\n\nexport interface MockApolloLink extends ApolloLink {\n operation?: Operation;\n}\n\n// Pass in multiple mocked responses, so that you can test flows that end up\n// making multiple queries to the server.\n// NOTE: The last arg can optionally be an `addTypename` arg.\nexport function mockSingleLink(\n ...mockedResponses: Array<any>\n): MockApolloLink {\n // To pull off the potential typename. If this isn't a boolean, we'll just\n // set it true later.\n let maybeTypename = mockedResponses[mockedResponses.length - 1];\n let mocks = mockedResponses.slice(0, mockedResponses.length - 1);\n\n if (typeof maybeTypename !== 'boolean') {\n mocks = mockedResponses;\n maybeTypename = true;\n }\n\n return new MockLink(mocks, maybeTypename);\n}\n"]}
1
+ {"version":3,"file":"mockLink.js","sourceRoot":"","sources":["../../../../src/testing/core/mocking/mockLink.ts"],"names":[],"mappings":"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","sourcesContent":["import { invariant } from '../../../utilities/globals';\n\nimport { print } from 'graphql';\nimport { equal } from '@wry/equality';\n\nimport {\n ApolloLink,\n Operation,\n GraphQLRequest,\n FetchResult,\n} from '../../../link/core';\n\nimport {\n Observable,\n addTypenameToDocument,\n removeClientSetsFromDocument,\n removeConnectionDirectiveFromDocument,\n cloneDeep,\n stringifyForDisplay,\n} from '../../../utilities';\n\nexport type ResultFunction<T> = () => T;\n\nexport interface MockedResponse<\n TData = Record<string, any>,\n TVariables = Record<string, any>\n> {\n request: GraphQLRequest<TVariables>;\n result?: FetchResult<TData> | ResultFunction<FetchResult<TData>>;\n error?: Error;\n delay?: number;\n newData?: ResultFunction<FetchResult>;\n}\n\nexport interface MockLinkOptions {\n showWarnings?: boolean;\n}\n\nfunction requestToKey(request: GraphQLRequest, addTypename: Boolean): string {\n const queryString =\n request.query &&\n print(addTypename ? addTypenameToDocument(request.query) : request.query);\n const requestKey = { query: queryString };\n return JSON.stringify(requestKey);\n}\n\nexport class MockLink extends ApolloLink {\n public operation: Operation;\n public addTypename: Boolean = true;\n public showWarnings: boolean = true;\n private mockedResponsesByKey: { [key: string]: MockedResponse[] } = {};\n\n constructor(\n mockedResponses: ReadonlyArray<MockedResponse>,\n addTypename: Boolean = true,\n options: MockLinkOptions = Object.create(null)\n ) {\n super();\n this.addTypename = addTypename;\n this.showWarnings = options.showWarnings ?? true;\n\n if (mockedResponses) {\n mockedResponses.forEach(mockedResponse => {\n this.addMockedResponse(mockedResponse);\n });\n }\n }\n\n public addMockedResponse(mockedResponse: MockedResponse) {\n const normalizedMockedResponse = this.normalizeMockedResponse(\n mockedResponse\n );\n const key = requestToKey(\n normalizedMockedResponse.request,\n this.addTypename\n );\n let mockedResponses = this.mockedResponsesByKey[key];\n if (!mockedResponses) {\n mockedResponses = [];\n this.mockedResponsesByKey[key] = mockedResponses;\n }\n mockedResponses.push(normalizedMockedResponse);\n }\n\n public request(operation: Operation): Observable<FetchResult> | null {\n this.operation = operation;\n const key = requestToKey(operation, this.addTypename);\n const unmatchedVars: Array<Record<string, any>> = [];\n const requestVariables = operation.variables || {};\n const mockedResponses = this.mockedResponsesByKey[key];\n const responseIndex = mockedResponses ? mockedResponses.findIndex((res, index) => {\n const mockedResponseVars = res.request.variables || {};\n if (equal(requestVariables, mockedResponseVars)) {\n return true;\n }\n unmatchedVars.push(mockedResponseVars);\n return false;\n }) : -1;\n\n const response = responseIndex >= 0\n ? mockedResponses[responseIndex]\n : void 0;\n\n let configError: Error;\n\n if (!response) {\n configError = new Error(\n`No more mocked responses for the query: ${print(operation.query)}\nExpected variables: ${stringifyForDisplay(operation.variables)}\n${unmatchedVars.length > 0 ? `\nFailed to match ${unmatchedVars.length} mock${\n unmatchedVars.length === 1 ? \"\" : \"s\"\n} for this query. The mocked response had the following variables:\n${unmatchedVars.map(d => ` ${stringifyForDisplay(d)}`).join('\\n')}\n` : \"\"}`);\n\n if (this.showWarnings) {\n console.warn(\n configError.message + \n '\\nThis typically indicates a configuration error in your mocks ' +\n 'setup, usually due to a typo or mismatched variable.'\n );\n }\n } else {\n mockedResponses.splice(responseIndex, 1);\n\n const { newData } = response;\n if (newData) {\n response.result = newData();\n mockedResponses.push(response);\n }\n\n if (!response.result && !response.error) {\n configError = new Error(\n `Mocked response should contain either result or error: ${key}`\n );\n }\n }\n\n return new Observable(observer => {\n const timer = setTimeout(() => {\n if (configError) {\n try {\n // The onError function can return false to indicate that\n // configError need not be passed to observer.error. For\n // example, the default implementation of onError calls\n // observer.error(configError) and then returns false to\n // prevent this extra (harmless) observer.error call.\n if (this.onError(configError, observer) !== false) {\n throw configError;\n }\n } catch (error) {\n observer.error(error);\n }\n } else if (response) {\n if (response.error) {\n observer.error(response.error);\n } else {\n if (response.result) {\n observer.next(\n typeof response.result === 'function'\n ? (response.result as ResultFunction<FetchResult>)()\n : response.result\n );\n }\n observer.complete();\n }\n }\n }, response && response.delay || 0);\n\n return () => {\n clearTimeout(timer);\n };\n });\n }\n\n private normalizeMockedResponse(\n mockedResponse: MockedResponse\n ): MockedResponse {\n const newMockedResponse = cloneDeep(mockedResponse);\n const queryWithoutConnection = removeConnectionDirectiveFromDocument(\n newMockedResponse.request.query\n );\n invariant(queryWithoutConnection, \"query is required\");\n newMockedResponse.request.query = queryWithoutConnection!;\n const query = removeClientSetsFromDocument(newMockedResponse.request.query);\n if (query) {\n newMockedResponse.request.query = query;\n }\n return newMockedResponse;\n }\n}\n\nexport interface MockApolloLink extends ApolloLink {\n operation?: Operation;\n}\n\n// Pass in multiple mocked responses, so that you can test flows that end up\n// making multiple queries to the server.\n// NOTE: The last arg can optionally be an `addTypename` arg.\nexport function mockSingleLink(\n ...mockedResponses: Array<any>\n): MockApolloLink {\n // To pull off the potential typename. If this isn't a boolean, we'll just\n // set it true later.\n let maybeTypename = mockedResponses[mockedResponses.length - 1];\n let mocks = mockedResponses.slice(0, mockedResponses.length - 1);\n\n if (typeof maybeTypename !== 'boolean') {\n mocks = mockedResponses;\n maybeTypename = true;\n }\n\n return new MockLink(mocks, maybeTypename);\n}\n"]}
@@ -1,2 +1,3 @@
1
+ export declare const isArray: (a: any) => a is any[] | readonly any[];
1
2
  export declare function isNonEmptyArray<T>(value?: ArrayLike<T>): value is Array<T>;
2
3
  //# sourceMappingURL=arrays.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"arrays.d.ts","sourceRoot":"","sources":["../../../src/utilities/common/arrays.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAE1E"}
1
+ {"version":3,"file":"arrays.d.ts","sourceRoot":"","sources":["../../../src/utilities/common/arrays.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,SAAS,GAAG,EAAkB,CAAC;AAE9E,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAE1E"}
@@ -1,3 +1,4 @@
1
+ export var isArray = Array.isArray;
1
2
  export function isNonEmptyArray(value) {
2
3
  return Array.isArray(value) && value.length > 0;
3
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"arrays.js","sourceRoot":"","sources":["../../../src/utilities/common/arrays.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe,CAAI,KAAoB;IACrD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAClD,CAAC","sourcesContent":["export function isNonEmptyArray<T>(value?: ArrayLike<T>): value is Array<T> {\n return Array.isArray(value) && value.length > 0;\n}\n"]}
1
+ {"version":3,"file":"arrays.js","sourceRoot":"","sources":["../../../src/utilities/common/arrays.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,IAAM,OAAO,GAA4C,KAAK,CAAC,OAAO,CAAC;AAE9E,MAAM,UAAU,eAAe,CAAI,KAAoB;IACrD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAClD,CAAC","sourcesContent":["// A version of Array.isArray that works better with readonly arrays.\nexport const isArray: (a: any) => a is any[] | readonly any[] = Array.isArray;\n\nexport function isNonEmptyArray<T>(value?: ArrayLike<T>): value is Array<T> {\n return Array.isArray(value) && value.length > 0;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/utilities/graphql/transform.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,EAIZ,SAAS,EACT,aAAa,EACb,sBAAsB,EACtB,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EAGtB,OAAO,EACR,MAAM,SAAS,CAAC;AAmBjB,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;AACpE,MAAM,MAAM,kBAAkB,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;AAC9D,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;AACnE,MAAM,MAAM,uBAAuB,GAAG,aAAa,CAAC,kBAAkB,CAAC,CAAC;AACxE,MAAM,MAAM,0BAA0B,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;AAC9E,MAAM,MAAM,8BAA8B,GAAG,gBAAgB,CAC3D,sBAAsB,CACvB,CAAC;AACF,MAAM,MAAM,8BAA8B,GAAG,gBAAgB,CAC3D,sBAAsB,CACvB,CAAC;AAyCF,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,qBAAqB,EAAE,EACnC,GAAG,EAAE,YAAY,GAChB,YAAY,GAAG,IAAI,CAiHrB;AAED,eAAO,MAAM,qBAAqB;iBAuDnB,SAAS,GAAG,OAAO;CAGhC,CAAC;AAqBH,wBAAgB,qCAAqC,CAAC,GAAG,EAAE,YAAY,uBAKtE;AAqDD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,qBAAqB,EAAE,EAC/B,GAAG,EAAE,YAAY,GAChB,YAAY,GAAG,IAAI,CAmDrB;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,0BAA0B,EAAE,EACpC,GAAG,EAAE,YAAY,GAChB,YAAY,GAAG,IAAI,CAerB;AA0BD,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,YAAY,GACrB,YAAY,CAqBd;AAGD,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,YAAY,GACrB,YAAY,GAAG,IAAI,CAoCrB"}
1
+ {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/utilities/graphql/transform.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,EAIZ,SAAS,EACT,aAAa,EACb,sBAAsB,EACtB,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EAEtB,OAAO,EAIR,MAAM,SAAS,CAAC;AAgBjB,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;AACpE,MAAM,MAAM,kBAAkB,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;AAC9D,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;AACnE,MAAM,MAAM,uBAAuB,GAAG,aAAa,CAAC,kBAAkB,CAAC,CAAC;AACxE,MAAM,MAAM,0BAA0B,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;AAC9E,MAAM,MAAM,8BAA8B,GAAG,gBAAgB,CAC3D,sBAAsB,CACvB,CAAC;AACF,MAAM,MAAM,8BAA8B,GAAG,gBAAgB,CAC3D,sBAAsB,CACvB,CAAC;AAiFF,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,qBAAqB,EAAE,EACnC,GAAG,EAAE,YAAY,GAChB,YAAY,GAAG,IAAI,CAsRrB;AAED,eAAO,MAAM,qBAAqB;iBAuDnB,SAAS,GAAG,OAAO;CAGhC,CAAC;AAqBH,wBAAgB,qCAAqC,CAAC,GAAG,EAAE,YAAY,uBAKtE;AAqDD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,qBAAqB,EAAE,EAC/B,GAAG,EAAE,YAAY,GAChB,YAAY,GAAG,IAAI,CAmDrB;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,0BAA0B,EAAE,EACpC,GAAG,EAAE,YAAY,GAChB,YAAY,GAAG,IAAI,CAerB;AAKD,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,YAAY,GACrB,YAAY,CAqBd;AAGD,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,YAAY,GACrB,YAAY,GAAG,IAAI,CAcrB"}
@@ -1,19 +1,19 @@
1
1
  import { __assign, __spreadArray } from "tslib";
2
2
  import { invariant } from "../globals/index.js";
3
- import { visit, } from 'graphql';
3
+ import { visit, Kind, } from 'graphql';
4
4
  import { checkDocument, getOperationDefinition, getFragmentDefinition, getFragmentDefinitions, getMainDefinition, } from "./getFromAST.js";
5
- import { filterInPlace } from "../common/filterInPlace.js";
6
- import { isField, isInlineFragment } from "./storeUtils.js";
5
+ import { isField } from "./storeUtils.js";
7
6
  import { createFragmentMap, } from "./fragments.js";
7
+ import { isArray } from "../common/arrays.js";
8
8
  var TYPENAME_FIELD = {
9
- kind: 'Field',
9
+ kind: Kind.FIELD,
10
10
  name: {
11
- kind: 'Name',
11
+ kind: Kind.NAME,
12
12
  value: '__typename',
13
13
  },
14
14
  };
15
15
  function isEmpty(op, fragmentMap) {
16
- return !op || op.selectionSet.selections.every(function (selection) { return selection.kind === 'FragmentSpread' &&
16
+ return !op || op.selectionSet.selections.every(function (selection) { return selection.kind === Kind.FRAGMENT_SPREAD &&
17
17
  isEmpty(fragmentMap[selection.name.value], fragmentMap); });
18
18
  }
19
19
  function nullIfDocIsEmpty(doc) {
@@ -22,84 +22,190 @@ function nullIfDocIsEmpty(doc) {
22
22
  : doc;
23
23
  }
24
24
  function getDirectiveMatcher(directives) {
25
- return function directiveMatcher(directive) {
26
- return directives.some(function (dir) {
27
- return (dir.name && dir.name === directive.name.value) ||
28
- (dir.test && dir.test(directive));
29
- });
25
+ var nameSet = new Set();
26
+ var tests = [];
27
+ directives.forEach(function (directive) {
28
+ if (directive.name) {
29
+ nameSet.add(directive.name);
30
+ }
31
+ else if (directive.test) {
32
+ tests.push(directive.test);
33
+ }
34
+ });
35
+ return function (directive) { return (nameSet.has(directive.name.value) ||
36
+ tests.some(function (test) { return test(directive); })); };
37
+ }
38
+ function makeInUseGetterFunction(defaultKey) {
39
+ var map = new Map();
40
+ return function inUseGetterFunction(key) {
41
+ if (key === void 0) { key = defaultKey; }
42
+ var inUse = map.get(key);
43
+ if (!inUse) {
44
+ map.set(key, inUse = {
45
+ variables: new Set,
46
+ fragmentSpreads: new Set,
47
+ });
48
+ }
49
+ return inUse;
30
50
  };
31
51
  }
32
52
  export function removeDirectivesFromDocument(directives, doc) {
33
- var variablesInUse = Object.create(null);
34
- var variablesToRemove = [];
35
- var fragmentSpreadsInUse = Object.create(null);
36
- var fragmentSpreadsToRemove = [];
37
- var modifiedDoc = nullIfDocIsEmpty(visit(doc, {
53
+ var getInUseByOperationName = makeInUseGetterFunction("");
54
+ var getInUseByFragmentName = makeInUseGetterFunction("");
55
+ var getInUse = function (ancestors) {
56
+ for (var p = 0, ancestor = void 0; p < ancestors.length && (ancestor = ancestors[p]); ++p) {
57
+ if (isArray(ancestor))
58
+ continue;
59
+ if (ancestor.kind === Kind.OPERATION_DEFINITION) {
60
+ return getInUseByOperationName(ancestor.name && ancestor.name.value);
61
+ }
62
+ if (ancestor.kind === Kind.FRAGMENT_DEFINITION) {
63
+ return getInUseByFragmentName(ancestor.name.value);
64
+ }
65
+ }
66
+ __DEV__ && invariant.error("Could not find operation or fragment");
67
+ return null;
68
+ };
69
+ var operationCount = 0;
70
+ for (var i = doc.definitions.length - 1; i >= 0; --i) {
71
+ if (doc.definitions[i].kind === Kind.OPERATION_DEFINITION) {
72
+ ++operationCount;
73
+ }
74
+ }
75
+ var directiveMatcher = getDirectiveMatcher(directives);
76
+ var hasRemoveDirective = directives.some(function (directive) { return directive.remove; });
77
+ var shouldRemoveField = function (nodeDirectives) { return (hasRemoveDirective &&
78
+ nodeDirectives &&
79
+ nodeDirectives.some(directiveMatcher)); };
80
+ var originalFragmentDefsByPath = new Map();
81
+ var firstVisitMadeChanges = false;
82
+ var fieldOrInlineFragmentVisitor = {
83
+ enter: function (node) {
84
+ if (shouldRemoveField(node.directives)) {
85
+ firstVisitMadeChanges = true;
86
+ return null;
87
+ }
88
+ },
89
+ };
90
+ var docWithoutDirectiveSubtrees = visit(doc, {
91
+ Field: fieldOrInlineFragmentVisitor,
92
+ InlineFragment: fieldOrInlineFragmentVisitor,
93
+ VariableDefinition: {
94
+ enter: function () {
95
+ return false;
96
+ },
97
+ },
38
98
  Variable: {
39
- enter: function (node, _key, parent) {
40
- if (parent.kind !== 'VariableDefinition') {
41
- variablesInUse[node.name.value] = true;
99
+ enter: function (node, _key, _parent, _path, ancestors) {
100
+ var inUse = getInUse(ancestors);
101
+ if (inUse) {
102
+ inUse.variables.add(node.name.value);
42
103
  }
43
104
  },
44
105
  },
45
- Field: {
46
- enter: function (node) {
47
- if (directives && node.directives) {
48
- var shouldRemoveField = directives.some(function (directive) { return directive.remove; });
49
- if (shouldRemoveField &&
50
- node.directives &&
51
- node.directives.some(getDirectiveMatcher(directives))) {
52
- if (node.arguments) {
53
- node.arguments.forEach(function (arg) {
54
- if (arg.value.kind === 'Variable') {
55
- variablesToRemove.push({
56
- name: arg.value.name.value,
57
- });
58
- }
59
- });
60
- }
61
- if (node.selectionSet) {
62
- getAllFragmentSpreadsFromSelectionSet(node.selectionSet).forEach(function (frag) {
63
- fragmentSpreadsToRemove.push({
64
- name: frag.name.value,
65
- });
66
- });
67
- }
68
- return null;
69
- }
106
+ FragmentSpread: {
107
+ enter: function (node, _key, _parent, _path, ancestors) {
108
+ if (shouldRemoveField(node.directives)) {
109
+ firstVisitMadeChanges = true;
110
+ return null;
111
+ }
112
+ var inUse = getInUse(ancestors);
113
+ if (inUse) {
114
+ inUse.fragmentSpreads.add(node.name.value);
70
115
  }
71
116
  },
72
117
  },
73
- FragmentSpread: {
74
- enter: function (node) {
75
- fragmentSpreadsInUse[node.name.value] = true;
118
+ FragmentDefinition: {
119
+ enter: function (node, _key, _parent, path) {
120
+ originalFragmentDefsByPath.set(JSON.stringify(path), node);
121
+ },
122
+ leave: function (node, _key, _parent, path) {
123
+ var originalNode = originalFragmentDefsByPath.get(JSON.stringify(path));
124
+ if (node === originalNode) {
125
+ return node;
126
+ }
127
+ if (operationCount > 0 &&
128
+ node.selectionSet.selections.every(function (selection) { return (selection.kind === Kind.FIELD &&
129
+ selection.name.value === '__typename'); })) {
130
+ getInUseByFragmentName(node.name.value).removed = true;
131
+ firstVisitMadeChanges = true;
132
+ return null;
133
+ }
76
134
  },
77
135
  },
78
136
  Directive: {
79
- enter: function (node) {
80
- if (getDirectiveMatcher(directives)(node)) {
137
+ leave: function (node) {
138
+ if (directiveMatcher(node)) {
139
+ firstVisitMadeChanges = true;
81
140
  return null;
82
141
  }
83
142
  },
84
143
  },
85
- }));
86
- if (modifiedDoc &&
87
- filterInPlace(variablesToRemove, function (v) { return !!v.name && !variablesInUse[v.name]; }).length) {
88
- modifiedDoc = removeArgumentsFromDocument(variablesToRemove, modifiedDoc);
89
- }
90
- if (modifiedDoc &&
91
- filterInPlace(fragmentSpreadsToRemove, function (fs) { return !!fs.name && !fragmentSpreadsInUse[fs.name]; })
92
- .length) {
93
- modifiedDoc = removeFragmentSpreadFromDocument(fragmentSpreadsToRemove, modifiedDoc);
144
+ });
145
+ if (!firstVisitMadeChanges) {
146
+ return doc;
94
147
  }
95
- return modifiedDoc;
148
+ var populateTransitiveVars = function (inUse) {
149
+ if (!inUse.transitiveVars) {
150
+ inUse.transitiveVars = new Set(inUse.variables);
151
+ if (!inUse.removed) {
152
+ inUse.fragmentSpreads.forEach(function (childFragmentName) {
153
+ populateTransitiveVars(getInUseByFragmentName(childFragmentName)).transitiveVars.forEach(function (varName) {
154
+ inUse.transitiveVars.add(varName);
155
+ });
156
+ });
157
+ }
158
+ }
159
+ return inUse;
160
+ };
161
+ var allFragmentNamesUsed = new Set();
162
+ docWithoutDirectiveSubtrees.definitions.forEach(function (def) {
163
+ if (def.kind === Kind.OPERATION_DEFINITION) {
164
+ populateTransitiveVars(getInUseByOperationName(def.name && def.name.value)).fragmentSpreads.forEach(function (childFragmentName) {
165
+ allFragmentNamesUsed.add(childFragmentName);
166
+ });
167
+ }
168
+ else if (def.kind === Kind.FRAGMENT_DEFINITION &&
169
+ operationCount === 0 &&
170
+ !getInUseByFragmentName(def.name.value).removed) {
171
+ allFragmentNamesUsed.add(def.name.value);
172
+ }
173
+ });
174
+ allFragmentNamesUsed.forEach(function (fragmentName) {
175
+ populateTransitiveVars(getInUseByFragmentName(fragmentName)).fragmentSpreads.forEach(function (childFragmentName) {
176
+ allFragmentNamesUsed.add(childFragmentName);
177
+ });
178
+ });
179
+ var fragmentWillBeRemoved = function (fragmentName) { return !!(!allFragmentNamesUsed.has(fragmentName) ||
180
+ getInUseByFragmentName(fragmentName).removed); };
181
+ var enterVisitor = {
182
+ enter: function (node) {
183
+ if (fragmentWillBeRemoved(node.name.value)) {
184
+ return null;
185
+ }
186
+ },
187
+ };
188
+ return nullIfDocIsEmpty(visit(docWithoutDirectiveSubtrees, {
189
+ FragmentSpread: enterVisitor,
190
+ FragmentDefinition: enterVisitor,
191
+ OperationDefinition: {
192
+ leave: function (node) {
193
+ if (node.variableDefinitions) {
194
+ var usedVariableNames_1 = populateTransitiveVars(getInUseByOperationName(node.name && node.name.value)).transitiveVars;
195
+ if (usedVariableNames_1.size < node.variableDefinitions.length) {
196
+ return __assign(__assign({}, node), { variableDefinitions: node.variableDefinitions.filter(function (varDef) { return usedVariableNames_1.has(varDef.variable.name.value); }) });
197
+ }
198
+ }
199
+ },
200
+ },
201
+ }));
96
202
  }
97
203
  export var addTypenameToDocument = Object.assign(function (doc) {
98
204
  return visit(doc, {
99
205
  SelectionSet: {
100
206
  enter: function (node, _key, parent) {
101
207
  if (parent &&
102
- parent.kind === 'OperationDefinition') {
208
+ parent.kind === Kind.OPERATION_DEFINITION) {
103
209
  return;
104
210
  }
105
211
  var selections = node.selections;
@@ -169,7 +275,7 @@ function getArgumentMatcher(config) {
169
275
  return function argumentMatcher(argument) {
170
276
  return config.some(function (aConfig) {
171
277
  return argument.value &&
172
- argument.value.kind === 'Variable' &&
278
+ argument.value.kind === Kind.VARIABLE &&
173
279
  argument.value.name &&
174
280
  (aConfig.name === argument.value.name.value ||
175
281
  (aConfig.test && aConfig.test(argument)));
@@ -224,19 +330,6 @@ export function removeFragmentSpreadFromDocument(config, doc) {
224
330
  FragmentDefinition: { enter: enter },
225
331
  }));
226
332
  }
227
- function getAllFragmentSpreadsFromSelectionSet(selectionSet) {
228
- var allFragments = [];
229
- selectionSet.selections.forEach(function (selection) {
230
- if ((isField(selection) || isInlineFragment(selection)) &&
231
- selection.selectionSet) {
232
- getAllFragmentSpreadsFromSelectionSet(selection.selectionSet).forEach(function (frag) { return allFragments.push(frag); });
233
- }
234
- else if (selection.kind === 'FragmentSpread') {
235
- allFragments.push(selection);
236
- }
237
- });
238
- return allFragments;
239
- }
240
333
  export function buildQueryFromSelectionSet(document) {
241
334
  var definition = getMainDefinition(document);
242
335
  var definitionOperation = definition.operation;
@@ -260,22 +353,6 @@ export function removeClientSetsFromDocument(document) {
260
353
  remove: true,
261
354
  },
262
355
  ], document);
263
- if (modifiedDoc) {
264
- modifiedDoc = visit(modifiedDoc, {
265
- FragmentDefinition: {
266
- enter: function (node) {
267
- if (node.selectionSet) {
268
- var isTypenameOnly = node.selectionSet.selections.every(function (selection) {
269
- return isField(selection) && selection.name.value === '__typename';
270
- });
271
- if (isTypenameOnly) {
272
- return null;
273
- }
274
- }
275
- },
276
- },
277
- });
278
- }
279
356
  return modifiedDoc;
280
357
  }
281
358
  //# sourceMappingURL=transform.js.map