@apollo/client 3.12.5 → 3.12.7

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 (98) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/apollo-client.cjs +17 -13
  3. package/apollo-client.cjs.map +1 -1
  4. package/apollo-client.min.cjs +1 -1
  5. package/cache/index.d.ts +1 -1
  6. package/cache/index.js +0 -1
  7. package/cache/index.js.map +1 -1
  8. package/core/core.cjs +1 -1
  9. package/core/core.cjs.map +1 -1
  10. package/core/core.cjs.native.js +1 -1
  11. package/core/index.d.ts +2 -2
  12. package/core/index.js +0 -2
  13. package/core/index.js.map +1 -1
  14. package/dev/dev.cjs +1 -1
  15. package/dev/dev.cjs.map +1 -1
  16. package/dev/dev.cjs.native.js +1 -1
  17. package/errors/index.js.map +1 -1
  18. package/link/core/index.d.ts +1 -1
  19. package/link/core/index.js +0 -1
  20. package/link/core/index.js.map +1 -1
  21. package/link/core/types.d.ts +2 -2
  22. package/link/core/types.js.map +1 -1
  23. package/link/error/error.cjs +17 -8
  24. package/link/error/error.cjs.map +1 -1
  25. package/link/error/error.cjs.native.js +17 -8
  26. package/link/error/index.d.ts +17 -1
  27. package/link/error/index.js +17 -8
  28. package/link/error/index.js.map +1 -1
  29. package/link/persisted-queries/index.d.ts +2 -2
  30. package/masking/__benches__/types.bench.js +24 -15
  31. package/masking/__benches__/types.bench.js.map +1 -1
  32. package/masking/internal/types.d.ts +2 -2
  33. package/masking/internal/types.js.map +1 -1
  34. package/masking/types.d.ts +2 -2
  35. package/masking/types.js.map +1 -1
  36. package/package.json +28 -23
  37. package/react/components/index.d.ts +1 -1
  38. package/react/components/index.js +0 -1
  39. package/react/components/index.js.map +1 -1
  40. package/react/hoc/index.d.ts +1 -1
  41. package/react/hoc/index.js +0 -1
  42. package/react/hoc/index.js.map +1 -1
  43. package/react/hooks/hooks.cjs +16 -12
  44. package/react/hooks/hooks.cjs.map +1 -1
  45. package/react/hooks/hooks.cjs.native.js +16 -12
  46. package/react/hooks/internal/useDeepMemo.js +1 -0
  47. package/react/hooks/internal/useDeepMemo.js.map +1 -1
  48. package/react/hooks/useBackgroundQuery.js +4 -2
  49. package/react/hooks/useBackgroundQuery.js.map +1 -1
  50. package/react/hooks/useFragment.js +4 -2
  51. package/react/hooks/useFragment.js.map +1 -1
  52. package/react/hooks/useMutation.js +1 -0
  53. package/react/hooks/useMutation.js.map +1 -1
  54. package/react/hooks/useQuery.js +5 -2
  55. package/react/hooks/useQuery.js.map +1 -1
  56. package/react/hooks/useQueryRefHandlers.js +2 -2
  57. package/react/hooks/useQueryRefHandlers.js.map +1 -1
  58. package/react/hooks/useReadQuery.js +2 -2
  59. package/react/hooks/useReadQuery.js.map +1 -1
  60. package/react/hooks/useSubscription.js +1 -0
  61. package/react/hooks/useSubscription.js.map +1 -1
  62. package/react/hooks/useSuspenseQuery.js +5 -2
  63. package/react/hooks/useSuspenseQuery.js.map +1 -1
  64. package/react/index.d.ts +1 -1
  65. package/react/index.js +0 -1
  66. package/react/index.js.map +1 -1
  67. package/react/internal/internal.cjs +1 -1
  68. package/react/internal/internal.cjs.map +1 -1
  69. package/react/internal/internal.cjs.native.js +1 -1
  70. package/testing/internal/ObservableStream.d.ts +11 -9
  71. package/testing/internal/ObservableStream.js +29 -4
  72. package/testing/internal/ObservableStream.js.map +1 -1
  73. package/testing/internal/incremental.d.ts +23 -0
  74. package/testing/internal/incremental.js +124 -0
  75. package/testing/internal/incremental.js.map +1 -0
  76. package/testing/internal/index.d.ts +1 -0
  77. package/testing/internal/index.js +1 -0
  78. package/testing/internal/index.js.map +1 -1
  79. package/testing/internal/scenarios/index.d.ts +1 -0
  80. package/testing/internal/scenarios/index.js.map +1 -1
  81. package/testing/matchers/index.js +4 -0
  82. package/testing/matchers/index.js.map +1 -1
  83. package/testing/matchers/toEqualApolloQueryResult.d.ts +6 -0
  84. package/testing/matchers/toEqualApolloQueryResult.js +20 -0
  85. package/testing/matchers/toEqualApolloQueryResult.js.map +1 -0
  86. package/testing/matchers/toEqualQueryResult.d.ts +9 -0
  87. package/testing/matchers/toEqualQueryResult.js +40 -0
  88. package/testing/matchers/toEqualQueryResult.js.map +1 -0
  89. package/utilities/globals/globals.cjs +1 -1
  90. package/utilities/globals/globals.cjs.map +1 -1
  91. package/utilities/globals/globals.cjs.native.js +1 -1
  92. package/utilities/index.d.ts +2 -1
  93. package/utilities/index.js +0 -1
  94. package/utilities/index.js.map +1 -1
  95. package/version.js +1 -1
  96. package/testing/core/observableToPromise.d.ts +0 -29
  97. package/testing/core/observableToPromise.js +0 -74
  98. package/testing/core/observableToPromise.js.map +0 -1
@@ -1,4 +1,5 @@
1
1
  import { __extends } from "tslib";
2
+ import { graphQLResultHasProtocolErrors, PROTOCOL_ERRORS_SYMBOL, } from "../../errors/index.js";
2
3
  import { Observable } from "../../utilities/index.js";
3
4
  import { ApolloLink } from "../core/index.js";
4
5
  export function onError(errorHandler) {
@@ -17,14 +18,22 @@ export function onError(errorHandler) {
17
18
  operation: operation,
18
19
  forward: forward,
19
20
  });
20
- if (retriedResult) {
21
- retriedSub = retriedResult.subscribe({
22
- next: observer.next.bind(observer),
23
- error: observer.error.bind(observer),
24
- complete: observer.complete.bind(observer),
25
- });
26
- return;
27
- }
21
+ }
22
+ else if (graphQLResultHasProtocolErrors(result)) {
23
+ retriedResult = errorHandler({
24
+ protocolErrors: result.extensions[PROTOCOL_ERRORS_SYMBOL],
25
+ response: result,
26
+ operation: operation,
27
+ forward: forward,
28
+ });
29
+ }
30
+ if (retriedResult) {
31
+ retriedSub = retriedResult.subscribe({
32
+ next: observer.next.bind(observer),
33
+ error: observer.error.bind(observer),
34
+ complete: observer.complete.bind(observer),
35
+ });
36
+ return;
28
37
  }
29
38
  observer.next(result);
30
39
  },
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/link/error/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FormattedExecutionResult, GraphQLFormattedError } from \"graphql\";\n\nimport type { NetworkError } from \"../../errors/index.js\";\nimport { Observable } from \"../../utilities/index.js\";\nimport type { Operation, FetchResult, NextLink } from \"../core/index.js\";\nimport { ApolloLink } from \"../core/index.js\";\n\nexport interface ErrorResponse {\n graphQLErrors?: ReadonlyArray<GraphQLFormattedError>;\n networkError?: NetworkError;\n response?: FormattedExecutionResult;\n operation: Operation;\n forward: NextLink;\n}\n\nexport namespace ErrorLink {\n /**\n * Callback to be triggered when an error occurs within the link stack.\n */\n export interface ErrorHandler {\n (error: ErrorResponse): Observable<FetchResult> | void;\n }\n}\n\n// For backwards compatibility.\nexport import ErrorHandler = ErrorLink.ErrorHandler;\n\nexport function onError(errorHandler: ErrorHandler): ApolloLink {\n return new ApolloLink((operation, forward) => {\n return new Observable((observer) => {\n let sub: any;\n let retriedSub: any;\n let retriedResult: any;\n\n try {\n sub = forward(operation).subscribe({\n next: (result) => {\n if (result.errors) {\n retriedResult = errorHandler({\n graphQLErrors: result.errors,\n response: result,\n operation,\n forward,\n });\n\n if (retriedResult) {\n retriedSub = retriedResult.subscribe({\n next: observer.next.bind(observer),\n error: observer.error.bind(observer),\n complete: observer.complete.bind(observer),\n });\n return;\n }\n }\n observer.next(result);\n },\n error: (networkError) => {\n retriedResult = errorHandler({\n operation,\n networkError,\n //Network errors can return GraphQL errors on for example a 403\n graphQLErrors:\n (networkError &&\n networkError.result &&\n networkError.result.errors) ||\n void 0,\n forward,\n });\n if (retriedResult) {\n retriedSub = retriedResult.subscribe({\n next: observer.next.bind(observer),\n error: observer.error.bind(observer),\n complete: observer.complete.bind(observer),\n });\n return;\n }\n observer.error(networkError);\n },\n complete: () => {\n // disable the previous sub from calling complete on observable\n // if retry is in flight.\n if (!retriedResult) {\n observer.complete.bind(observer)();\n }\n },\n });\n } catch (e) {\n errorHandler({ networkError: e as Error, operation, forward });\n observer.error(e);\n }\n\n return () => {\n if (sub) sub.unsubscribe();\n if (retriedSub) sub.unsubscribe();\n };\n });\n });\n}\n\nexport class ErrorLink extends ApolloLink {\n private link: ApolloLink;\n constructor(errorHandler: ErrorLink.ErrorHandler) {\n super();\n this.link = onError(errorHandler);\n }\n\n public request(\n operation: Operation,\n forward: NextLink\n ): Observable<FetchResult> | null {\n return this.link.request(operation, forward);\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/link/error/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n FormattedExecutionResult,\n GraphQLErrorExtensions,\n GraphQLFormattedError,\n} from \"graphql\";\n\nimport {\n graphQLResultHasProtocolErrors,\n PROTOCOL_ERRORS_SYMBOL,\n} from \"../../errors/index.js\";\nimport type { NetworkError } from \"../../errors/index.js\";\nimport { Observable } from \"../../utilities/index.js\";\nimport type { Operation, FetchResult, NextLink } from \"../core/index.js\";\nimport { ApolloLink } from \"../core/index.js\";\n\nexport interface ErrorResponse {\n /**\n * Errors returned in the `errors` property of the GraphQL response.\n */\n graphQLErrors?: ReadonlyArray<GraphQLFormattedError>;\n /**\n * Errors thrown during a network request. This is usually an error thrown\n * during a `fetch` call or an error while parsing the response from the\n * network.\n */\n networkError?: NetworkError;\n /**\n * Fatal transport-level errors from multipart subscriptions.\n * See the [multipart subscription protocol](https://www.apollographql.com/docs/graphos/routing/operations/subscriptions/multipart-protocol#message-and-error-format) for more information.\n */\n protocolErrors?: ReadonlyArray<{\n message: string;\n extensions?: GraphQLErrorExtensions[];\n }>;\n response?: FormattedExecutionResult;\n operation: Operation;\n forward: NextLink;\n}\n\nexport namespace ErrorLink {\n /**\n * Callback to be triggered when an error occurs within the link stack.\n */\n export interface ErrorHandler {\n (error: ErrorResponse): Observable<FetchResult> | void;\n }\n}\n\n// For backwards compatibility.\nexport import ErrorHandler = ErrorLink.ErrorHandler;\n\nexport function onError(errorHandler: ErrorHandler): ApolloLink {\n return new ApolloLink((operation, forward) => {\n return new Observable((observer) => {\n let sub: any;\n let retriedSub: any;\n let retriedResult: any;\n\n try {\n sub = forward(operation).subscribe({\n next: (result) => {\n if (result.errors) {\n retriedResult = errorHandler({\n graphQLErrors: result.errors,\n response: result,\n operation,\n forward,\n });\n } else if (graphQLResultHasProtocolErrors(result)) {\n retriedResult = errorHandler({\n protocolErrors: result.extensions[PROTOCOL_ERRORS_SYMBOL],\n response: result,\n operation,\n forward,\n });\n }\n\n if (retriedResult) {\n retriedSub = retriedResult.subscribe({\n next: observer.next.bind(observer),\n error: observer.error.bind(observer),\n complete: observer.complete.bind(observer),\n });\n return;\n }\n\n observer.next(result);\n },\n error: (networkError) => {\n retriedResult = errorHandler({\n operation,\n networkError,\n //Network errors can return GraphQL errors on for example a 403\n graphQLErrors:\n (networkError &&\n networkError.result &&\n networkError.result.errors) ||\n void 0,\n forward,\n });\n if (retriedResult) {\n retriedSub = retriedResult.subscribe({\n next: observer.next.bind(observer),\n error: observer.error.bind(observer),\n complete: observer.complete.bind(observer),\n });\n return;\n }\n observer.error(networkError);\n },\n complete: () => {\n // disable the previous sub from calling complete on observable\n // if retry is in flight.\n if (!retriedResult) {\n observer.complete.bind(observer)();\n }\n },\n });\n } catch (e) {\n errorHandler({ networkError: e as Error, operation, forward });\n observer.error(e);\n }\n\n return () => {\n if (sub) sub.unsubscribe();\n if (retriedSub) sub.unsubscribe();\n };\n });\n });\n}\n\nexport class ErrorLink extends ApolloLink {\n private link: ApolloLink;\n constructor(errorHandler: ErrorLink.ErrorHandler) {\n super();\n this.link = onError(errorHandler);\n }\n\n public request(\n operation: Operation,\n forward: NextLink\n ): Observable<FetchResult> | null {\n return this.link.request(operation, forward);\n }\n}\n"]}
@@ -33,7 +33,7 @@ export declare namespace PersistedQueryLink {
33
33
  export type Options = SHA256Options | GenerateHashOptions;
34
34
  export {};
35
35
  }
