@apollo/client 3.5.0-rc.2 → 3.5.2

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 (84) hide show
  1. package/apollo-client.cjs +601 -563
  2. package/apollo-client.cjs.map +1 -1
  3. package/apollo-client.min.cjs +1 -1
  4. package/cache/cache.cjs +545 -523
  5. package/cache/cache.cjs.map +1 -1
  6. package/cache/inmemory/key-extractor.d.ts +9 -0
  7. package/cache/inmemory/key-extractor.d.ts.map +1 -0
  8. package/cache/inmemory/key-extractor.js +118 -0
  9. package/cache/inmemory/key-extractor.js.map +1 -0
  10. package/cache/inmemory/policies.d.ts +11 -8
  11. package/cache/inmemory/policies.d.ts.map +1 -1
  12. package/cache/inmemory/policies.js +42 -156
  13. package/cache/inmemory/policies.js.map +1 -1
  14. package/cache/inmemory/writeToStore.d.ts.map +1 -1
  15. package/cache/inmemory/writeToStore.js +44 -22
  16. package/cache/inmemory/writeToStore.js.map +1 -1
  17. package/core/ApolloClient.d.ts +1 -0
  18. package/core/ApolloClient.d.ts.map +1 -1
  19. package/core/ObservableQuery.d.ts +1 -0
  20. package/core/ObservableQuery.d.ts.map +1 -1
  21. package/core/QueryInfo.d.ts +2 -2
  22. package/core/QueryInfo.d.ts.map +1 -1
  23. package/core/QueryManager.d.ts +1 -0
  24. package/core/QueryManager.d.ts.map +1 -1
  25. package/core/QueryManager.js +1 -1
  26. package/core/QueryManager.js.map +1 -1
  27. package/core/core.cjs +2 -2
  28. package/core/core.cjs.map +1 -1
  29. package/invariantErrorCodes.js +5 -5
  30. package/link/batch/batchLink.d.ts +1 -0
  31. package/link/batch/batchLink.d.ts.map +1 -1
  32. package/link/batch/batching.d.ts +1 -0
  33. package/link/batch/batching.d.ts.map +1 -1
  34. package/link/batch-http/batchHttpLink.d.ts +1 -0
  35. package/link/batch-http/batchHttpLink.d.ts.map +1 -1
  36. package/link/core/ApolloLink.d.ts +1 -0
  37. package/link/core/ApolloLink.d.ts.map +1 -1
  38. package/link/core/types.d.ts +5 -6
  39. package/link/core/types.d.ts.map +1 -1
  40. package/link/core/types.js.map +1 -1
  41. package/link/error/index.d.ts +1 -0
  42. package/link/error/index.d.ts.map +1 -1
  43. package/link/retry/retryLink.d.ts +1 -0
  44. package/link/retry/retryLink.d.ts.map +1 -1
  45. package/link/schema/index.d.ts +1 -0
  46. package/link/schema/index.d.ts.map +1 -1
  47. package/link/schema/index.js +8 -1
  48. package/link/schema/index.js.map +1 -1
  49. package/link/schema/schema.cjs +8 -1
  50. package/link/schema/schema.cjs.map +1 -1
  51. package/link/utils/fromError.d.ts +1 -0
  52. package/link/utils/fromError.d.ts.map +1 -1
  53. package/link/utils/fromPromise.d.ts +1 -0
  54. package/link/utils/fromPromise.d.ts.map +1 -1
  55. package/link/utils/toPromise.d.ts +1 -0
  56. package/link/utils/toPromise.d.ts.map +1 -1
  57. package/link/ws/index.d.ts +1 -0
  58. package/link/ws/index.d.ts.map +1 -1
  59. package/package.json +18 -18
  60. package/react/hooks/hooks.cjs +67 -51
  61. package/react/hooks/hooks.cjs.map +1 -1
  62. package/react/hooks/useMutation.d.ts.map +1 -1
  63. package/react/hooks/useMutation.js +68 -52
  64. package/react/hooks/useMutation.js.map +1 -1
  65. package/react/types/types.d.ts +1 -0
  66. package/react/types/types.d.ts.map +1 -1
  67. package/testing/core/mocking/mockLink.d.ts +1 -0
  68. package/testing/core/mocking/mockLink.d.ts.map +1 -1
  69. package/testing/core/mocking/mockSubscriptionLink.d.ts +2 -3
  70. package/testing/core/mocking/mockSubscriptionLink.d.ts.map +1 -1
  71. package/utilities/common/errorHandling.d.ts +1 -1
  72. package/utilities/common/errorHandling.d.ts.map +1 -1
  73. package/utilities/common/errorHandling.js.map +1 -1
  74. package/utilities/graphql/fragments.d.ts.map +1 -1
  75. package/utilities/graphql/fragments.js.map +1 -1
  76. package/utilities/graphql/transform.d.ts.map +1 -1
  77. package/utilities/graphql/transform.js.map +1 -1
  78. package/utilities/observables/Concast.d.ts +1 -0
  79. package/utilities/observables/Concast.d.ts.map +1 -1
  80. package/utilities/observables/asyncMap.d.ts +1 -0
  81. package/utilities/observables/asyncMap.d.ts.map +1 -1
  82. package/utilities/observables/subclassing.d.ts +1 -0
  83. package/utilities/observables/subclassing.d.ts.map +1 -1
  84. package/version.js +1 -1
