@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.
- package/README.md +1 -1
- package/apollo-client.cjs +169 -162
- package/apollo-client.cjs.map +1 -1
- package/apollo-client.min.cjs +1 -1
- package/cache/cache.cjs +20 -21
- package/cache/cache.cjs.map +1 -1
- package/cache/cache.cjs.native.js +20 -21
- package/cache/inmemory/helpers.d.ts +2 -2
- package/cache/inmemory/helpers.d.ts.map +1 -1
- package/cache/inmemory/helpers.js +2 -2
- package/cache/inmemory/helpers.js.map +1 -1
- package/core/core.cjs +1 -1
- package/core/core.cjs.map +1 -1
- package/core/core.cjs.native.js +1 -1
- package/invariantErrorCodes.js +1 -1
- package/link/core/types.d.ts +5 -6
- package/link/core/types.d.ts.map +1 -1
- package/link/core/types.js.map +1 -1
- package/package.json +12 -12
- package/testing/core/mocking/mockLink.d.ts +2 -2
- package/testing/core/mocking/mockLink.d.ts.map +1 -1
- package/testing/core/mocking/mockLink.js.map +1 -1
- package/utilities/common/arrays.d.ts +1 -0
- package/utilities/common/arrays.d.ts.map +1 -1
- package/utilities/common/arrays.js +1 -0
- package/utilities/common/arrays.js.map +1 -1
- package/utilities/graphql/transform.d.ts.map +1 -1
- package/utilities/graphql/transform.js +167 -90
- package/utilities/graphql/transform.js.map +1 -1
- package/utilities/observables/Concast.d.ts.map +1 -1
- package/utilities/observables/Concast.js +2 -2
- package/utilities/observables/Concast.js.map +1 -1
- package/utilities/utilities.cjs +170 -102
- package/utilities/utilities.cjs.map +1 -1
- package/utilities/utilities.cjs.native.js +170 -102
- package/version.js +1 -1
package/core/core.cjs.native.js
CHANGED
|
@@ -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.
|
|
18
|
+
var version = '3.7.9';
|
|
19
19
|
|
|
20
20
|
function isNonEmptyArray(value) {
|
|
21
21
|
return Array.isArray(value) && value.length > 0;
|
package/invariantErrorCodes.js
CHANGED
|
@@ -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.
|
|
8
|
+
"@apollo/client version": "3.7.9",
|
|
9
9
|
|
|
10
10
|
1: {
|
|
11
11
|
file: "@apollo/client/cache/inmemory/entityStore.js",
|
package/link/core/types.d.ts
CHANGED
|
@@ -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:
|
|
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:
|
|
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?:
|
|
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?:
|
|
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>;
|
package/link/core/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/link/core/types.ts"],"names":[],"mappings":"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"}
|
package/link/core/types.js.map
CHANGED
|
@@ -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>;\
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
84
|
+
"@types/node": "18.13.0",
|
|
85
85
|
"@types/node-fetch": "2.6.2",
|
|
86
|
-
"@types/react": "18.0.
|
|
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.
|
|
90
|
-
"@typescript-eslint/parser": "5.
|
|
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.
|
|
96
|
-
"eslint-plugin-testing-library": "5.10.
|
|
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.
|
|
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.
|
|
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.
|
|
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,
|
|
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":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,OAAO,EACL,UAAU,GAIX,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,4BAA4B,EAC5B,qCAAqC,EACrC,SAAS,EACT,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAmB5B,SAAS,YAAY,CAAC,OAAuB,EAAE,WAAoB;IACjE,IAAM,WAAW,GACf,OAAO,CAAC,KAAK;QACb,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5E,IAAM,UAAU,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACpC,CAAC;AAED;IAA8B,4BAAU;IAMtC,kBACE,eAA8C,EAC9C,WAA2B,EAC3B,OAA8C;QAD9C,4BAAA,EAAA,kBAA2B;QAC3B,wBAAA,EAAA,UAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;QAHhD,iBAcC;;gBATC,iBAAO;QATF,iBAAW,GAAY,IAAI,CAAC;QAC5B,kBAAY,GAAY,IAAI,CAAC;QAC5B,0BAAoB,GAAwC,EAAE,CAAC;QAQrE,KAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,KAAI,CAAC,YAAY,GAAG,MAAA,OAAO,CAAC,YAAY,mCAAI,IAAI,CAAC;QAEjD,IAAI,eAAe,EAAE;YACnB,eAAe,CAAC,OAAO,CAAC,UAAA,cAAc;gBACpC,KAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;SACJ;;IACH,CAAC;IAEM,oCAAiB,GAAxB,UAAyB,cAA8B;QACrD,IAAM,wBAAwB,GAAG,IAAI,CAAC,uBAAuB,CAC3D,cAAc,CACf,CAAC;QACF,IAAM,GAAG,GAAG,YAAY,CACtB,wBAAwB,CAAC,OAAO,EAChC,IAAI,CAAC,WAAW,CACjB,CAAC;QACF,IAAI,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,CAAC,eAAe,EAAE;YACpB,eAAe,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC;SAClD;QACD,eAAe,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACjD,CAAC;IAEM,0BAAO,GAAd,UAAe,SAAoB;QAAnC,iBA0FC;QAzFC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACtD,IAAM,aAAa,GAA+B,EAAE,CAAC;QACrD,IAAM,gBAAgB,GAAG,SAAS,CAAC,SAAS,IAAI,EAAE,CAAC;QACnD,IAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACvD,IAAM,aAAa,GAAG,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,UAAC,GAAG,EAAE,KAAK;YAC3E,IAAM,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;YACvD,IAAI,KAAK,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,EAAE;gBAC/C,OAAO,IAAI,CAAC;aACb;YACD,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACvC,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAER,IAAM,QAAQ,GAAG,aAAa,IAAI,CAAC;YACjC,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC;YAChC,CAAC,CAAC,KAAK,CAAC,CAAC;QAEX,IAAI,WAAkB,CAAC;QAEvB,IAAI,CAAC,QAAQ,EAAE;YACb,WAAW,GAAG,IAAI,KAAK,CAC7B,kDAA2C,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,mCAC3C,mBAAmB,CAAC,SAAS,CAAC,SAAS,CAAC,eAC5D,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,4BACX,aAAa,CAAC,MAAM,kBACpC,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,gFAErC,aAAa,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,YAAK,mBAAmB,CAAC,CAAC,CAAC,CAAE,EAA7B,CAA6B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OACjE,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,CAAC;YAEJ,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,OAAO,CAAC,IAAI,CACV,WAAW,CAAC,OAAO;oBACjB,iEAAiE;oBACjE,sDAAsD,CACzD,CAAC;aACH;SACF;aAAM;YACL,eAAe,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;YAEjC,IAAA,OAAO,GAAK,QAAQ,QAAb,CAAc;YAC7B,IAAI,OAAO,EAAE;gBACX,QAAQ,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;gBAC5B,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAChC;YAED,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;gBACvC,WAAW,GAAG,IAAI,KAAK,CACrB,iEAA0D,GAAG,CAAE,CAChE,CAAC;aACH;SACF;QAED,OAAO,IAAI,UAAU,CAAC,UAAA,QAAQ;YAC5B,IAAM,KAAK,GAAG,UAAU,CAAC;gBACvB,IAAI,WAAW,EAAE;oBACf,IAAI;wBAMF,IAAI,KAAI,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,KAAK,KAAK,EAAE;4BACjD,MAAM,WAAW,CAAC;yBACnB;qBACF;oBAAC,OAAO,KAAK,EAAE;wBACd,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;qBACvB;iBACF;qBAAM,IAAI,QAAQ,EAAE;oBACnB,IAAI,QAAQ,CAAC,KAAK,EAAE;wBAClB,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;qBAChC;yBAAM;wBACL,IAAI,QAAQ,CAAC,MAAM,EAAE;4BACnB,QAAQ,CAAC,IAAI,CACX,OAAO,QAAQ,CAAC,MAAM,KAAK,UAAU;gCACnC,CAAC,CAAE,QAAQ,CAAC,MAAsC,EAAE;gCACpD,CAAC,CAAC,QAAQ,CAAC,MAAM,CACpB,CAAC;yBACH;wBACD,QAAQ,CAAC,QAAQ,EAAE,CAAC;qBACrB;iBACF;YACH,CAAC,EAAE,QAAQ,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;YAEpC,OAAO;gBACL,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,0CAAuB,GAA/B,UACE,cAA8B;QAE9B,IAAM,iBAAiB,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;QACpD,IAAM,sBAAsB,GAAG,qCAAqC,CAClE,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAChC,CAAC;QACF,SAAS,CAAC,sBAAsB,EAAE,mBAAmB,CAAC,CAAC;QACvD,iBAAiB,CAAC,OAAO,CAAC,KAAK,GAAG,sBAAuB,CAAC;QAC1D,IAAM,KAAK,GAAG,4BAA4B,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5E,IAAI,KAAK,EAAE;YACT,iBAAiB,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;SACzC;QACD,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACH,eAAC;AAAD,CAAC,AAjJD,CAA8B,UAAU,GAiJvC;;AASD,MAAM,UAAU,cAAc;IAC5B,yBAA8B;SAA9B,UAA8B,EAA9B,qBAA8B,EAA9B,IAA8B;QAA9B,oCAA8B;;IAI9B,IAAI,aAAa,GAAG,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAChE,IAAI,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEjE,IAAI,OAAO,aAAa,KAAK,SAAS,EAAE;QACtC,KAAK,GAAG,eAAe,CAAC;QACxB,aAAa,GAAG,IAAI,CAAC;KACtB;IAED,OAAO,IAAI,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AAC5C,CAAC","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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arrays.d.ts","sourceRoot":"","sources":["../../../src/utilities/common/arrays.ts"],"names":[],"mappings":"
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arrays.js","sourceRoot":"","sources":["../../../src/utilities/common/arrays.ts"],"names":[],"mappings":"
|
|
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,
|
|
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 {
|
|
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:
|
|
9
|
+
kind: Kind.FIELD,
|
|
10
10
|
name: {
|
|
11
|
-
kind:
|
|
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 ===
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
|
34
|
-
var
|
|
35
|
-
var
|
|
36
|
-
|
|
37
|
-
|
|
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,
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
|
|
46
|
-
enter: function (node) {
|
|
47
|
-
if (
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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
|
-
|
|
74
|
-
enter: function (node) {
|
|
75
|
-
|
|
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
|
-
|
|
80
|
-
if (
|
|
137
|
+
leave: function (node) {
|
|
138
|
+
if (directiveMatcher(node)) {
|
|
139
|
+
firstVisitMadeChanges = true;
|
|
81
140
|
return null;
|
|
82
141
|
}
|
|
83
142
|
},
|
|
84
143
|
},
|
|
85
|
-
})
|
|
86
|
-
if (
|
|
87
|
-
|
|
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
|
-
|
|
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 ===
|
|
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 ===
|
|
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
|