36
- export declare const createPersistedQueryLink: (options: PersistedQueryLink.Options) => ApolloLink & {
36
+ export declare const createPersistedQueryLink: (options: PersistedQueryLink.Options) => ApolloLink & ({
37
37
  resetHashCache: () => void;
38
38
  } & ({
39
39
  getMemoryInternals(): {
@@ -43,6 +43,6 @@ export declare const createPersistedQueryLink: (options: PersistedQueryLink.Opti
43
43
  };
44
44
  } | {
45
45
  getMemoryInternals?: undefined;
46
- });
46
+ }));
47
47
  export {};
48
48
  //# sourceMappingURL=index.d.ts.map
@@ -42,13 +42,13 @@ test("unmasks DeepPartial types", function (prefix) {
42
42
  test("Unmasked handles odd types", function (prefix) {
43
43
  bench(prefix + "empty type instantiations", function () {
44
44
  attest();
45
- }).types([80, "instantiations"]);
45
+ }).types([111, "instantiations"]);
46
46
  bench(prefix + "empty type functionality", function () {
47
47
  expectTypeOf().toEqualTypeOf();
48
48
  });
49
49
  bench(prefix + "generic record type instantiations", function () {
50
50
  attest();
51
- }).types([99, "instantiations"]);
51
+ }).types([115, "instantiations"]);
52
52
  bench(prefix + "generic record type functionality", function () {
53
53
  expectTypeOf().toEqualTypeOf();
54
54
  });
@@ -68,25 +68,25 @@ test("Unmasked handles odd types", function (prefix) {
68
68
  test("MaybeMasked handles odd types", function (prefix) {
69
69
  bench(prefix + "empty type instantiations", function () {
70
70
  attest();
71
- }).types([76, "instantiations"]);
71
+ }).types([41, "instantiations"]);
72
72
  bench(prefix + "empty type functionality", function () {
73
73
  expectTypeOf().toEqualTypeOf();
74
74
  });
75
75
  bench(prefix + "generic record type instantiations", function () {
76
76
  attest();
77
- }).types([93, "instantiations"]);
77
+ }).types([46, "instantiations"]);
78
78
  bench(prefix + "generic record type functionality", function () {
79
79
  expectTypeOf().toEqualTypeOf();
80
80
  });
81
81
  bench(prefix + "unknown instantiations", function () {
82
82
  attest();
83
- }).types([54, "instantiations"]);
83
+ }).types([41, "instantiations"]);
84
84
  bench(prefix + "unknown functionality", function () {
85
85
  expectTypeOf().toBeUnknown();
86
86
  });
87
87
  bench(prefix + "any instantiations", function () {
88
88
  attest();
89
- }).types([49, "instantiations"]);
89
+ }).types([43, "instantiations"]);
90
90
  bench(prefix + "any functionality", function () {
91
91
  expectTypeOf().toBeAny();
92
92
  });
@@ -95,12 +95,12 @@ test("distributed members on MaybeMasked", function (prefix) {
95
95
  (function unresolvedGeneric() {
96
96
  bench(prefix + "one unresolved generic mixed with null|undefined", function () {
97
97
  attest();
98
- }).types([55, "instantiations"]);
98
+ }).types([49, "instantiations"]);
99
99
  })();
100
100
  (function unresolvedGenerics() {
101
101
  bench(prefix + "two unresolved generics distribute", function () {
102
102
  attest();
103
- }).types([61, "instantiations"]);
103
+ }).types([50, "instantiations"]);
104
104
  })();
105
105
  });