@@ -0,0 +1,9 @@
1
+ import { KeySpecifier, KeyFieldsFunction, KeyArgsFunction } from "./policies";
2
+ export declare function keyFieldsFnFromSpecifier(specifier: KeySpecifier): KeyFieldsFunction;
3
+ export declare function keyArgsFnFromSpecifier(specifier: KeySpecifier): KeyArgsFunction;
4
+ export declare function collectSpecifierPaths(specifier: KeySpecifier, extractor: (path: string[]) => any): Record<string, any>;
5
+ export declare function getSpecifierPaths(spec: KeySpecifier): string[][];
6
+ declare function extractKey<TObj extends Record<string, any>, TKey extends string>(object: TObj, key: TKey): TObj[TKey] | undefined;
7
+ export declare function extractKeyPath(object: Record<string, any>, path: string[], extract?: typeof extractKey): any;
8
+ export {};
9
+ //# sourceMappingURL=key-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-extractor.d.ts","sourceRoot":"","sources":["../../../src/cache/inmemory/key-extractor.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,eAAe,EAChB,MAAM,YAAY,CAAC;AAkBpB,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,YAAY,GACtB,iBAAiB,CAoDnB;AASD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,YAAY,GAAG,eAAe,CAyE/E;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,YAAY,EACvB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAG,GACjC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAgBrB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE,EAAE,CAsBhE;AAED,iBAAS,UAAU,CACjB,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChC,IAAI,SAAS,MAAM,EACnB,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAEjD;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE,OAAO,UAAU,GAC1B,GAAG,CAkBL"}
@@ -0,0 +1,118 @@
1
+ import { invariant } from "../../utilities/globals/index.js";
2
+ import { argumentsObjectFromField, DeepMerger, isNonEmptyArray, isNonNullObject, } from "../../utilities/index.js";
3
+ import { hasOwn } from "./helpers.js";
4
+ var specifierInfoCache = Object.create(null);
5
+ function lookupSpecifierInfo(spec) {
6
+ var cacheKey = JSON.stringify(spec);
7
+ return specifierInfoCache[cacheKey] ||
8
+ (specifierInfoCache[cacheKey] = Object.create(null));
9
+ }
10
+ export function keyFieldsFnFromSpecifier(specifier) {
11
+ var info = lookupSpecifierInfo(specifier);
12
+ return info.keyFieldsFn || (info.keyFieldsFn = function (object, context) {
13
+ var extract = function (from, key) { return context.readField(key, from); };
14
+ var keyObject = context.keyObject = collectSpecifierPaths(specifier, function (schemaKeyPath) {
15
+ var extracted = extractKeyPath(context.storeObject, schemaKeyPath, extract);
16
+ if (extracted === void 0 &&
17
+ object !== context.storeObject &&
18
+ hasOwn.call(object, schemaKeyPath[0])) {
19
+ extracted = extractKeyPath(object, schemaKeyPath, extractKey);
20
+ }
21
+ __DEV__ ? invariant(extracted !== void 0, "Missing field '" + schemaKeyPath.join('.') + "' while extracting keyFields from " + JSON.stringify(object)) : invariant(extracted !== void 0, 2);
22
+ return extracted;
23
+ });
24
+ return context.typename + ":" + JSON.stringify(keyObject);
25
+ });
26
+ }
27
+ export function keyArgsFnFromSpecifier(specifier) {
28
+ var info = lookupSpecifierInfo(specifier);
29
+ return info.keyArgsFn || (info.keyArgsFn = function (args, _a) {
30
+ var field = _a.field, variables = _a.variables, fieldName = _a.fieldName;
31
+ var collected = collectSpecifierPaths(specifier, function (keyPath) {
32
+ var firstKey = keyPath[0];
33
+ var firstChar = firstKey.charAt(0);
34
+ if (firstChar === "@") {
35
+ if (field && isNonEmptyArray(field.directives)) {
36
+ var directiveName_1 = firstKey.slice(1);
37
+ var d = field.directives.find(function (d) { return d.name.value === directiveName_1; });
38
+ var directiveArgs = d && argumentsObjectFromField(d, variables);
39
+ return directiveArgs && extractKeyPath(directiveArgs, keyPath.slice(1));
40
+ }
41
+ return;
42
+ }
43
+ if (firstChar === "$") {
44
+ var variableName = firstKey.slice(1);
45
+ if (variables && hasOwn.call(variables, variableName)) {
46
+ var varKeyPath = keyPath.slice(0);
47
+ varKeyPath[0] = variableName;
48
+ return extractKeyPath(variables, varKeyPath);
49
+ }
50
+ return;
51
+ }
52
+ if (args) {
53
+ return extractKeyPath(args, keyPath);
54
+ }
55
+ });
56
+ var suffix = JSON.stringify(collected);
57
+ if (args || suffix !== "{}") {
58
+ fieldName += ":" + suffix;
59
+ }
60
+ return fieldName;
61
+ });
62
+ }
63
+ export function collectSpecifierPaths(specifier, extractor) {
64
+ var merger = new DeepMerger;
65
+ return getSpecifierPaths(specifier).reduce(function (collected, path) {
66
+ var _a;
67
+ var toMerge = extractor(path);
68
+ if (toMerge !== void 0) {
69
+ for (var i = path.length - 1; i >= 0; --i) {
70
+ toMerge = (_a = {}, _a[path[i]] = toMerge, _a);
71
+ }
72
+ collected = merger.merge(collected, toMerge);
73
+ }
74
+ return collected;
75
+ }, Object.create(null));
76
+ }
77
+ export function getSpecifierPaths(spec) {
78
+ var info = lookupSpecifierInfo(spec);
79
+ if (!info.paths) {
80
+ var paths_1 = info.paths = [];
81
+ var currentPath_1 = [];
82
+ spec.forEach(function (s, i) {
83
+ if (Array.isArray(s)) {
84
+ getSpecifierPaths(s).forEach(function (p) { return paths_1.push(currentPath_1.concat(p)); });
85
+ currentPath_1.length = 0;
86
+ }
87
+ else {
88
+ currentPath_1.push(s);
89
+ if (!Array.isArray(spec[i + 1])) {
90
+ paths_1.push(currentPath_1.slice(0));
91
+ currentPath_1.length = 0;
92
+ }
93
+ }
94
+ });
95
+ }
96
+ return info.paths;
97
+ }
98
+ function extractKey(object, key) {
99
+ return object[key];
100
+ }
101
+ export function extractKeyPath(object, path, extract) {
102
+ extract = extract || extractKey;
103
+ return normalize(path.reduce(function reducer(obj, key) {
104
+ return Array.isArray(obj)
105
+ ? obj.map(function (child) { return reducer(child, key); })
106
+ : obj && extract(obj, key);
107
+ }, object));
108
+ }
109
+ function normalize(value) {
110
+ if (isNonNullObject(value)) {
111
+ if (Array.isArray(value)) {
112
+ return value.map(normalize);
113
+ }
114
+ return collectSpecifierPaths(Object.keys(value).sort(), function (path) { return extractKeyPath(value, path); });
115
+ }
116
+ return value;
117
+ }
118
+ //# sourceMappingURL=key-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-extractor.js","sourceRoot":"","sources":["../../../src/cache/inmemory/key-extractor.ts"],"names":[],"mappings":"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","sourcesContent":["import { invariant } from \"../../utilities/globals\";\n\nimport {\n argumentsObjectFromField,\n DeepMerger,\n isNonEmptyArray,\n isNonNullObject,\n} from \"../../utilities\";\n\nimport { hasOwn } from \"./helpers\";\nimport {\n KeySpecifier,\n KeyFieldsFunction,\n KeyArgsFunction,\n} from \"./policies\";\n\n// Mapping from JSON-encoded KeySpecifier strings to associated information.\nconst specifierInfoCache: Record<string, {\n paths?: string[][];\n keyFieldsFn?: KeyFieldsFunction;\n keyArgsFn?: KeyArgsFunction;\n}> = Object.create(null);\n\nfunction lookupSpecifierInfo(spec: KeySpecifier) {\n // It's safe to encode KeySpecifier arrays with JSON.stringify, since they're\n // just arrays of strings or nested KeySpecifier arrays, and the order of the\n // array elements is important (and suitably preserved by JSON.stringify).\n const cacheKey = JSON.stringify(spec);\n return specifierInfoCache[cacheKey] ||\n (specifierInfoCache[cacheKey] = Object.create(null));\n}\n\nexport function keyFieldsFnFromSpecifier(\n specifier: KeySpecifier,\n): KeyFieldsFunction {\n const info = lookupSpecifierInfo(specifier);\n\n return info.keyFieldsFn || (info.keyFieldsFn = (\n object,\n context,\n ) => {\n const extract: typeof extractKey =\n (from, key) => context.readField(key, from);\n\n const keyObject = context.keyObject = collectSpecifierPaths(\n specifier,\n schemaKeyPath => {\n let extracted = extractKeyPath(\n context.storeObject,\n schemaKeyPath,\n // Using context.readField to extract paths from context.storeObject\n // allows the extraction to see through Reference objects and respect\n // custom read functions.\n extract,\n );\n\n if (\n extracted === void 0 &&\n object !== context.storeObject &&\n hasOwn.call(object, schemaKeyPath[0])\n ) {\n // If context.storeObject fails to provide a value for the requested\n // path, fall back to the raw result object, if it has a top-level key\n // matching the first key in the path (schemaKeyPath[0]). This allows\n // key fields included in the written data to be saved in the cache\n // even if they are not selected explicitly in context.selectionSet.\n // Not being mentioned by context.selectionSet is convenient here,\n // since it means these extra fields cannot be affected by field\n // aliasing, which is why we can use extractKey instead of\n // context.readField for this extraction.\n extracted = extractKeyPath(object, schemaKeyPath, extractKey);\n }\n\n invariant(\n extracted !== void 0,\n `Missing field '${schemaKeyPath.join('.')}' while extracting keyFields from ${\n JSON.stringify(object)\n }`,\n );\n\n return extracted;\n },\n );\n\n return `${context.typename}:${JSON.stringify(keyObject)}`;\n });\n}\n\n// The keyArgs extraction process is roughly analogous to keyFields extraction,\n// but there are no aliases involved, missing fields are tolerated (by merely\n// omitting them from the key), and drawing from field.directives or variables\n// is allowed (in addition to drawing from the field's arguments object).\n// Concretely, these differences mean passing a different key path extractor\n// function to collectSpecifierPaths, reusing the shared extractKeyPath helper\n// wherever possible.\nexport function keyArgsFnFromSpecifier(specifier: KeySpecifier): KeyArgsFunction {\n const info = lookupSpecifierInfo(specifier);\n\n return info.keyArgsFn || (info.keyArgsFn = (args, {\n field,\n variables,\n fieldName,\n }) => {\n const collected = collectSpecifierPaths(specifier, keyPath => {\n const firstKey = keyPath[0];\n const firstChar = firstKey.charAt(0);\n\n if (firstChar === \"@\") {\n if (field && isNonEmptyArray(field.directives)) {\n const directiveName = firstKey.slice(1);\n // If the directive appears multiple times, only the first\n // occurrence's arguments will be used. TODO Allow repetition?\n // TODO Cache this work somehow, a la aliasMap?\n const d = field.directives.find(d => d.name.value === directiveName);\n // Fortunately argumentsObjectFromField works for DirectiveNode!\n const directiveArgs = d && argumentsObjectFromField(d, variables);\n // For directives without arguments (d defined, but directiveArgs ===\n // null), the presence or absence of the directive still counts as\n // part of the field key, so we return null in those cases. If no\n // directive with this name was found for this field (d undefined and\n // thus directiveArgs undefined), we return undefined, which causes\n // this value to be omitted from the key object returned by\n // collectSpecifierPaths.\n return directiveArgs && extractKeyPath(\n directiveArgs,\n // If keyPath.length === 1, this code calls extractKeyPath with an\n // empty path, which works because it uses directiveArgs as the\n // extracted value.\n keyPath.slice(1),\n );\n }\n // If the key started with @ but there was no corresponding directive,\n // we want to omit this value from the key object, not fall through to\n // treating @whatever as a normal argument name.\n return;\n }\n\n if (firstChar === \"$\") {\n const variableName = firstKey.slice(1);\n if (variables && hasOwn.call(variables, variableName)) {\n const varKeyPath = keyPath.slice(0);\n varKeyPath[0] = variableName;\n return extractKeyPath(variables, varKeyPath);\n }\n // If the key started with $ but there was no corresponding variable, we\n // want to omit this value from the key object, not fall through to\n // treating $whatever as a normal argument name.\n return;\n }\n\n if (args) {\n return extractKeyPath(args, keyPath);\n }\n });\n\n const suffix = JSON.stringify(collected);\n\n // If no arguments were passed to this field, and it didn't have any other\n // field key contributions from directives or variables, hide the empty\n // :{} suffix from the field key. However, a field passed no arguments can\n // still end up with a non-empty :{...} suffix if its key configuration\n // refers to directives or variables.\n if (args || suffix !== \"{}\") {\n fieldName += \":\" + suffix;\n }\n\n return fieldName;\n });\n}\n\nexport function collectSpecifierPaths(\n specifier: KeySpecifier,\n extractor: (path: string[]) => any,\n): Record<string, any> {\n // For each path specified by specifier, invoke the extractor, and repeatedly\n // merge the results together, with appropriate ancestor context.\n const merger = new DeepMerger;\n return getSpecifierPaths(specifier).reduce((collected, path) => {\n let toMerge = extractor(path);\n if (toMerge !== void 0) {\n // This path is not expected to contain array indexes, so the toMerge\n // reconstruction will not contain arrays. TODO Fix this?\n for (let i = path.length - 1; i >= 0; --i) {\n toMerge = { [path[i]]: toMerge };\n }\n collected = merger.merge(collected, toMerge);\n }\n return collected;\n }, Object.create(null));\n}\n\nexport function getSpecifierPaths(spec: KeySpecifier): string[][] {\n const info = lookupSpecifierInfo(spec);\n\n if (!info.paths) {\n const paths: string[][] = info.paths = [];\n const currentPath: string[] = [];\n\n spec.forEach((s, i) => {\n if (Array.isArray(s)) {\n getSpecifierPaths(s).forEach(p => paths.push(currentPath.concat(p)));\n currentPath.length = 0;\n } else {\n currentPath.push(s);\n if (!Array.isArray(spec[i + 1])) {\n paths.push(currentPath.slice(0));\n currentPath.length = 0;\n }\n }\n });\n }\n\n return info.paths!;\n}\n\nfunction extractKey<\n TObj extends Record<string, any>,\n TKey extends string,\n>(object: TObj, key: TKey): TObj[TKey] | undefined {\n return object[key];\n}\n\nexport function extractKeyPath(\n object: Record<string, any>,\n path: string[],\n extract?: typeof extractKey,\n): any {\n // For each key in path, extract the corresponding child property from obj,\n // flattening arrays if encountered (uncommon for keyFields and keyArgs, but\n // possible). The final result of path.reduce is normalized so unexpected leaf\n // objects have their keys safely sorted. That final result is difficult to\n // type as anything other than any. You're welcome to try to improve the\n // return type, but keep in mind extractKeyPath is not a public function\n // (exported only for testing), so the effort may not be worthwhile unless the\n // limited set of actual callers (see above) pass arguments that TypeScript\n // can statically type. If we know only that path is some array of strings\n // (and not, say, a specific tuple of statically known strings), any (or\n // possibly unknown) is the honest answer.\n extract = extract || extractKey;\n return normalize(path.reduce(function reducer(obj, key): any {\n return Array.isArray(obj)\n ? obj.map(child => reducer(child, key))\n : obj && extract!(obj, key);\n }, object));\n}\n\nfunction normalize<T>(value: T): T {\n // Usually the extracted value will be a scalar value, since most primary\n // key fields are scalar, but just in case we get an object or an array, we\n // need to do some normalization of the order of (nested) keys.\n if (isNonNullObject(value)) {\n if (Array.isArray(value)) {\n return value.map(normalize) as any;\n }\n return collectSpecifierPaths(\n Object.keys(value).sort(),\n path => extractKeyPath(value, path),\n ) as T;\n }\n return value;\n}\n"]}
@@ -7,9 +7,11 @@ import { WriteContext } from './writeToStore';
7
7
  export declare type TypePolicies = {
8
8
  [__typename: string]: TypePolicy;
9
9
  };
10
- declare type KeySpecifier = (string | any[])[];
10
+ export declare type KeySpecifier = (string | KeySpecifier)[];
11
11
  export declare type KeyFieldsContext = {
12
- typename?: string;
12
+ typename: string | undefined;
13
+ storeObject: StoreObject;
14
+ readField: ReadFieldFunction;
13
15
  selectionSet?: SelectionSetNode;
14
16
  fragmentMap?: FragmentMap;
15
17
  keyObject?: Record<string, any>;
@@ -31,10 +33,10 @@ export declare type KeyArgsFunction = (args: Record<string, any> | null, context
31
33
  field: FieldNode | null;
32
34
  variables?: Record<string, any>;
33
35
  }) => KeySpecifier | false | ReturnType<IdGetter>;
34
- export declare type FieldPolicy<TExisting = any, TIncoming = TExisting, TReadResult = TIncoming> = {
36
+ export declare type FieldPolicy<TExisting = any, TIncoming = TExisting, TReadResult = TIncoming, TOptions extends FieldFunctionOptions = FieldFunctionOptions> = {
35
37
  keyArgs?: KeySpecifier | KeyArgsFunction | false;
36
- read?: FieldReadFunction<TExisting, TReadResult>;
37
- merge?: FieldMergeFunction<TExisting, TIncoming> | boolean;
38
+ read?: FieldReadFunction<TExisting, TReadResult, TOptions>;
39
+ merge?: FieldMergeFunction<TExisting, TIncoming, TOptions> | boolean;
38
40
  };
39
41
  export declare type StorageType = Record<string, any>;
40
42
  export interface FieldFunctionOptions<TArgs = Record<string, any>, TVars = Record<string, any>> {
@@ -52,8 +54,8 @@ export interface FieldFunctionOptions<TArgs = Record<string, any>, TVars = Recor
52
54
  mergeObjects: MergeObjectsFunction;
53
55
  }
54
56
  declare type MergeObjectsFunction = <T extends StoreObject | Reference>(existing: T, incoming: T) => T;
55
- export declare type FieldReadFunction<TExisting = any, TReadResult = TExisting> = (existing: SafeReadonly<TExisting> | undefined, options: FieldFunctionOptions) => TReadResult | undefined;
56
- export declare type FieldMergeFunction<TExisting = any, TIncoming = TExisting> = (existing: SafeReadonly<TExisting> | undefined, incoming: SafeReadonly<TIncoming>, options: FieldFunctionOptions) => SafeReadonly<TExisting>;
57
+ export declare type FieldReadFunction<TExisting = any, TReadResult = TExisting, TOptions extends FieldFunctionOptions = FieldFunctionOptions> = (existing: SafeReadonly<TExisting> | undefined, options: TOptions) => TReadResult | undefined;
58
+ export declare type FieldMergeFunction<TExisting = any, TIncoming = TExisting, TOptions extends FieldFunctionOptions = FieldFunctionOptions> = (existing: SafeReadonly<TExisting> | undefined, incoming: SafeReadonly<TIncoming>, options: TOptions) => SafeReadonly<TExisting>;
57
59
  export declare type PossibleTypesMap = {
58
60
  [supertype: string]: string[];
59
61
  };
@@ -73,7 +75,7 @@ export declare class Policies {
73
75
  possibleTypes?: PossibleTypesMap;
74
76
  typePolicies?: TypePolicies;
75
77
  });