106
106
  test("deals with overlapping array from parent fragment", function (prefix) {
@@ -131,7 +131,7 @@ test("base type, multiple fragments on sub-types", function (prefix) {
131
131
  test("does not detect `$fragmentRefs` if type contains `any`", function (prefix) {
132
132
  bench(prefix + "instantiations", function () {
133
133
  return {};
134
- }).types([6, "instantiations"]);
134
+ }).types([1, "instantiations"]);
135
135
  bench(prefix + "functionality", function () {
136
136
  var x = {};
137
137
  expectTypeOf(x).branded.toEqualTypeOf();
@@ -149,7 +149,7 @@ test("leaves tuples alone", function (prefix) {
149
149
  test("does not detect `$fragmentRefs` if type is a record type", function (prefix) {
150
150
  bench(prefix + "instantiations", function () {
151
151
  return {};
152
- }).types([6, "instantiations"]);
152
+ }).types([1, "instantiations"]);
153
153
  bench(prefix + "functionality", function () {
154
154
  var x = {};
155
155
  expectTypeOf(x).branded.toEqualTypeOf();
@@ -158,7 +158,7 @@ test("does not detect `$fragmentRefs` if type is a record type", function (prefi
158
158
  test("does not detect `$fragmentRefs` on types with index signatures", function (prefix) {
159
159
  bench(prefix + "instantiations", function () {
160
160
  return {};
161
- }).types([6, "instantiations"]);
161
+ }).types([1, "instantiations"]);
162
162
  bench(prefix + "functionality", function () {
163
163
  var x = {};
164
164
  expectTypeOf(x).branded.toEqualTypeOf();
@@ -167,7 +167,7 @@ test("does not detect `$fragmentRefs` on types with index signatures", function
167
167
  test("detects `$fragmentRefs` on types with index signatures", function (prefix) {
168
168
  bench(prefix + "instantiations", function () {
169
169
  return {};
170
- }).types([6, "instantiations"]);
170
+ }).types([1, "instantiations"]);
171
171
  bench(prefix + "functionality", function () {
172
172
  var x = {};
173
173
  var y = {};
@@ -178,7 +178,7 @@ test("detects `$fragmentRefs` on types with index signatures", function (prefix)
178
178
  test("recursive types: no error 'Type instantiation is excessively deep and possibly infinite.'", function (prefix) {
179
179
  bench(prefix + "instantiations", function () {
180
180
  return {};
181
- }).types([6, "instantiations"]);
181
+ }).types([1, "instantiations"]);
182
182
  bench(prefix + "functionality", function () {
183
183
  var x = {};
184
184
  expectTypeOf(x).branded.toEqualTypeOf();
@@ -189,7 +189,7 @@ test("MaybeMasked can be called with a generic if `mode` is not set to `unmask`"
189
189
  bench(prefix + "Result generic - instantiations", function () {
190
190
  var maybeMasked = arg;
191
191
  return maybeMasked;
192
- }).types();
192
+ }).types([1, "instantiations"]);
193
193
  bench(prefix + "Result generic - functionality", function () {
194
194
  var maybeMasked = arg;
195
195
  expectTypeOf(maybeMasked).toEqualTypeOf(arg);
@@ -199,7 +199,7 @@ test("MaybeMasked can be called with a generic if `mode` is not set to `unmask`"
199
199
  bench(prefix + "Result generic - instantiations", function () {
200
200
  var maybeMasked = arg;
201
201
  return maybeMasked;
202
- }).types();
202
+ }).types([1, "instantiations"]);
203
203
  bench(prefix + "Result generic - functionality", function () {
204
204
  var maybeMasked = arg;
205
205
  // cannot use unresolved generic with `expectTypeOf` here so we just try an assignment the other way round
@@ -210,4 +210,13 @@ test("MaybeMasked can be called with a generic if `mode` is not set to `unmask`"
210
210
  withGenericResult({});
211
211
  withGenericDocument({});
212
212
  });
213
+ test("Unmasked handles branded primitive types", function (prefix) {
214
+ bench(prefix + "instantiations", function () {
215
+ return {};
216
+ }).types([5, "instantiations"]);
217
+ bench(prefix + "functionality", function () {
218
+ var x = {};
219
+ expectTypeOf(x).branded.toEqualTypeOf();
220
+ });
221
+ });
213
222
  //# sourceMappingURL=types.bench.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.bench.js","sourceRoot":"","sources":["../../../src/masking/__benches__/types.bench.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MaybeMasked, Unmasked } from \"../index.js\";\nimport { attest, bench } from \"@ark/attest\";\nimport { expectTypeOf } from \"expect-type\";\nimport type { DeepPartial } from \"../../utilities/index.js\";\n\nimport { setup } from \"@ark/attest\";\nimport type { ContainsFragmentsRefs } from \"../internal/types.js\";\nimport type { TypedDocumentNode } from \"../../index.js\";\n\nsetup({\n updateSnapshots: !process.env.CI,\n});\n\nfunction test(name: string, fn: (name: string) => void) {\n fn(name + \": \");\n}\n\ntype UnrelatedType = {\n __typename: \"Unrelated\";\n} & { \" $fragmentName\"?: \"Unrelated\" } & {\n \" $fragmentRefs\"?: {\n Unrelated: {\n __unrelated: boolean;\n };\n };\n};\n// @ts-ignore\ntype _TypeCacheWarmup = Unmasked<UnrelatedType> | MaybeMasked<UnrelatedType>;\n\ntest(\"unmasks deeply nested fragments\", (prefix) => {\n type UserFieldsFragment = {\n __typename: \"User\";\n id: number;\n age: number;\n } & { \" $fragmentName\"?: \"UserFieldsFragment\" } & {\n \" $fragmentRefs\"?: {\n NameFieldsFragment: NameFieldsFragment;\n JobFieldsFragment: JobFieldsFragment;\n };\n };\n\n type NameFieldsFragment = {\n __typename: \"User\";\n firstName: string;\n lastName: string;\n } & { \" $fragmentName\"?: \"NameFieldsFragment\" };\n\n type JobFieldsFragment = {\n __typename: \"User\";\n job: string;\n } & { \" $fragmentName\"?: \"JobFieldsFragment\" } & {\n \" $fragmentRefs\"?: { CareerFieldsFragment: CareerFieldsFragment };\n };\n\n type CareerFieldsFragment = {\n __typename: \"User\";\n position: string;\n } & { \" $fragmentName\"?: \"CareerFieldsFragment\" };\n\n type Source = UserFieldsFragment;\n\n bench(prefix + \"instantiations\", () => {\n return {} as Unmasked<Source>;\n }).types([5, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n expectTypeOf<Unmasked<Source>>().toEqualTypeOf<{\n __typename: \"User\";\n id: number;\n age: number;\n firstName: string;\n lastName: string;\n job: string;\n position: string;\n }>();\n });\n});\n\ntest(\"unmasks deeply nested fragments\", (prefix) => {\n type UserFieldsFragment = {\n __typename: \"User\";\n id: number;\n age: number;\n jobs: Array<\n {\n __typename: \"Job\";\n id: string;\n title: string;\n } & { \" $fragmentRefs\"?: { JobFieldsFragment: JobFieldsFragment } }\n >;\n } & { \" $fragmentName\"?: \"UserFieldsFragment\" } & {\n \" $fragmentRefs\"?: {\n NameFieldsFragment: NameFieldsFragment;\n };\n };\n\n type NameFieldsFragment = {\n __typename: \"User\";\n firstName: string;\n lastName: string;\n } & { \" $fragmentName\"?: \"NameFieldsFragment\" };\n\n type JobFieldsFragment = {\n __typename: \"Job\";\n job: string;\n } & { \" $fragmentName\"?: \"JobFieldsFragment\" } & {\n \" $fragmentRefs\"?: { CareerFieldsFragment: CareerFieldsFragment };\n };\n\n type CareerFieldsFragment = {\n __typename: \"Job\";\n position: string;\n } & { \" $fragmentName\"?: \"CareerFieldsFragment\" };\n\n type Source = UserFieldsFragment;\n\n bench(prefix + \"instantiations\", () => {\n return {} as Unmasked<Source>;\n }).types([5, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n expectTypeOf<Unmasked<Source>>().toEqualTypeOf<{\n __typename: \"User\";\n id: number;\n age: number;\n firstName: string;\n lastName: string;\n jobs: Array<{\n __typename: \"Job\";\n id: string;\n title: string;\n job: string;\n position: string;\n }>;\n }>();\n });\n});\n\ntest(\"unmasks deeply nested nullable fragments\", (prefix) => {\n type UserFieldsFragment = {\n __typename: \"User\";\n id: number;\n age: number;\n career:\n | ({\n __typename: \"Job\";\n id: string;\n title: string;\n } & { \" $fragmentRefs\"?: { JobFieldsFragment: JobFieldsFragment } })\n | null;\n jobs: Array<\n | ({\n __typename: \"Job\";\n id: string;\n title: string;\n } & { \" $fragmentRefs\"?: { JobFieldsFragment: JobFieldsFragment } })\n | null\n >;\n } & { \" $fragmentName\"?: \"UserFieldsFragment\" } & {\n \" $fragmentRefs\"?: {\n NameFieldsFragment: NameFieldsFragment;\n };\n };\n\n type NameFieldsFragment = {\n __typename: \"User\";\n firstName: string;\n lastName: string;\n } & { \" $fragmentName\"?: \"NameFieldsFragment\" };\n\n type JobFieldsFragment = {\n __typename: \"Job\";\n job: string;\n } & { \" $fragmentName\"?: \"JobFieldsFragment\" } & {\n \" $fragmentRefs\"?: { CareerFieldsFragment: CareerFieldsFragment };\n };\n\n type CareerFieldsFragment = {\n __typename: \"Job\";\n position: string;\n } & { \" $fragmentName\"?: \"CareerFieldsFragment\" };\n\n type Source = UserFieldsFragment;\n\n bench(prefix + \"instantiations\", () => {\n return {} as Unmasked<Source>;\n }).types([5, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n expectTypeOf<Unmasked<Source>>().toEqualTypeOf<{\n __typename: \"User\";\n id: number;\n age: number;\n firstName: string;\n lastName: string;\n career: {\n __typename: \"Job\";\n id: string;\n title: string;\n job: string;\n position: string;\n } | null;\n jobs: Array<{\n __typename: \"Job\";\n id: string;\n title: string;\n job: string;\n position: string;\n } | null>;\n }>();\n });\n});\n\ntest(\"unmasks DeepPartial types\", (prefix) => {\n type UserFieldsFragment = {\n __typename: \"User\";\n id: number;\n age: number;\n } & { \" $fragmentName\"?: \"UserFieldsFragment\" } & {\n \" $fragmentRefs\"?: {\n NameFieldsFragment: NameFieldsFragment;\n };\n };\n\n type NameFieldsFragment = {\n __typename: \"User\";\n firstName: string;\n lastName: string;\n } & { \" $fragmentName\"?: \"NameFieldsFragment\" };\n\n type Source = DeepPartial<UserFieldsFragment>;\n\n bench(prefix + \"instantiations\", () => {\n return {} as Unmasked<Source>;\n }).types([5, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n expectTypeOf<Unmasked<Source>>().toEqualTypeOf<{\n __typename?: \"User\";\n id?: number;\n age?: number;\n firstName?: string;\n lastName?: string;\n }>();\n });\n});\n\ntest(\"Unmasked handles odd types\", (prefix) => {\n bench(prefix + \"empty type instantiations\", () => {\n attest<{}, Unmasked<{}>>();\n }).types([80, \"instantiations\"]);\n\n bench(prefix + \"empty type functionality\", () => {\n expectTypeOf<Unmasked<{}>>().toEqualTypeOf<{}>();\n });\n\n bench(prefix + \"generic record type instantiations\", () => {\n attest<Record<string, any>, Unmasked<Record<string, any>>>();\n }).types([99, \"instantiations\"]);\n\n bench(prefix + \"generic record type functionality\", () => {\n expectTypeOf<Unmasked<Record<string, any>>>().toEqualTypeOf<\n Record<string, any>\n >();\n });\n\n bench(prefix + \"unknown instantiations\", () => {\n attest<unknown, Unmasked<unknown>>();\n }).types([47, \"instantiations\"]);\n\n bench(prefix + \"unknown functionality\", () => {\n expectTypeOf<Unmasked<unknown>>().toBeUnknown();\n });\n\n bench(prefix + \"any instantiations\", () => {\n attest<any, Unmasked<any>>();\n }).types([48, \"instantiations\"]);\n\n bench(prefix + \"any functionality\", () => {\n expectTypeOf<Unmasked<any>>().toBeAny();\n });\n});\n\ntest(\"MaybeMasked handles odd types\", (prefix) => {\n bench(prefix + \"empty type instantiations\", () => {\n attest<{}, MaybeMasked<{}>>();\n }).types([76, \"instantiations\"]);\n\n bench(prefix + \"empty type functionality\", () => {\n expectTypeOf<MaybeMasked<{}>>().toEqualTypeOf<{}>();\n });\n\n bench(prefix + \"generic record type instantiations\", () => {\n attest<Record<string, any>, MaybeMasked<Record<string, any>>>();\n }).types([93, \"instantiations\"]);\n bench(prefix + \"generic record type functionality\", () => {\n expectTypeOf<MaybeMasked<Record<string, any>>>().toEqualTypeOf<\n Record<string, any>\n >();\n });\n\n bench(prefix + \"unknown instantiations\", () => {\n attest<unknown, MaybeMasked<unknown>>();\n }).types([54, \"instantiations\"]);\n bench(prefix + \"unknown functionality\", () => {\n expectTypeOf<MaybeMasked<unknown>>().toBeUnknown();\n });\n\n bench(prefix + \"any instantiations\", () => {\n attest<any, MaybeMasked<any>>();\n }).types([49, \"instantiations\"]);\n bench(prefix + \"any functionality\", () => {\n expectTypeOf<MaybeMasked<any>>().toBeAny();\n });\n});\n\ntest(\"distributed members on MaybeMasked\", (prefix) => {\n (function unresolvedGeneric<T>() {\n bench(prefix + \"one unresolved generic mixed with null|undefined\", () => {\n attest<\n [MaybeMasked<T> | null | undefined],\n [MaybeMasked<T | null | undefined>]\n >();\n }).types([55, \"instantiations\"]);\n })();\n\n (function unresolvedGenerics<T, V>() {\n bench(prefix + \"two unresolved generics distribute\", () => {\n attest<[MaybeMasked<T> | MaybeMasked<V>], [MaybeMasked<T | V>]>();\n }).types([61, \"instantiations\"]);\n })();\n});\n\ntest(\"deals with overlapping array from parent fragment\", (prefix) => {\n type Source = {\n __typename: \"Track\";\n /** comment: id */\n id: number;\n /** comment: artists */\n artists?: Array<{\n __typename: \"Artist\";\n /** comment: artists.id */\n id: number;\n \" $fragmentRefs\"?: {\n ArtistFragment: ArtistFragment;\n };\n }> | null;\n \" $fragmentRefs\"?: {\n NestedTrackFragment: NestedTrackFragment;\n };\n };\n\n type ArtistFragment = {\n \" $fragmentName\"?: \"Fragment__Artist\";\n __typename: \"Artist\";\n /** comment: artists.birthday */\n birthdate: string;\n };\n\n type NestedTrackFragment = {\n \" $fragmentName\"?: \"Fragment__Track\";\n __typename: \"Track\";\n artists?: Array<{\n __typename: \"Artist\";\n /** comment: artists.lastname */\n lastname: string;\n }> | null;\n };\n\n bench(prefix + \"instantiations\", () => {\n return {} as Unmasked<Source>;\n }).types([5, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n const x = {} as Unmasked<Source>;\n // some fields for hovering\n x.id;\n x.artists;\n x.artists?.[0]?.id;\n x.artists?.[0]?.birthdate;\n x.artists?.[0]?.lastname;\n expectTypeOf(x).branded.toEqualTypeOf<{\n __typename: \"Track\";\n id: number;\n artists?:\n | Array<{\n __typename: \"Artist\";\n id: number;\n birthdate: string;\n lastname: string;\n }>\n | null\n | undefined;\n }>();\n });\n});\n\ntest(\"base type, multiple fragments on sub-types\", (prefix) => {\n type Source = {\n __typename: \"Track\";\n id: number;\n artists?: Array<{\n __typename: \"Person\" | \"Animatronic\" | \"CartoonCharacter\";\n id: number;\n name: string;\n \" $fragmentRefs\"?: {\n PersonFragment: PersonFragment;\n AnimatronicFragment: AnimatronicFragment;\n CartoonCharacterFragment: CartoonCharacterFragment;\n };\n }> | null;\n };\n\n type PersonFragment = {\n \" $fragmentName\"?: \"Fragment__Person\";\n __typename: \"Person\";\n birthdate: string;\n };\n type AnimatronicFragment = {\n \" $fragmentName\"?: \"Fragment__Animatronic\";\n __typename: \"Animatronic\";\n manufacturer: string;\n warrantyEndDate: string;\n };\n type CartoonCharacterFragment = {\n \" $fragmentName\"?: \"Fragment__CartoonCharacter\";\n __typename: \"CartoonCharacter\";\n animator: string;\n voiceActor: string;\n };\n\n bench(prefix + \"instantiations\", () => {\n return {} as Unmasked<Source>;\n }).types([5, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n const x = {} as Unmasked<Source>;\n expectTypeOf(x).branded.toEqualTypeOf<{\n __typename: \"Track\";\n id: number;\n artists?:\n | Array<\n | {\n __typename: \"Person\";\n id: number;\n name: string;\n birthdate: string;\n }\n | {\n __typename: \"Animatronic\";\n id: number;\n name: string;\n manufacturer: string;\n warrantyEndDate: string;\n }\n | {\n __typename: \"CartoonCharacter\";\n id: number;\n name: string;\n animator: string;\n voiceActor: string;\n }\n >\n | null\n | undefined;\n }>();\n });\n});\n\ntest(\"does not detect `$fragmentRefs` if type contains `any`\", (prefix) => {\n interface Source {\n foo: { bar: any[] };\n \" $fragmentName\": \"foo\";\n }\n\n bench(prefix + \"instantiations\", () => {\n return {} as MaybeMasked<Source>;\n }).types([6, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n const x = {} as MaybeMasked<Source>;\n\n expectTypeOf(x).branded.toEqualTypeOf<Source>();\n });\n});\n\ntest(\"leaves tuples alone\", (prefix) => {\n interface Source {\n coords: [long: number, lat: number];\n }\n\n bench(prefix + \"instantiations\", () => {\n return {} as Unmasked<Source>;\n }).types([5, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n const x = {} as Unmasked<Source>;\n\n expectTypeOf(x).branded.toEqualTypeOf<{\n coords: [long: number, lat: number];\n }>();\n });\n});\n\ntest(\"does not detect `$fragmentRefs` if type is a record type\", (prefix) => {\n interface MetadataItem {\n foo: string;\n }\n\n interface Source {\n metadata: Record<string, MetadataItem>;\n \" $fragmentName\": \"Source\";\n }\n\n bench(prefix + \"instantiations\", () => {\n return {} as MaybeMasked<Source>;\n }).types([6, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n const x = {} as MaybeMasked<Source>;\n\n expectTypeOf(x).branded.toEqualTypeOf<Source>();\n });\n});\n\ntest(\"does not detect `$fragmentRefs` on types with index signatures\", (prefix) => {\n interface Source {\n foo: string;\n \" $fragmentName\": \"Source\";\n [key: string]: string;\n }\n\n bench(prefix + \"instantiations\", () => {\n return {} as MaybeMasked<Source>;\n }).types([6, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n const x = {} as MaybeMasked<Source>;\n\n expectTypeOf(x).branded.toEqualTypeOf<Source>();\n });\n});\n\ntest(\"detects `$fragmentRefs` on types with index signatures\", (prefix) => {\n type Source = {\n __typename: \"Foo\";\n id: number;\n metadata: Record<string, number>;\n structuredMetadata: StructuredMetadata;\n } & { \" $fragmentName\"?: \"UserFieldsFragment\" } & {\n \" $fragmentRefs\"?: {\n FooFragment: FooFragment;\n };\n };\n\n interface StructuredMetadata {\n bar: number;\n [index: string]: number;\n }\n\n type FooFragment = {\n __typename: \"Foo\";\n foo: string;\n } & { \" $fragmentName\"?: \"FooFragment\" };\n\n bench(prefix + \"instantiations\", () => {\n return {} as MaybeMasked<Source>;\n }).types([6, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n const x = {} as Unmasked<Source>;\n const y = {} as ContainsFragmentsRefs<Source>;\n\n expectTypeOf(x).branded.toEqualTypeOf<{\n __typename: \"Foo\";\n id: number;\n metadata: Record<string, number>;\n foo: string;\n structuredMetadata: StructuredMetadata;\n }>();\n expectTypeOf(y).toEqualTypeOf<true>();\n });\n});\n\ntest(\"recursive types: no error 'Type instantiation is excessively deep and possibly infinite.'\", (prefix) => {\n // this type is self-recursive\n type Source = import(\"graphql\").IntrospectionQuery;\n\n bench(prefix + \"instantiations\", () => {\n return {} as MaybeMasked<Source>;\n }).types([6, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n const x = {} as MaybeMasked<Source>;\n\n expectTypeOf(x).branded.toEqualTypeOf<Source>();\n });\n});\n\ntest(\"MaybeMasked can be called with a generic if `mode` is not set to `unmask`\", (prefix) => {\n function withGenericResult<T extends { [key: string]: string }>(\n arg: TypedDocumentNode<T, {}>\n ) {\n bench(prefix + \"Result generic - instantiations\", () => {\n const maybeMasked: MaybeMasked<typeof arg> = arg;\n return maybeMasked;\n }).types();\n\n bench(prefix + \"Result generic - functionality\", () => {\n const maybeMasked: MaybeMasked<typeof arg> = arg;\n expectTypeOf(maybeMasked).toEqualTypeOf(arg);\n });\n }\n function withGenericDocument<T extends TypedDocumentNode>(arg: T) {\n bench(prefix + \"Result generic - instantiations\", () => {\n const maybeMasked: MaybeMasked<T> = arg;\n return maybeMasked;\n }).types();\n\n bench(prefix + \"Result generic - functionality\", () => {\n const maybeMasked: MaybeMasked<T> = arg;\n // cannot use unresolved generic with `expectTypeOf` here so we just try an assignment the other way round\n const test: T = maybeMasked;\n return test;\n });\n }\n withGenericResult({} as any);\n withGenericDocument({} as any);\n});\n"]}
1
+ {"version":3,"file":"types.bench.js","sourceRoot":"","sources":["../../../src/masking/__benches__/types.bench.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC,KAAK,CAAC;IACJ,eAAe,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;CACjC,CAAC,CAAC;AAEH,SAAS,IAAI,CAAC,IAAY,EAAE,EAA0B;IACpD,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;AAClB,CAAC;AAcD,IAAI,CAAC,iCAAiC,EAAE,UAAC,MAAM;IAgC7C,KAAK,CAAC,MAAM,GAAG,gBAAgB,EAAE;QAC/B,OAAO,EAAsB,CAAC;IAChC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEhC,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE;QAC9B,YAAY,EAAoB,CAAC,aAAa,EAQ1C,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iCAAiC,EAAE,UAAC,MAAM;IAsC7C,KAAK,CAAC,MAAM,GAAG,gBAAgB,EAAE;QAC/B,OAAO,EAAsB,CAAC;IAChC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEhC,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE;QAC9B,YAAY,EAAoB,CAAC,aAAa,EAa1C,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0CAA0C,EAAE,UAAC,MAAM;IA8CtD,KAAK,CAAC,MAAM,GAAG,gBAAgB,EAAE;QAC/B,OAAO,EAAsB,CAAC;IAChC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEhC,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE;QAC9B,YAAY,EAAoB,CAAC,aAAa,EAoB1C,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2BAA2B,EAAE,UAAC,MAAM;IAmBvC,KAAK,CAAC,MAAM,GAAG,gBAAgB,EAAE;QAC/B,OAAO,EAAsB,CAAC;IAChC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEhC,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE;QAC9B,YAAY,EAAoB,CAAC,aAAa,EAM1C,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,4BAA4B,EAAE,UAAC,MAAM;IACxC,KAAK,CAAC,MAAM,GAAG,2BAA2B,EAAE;QAC1C,MAAM,EAAoB,CAAC;IAC7B,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAElC,KAAK,CAAC,MAAM,GAAG,0BAA0B,EAAE;QACzC,YAAY,EAAgB,CAAC,aAAa,EAAM,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,MAAM,GAAG,oCAAoC,EAAE;QACnD,MAAM,EAAsD,CAAC;IAC/D,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAElC,KAAK,CAAC,MAAM,GAAG,mCAAmC,EAAE;QAClD,YAAY,EAAiC,CAAC,aAAa,EAExD,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,MAAM,GAAG,wBAAwB,EAAE;QACvC,MAAM,EAA8B,CAAC;IACvC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEjC,KAAK,CAAC,MAAM,GAAG,uBAAuB,EAAE;QACtC,YAAY,EAAqB,CAAC,WAAW,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,MAAM,GAAG,oBAAoB,EAAE;QACnC,MAAM,EAAsB,CAAC;IAC/B,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEjC,KAAK,CAAC,MAAM,GAAG,mBAAmB,EAAE;QAClC,YAAY,EAAiB,CAAC,OAAO,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+BAA+B,EAAE,UAAC,MAAM;IAC3C,KAAK,CAAC,MAAM,GAAG,2BAA2B,EAAE;QAC1C,MAAM,EAAuB,CAAC;IAChC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEjC,KAAK,CAAC,MAAM,GAAG,0BAA0B,EAAE;QACzC,YAAY,EAAmB,CAAC,aAAa,EAAM,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,MAAM,GAAG,oCAAoC,EAAE;QACnD,MAAM,EAAyD,CAAC;IAClE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACjC,KAAK,CAAC,MAAM,GAAG,mCAAmC,EAAE;QAClD,YAAY,EAAoC,CAAC,aAAa,EAE3D,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,MAAM,GAAG,wBAAwB,EAAE;QACvC,MAAM,EAAiC,CAAC;IAC1C,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACjC,KAAK,CAAC,MAAM,GAAG,uBAAuB,EAAE;QACtC,YAAY,EAAwB,CAAC,WAAW,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,MAAM,GAAG,oBAAoB,EAAE;QACnC,MAAM,EAAyB,CAAC;IAClC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACjC,KAAK,CAAC,MAAM,GAAG,mBAAmB,EAAE;QAClC,YAAY,EAAoB,CAAC,OAAO,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oCAAoC,EAAE,UAAC,MAAM;IAChD,CAAC,SAAS,iBAAiB;QACzB,KAAK,CAAC,MAAM,GAAG,kDAAkD,EAAE;YACjE,MAAM,EAGH,CAAC;QACN,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,EAAE,CAAC;IAEL,CAAC,SAAS,kBAAkB;QAC1B,KAAK,CAAC,MAAM,GAAG,oCAAoC,EAAE;YACnD,MAAM,EAA2D,CAAC;QACpE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,EAAE,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mDAAmD,EAAE,UAAC,MAAM;IAoC/D,KAAK,CAAC,MAAM,GAAG,gBAAgB,EAAE;QAC/B,OAAO,EAAsB,CAAC;IAChC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEhC,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE;;QAC9B,IAAM,CAAC,GAAG,EAAsB,CAAC;QACjC,2BAA2B;QAC3B,CAAC,CAAC,EAAE,CAAC;QACL,CAAC,CAAC,OAAO,CAAC;QACV,MAAA,MAAA,CAAC,CAAC,OAAO,0CAAG,CAAC,CAAC,0CAAE,EAAE,CAAC;QACnB,MAAA,MAAA,CAAC,CAAC,OAAO,0CAAG,CAAC,CAAC,0CAAE,SAAS,CAAC;QAC1B,MAAA,MAAA,CAAC,CAAC,OAAO,0CAAG,CAAC,CAAC,0CAAE,QAAQ,CAAC;QACzB,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAYjC,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,4CAA4C,EAAE,UAAC,MAAM;IAkCxD,KAAK,CAAC,MAAM,GAAG,gBAAgB,EAAE;QAC/B,OAAO,EAAsB,CAAC;IAChC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEhC,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE;QAC9B,IAAM,CAAC,GAAG,EAAsB,CAAC;QACjC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EA4BjC,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wDAAwD,EAAE,UAAC,MAAM;IAMpE,KAAK,CAAC,MAAM,GAAG,gBAAgB,EAAE;QAC/B,OAAO,EAAyB,CAAC;IACnC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEhC,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE;QAC9B,IAAM,CAAC,GAAG,EAAyB,CAAC;QAEpC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAU,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qBAAqB,EAAE,UAAC,MAAM;IAKjC,KAAK,CAAC,MAAM,GAAG,gBAAgB,EAAE;QAC/B,OAAO,EAAsB,CAAC;IAChC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEhC,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE;QAC9B,IAAM,CAAC,GAAG,EAAsB,CAAC;QAEjC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAEjC,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0DAA0D,EAAE,UAAC,MAAM;IAUtE,KAAK,CAAC,MAAM,GAAG,gBAAgB,EAAE;QAC/B,OAAO,EAAyB,CAAC;IACnC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEhC,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE;QAC9B,IAAM,CAAC,GAAG,EAAyB,CAAC;QAEpC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAU,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gEAAgE,EAAE,UAAC,MAAM;IAO5E,KAAK,CAAC,MAAM,GAAG,gBAAgB,EAAE;QAC/B,OAAO,EAAyB,CAAC;IACnC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEhC,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE;QAC9B,IAAM,CAAC,GAAG,EAAyB,CAAC;QAEpC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAU,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wDAAwD,EAAE,UAAC,MAAM;IAsBpE,KAAK,CAAC,MAAM,GAAG,gBAAgB,EAAE;QAC/B,OAAO,EAAyB,CAAC;IACnC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEhC,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE;QAC9B,IAAM,CAAC,GAAG,EAAsB,CAAC;QACjC,IAAM,CAAC,GAAG,EAAmC,CAAC;QAE9C,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAMjC,CAAC;QACL,YAAY,CAAC,CAAC,CAAC,CAAC,aAAa,EAAQ,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2FAA2F,EAAE,UAAC,MAAM;IAIvG,KAAK,CAAC,MAAM,GAAG,gBAAgB,EAAE;QAC/B,OAAO,EAAyB,CAAC;IACnC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEhC,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE;QAC9B,IAAM,CAAC,GAAG,EAAyB,CAAC;QAEpC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAU,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2EAA2E,EAAE,UAAC,MAAM;IACvF,SAAS,iBAAiB,CACxB,GAA6B;QAE7B,KAAK,CAAC,MAAM,GAAG,iCAAiC,EAAE;YAChD,IAAM,WAAW,GAA4B,GAAG,CAAC;YACjD,OAAO,WAAW,CAAC;QACrB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAEhC,KAAK,CAAC,MAAM,GAAG,gCAAgC,EAAE;YAC/C,IAAM,WAAW,GAA4B,GAAG,CAAC;YACjD,YAAY,CAAC,WAAW,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC;IACD,SAAS,mBAAmB,CAA8B,GAAM;QAC9D,KAAK,CAAC,MAAM,GAAG,iCAAiC,EAAE;YAChD,IAAM,WAAW,GAAmB,GAAG,CAAC;YACxC,OAAO,WAAW,CAAC;QACrB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAEhC,KAAK,CAAC,MAAM,GAAG,gCAAgC,EAAE;YAC/C,IAAM,WAAW,GAAmB,GAAG,CAAC;YACxC,0GAA0G;YAC1G,IAAM,IAAI,GAAM,WAAW,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IACD,iBAAiB,CAAC,EAAS,CAAC,CAAC;IAC7B,mBAAmB,CAAC,EAAS,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0CAA0C,EAAE,UAAC,MAAM;IAiBtD,KAAK,CAAC,MAAM,GAAG,gBAAgB,EAAE;QAC/B,OAAO,EAAsB,CAAC;IAChC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEhC,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE;QAC9B,IAAM,CAAC,GAAG,EAAsB,CAAC;QAEjC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAKjC,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import type { MaybeMasked, Unmasked } from \"../index.js\";\nimport { attest, bench } from \"@ark/attest\";\nimport { expectTypeOf } from \"expect-type\";\nimport type { DeepPartial } from \"../../utilities/index.js\";\n\nimport { setup } from \"@ark/attest\";\nimport type { ContainsFragmentsRefs } from \"../internal/types.js\";\nimport type { TypedDocumentNode } from \"../../index.js\";\n\nsetup({\n updateSnapshots: !process.env.CI,\n});\n\nfunction test(name: string, fn: (name: string) => void) {\n fn(name + \": \");\n}\n\ntype UnrelatedType = {\n __typename: \"Unrelated\";\n} & { \" $fragmentName\"?: \"Unrelated\" } & {\n \" $fragmentRefs\"?: {\n Unrelated: {\n __unrelated: boolean;\n };\n };\n};\n// @ts-ignore\ntype _TypeCacheWarmup = Unmasked<UnrelatedType> | MaybeMasked<UnrelatedType>;\n\ntest(\"unmasks deeply nested fragments\", (prefix) => {\n type UserFieldsFragment = {\n __typename: \"User\";\n id: number;\n age: number;\n } & { \" $fragmentName\"?: \"UserFieldsFragment\" } & {\n \" $fragmentRefs\"?: {\n NameFieldsFragment: NameFieldsFragment;\n JobFieldsFragment: JobFieldsFragment;\n };\n };\n\n type NameFieldsFragment = {\n __typename: \"User\";\n firstName: string;\n lastName: string;\n } & { \" $fragmentName\"?: \"NameFieldsFragment\" };\n\n type JobFieldsFragment = {\n __typename: \"User\";\n job: string;\n } & { \" $fragmentName\"?: \"JobFieldsFragment\" } & {\n \" $fragmentRefs\"?: { CareerFieldsFragment: CareerFieldsFragment };\n };\n\n type CareerFieldsFragment = {\n __typename: \"User\";\n position: string;\n } & { \" $fragmentName\"?: \"CareerFieldsFragment\" };\n\n type Source = UserFieldsFragment;\n\n bench(prefix + \"instantiations\", () => {\n return {} as Unmasked<Source>;\n }).types([5, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n expectTypeOf<Unmasked<Source>>().toEqualTypeOf<{\n __typename: \"User\";\n id: number;\n age: number;\n firstName: string;\n lastName: string;\n job: string;\n position: string;\n }>();\n });\n});\n\ntest(\"unmasks deeply nested fragments\", (prefix) => {\n type UserFieldsFragment = {\n __typename: \"User\";\n id: number;\n age: number;\n jobs: Array<\n {\n __typename: \"Job\";\n id: string;\n title: string;\n } & { \" $fragmentRefs\"?: { JobFieldsFragment: JobFieldsFragment } }\n >;\n } & { \" $fragmentName\"?: \"UserFieldsFragment\" } & {\n \" $fragmentRefs\"?: {\n NameFieldsFragment: NameFieldsFragment;\n };\n };\n\n type NameFieldsFragment = {\n __typename: \"User\";\n firstName: string;\n lastName: string;\n } & { \" $fragmentName\"?: \"NameFieldsFragment\" };\n\n type JobFieldsFragment = {\n __typename: \"Job\";\n job: string;\n } & { \" $fragmentName\"?: \"JobFieldsFragment\" } & {\n \" $fragmentRefs\"?: { CareerFieldsFragment: CareerFieldsFragment };\n };\n\n type CareerFieldsFragment = {\n __typename: \"Job\";\n position: string;\n } & { \" $fragmentName\"?: \"CareerFieldsFragment\" };\n\n type Source = UserFieldsFragment;\n\n bench(prefix + \"instantiations\", () => {\n return {} as Unmasked<Source>;\n }).types([5, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n expectTypeOf<Unmasked<Source>>().toEqualTypeOf<{\n __typename: \"User\";\n id: number;\n age: number;\n firstName: string;\n lastName: string;\n jobs: Array<{\n __typename: \"Job\";\n id: string;\n title: string;\n job: string;\n position: string;\n }>;\n }>();\n });\n});\n\ntest(\"unmasks deeply nested nullable fragments\", (prefix) => {\n type UserFieldsFragment = {\n __typename: \"User\";\n id: number;\n age: number;\n career:\n | ({\n __typename: \"Job\";\n id: string;\n title: string;\n } & { \" $fragmentRefs\"?: { JobFieldsFragment: JobFieldsFragment } })\n | null;\n jobs: Array<\n | ({\n __typename: \"Job\";\n id: string;\n title: string;\n } & { \" $fragmentRefs\"?: { JobFieldsFragment: JobFieldsFragment } })\n | null\n >;\n } & { \" $fragmentName\"?: \"UserFieldsFragment\" } & {\n \" $fragmentRefs\"?: {\n NameFieldsFragment: NameFieldsFragment;\n };\n };\n\n type NameFieldsFragment = {\n __typename: \"User\";\n firstName: string;\n lastName: string;\n } & { \" $fragmentName\"?: \"NameFieldsFragment\" };\n\n type JobFieldsFragment = {\n __typename: \"Job\";\n job: string;\n } & { \" $fragmentName\"?: \"JobFieldsFragment\" } & {\n \" $fragmentRefs\"?: { CareerFieldsFragment: CareerFieldsFragment };\n };\n\n type CareerFieldsFragment = {\n __typename: \"Job\";\n position: string;\n } & { \" $fragmentName\"?: \"CareerFieldsFragment\" };\n\n type Source = UserFieldsFragment;\n\n bench(prefix + \"instantiations\", () => {\n return {} as Unmasked<Source>;\n }).types([5, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n expectTypeOf<Unmasked<Source>>().toEqualTypeOf<{\n __typename: \"User\";\n id: number;\n age: number;\n firstName: string;\n lastName: string;\n career: {\n __typename: \"Job\";\n id: string;\n title: string;\n job: string;\n position: string;\n } | null;\n jobs: Array<{\n __typename: \"Job\";\n id: string;\n title: string;\n job: string;\n position: string;\n } | null>;\n }>();\n });\n});\n\ntest(\"unmasks DeepPartial types\", (prefix) => {\n type UserFieldsFragment = {\n __typename: \"User\";\n id: number;\n age: number;\n } & { \" $fragmentName\"?: \"UserFieldsFragment\" } & {\n \" $fragmentRefs\"?: {\n NameFieldsFragment: NameFieldsFragment;\n };\n };\n\n type NameFieldsFragment = {\n __typename: \"User\";\n firstName: string;\n lastName: string;\n } & { \" $fragmentName\"?: \"NameFieldsFragment\" };\n\n type Source = DeepPartial<UserFieldsFragment>;\n\n bench(prefix + \"instantiations\", () => {\n return {} as Unmasked<Source>;\n }).types([5, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n expectTypeOf<Unmasked<Source>>().toEqualTypeOf<{\n __typename?: \"User\";\n id?: number;\n age?: number;\n firstName?: string;\n lastName?: string;\n }>();\n });\n});\n\ntest(\"Unmasked handles odd types\", (prefix) => {\n bench(prefix + \"empty type instantiations\", () => {\n attest<{}, Unmasked<{}>>();\n }).types([111, \"instantiations\"]);\n\n bench(prefix + \"empty type functionality\", () => {\n expectTypeOf<Unmasked<{}>>().toEqualTypeOf<{}>();\n });\n\n bench(prefix + \"generic record type instantiations\", () => {\n attest<Record<string, any>, Unmasked<Record<string, any>>>();\n }).types([115, \"instantiations\"]);\n\n bench(prefix + \"generic record type functionality\", () => {\n expectTypeOf<Unmasked<Record<string, any>>>().toEqualTypeOf<\n Record<string, any>\n >();\n });\n\n bench(prefix + \"unknown instantiations\", () => {\n attest<unknown, Unmasked<unknown>>();\n }).types([47, \"instantiations\"]);\n\n bench(prefix + \"unknown functionality\", () => {\n expectTypeOf<Unmasked<unknown>>().toBeUnknown();\n });\n\n bench(prefix + \"any instantiations\", () => {\n attest<any, Unmasked<any>>();\n }).types([48, \"instantiations\"]);\n\n bench(prefix + \"any functionality\", () => {\n expectTypeOf<Unmasked<any>>().toBeAny();\n });\n});\n\ntest(\"MaybeMasked handles odd types\", (prefix) => {\n bench(prefix + \"empty type instantiations\", () => {\n attest<{}, MaybeMasked<{}>>();\n }).types([41, \"instantiations\"]);\n\n bench(prefix + \"empty type functionality\", () => {\n expectTypeOf<MaybeMasked<{}>>().toEqualTypeOf<{}>();\n });\n\n bench(prefix + \"generic record type instantiations\", () => {\n attest<Record<string, any>, MaybeMasked<Record<string, any>>>();\n }).types([46, \"instantiations\"]);\n bench(prefix + \"generic record type functionality\", () => {\n expectTypeOf<MaybeMasked<Record<string, any>>>().toEqualTypeOf<\n Record<string, any>\n >();\n });\n\n bench(prefix + \"unknown instantiations\", () => {\n attest<unknown, MaybeMasked<unknown>>();\n }).types([41, \"instantiations\"]);\n bench(prefix + \"unknown functionality\", () => {\n expectTypeOf<MaybeMasked<unknown>>().toBeUnknown();\n });\n\n bench(prefix + \"any instantiations\", () => {\n attest<any, MaybeMasked<any>>();\n }).types([43, \"instantiations\"]);\n bench(prefix + \"any functionality\", () => {\n expectTypeOf<MaybeMasked<any>>().toBeAny();\n });\n});\n\ntest(\"distributed members on MaybeMasked\", (prefix) => {\n (function unresolvedGeneric<T>() {\n bench(prefix + \"one unresolved generic mixed with null|undefined\", () => {\n attest<\n [MaybeMasked<T> | null | undefined],\n [MaybeMasked<T | null | undefined>]\n >();\n }).types([49, \"instantiations\"]);\n })();\n\n (function unresolvedGenerics<T, V>() {\n bench(prefix + \"two unresolved generics distribute\", () => {\n attest<[MaybeMasked<T> | MaybeMasked<V>], [MaybeMasked<T | V>]>();\n }).types([50, \"instantiations\"]);\n })();\n});\n\ntest(\"deals with overlapping array from parent fragment\", (prefix) => {\n type Source = {\n __typename: \"Track\";\n /** comment: id */\n id: number;\n /** comment: artists */\n artists?: Array<{\n __typename: \"Artist\";\n /** comment: artists.id */\n id: number;\n \" $fragmentRefs\"?: {\n ArtistFragment: ArtistFragment;\n };\n }> | null;\n \" $fragmentRefs\"?: {\n NestedTrackFragment: NestedTrackFragment;\n };\n };\n\n type ArtistFragment = {\n \" $fragmentName\"?: \"Fragment__Artist\";\n __typename: \"Artist\";\n /** comment: artists.birthday */\n birthdate: string;\n };\n\n type NestedTrackFragment = {\n \" $fragmentName\"?: \"Fragment__Track\";\n __typename: \"Track\";\n artists?: Array<{\n __typename: \"Artist\";\n /** comment: artists.lastname */\n lastname: string;\n }> | null;\n };\n\n bench(prefix + \"instantiations\", () => {\n return {} as Unmasked<Source>;\n }).types([5, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n const x = {} as Unmasked<Source>;\n // some fields for hovering\n x.id;\n x.artists;\n x.artists?.[0]?.id;\n x.artists?.[0]?.birthdate;\n x.artists?.[0]?.lastname;\n expectTypeOf(x).branded.toEqualTypeOf<{\n __typename: \"Track\";\n id: number;\n artists?:\n | Array<{\n __typename: \"Artist\";\n id: number;\n birthdate: string;\n lastname: string;\n }>\n | null\n | undefined;\n }>();\n });\n});\n\ntest(\"base type, multiple fragments on sub-types\", (prefix) => {\n type Source = {\n __typename: \"Track\";\n id: number;\n artists?: Array<{\n __typename: \"Person\" | \"Animatronic\" | \"CartoonCharacter\";\n id: number;\n name: string;\n \" $fragmentRefs\"?: {\n PersonFragment: PersonFragment;\n AnimatronicFragment: AnimatronicFragment;\n CartoonCharacterFragment: CartoonCharacterFragment;\n };\n }> | null;\n };\n\n type PersonFragment = {\n \" $fragmentName\"?: \"Fragment__Person\";\n __typename: \"Person\";\n birthdate: string;\n };\n type AnimatronicFragment = {\n \" $fragmentName\"?: \"Fragment__Animatronic\";\n __typename: \"Animatronic\";\n manufacturer: string;\n warrantyEndDate: string;\n };\n type CartoonCharacterFragment = {\n \" $fragmentName\"?: \"Fragment__CartoonCharacter\";\n __typename: \"CartoonCharacter\";\n animator: string;\n voiceActor: string;\n };\n\n bench(prefix + \"instantiations\", () => {\n return {} as Unmasked<Source>;\n }).types([5, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n const x = {} as Unmasked<Source>;\n expectTypeOf(x).branded.toEqualTypeOf<{\n __typename: \"Track\";\n id: number;\n artists?:\n | Array<\n | {\n __typename: \"Person\";\n id: number;\n name: string;\n birthdate: string;\n }\n | {\n __typename: \"Animatronic\";\n id: number;\n name: string;\n manufacturer: string;\n warrantyEndDate: string;\n }\n | {\n __typename: \"CartoonCharacter\";\n id: number;\n name: string;\n animator: string;\n voiceActor: string;\n }\n >\n | null\n | undefined;\n }>();\n });\n});\n\ntest(\"does not detect `$fragmentRefs` if type contains `any`\", (prefix) => {\n interface Source {\n foo: { bar: any[] };\n \" $fragmentName\": \"foo\";\n }\n\n bench(prefix + \"instantiations\", () => {\n return {} as MaybeMasked<Source>;\n }).types([1, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n const x = {} as MaybeMasked<Source>;\n\n expectTypeOf(x).branded.toEqualTypeOf<Source>();\n });\n});\n\ntest(\"leaves tuples alone\", (prefix) => {\n interface Source {\n coords: [long: number, lat: number];\n }\n\n bench(prefix + \"instantiations\", () => {\n return {} as Unmasked<Source>;\n }).types([5, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n const x = {} as Unmasked<Source>;\n\n expectTypeOf(x).branded.toEqualTypeOf<{\n coords: [long: number, lat: number];\n }>();\n });\n});\n\ntest(\"does not detect `$fragmentRefs` if type is a record type\", (prefix) => {\n interface MetadataItem {\n foo: string;\n }\n\n interface Source {\n metadata: Record<string, MetadataItem>;\n \" $fragmentName\": \"Source\";\n }\n\n bench(prefix + \"instantiations\", () => {\n return {} as MaybeMasked<Source>;\n }).types([1, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n const x = {} as MaybeMasked<Source>;\n\n expectTypeOf(x).branded.toEqualTypeOf<Source>();\n });\n});\n\ntest(\"does not detect `$fragmentRefs` on types with index signatures\", (prefix) => {\n interface Source {\n foo: string;\n \" $fragmentName\": \"Source\";\n [key: string]: string;\n }\n\n bench(prefix + \"instantiations\", () => {\n return {} as MaybeMasked<Source>;\n }).types([1, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n const x = {} as MaybeMasked<Source>;\n\n expectTypeOf(x).branded.toEqualTypeOf<Source>();\n });\n});\n\ntest(\"detects `$fragmentRefs` on types with index signatures\", (prefix) => {\n type Source = {\n __typename: \"Foo\";\n id: number;\n metadata: Record<string, number>;\n structuredMetadata: StructuredMetadata;\n } & { \" $fragmentName\"?: \"UserFieldsFragment\" } & {\n \" $fragmentRefs\"?: {\n FooFragment: FooFragment;\n };\n };\n\n interface StructuredMetadata {\n bar: number;\n [index: string]: number;\n }\n\n type FooFragment = {\n __typename: \"Foo\";\n foo: string;\n } & { \" $fragmentName\"?: \"FooFragment\" };\n\n bench(prefix + \"instantiations\", () => {\n return {} as MaybeMasked<Source>;\n }).types([1, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n const x = {} as Unmasked<Source>;\n const y = {} as ContainsFragmentsRefs<Source>;\n\n expectTypeOf(x).branded.toEqualTypeOf<{\n __typename: \"Foo\";\n id: number;\n metadata: Record<string, number>;\n foo: string;\n structuredMetadata: StructuredMetadata;\n }>();\n expectTypeOf(y).toEqualTypeOf<true>();\n });\n});\n\ntest(\"recursive types: no error 'Type instantiation is excessively deep and possibly infinite.'\", (prefix) => {\n // this type is self-recursive\n type Source = import(\"graphql\").IntrospectionQuery;\n\n bench(prefix + \"instantiations\", () => {\n return {} as MaybeMasked<Source>;\n }).types([1, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n const x = {} as MaybeMasked<Source>;\n\n expectTypeOf(x).branded.toEqualTypeOf<Source>();\n });\n});\n\ntest(\"MaybeMasked can be called with a generic if `mode` is not set to `unmask`\", (prefix) => {\n function withGenericResult<T extends { [key: string]: string }>(\n arg: TypedDocumentNode<T, {}>\n ) {\n bench(prefix + \"Result generic - instantiations\", () => {\n const maybeMasked: MaybeMasked<typeof arg> = arg;\n return maybeMasked;\n }).types([1, \"instantiations\"]);\n\n bench(prefix + \"Result generic - functionality\", () => {\n const maybeMasked: MaybeMasked<typeof arg> = arg;\n expectTypeOf(maybeMasked).toEqualTypeOf(arg);\n });\n }\n function withGenericDocument<T extends TypedDocumentNode>(arg: T) {\n bench(prefix + \"Result generic - instantiations\", () => {\n const maybeMasked: MaybeMasked<T> = arg;\n return maybeMasked;\n }).types([1, \"instantiations\"]);\n\n bench(prefix + \"Result generic - functionality\", () => {\n const maybeMasked: MaybeMasked<T> = arg;\n // cannot use unresolved generic with `expectTypeOf` here so we just try an assignment the other way round\n const test: T = maybeMasked;\n return test;\n });\n }\n withGenericResult({} as any);\n withGenericDocument({} as any);\n});\n\ntest(\"Unmasked handles branded primitive types\", (prefix) => {\n type Branded<T, Name extends string> = T & { __branded?: Name };\n type UUID = Branded<string, \"UUID\">;\n type Source = {\n __typename: \"Foo\";\n id: UUID;\n name: string;\n } & { \" $fragmentName\"?: \"UserFieldsFragment\" } & {\n \" $fragmentRefs\"?: {\n FooFragment: FooFragment;\n };\n };\n type FooFragment = {\n __typename: \"Foo\";\n age: number;\n } & { \" $fragmentName\"?: \"UserFieldsFragment\" };\n\n bench(prefix + \"instantiations\", () => {\n return {} as Unmasked<Source>;\n }).types([5, \"instantiations\"]);\n\n bench(prefix + \"functionality\", () => {\n const x = {} as Unmasked<Source>;\n\n expectTypeOf(x).branded.toEqualTypeOf<{\n __typename: \"Foo\";\n id: UUID;\n name: string;\n age: number;\n }>();\n });\n});\n"]}
@@ -1,6 +1,6 @@
1
- import type { Prettify, RemoveIndexSignature } from "../../utilities/index.js";
1
+ import type { Prettify, Primitive, RemoveIndexSignature } from "../../utilities/index.js";
2
2
  export type IsAny<T> = 0 extends 1 & T ? true : false;
3
- export type UnwrapFragmentRefs<TData> = true extends IsAny<TData> ? TData : TData extends any ? string extends keyof TData ? TData : keyof TData extends never ? TData : TData extends {
3
+ export type UnwrapFragmentRefs<TData> = true extends IsAny<TData> ? TData : TData extends any ? TData extends Primitive ? TData : string extends keyof TData ? TData : keyof TData extends never ? TData : TData extends {
4
4
  " $fragmentRefs"?: infer FragmentRefs;
5
5
  } ? UnwrapFragmentRefs<CombineIntersection<Omit<TData, " $fragmentRefs"> | RemoveFragmentName<NonNullable<NonNullable<FragmentRefs>[keyof NonNullable<FragmentRefs>]>>>> : TData extends object ? {
6
6
  [K in keyof TData]: UnwrapFragmentRefs<TData[K]>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/masking/internal/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Prettify, RemoveIndexSignature } from \"../../utilities/index.js\";\n\nexport type IsAny<T> = 0 extends 1 & T ? true : false;\n\nexport type UnwrapFragmentRefs<TData> =\n true extends IsAny<TData> ? TData\n : TData extends any ?\n // Leave TData alone if it is Record<string, any> and not a specific shape\n string extends keyof TData ? TData\n : // short-circuit on empty object\n keyof TData extends never ? TData\n : TData extends { \" $fragmentRefs\"?: infer FragmentRefs } ?\n UnwrapFragmentRefs<\n CombineIntersection<\n | Omit<TData, \" $fragmentRefs\">\n | RemoveFragmentName<\n NonNullable<\n NonNullable<FragmentRefs>[keyof NonNullable<FragmentRefs>]\n >\n >\n >\n >\n : TData extends object ?\n {\n [K in keyof TData]: UnwrapFragmentRefs<TData[K]>;\n }\n : TData\n : never;\n\n/**\n```ts\nCombineIntersection<\n | { foo: string }\n | { __typename: \"A\"; a: string }\n | { __typename: \"B\"; b1: number }\n | { __typename: \"B\"; b2: string }\n> =>\n | { foo: string }\n | CombineByTypeName<\n | { __typename: \"A\"; a: string }\n | { __typename: \"B\"; b1: number }\n | { __typename: \"B\"; b2: string }\n >\n```\n */\ntype CombineIntersection<T> =\n | Exclude<T, { __typename?: string }>\n | CombineByTypeName<Extract<T, { __typename?: string }>>;\n/**\n```ts\n CombineByTypeName<\n | { __typename: \"A\"; a: string }\n | { __typename: \"B\"; b1: number }\n | { __typename: \"B\"; b2: string }\n > =>\n | CombineWithArrays<\n | { __typename: \"A\"; a: string }\n >\n | CombineWithArrays<\n | { __typename: \"B\"; b1: number }\n | { __typename: \"B\"; b2: number }\n >\n```\n */\ntype CombineByTypeName<T extends { __typename?: string }> = {\n [TypeName in NonNullable<T[\"__typename\"]>]: Prettify<\n MergeUnions<ExtractByMatchingTypeNames<T, TypeName>>\n >;\n}[NonNullable<T[\"__typename\"]>];\n\n/**\n```ts\nCombineByTypeName<\n | {\n __typename: \"Person\" | \"Animatronic\" | \"CartoonCharacter\";\n id: number;\n name: string;\n }\n | {\n __typename: \"Person\";\n birthdate: string;\n }\n | {\n __typename: \"Animatronic\";\n manufacturer: string;\n warrantyEndDate: string;\n }\n | {\n __typename: \"CartoonCharacter\";\n animator: string;\n voiceActor: string;\n }\n>\n =>\n{\n id: number;\n name: string;\n __typename: \"Person\";\n birthdate: string;\n} | {\n id: number;\n name: string;\n __typename: \"Animatronic\";\n manufacturer: string;\n warrantyEndDate: string;\n} | {\n id: number;\n name: string;\n __typename: \"CartoonCharacter\";\n animator: string;\n voiceActor: string;\n}\n```\n */\ntype ExtractByMatchingTypeNames<\n Union extends { __typename?: string },\n TypeName extends string,\n> = Union extends any ?\n TypeName extends NonNullable<Union[\"__typename\"]> ?\n Omit<Union, \"__typename\"> & {\n // preserve `?`, which `& { __typename: TypeName }` would not do\n [K in keyof Union as K extends \"__typename\" ? K : never]: TypeName;\n }\n : never\n: never;\n\ntype MergeUnions<TUnion> = MergeUnionsAcc<\n TUnion,\n takeOneFromUnion<TUnion>,\n never\n>;\n\ntype DistributedRequiredExclude<T, U> =\n T extends any ?\n Required<T> extends Required<U> ?\n Required<U> extends Required<T> ?\n never\n : T\n : T\n : T;\n\ntype MergeUnionsAcc<TUnion, Curr, Merged> =\n [Curr] extends [never] ? Merged\n : MergeUnionsAcc<\n DistributedRequiredExclude<TUnion, Curr>,\n takeOneFromUnion<DistributedRequiredExclude<TUnion, Curr>>,\n [Merged] extends [never] ? Curr : MergeObjects<Curr, Merged>\n >;\ntype unionToIntersection<T> =\n (T extends unknown ? (x: T) => unknown : never) extends (\n (x: infer U) => unknown\n ) ?\n U\n : never;\n\ntype takeOneFromUnion<T> =\n unionToIntersection<T extends T ? (x: T) => 0 : never> extends (\n (x: infer U) => 0\n ) ?\n U\n : never;\n\ntype MergeObjects<T, U> = Prettify<\n {\n [k in keyof T]: k extends keyof U ?\n [NonNullable<T[k]>, NonNullable<U[k]>] extends (\n [infer TK extends object, infer UK extends object]\n ) ?\n TK extends unknown[] ?\n UK extends unknown[] ?\n | CombineIntersection<TK[number] | UK[number]>[]\n | Extract<T[k] | U[k], undefined | null>\n : T[k]\n : CombineIntersection<TK | UK> | Extract<T[k] | U[k], undefined | null>\n : T[k]\n : T[k];\n } & Pick<U, Exclude<keyof U, keyof T>>\n>;\n\nexport type RemoveMaskedMarker<T> = Omit<T, \"__masked\">;\n// force distrubution when T is a union with | undefined\nexport type RemoveFragmentName<T> =\n T extends any ? Omit<T, \" $fragmentName\"> : T;\n\ntype Exact<in out T> = (x: T) => T;\nexport type ContainsFragmentsRefs<TData, Seen = never> = true extends (\n IsAny<TData>\n) ?\n false\n: TData extends object ?\n Exact<TData> extends Seen ? false\n : \" $fragmentRefs\" extends keyof RemoveIndexSignature<TData> ? true\n : ContainsFragmentsRefs<TData[keyof TData], Seen | Exact<TData>>\n: false;\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/masking/internal/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n Prettify,\n Primitive,\n RemoveIndexSignature,\n} from \"../../utilities/index.js\";\n\nexport type IsAny<T> = 0 extends 1 & T ? true : false;\n\nexport type UnwrapFragmentRefs<TData> =\n true extends IsAny<TData> ? TData\n : TData extends any ?\n // Ensure tagged/branded types are left alone (i.e. type UUID = string & { ... })\n TData extends Primitive ? TData\n : // Leave TData alone if it is Record<string, any> and not a specific shape\n string extends keyof TData ? TData\n : // short-circuit on empty object\n keyof TData extends never ? TData\n : TData extends { \" $fragmentRefs\"?: infer FragmentRefs } ?\n UnwrapFragmentRefs<\n CombineIntersection<\n | Omit<TData, \" $fragmentRefs\">\n | RemoveFragmentName<\n NonNullable<\n NonNullable<FragmentRefs>[keyof NonNullable<FragmentRefs>]\n >\n >\n >\n >\n : TData extends object ?\n {\n [K in keyof TData]: UnwrapFragmentRefs<TData[K]>;\n }\n : TData\n : never;\n\n/**\n```ts\nCombineIntersection<\n | { foo: string }\n | { __typename: \"A\"; a: string }\n | { __typename: \"B\"; b1: number }\n | { __typename: \"B\"; b2: string }\n> =>\n | { foo: string }\n | CombineByTypeName<\n | { __typename: \"A\"; a: string }\n | { __typename: \"B\"; b1: number }\n | { __typename: \"B\"; b2: string }\n >\n```\n */\ntype CombineIntersection<T> =\n | Exclude<T, { __typename?: string }>\n | CombineByTypeName<Extract<T, { __typename?: string }>>;\n/**\n```ts\n CombineByTypeName<\n | { __typename: \"A\"; a: string }\n | { __typename: \"B\"; b1: number }\n | { __typename: \"B\"; b2: string }\n > =>\n | CombineWithArrays<\n | { __typename: \"A\"; a: string }\n >\n | CombineWithArrays<\n | { __typename: \"B\"; b1: number }\n | { __typename: \"B\"; b2: number }\n >\n```\n */\ntype CombineByTypeName<T extends { __typename?: string }> = {\n [TypeName in NonNullable<T[\"__typename\"]>]: Prettify<\n MergeUnions<ExtractByMatchingTypeNames<T, TypeName>>\n >;\n}[NonNullable<T[\"__typename\"]>];\n\n/**\n```ts\nCombineByTypeName<\n | {\n __typename: \"Person\" | \"Animatronic\" | \"CartoonCharacter\";\n id: number;\n name: string;\n }\n | {\n __typename: \"Person\";\n birthdate: string;\n }\n | {\n __typename: \"Animatronic\";\n manufacturer: string;\n warrantyEndDate: string;\n }\n | {\n __typename: \"CartoonCharacter\";\n animator: string;\n voiceActor: string;\n }\n>\n =>\n{\n id: number;\n name: string;\n __typename: \"Person\";\n birthdate: string;\n} | {\n id: number;\n name: string;\n __typename: \"Animatronic\";\n manufacturer: string;\n warrantyEndDate: string;\n} | {\n id: number;\n name: string;\n __typename: \"CartoonCharacter\";\n animator: string;\n voiceActor: string;\n}\n```\n */\ntype ExtractByMatchingTypeNames<\n Union extends { __typename?: string },\n TypeName extends string,\n> = Union extends any ?\n TypeName extends NonNullable<Union[\"__typename\"]> ?\n Omit<Union, \"__typename\"> & {\n // preserve `?`, which `& { __typename: TypeName }` would not do\n [K in keyof Union as K extends \"__typename\" ? K : never]: TypeName;\n }\n : never\n: never;\n\ntype MergeUnions<TUnion> = MergeUnionsAcc<\n TUnion,\n takeOneFromUnion<TUnion>,\n never\n>;\n\ntype DistributedRequiredExclude<T, U> =\n T extends any ?\n Required<T> extends Required<U> ?\n Required<U> extends Required<T> ?\n never\n : T\n : T\n : T;\n\ntype MergeUnionsAcc<TUnion, Curr, Merged> =\n [Curr] extends [never] ? Merged\n : MergeUnionsAcc<\n DistributedRequiredExclude<TUnion, Curr>,\n takeOneFromUnion<DistributedRequiredExclude<TUnion, Curr>>,\n [Merged] extends [never] ? Curr : MergeObjects<Curr, Merged>\n >;\ntype unionToIntersection<T> =\n (T extends unknown ? (x: T) => unknown : never) extends (\n (x: infer U) => unknown\n ) ?\n U\n : never;\n\ntype takeOneFromUnion<T> =\n unionToIntersection<T extends T ? (x: T) => 0 : never> extends (\n (x: infer U) => 0\n ) ?\n U\n : never;\n\ntype MergeObjects<T, U> = Prettify<\n {\n [k in keyof T]: k extends keyof U ?\n [NonNullable<T[k]>, NonNullable<U[k]>] extends (\n [infer TK extends object, infer UK extends object]\n ) ?\n TK extends unknown[] ?\n UK extends unknown[] ?\n | CombineIntersection<TK[number] | UK[number]>[]\n | Extract<T[k] | U[k], undefined | null>\n : T[k]\n : CombineIntersection<TK | UK> | Extract<T[k] | U[k], undefined | null>\n : T[k]\n : T[k];\n } & Pick<U, Exclude<keyof U, keyof T>>\n>;\n\nexport type RemoveMaskedMarker<T> = Omit<T, \"__masked\">;\n// force distrubution when T is a union with | undefined\nexport type RemoveFragmentName<T> =\n T extends any ? Omit<T, \" $fragmentName\"> : T;\n\ntype Exact<in out T> = (x: T) => T;\nexport type ContainsFragmentsRefs<TData, Seen = never> = true extends (\n IsAny<TData>\n) ?\n false\n: TData extends object ?\n Exact<TData> extends Seen ? false\n : \" $fragmentRefs\" extends keyof RemoveIndexSignature<TData> ? true\n : ContainsFragmentsRefs<TData[keyof TData], Seen | Exact<TData>>\n: false;\n"]}
@@ -36,11 +36,11 @@ export type MaybeMasked<TData> = DataMasking extends {
36
36
  mode: "unmask";
37
37
  } ? TData extends any ? true extends IsAny<TData> ? TData : TData extends {
38
38
  __masked?: true;
39
- } ? Prettify<RemoveMaskedMarker<TData>> : true extends ContainsFragmentsRefs<TData> ? Unmasked<TData> : TData : never : DataMasking extends {
39
+ } ? Prettify<RemoveMaskedMarker<TData>> : Unmasked<TData> : never : DataMasking extends {
40
40
  mode: "preserveTypes";
41
41
  } ? TData : TData;
42
42
  /**
43
43
  * Unmasks a type to provide its full result.
44
44
  */
45
- export type Unmasked<TData> = true extends IsAny<TData> ? TData : TData extends object ? UnwrapFragmentRefs<RemoveMaskedMarker<RemoveFragmentName<TData>>> : TData;
45
+ export type Unmasked<TData> = true extends IsAny<TData> ? TData : TData extends object ? true extends ContainsFragmentsRefs<TData> ? UnwrapFragmentRefs<RemoveMaskedMarker<RemoveFragmentName<TData>>> : TData : TData;
46
46
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/masking/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { TypedDocumentNode } from \"@graphql-typed-document-node/core\";\nimport type {\n ContainsFragmentsRefs,\n IsAny,\n RemoveFragmentName,\n RemoveMaskedMarker,\n UnwrapFragmentRefs,\n} from \"./internal/types.js\";\nimport type { Prettify } from \"../utilities/index.js\";\n\nexport interface DataMasking {}\n\n/**\n * Marks a type as masked. This is used by `MaybeMasked` when determining\n * whether to use the masked or unmasked type.\n */\nexport type Masked<TData> = TData & {\n __masked?: true;\n};\n\n/**\n * Marks a type as masked. This is a shortcut for\n * `TypedDocumentNode<Masked<TData>, TVariables>`\n */\nexport type MaskedDocumentNode<\n TData = { [key: string]: any },\n TVariables = { [key: string]: any },\n> = TypedDocumentNode<Masked<TData>, TVariables>;\n\nexport type FragmentType<TData> =\n [TData] extends [{ \" $fragmentName\"?: infer TKey }] ?\n TKey extends string ?\n { \" $fragmentRefs\"?: { [key in TKey]: TData } }\n : never\n : never;\n\n/**\n * Returns TData as either masked or unmasked depending on whether masking is\n * enabled.\n */\nexport type MaybeMasked<TData> =\n DataMasking extends { mode: \"unmask\" } ?\n // distribute TData - in case of a union, do the next steps for each member\n TData extends any ?\n // prevent \"Type instantiation is excessively deep and possibly infinite.\"\n true extends IsAny<TData> ? TData\n : TData extends { __masked?: true } ? Prettify<RemoveMaskedMarker<TData>>\n : true extends ContainsFragmentsRefs<TData> ? Unmasked<TData>\n : TData\n : never\n : DataMasking extends { mode: \"preserveTypes\" } ? TData\n : TData;\n\n/**\n * Unmasks a type to provide its full result.\n */\nexport type Unmasked<TData> =\n true extends IsAny<TData> ? TData\n : TData extends object ?\n UnwrapFragmentRefs<RemoveMaskedMarker<RemoveFragmentName<TData>>>\n : TData;\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/masking/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { TypedDocumentNode } from \"@graphql-typed-document-node/core\";\nimport type {\n ContainsFragmentsRefs,\n IsAny,\n RemoveFragmentName,\n RemoveMaskedMarker,\n UnwrapFragmentRefs,\n} from \"./internal/types.js\";\nimport type { Prettify } from \"../utilities/index.js\";\n\nexport interface DataMasking {}\n\n/**\n * Marks a type as masked. This is used by `MaybeMasked` when determining\n * whether to use the masked or unmasked type.\n */\nexport type Masked<TData> = TData & {\n __masked?: true;\n};\n\n/**\n * Marks a type as masked. This is a shortcut for\n * `TypedDocumentNode<Masked<TData>, TVariables>`\n */\nexport type MaskedDocumentNode<\n TData = { [key: string]: any },\n TVariables = { [key: string]: any },\n> = TypedDocumentNode<Masked<TData>, TVariables>;\n\nexport type FragmentType<TData> =\n [TData] extends [{ \" $fragmentName\"?: infer TKey }] ?\n TKey extends string ?\n { \" $fragmentRefs\"?: { [key in TKey]: TData } }\n : never\n : never;\n\n/**\n * Returns TData as either masked or unmasked depending on whether masking is\n * enabled.\n */\nexport type MaybeMasked<TData> =\n DataMasking extends { mode: \"unmask\" } ?\n // distribute TData - in case of a union, do the next steps for each member\n TData extends any ?\n // prevent \"Type instantiation is excessively deep and possibly infinite.\"\n true extends IsAny<TData> ? TData\n : TData extends { __masked?: true } ? Prettify<RemoveMaskedMarker<TData>>\n : Unmasked<TData>\n : never\n : DataMasking extends { mode: \"preserveTypes\" } ? TData\n : TData;\n\n/**\n * Unmasks a type to provide its full result.\n */\nexport type Unmasked<TData> =\n true extends IsAny<TData> ? TData\n : TData extends object ?\n true extends ContainsFragmentsRefs<TData> ?\n UnwrapFragmentRefs<RemoveMaskedMarker<RemoveFragmentName<TData>>>\n : TData\n : TData;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apollo/client",
3
- "version": "3.12.5",
3
+ "version": "3.12.7",
4
4
  "description": "A fully-featured caching GraphQL client.",
5
5
  "private": false,
6
6
  "keywords": [
@@ -68,20 +68,23 @@
68
68
  },
69
69
  "devDependencies": {
70
70
  "@arethetypeswrong/cli": "0.15.3",
71
- "@ark/attest": "^0.28.0",
71
+ "@ark/attest": "0.28.0",
72
72
  "@babel/parser": "7.25.0",
73
73
  "@changesets/changelog-github": "0.5.0",
74
74
  "@changesets/cli": "2.27.7",
75
+ "@eslint/compat": "1.2.5",
76
+ "@eslint/eslintrc": "3.2.0",
77
+ "@eslint/js": "9.18.0",
75
78
  "@graphql-tools/merge": "9.0.4",
76
79
  "@graphql-tools/schema": "10.0.4",
77
80
  "@graphql-tools/utils": "10.5.0",
78
- "@microsoft/api-extractor": "7.47.9",
81
+ "@microsoft/api-extractor": "7.49.1",
79
82
  "@rollup/plugin-node-resolve": "11.2.1",
80
83
  "@size-limit/esbuild-why": "11.1.4",
81
84
  "@size-limit/preset-small-lib": "11.1.4",
82
- "@testing-library/dom": "^10.4.0",
85
+ "@testing-library/dom": "10.4.0",
83
86
  "@testing-library/jest-dom": "6.6.3",
84
- "@testing-library/react": "^16.1.0",
87
+ "@testing-library/react": "16.1.0",
85
88
  "@testing-library/react-render-stream": "2.0.0",
86
89
  "@testing-library/user-event": "14.5.2",
87
90
  "@tsconfig/node20": "20.1.4",
@@ -91,34 +94,36 @@
91
94
  "@types/hoist-non-react-statics": "3.3.5",
92
95
  "@types/jest": "29.5.12",
93
96
  "@types/lodash": "4.17.7",
94
- "@types/node": "20.16.1",
97
+ "@types/node": "22.10.7",
95
98
  "@types/node-fetch": "2.6.11",
96
- "@types/prop-types": "^15.7.14",
99
+ "@types/prop-types": "15.7.14",
97
100
  "@types/react": "19.0.0",
98
101
  "@types/react-dom": "19.0.0",
99
102
  "@types/relay-runtime": "14.1.24",
100
103
  "@types/use-sync-external-store": "0.0.6",
101
- "@typescript-eslint/eslint-plugin": "7.18.0",
102
- "@typescript-eslint/parser": "7.18.0",
103
- "@typescript-eslint/rule-tester": "7.18.0",
104
- "@typescript-eslint/types": "7.18.0",
105
- "@typescript-eslint/utils": "7.18.0",
104
+ "@typescript-eslint/eslint-plugin": "8.21.0",
105
+ "@typescript-eslint/parser": "8.21.0",
106
+ "@typescript-eslint/rule-tester": "8.21.0",
107
+ "@typescript-eslint/types": "8.21.0",
108
+ "@typescript-eslint/utils": "8.21.0",
106
109
  "acorn": "8.12.1",
107
110
  "ajv": "8.17.1",
108
111
  "blob-polyfill": "7.0.20220408",
109
112
  "bytes": "3.1.2",
110
113
  "cross-fetch": "4.0.0",
111
- "eslint": "8.57.0",
112
- "eslint-import-resolver-typescript": "3.6.1",
114
+ "eslint": "9.18.0",
115
+ "eslint-import-resolver-typescript": "3.7.0",
113
116
  "eslint-plugin-import": "npm:@phryneas/eslint-plugin-import@2.27.5-pr.2813.2817.199971c",
114
- "eslint-plugin-local-rules": "2.0.1",
115
- "eslint-plugin-react-compiler": "0.0.0-experimental-c8b3f72-20240517",
116
- "eslint-plugin-react-hooks": "4.6.2",
117
- "eslint-plugin-testing-library": "6.3.0",
118
- "expect-type": "0.19.0",
117
+ "eslint-plugin-local-rules": "3.0.2",
118
+ "eslint-plugin-react-compiler": "19.0.0-beta-decd7b8-20250118",
119
+ "eslint-plugin-react-hooks": "5.1.0",
120
+ "eslint-plugin-testing-library": "7.1.1",
121
+ "expect-type": "1.1.0",
119
122
  "fetch-mock": "9.11.0",
120
123
  "glob": "8.1.0",
124
+ "globals": "15.14.0",
121
125
  "graphql": "16.9.0",
126
+ "graphql-17-alpha2": "npm:graphql@17.0.0-alpha.2",
122
127
  "graphql-ws": "5.16.0",
123
128
  "jest": "29.7.0",
124
129
  "jest-environment-jsdom": "29.7.0",
@@ -144,14 +149,14 @@
144
149
  "size-limit": "11.1.4",
145
150
  "subscriptions-transport-ws": "0.11.0",
146
151
  "terser": "5.31.3",
147
- "ts-api-utils": "1.3.0",
152
+ "ts-api-utils": "2.0.0",
148
153
  "ts-jest": "29.2.3",
149
154
  "ts-jest-resolver": "2.0.1",
150
- "ts-morph": "22.0.0",
155
+ "ts-morph": "25.0.0",
151
156
  "ts-node": "10.9.2",
152
- "tsx": "^4.19.2",
157
+ "tsx": "4.19.2",
153
158
  "typedoc": "0.25.0",
154
- "typescript": "5.5.3",
159
+ "typescript": "5.7.3",
155
160
  "wait-for-observables": "1.0.3",
156
161
  "web-streams-polyfill": "4.0.0",
157
162
  "whatwg-fetch": "3.6.20"
@@ -1,5 +1,5 @@
1
1
  export { Query } from "./Query.js";
2
2
  export { Mutation } from "./Mutation.js";
3
3
  export { Subscription } from "./Subscription.js";
4
- export * from "./types.js";
4
+ export type * from "./types.js";
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1,5 +1,4 @@
1
1
  export { Query } from "./Query.js";
2
2
  export { Mutation } from "./Mutation.js";
3
3
  export { Subscription } from "./Subscription.js";
4
- export * from "./types.js";
5
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,cAAc,YAAY,CAAC","sourcesContent":["export { Query } from \"./Query.js\";\nexport { Mutation } from \"./Mutation.js\";\nexport { Subscription } from \"./Subscription.js\";\n\nexport * from \"./types.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC","sourcesContent":["export { Query } from \"./Query.js\";\nexport { Mutation } from \"./Mutation.js\";\nexport { Subscription } from \"./Subscription.js\";\n\nexport type * from \"./types.js\";\n"]}
@@ -4,5 +4,5 @@ export { withQuery } from "./query-hoc.js";
4
4
  export { withMutation } from "./mutation-hoc.js";
5
5
  export { withSubscription } from "./subscription-hoc.js";
6
6
  export { withApollo } from "./withApollo.js";
7
- export * from "./types.js";
7
+ export type * from "./types.js";
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -4,5 +4,4 @@ export { withQuery } from "./query-hoc.js";
4
4
  export { withMutation } from "./mutation-hoc.js";
5
5
  export { withSubscription } from "./subscription-hoc.js";
6
6
  export { withApollo } from "./withApollo.js";
7
- export * from "./types.js";
8
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/hoc/index.ts"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,cAAc,YAAY,CAAC","sourcesContent":["import \"../../utilities/globals/index.js\";\n\nexport { graphql } from \"./graphql.js\";\n\nexport { withQuery } from \"./query-hoc.js\";\nexport { withMutation } from \"./mutation-hoc.js\";\nexport { withSubscription } from \"./subscription-hoc.js\";\nexport { withApollo } from \"./withApollo.js\";\n\nexport * from \"./types.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/hoc/index.ts"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC","sourcesContent":["import \"../../utilities/globals/index.js\";\n\nexport { graphql } from \"./graphql.js\";\n\nexport { withQuery } from \"./query-hoc.js\";\nexport { withMutation } from \"./mutation-hoc.js\";\nexport { withSubscription } from \"./subscription-hoc.js\";\nexport { withApollo } from \"./withApollo.js\";\n\nexport type * from \"./types.js\";\n"]}