76
- identify(object: StoreObject, selectionSet?: SelectionSetNode, fragmentMap?: FragmentMap): [string?, StoreObject?];
78
+ identify(object: StoreObject, partialContext?: Partial<KeyFieldsContext>): [string?, StoreObject?];
77
79
  addTypePolicies(typePolicies: TypePolicies): void;
78
80
  private updateTypePolicy;
79
81
  private setRootTypename;
@@ -89,5 +91,6 @@ export declare class Policies {
89
91
  getMergeFunction(parentTypename: string | undefined, fieldName: string, childTypename: string | undefined): FieldMergeFunction | undefined;
90
92
  runMergeFunction(existing: StoreValue, incoming: StoreValue, { field, typename, merge }: MergeInfo, context: WriteContext, storage?: StorageType): any;
91
93
  }
94
+ export declare function normalizeReadFieldOptions(readFieldArgs: IArguments, objectOrReference: StoreObject | Reference | undefined, variables?: ReadMergeModifyContext["variables"]): ReadFieldOptions;
92
95
  export {};
93
96
  //# sourceMappingURL=policies.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"policies.d.ts","sourceRoot":"","sources":["../../../src/cache/inmemory/policies.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policies.d.ts","sourceRoot":"","sources":["../../../src/cache/inmemory/policies.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import { __assign, __rest } from "tslib/tslib.es6.js";
2
2
  import { invariant, InvariantError } from "../../utilities/globals/index.js";
3
- import { Trie } from "@wry/trie/lib/trie.esm.js";
4
- import { getFragmentFromSelection, isField, getTypenameFromResult, storeKeyNameFromField, argumentsObjectFromField, isReference, getStoreKeyName, canUseWeakMap, isNonNullObject, stringifyForDisplay, isNonEmptyArray, } from "../../utilities/index.js";
3
+ import { storeKeyNameFromField, argumentsObjectFromField, isReference, getStoreKeyName, isNonNullObject, stringifyForDisplay, } from "../../utilities/index.js";
5
4
  import { hasOwn, fieldNameFromStoreName, storeValueIsStoreObject, selectionSetMatchesResult, TypeOrFieldNameRegExp, defaultDataIdFromObject, } from "./helpers.js";
6
5
  import { cacheSlot } from "./reactiveVars.js";
7
6
  import { canonicalStringify } from "./object-canon.js";
7
+ import { keyArgsFnFromSpecifier, keyFieldsFnFromSpecifier } from "./key-extractor.js";
8
8
  getStoreKeyName.setStringify(canonicalStringify);
9
9
  function argsFromFieldSpecifier(spec) {
10
10
  return spec.args !== void 0 ? spec.args :
@@ -39,18 +39,22 @@ var Policies = (function () {
39
39
  this.addTypePolicies(config.typePolicies);
40
40
  }
41
41
  }
42
- Policies.prototype.identify = function (object, selectionSet, fragmentMap) {
43
- var typename = selectionSet && fragmentMap
44
- ? getTypenameFromResult(object, selectionSet, fragmentMap)
45
- : object.__typename;
42
+ Policies.prototype.identify = function (object, partialContext) {
43
+ var _a;
44
+ var policies = this;
45
+ var typename = partialContext && (partialContext.typename ||
46
+ ((_a = partialContext.storeObject) === null || _a === void 0 ? void 0 : _a.__typename)) || object.__typename;
46
47
  if (typename === this.rootTypenamesById.ROOT_QUERY) {
47
48
  return ["ROOT_QUERY"];
48
49
  }
49
- var context = {
50
- typename: typename,
51
- selectionSet: selectionSet,
52
- fragmentMap: fragmentMap,
53
- };
50
+ var storeObject = partialContext && partialContext.storeObject || object;
51
+ var context = __assign(__assign({}, partialContext), { typename: typename, storeObject: storeObject, readField: partialContext && partialContext.readField || function () {
52
+ var options = normalizeReadFieldOptions(arguments, storeObject);
53
+ return policies.readField(options, {
54
+ store: policies.cache["data"],
55
+ variables: options.variables,
56
+ });
57
+ } });
54
58
  var id;
55
59
  var policy = typename && this.getTypePolicy(typename);
56
60
  var keyFn = policy && policy.keyFn || this.config.dataIdFromObject;
@@ -132,7 +136,7 @@ var Policies = (function () {
132
136
  var rootId = "ROOT_" + which.toUpperCase();
133
137
  var old = this.rootTypenamesById[rootId];
134
138
  if (typename !== old) {
135
- __DEV__ ? invariant(!old || old === which, "Cannot change root " + which + " __typename more than once") : invariant(!old || old === which, 2);
139
+ __DEV__ ? invariant(!old || old === which, "Cannot change root " + which + " __typename more than once") : invariant(!old || old === which, 3);
136
140
  if (old)
137
141
  delete this.rootIdsByTypename[old];
138
142
  this.rootIdsByTypename[typename] = rootId;
@@ -349,39 +353,39 @@ function makeFieldFunctionOptions(policies, objectOrReference, fieldSpec, contex
349
353
  storage: storage,
350
354
  cache: policies.cache,
351
355
  canRead: canRead,
352
- readField: function (fieldNameOrOptions, from) {
353
- var options;
354
- if (typeof fieldNameOrOptions === "string") {
355
- options = {
356
- fieldName: fieldNameOrOptions,
357
- from: arguments.length > 1 ? from : objectOrReference,
358
- };
359
- }
360
- else if (isNonNullObject(fieldNameOrOptions)) {
361
- options = __assign({}, fieldNameOrOptions);
362
- if (!hasOwn.call(fieldNameOrOptions, "from")) {
363
- options.from = objectOrReference;
364
- }
365
- }
366
- else {
367
- __DEV__ && invariant.warn("Unexpected readField arguments: " + stringifyForDisplay(Array.from(arguments)));
368
- return;
369
- }
370
- if (__DEV__ && options.from === void 0) {
371
- __DEV__ && invariant.warn("Undefined 'from' passed to readField with arguments " + stringifyForDisplay(Array.from(arguments)));
372
- }
373
- if (void 0 === options.variables) {
374
- options.variables = variables;
375
- }
376
- return policies.readField(options, context);
356
+ readField: function () {
357
+ return policies.readField(normalizeReadFieldOptions(arguments, objectOrReference, context), context);
377
358
  },
378
359
  mergeObjects: makeMergeObjectsFunction(context.store),
379
360
  };
380
361
  }
362
+ export function normalizeReadFieldOptions(readFieldArgs, objectOrReference, variables) {
363
+ var fieldNameOrOptions = readFieldArgs[0], from = readFieldArgs[1], argc = readFieldArgs.length;
364
+ var options;
365
+ if (typeof fieldNameOrOptions === "string") {
366
+ options = {
367
+ fieldName: fieldNameOrOptions,
368
+ from: argc > 1 ? from : objectOrReference,
369
+ };
370
+ }
371
+ else {
372
+ options = __assign({}, fieldNameOrOptions);
373
+ if (!hasOwn.call(options, "from")) {
374
+ options.from = objectOrReference;
375
+ }
376
+ }
377
+ if (__DEV__ && options.from === void 0) {
378
+ __DEV__ && invariant.warn("Undefined 'from' passed to readField with arguments " + stringifyForDisplay(Array.from(readFieldArgs)));
379
+ }
380
+ if (void 0 === options.variables) {
381
+ options.variables = variables;
382
+ }
383
+ return options;
384
+ }
381
385
  function makeMergeObjectsFunction(store) {
382
386
  return function mergeObjects(existing, incoming) {
383
387
  if (Array.isArray(existing) || Array.isArray(incoming)) {
384
- throw __DEV__ ? new InvariantError("Cannot automatically merge arrays") : new InvariantError(3);
388
+ throw __DEV__ ? new InvariantError("Cannot automatically merge arrays") : new InvariantError(4);
385
389
  }
386
390
  if (isNonNullObject(existing) &&
387
391
  isNonNullObject(incoming)) {
@@ -409,122 +413,4 @@ function makeMergeObjectsFunction(store) {
409
413
  return incoming;
410
414
  };
411
415
  }
412
- function keyArgsFnFromSpecifier(specifier) {
413
- return function (args, context) {
414
- var key = context.fieldName;
415
- var suffix = JSON.stringify(computeKeyArgsObject(specifier, context.field, args, context.variables));
416
- if (args || suffix !== "{}") {
417
- key += ":" + suffix;
418
- }
419
- return key;
420
- };
421
- }
422
- function keyFieldsFnFromSpecifier(specifier) {
423
- var trie = new Trie(canUseWeakMap);
424
- return function (object, context) {
425
- var aliasMap;
426
- if (context.selectionSet && context.fragmentMap) {
427
- var info = trie.lookupArray([
428
- context.selectionSet,
429
- context.fragmentMap,
430
- ]);
431
- aliasMap = info.aliasMap || (info.aliasMap = makeAliasMap(context.selectionSet, context.fragmentMap));
432
- }
433
- var keyObject = context.keyObject =
434
- computeKeyFieldsObject(specifier, object, aliasMap);
435
- return context.typename + ":" + JSON.stringify(keyObject);
436
- };
437
- }
438
- function makeAliasMap(selectionSet, fragmentMap) {
439
- var map = Object.create(null);
440
- var workQueue = new Set([selectionSet]);
441
- workQueue.forEach(function (selectionSet) {
442
- selectionSet.selections.forEach(function (selection) {
443
- if (isField(selection)) {
444
- if (selection.alias) {
445
- var responseKey = selection.alias.value;
446
- var storeKey = selection.name.value;
447
- if (storeKey !== responseKey) {
448
- var aliases = map.aliases || (map.aliases = Object.create(null));
449
- aliases[storeKey] = responseKey;
450
- }
451
- }
452
- if (selection.selectionSet) {
453
- var subsets = map.subsets || (map.subsets = Object.create(null));
454
- subsets[selection.name.value] =
455
- makeAliasMap(selection.selectionSet, fragmentMap);
456
- }
457
- }
458
- else {
459
- var fragment = getFragmentFromSelection(selection, fragmentMap);
460
- if (fragment) {
461
- workQueue.add(fragment.selectionSet);
462
- }
463
- }
464
- });
465
- });
466
- return map;
467
- }
468
- function computeKeyFieldsObject(specifier, response, aliasMap) {
469
- var keyObj = Object.create(null);
470
- var lastResponseKey;
471
- var lastActualKey;
472
- var aliases = aliasMap && aliasMap.aliases;
473
- var subsets = aliasMap && aliasMap.subsets;
474
- specifier.forEach(function (s) {
475
- if (Array.isArray(s)) {
476
- if (typeof lastActualKey === "string" &&
477
- typeof lastResponseKey === "string") {
478
- keyObj[lastActualKey] = computeKeyFieldsObject(s, response[lastResponseKey], subsets && subsets[lastActualKey]);
479
- }
480
- }
481
- else {
482
- var responseKey = aliases && aliases[s] || s;
483
- __DEV__ ? invariant(hasOwn.call(response, responseKey), "Missing field '" + responseKey + "' while extracting keyFields from " + JSON.stringify(response)) : invariant(hasOwn.call(response, responseKey), 4);
484
- keyObj[lastActualKey = s] = response[lastResponseKey = responseKey];
485
- }
486
- });
487
- return keyObj;
488
- }
489
- function computeKeyArgsObject(specifier, field, source, variables) {
490
- var keyObj = Object.create(null);
491
- var last;
492
- specifier.forEach(function (key) {
493
- if (Array.isArray(key)) {
494
- if (last) {
495
- keyObj[last.key] =
496
- computeKeyArgsObject(key, field, last.source, variables);
497
- }
498
- }
499
- else {
500
- var firstChar = key.charAt(0);
501
- if (firstChar === "@") {
502
- if (field && isNonEmptyArray(field.directives)) {
503
- var directiveName_1 = key.slice(1);
504
- var d = field.directives.find(function (d) { return d.name.value === directiveName_1; });
505
- if (d) {
506
- last = {
507
- key: key,
508
- source: keyObj[key] = argumentsObjectFromField(d, variables),
509
- };
510
- return;
511
- }
512
- }
513
- }
514
- else if (firstChar === "$") {
515
- var variableName = key.slice(1);
516
- if (variables && hasOwn.call(variables, variableName)) {
517
- last = { key: key, source: keyObj[key] = variables[variableName] };
518
- return;
519
- }
520
- }
521
- else if (source && hasOwn.call(source, key)) {
522
- last = { key: key, source: keyObj[key] = source[key] };
523
- return;
524
- }
525
- last = void 0;
526
- }
527
- });
528
- return keyObj;
529
- }
530
416
  //# sourceMappingURL=policies.js.map