@isograph/react 0.0.0-main-3a36e9fb → 0.0.0-main-beecd3bf
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/FragmentReference.js +1 -1
- package/dist/core/IsographEnvironment.d.ts +7 -5
- package/dist/core/IsographEnvironment.d.ts.map +1 -1
- package/dist/core/IsographEnvironment.js +7 -15
- package/dist/core/cache.d.ts +6 -2
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/cache.js +75 -19
- package/dist/core/check.d.ts +1 -1
- package/dist/core/check.d.ts.map +1 -1
- package/dist/core/check.js +9 -4
- package/dist/core/entrypoint.d.ts +2 -0
- package/dist/core/entrypoint.d.ts.map +1 -1
- package/dist/core/garbageCollection.d.ts +2 -1
- package/dist/core/garbageCollection.d.ts.map +1 -1
- package/dist/core/garbageCollection.js +45 -11
- package/dist/core/logging.d.ts +2 -2
- package/dist/core/logging.d.ts.map +1 -1
- package/dist/core/makeNetworkRequest.d.ts.map +1 -1
- package/dist/core/makeNetworkRequest.js +8 -2
- package/dist/core/read.d.ts +4 -3
- package/dist/core/read.d.ts.map +1 -1
- package/dist/core/read.js +13 -10
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/react/useImperativeReference.js +1 -1
- package/package.json +4 -4
- package/schema.graphql +1 -0
- package/src/core/FragmentReference.ts +1 -1
- package/src/core/IsographEnvironment.ts +15 -25
- package/src/core/cache.ts +106 -25
- package/src/core/check.ts +10 -5
- package/src/core/entrypoint.ts +2 -0
- package/src/core/garbageCollection.ts +71 -20
- package/src/core/logging.ts +2 -2
- package/src/core/makeNetworkRequest.ts +8 -1
- package/src/core/read.ts +25 -16
- package/src/index.ts +0 -1
- package/src/react/useImperativeReference.ts +1 -1
- package/src/tests/__isograph/Query/meName/entrypoint.ts +1 -0
- package/src/tests/__isograph/Query/meNameSuccessor/entrypoint.ts +1 -0
- package/src/tests/__isograph/Query/nodeField/entrypoint.ts +1 -0
- package/src/tests/__isograph/Query/subquery/entrypoint.ts +67 -0
- package/src/tests/__isograph/Query/subquery/output_type.ts +3 -0
- package/src/tests/__isograph/Query/subquery/param_type.ts +12 -0
- package/src/tests/__isograph/Query/subquery/parameters_type.ts +3 -0
- package/src/tests/__isograph/Query/subquery/resolver_reader.ts +47 -0
- package/src/tests/__isograph/iso.ts +10 -0
- package/src/tests/garbageCollection.test.ts +43 -36
- package/src/tests/meNameSuccessor.ts +5 -0
- package/src/tests/nodeQuery.ts +2 -0
- package/src/tests/normalizeData.test.ts +120 -0
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.stableIdForFragmentReference = stableIdForFragmentReference;
|
|
4
4
|
function stableIdForFragmentReference(fragmentReference) {
|
|
5
5
|
var _a;
|
|
6
|
-
return `${fragmentReference.root.__link}/TODO_FRAGMENT_NAME/${serializeVariables((_a = fragmentReference.variables) !== null && _a !== void 0 ? _a : {})}`;
|
|
6
|
+
return `${fragmentReference.root.__typename}/${fragmentReference.root.__link}/TODO_FRAGMENT_NAME/${serializeVariables((_a = fragmentReference.variables) !== null && _a !== void 0 ? _a : {})}`;
|
|
7
7
|
}
|
|
8
8
|
function serializeVariables(variables) {
|
|
9
9
|
let s = '';
|
|
@@ -62,6 +62,7 @@ export type MissingFieldHandler = (storeRecord: StoreRecord, root: Link, fieldNa
|
|
|
62
62
|
export type IsographNetworkFunction = (queryText: string, variables: Variables) => Promise<any>;
|
|
63
63
|
export type Link = {
|
|
64
64
|
readonly __link: DataId;
|
|
65
|
+
readonly __typename: TypeName;
|
|
65
66
|
};
|
|
66
67
|
export type DataTypeValue = undefined | number | boolean | string | null | Link | DataTypeValue[];
|
|
67
68
|
export type StoreRecord = {
|
|
@@ -72,14 +73,15 @@ export type TypeName = string;
|
|
|
72
73
|
export type DataId = string;
|
|
73
74
|
export declare const ROOT_ID: DataId & '__ROOT';
|
|
74
75
|
export type IsographStore = {
|
|
75
|
-
[index:
|
|
76
|
-
|
|
76
|
+
[index: TypeName]: {
|
|
77
|
+
[index: DataId]: StoreRecord | null;
|
|
78
|
+
} | null;
|
|
79
|
+
readonly Query: {
|
|
80
|
+
readonly __ROOT: StoreRecord;
|
|
81
|
+
};
|
|
77
82
|
};
|
|
78
83
|
export declare function createIsographEnvironment(store: IsographStore, networkFunction: IsographNetworkFunction, missingFieldHandler?: MissingFieldHandler | null, logFunction?: LogFunction | null): IsographEnvironment;
|
|
79
84
|
export declare function createIsographStore(): IsographStore;
|
|
80
|
-
export declare function defaultMissingFieldHandler(_storeRecord: StoreRecord, _root: Link, fieldName: string, arguments_: {
|
|
81
|
-
[index: string]: any;
|
|
82
|
-
} | null, variables: Variables | null): Link | undefined;
|
|
83
85
|
export declare function assertLink(link: DataTypeValue): Link | null | undefined;
|
|
84
86
|
export declare function getLink(maybeLink: DataTypeValue): Link | null;
|
|
85
87
|
export declare function getOrLoadIsographArtifact(environment: IsographEnvironment, key: string, loader: () => Promise<IsographEntrypoint<any, any>>): PromiseWrapper<IsographEntrypoint<any, any>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IsographEnvironment.d.ts","sourceRoot":"","sources":["../../src/core/IsographEnvironment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAe,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE5D,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAC1C,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AACrC,KAAK,cAAc,GAAG;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,CAAC,GAAG,EAAE,oBAAoB,GAAG;YAAE,CAAC,GAAG,EAAE,eAAe,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;SAAE,CAAC;KACxE,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAC9B,cAAc,SAAS;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,IACzD;IACF,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,CACjB,4BAA4B,EAAE,sBAAsB,CAAC,cAAc,CAAC,KACjE,IAAI,CAAC;IACV,wEAAwE;IACxE,QAAQ,CAAC,yBAAyB,EAAE,sBAAsB,CAAC,cAAc,CAAC,CAAC;IAC3E,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACnE,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;CAC/C,CAAC;AAEF,KAAK,8BAA8B,GAAG;IACpC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;CAC3B,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC/B,CAAC;AAEF,KAAK,YAAY,GACb,oBAAoB,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAC1D,8BAA8B,GAC9B,qBAAqB,CAAC;AAC1B,KAAK,aAAa,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;AAEvC,KAAK,QAAQ,CAAC,CAAC,IAAI;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC;AAEvD,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,uBAAuB,CAAC;IAClD,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACzD,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IAGtC,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAE9D,QAAQ,CAAC,uBAAuB,EAAE,GAAG,CACnC,MAAM,EACN,cAAc,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAC7C,CAAC;IACF,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IACxC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAChC,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,IAAI,EAC3C,SAAS,EAAE,SAAS,GAAG,IAAI,KACxB,IAAI,GAAG,SAAS,CAAC;AAEtB,MAAM,MAAM,uBAAuB,GAAG,CACpC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,SAAS,KACjB,OAAO,CAAC,GAAG,CAAC,CAAC;AAElB,MAAM,MAAM,IAAI,GAAG;IACjB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"IsographEnvironment.d.ts","sourceRoot":"","sources":["../../src/core/IsographEnvironment.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ROOT_ID = void 0;
|
|
4
4
|
exports.createIsographEnvironment = createIsographEnvironment;
|
|
5
5
|
exports.createIsographStore = createIsographStore;
|
|
6
|
-
exports.defaultMissingFieldHandler = defaultMissingFieldHandler;
|
|
7
6
|
exports.assertLink = assertLink;
|
|
8
7
|
exports.getLink = getLink;
|
|
9
8
|
exports.getOrLoadIsographArtifact = getOrLoadIsographArtifact;
|
|
@@ -27,20 +26,11 @@ function createIsographEnvironment(store, networkFunction, missingFieldHandler,
|
|
|
27
26
|
}
|
|
28
27
|
function createIsographStore() {
|
|
29
28
|
return {
|
|
30
|
-
|
|
29
|
+
Query: {
|
|
30
|
+
[exports.ROOT_ID]: {},
|
|
31
|
+
},
|
|
31
32
|
};
|
|
32
33
|
}
|
|
33
|
-
function defaultMissingFieldHandler(_storeRecord, _root, fieldName, arguments_, variables) {
|
|
34
|
-
if (fieldName === 'node' || fieldName === 'user') {
|
|
35
|
-
const variable = arguments_ === null || arguments_ === void 0 ? void 0 : arguments_['id'];
|
|
36
|
-
const value = variables === null || variables === void 0 ? void 0 : variables[variable];
|
|
37
|
-
// TODO can we handle explicit nulls here too? Probably, after wrapping in objects
|
|
38
|
-
if (value != null) {
|
|
39
|
-
// @ts-expect-error
|
|
40
|
-
return { __link: value };
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
34
|
function assertLink(link) {
|
|
45
35
|
if (Array.isArray(link)) {
|
|
46
36
|
throw new Error('Unexpected array');
|
|
@@ -56,8 +46,10 @@ function assertLink(link) {
|
|
|
56
46
|
function getLink(maybeLink) {
|
|
57
47
|
if (maybeLink != null &&
|
|
58
48
|
typeof maybeLink === 'object' &&
|
|
59
|
-
|
|
60
|
-
maybeLink.__link != null
|
|
49
|
+
'__link' in maybeLink &&
|
|
50
|
+
maybeLink.__link != null &&
|
|
51
|
+
'__typename' in maybeLink &&
|
|
52
|
+
maybeLink.__typename != null) {
|
|
61
53
|
return maybeLink;
|
|
62
54
|
}
|
|
63
55
|
return null;
|
package/dist/core/cache.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { Factory, ParentCache } from '@isograph/react-disposable-state';
|
|
2
|
-
import { DataId, Link, type IsographEnvironment } from './IsographEnvironment';
|
|
2
|
+
import { DataId, Link, type IsographEnvironment, type TypeName } from './IsographEnvironment';
|
|
3
3
|
import { IsographEntrypoint, NormalizationAst, NormalizationLinkedField, NormalizationScalarField, RefetchQueryNormalizationArtifactWrapper } from '../core/entrypoint';
|
|
4
4
|
import { ReaderLinkedField, ReaderScalarField, type ReaderAst } from './reader';
|
|
5
5
|
import { WithEncounteredRecords } from './read';
|
|
6
6
|
import { FragmentReference, Variables, ExtractParameters } from './FragmentReference';
|
|
7
7
|
import { FetchOptions } from './check';
|
|
8
|
+
export declare const TYPENAME_FIELD_NAME = "__typename";
|
|
8
9
|
export declare function getOrCreateItemInSuspenseCache<TReadFromStore extends {
|
|
9
10
|
parameters: object;
|
|
10
11
|
data: object;
|
|
@@ -24,8 +25,9 @@ type NetworkResponseValue = NetworkResponseScalarValue | null | NetworkResponseO
|
|
|
24
25
|
export type NetworkResponseObject = {
|
|
25
26
|
[index: string]: undefined | NetworkResponseValue;
|
|
26
27
|
id?: DataId;
|
|
28
|
+
__typename?: TypeName;
|
|
27
29
|
};
|
|
28
|
-
export declare function normalizeData(environment: IsographEnvironment, normalizationAst: NormalizationAst, networkResponse: NetworkResponseObject, variables: Variables, nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[]):
|
|
30
|
+
export declare function normalizeData(environment: IsographEnvironment, normalizationAst: NormalizationAst, networkResponse: NetworkResponseObject, variables: Variables, nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[], root: Link): EncounteredIds;
|
|
29
31
|
export declare function subscribeToAnyChange(environment: IsographEnvironment, callback: () => void): () => void;
|
|
30
32
|
export declare function subscribeToAnyChangesToRecord(environment: IsographEnvironment, recordLink: Link, callback: () => void): () => void;
|
|
31
33
|
export declare function subscribe<TReadFromStore extends {
|
|
@@ -33,6 +35,8 @@ export declare function subscribe<TReadFromStore extends {
|
|
|
33
35
|
data: object;
|
|
34
36
|
}>(environment: IsographEnvironment, encounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>, fragmentReference: FragmentReference<TReadFromStore, any>, callback: (newEncounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>) => void, readerAst: ReaderAst<TReadFromStore>): () => void;
|
|
35
37
|
export declare function onNextChangeToRecord(environment: IsographEnvironment, recordLink: Link): Promise<void>;
|
|
38
|
+
export type EncounteredIds = Map<TypeName, Set<DataId>>;
|
|
39
|
+
export declare function insertIfNotExists<K, V>(map: Map<K, Set<V>>, key: K): Set<V>;
|
|
36
40
|
export declare function getParentRecordKey(astNode: NormalizationLinkedField | NormalizationScalarField | ReaderLinkedField | ReaderScalarField, variables: Variables): string;
|
|
37
41
|
export declare const FIRST_SPLIT_KEY = "____";
|
|
38
42
|
export declare const SECOND_SPLIT_KEY = "___";
|
package/dist/core/cache.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/core/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAEP,WAAW,EACZ,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,MAAM,EACN,IAAI,EAGJ,KAAK,mBAAmB,
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/core/cache.ts"],"names":[],"mappings":"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"}
|
package/dist/core/cache.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SECOND_SPLIT_KEY = exports.FIRST_SPLIT_KEY = void 0;
|
|
3
|
+
exports.SECOND_SPLIT_KEY = exports.FIRST_SPLIT_KEY = exports.TYPENAME_FIELD_NAME = void 0;
|
|
4
4
|
exports.getOrCreateItemInSuspenseCache = getOrCreateItemInSuspenseCache;
|
|
5
5
|
exports.stableCopy = stableCopy;
|
|
6
6
|
exports.getOrCreateCacheForArtifact = getOrCreateCacheForArtifact;
|
|
@@ -9,6 +9,7 @@ exports.subscribeToAnyChange = subscribeToAnyChange;
|
|
|
9
9
|
exports.subscribeToAnyChangesToRecord = subscribeToAnyChangesToRecord;
|
|
10
10
|
exports.subscribe = subscribe;
|
|
11
11
|
exports.onNextChangeToRecord = onNextChangeToRecord;
|
|
12
|
+
exports.insertIfNotExists = insertIfNotExists;
|
|
12
13
|
exports.getParentRecordKey = getParentRecordKey;
|
|
13
14
|
const react_disposable_state_1 = require("@isograph/react-disposable-state");
|
|
14
15
|
const IsographEnvironment_1 = require("./IsographEnvironment");
|
|
@@ -18,7 +19,7 @@ const makeNetworkRequest_1 = require("./makeNetworkRequest");
|
|
|
18
19
|
const PromiseWrapper_1 = require("./PromiseWrapper");
|
|
19
20
|
const logging_1 = require("./logging");
|
|
20
21
|
const check_1 = require("./check");
|
|
21
|
-
|
|
22
|
+
exports.TYPENAME_FIELD_NAME = '__typename';
|
|
22
23
|
function getOrCreateItemInSuspenseCache(environment, index, factory) {
|
|
23
24
|
// TODO this is probably a useless message, we should remove it
|
|
24
25
|
(0, logging_1.logMessage)(environment, {
|
|
@@ -68,7 +69,7 @@ function getOrCreateCacheForArtifact(environment, entrypoint, variables, fetchOp
|
|
|
68
69
|
readerArtifact: entrypoint.readerWithRefetchQueries.readerArtifact,
|
|
69
70
|
nestedRefetchQueries: entrypoint.readerWithRefetchQueries.nestedRefetchQueries,
|
|
70
71
|
}),
|
|
71
|
-
root: { __link: IsographEnvironment_1.ROOT_ID },
|
|
72
|
+
root: { __link: IsographEnvironment_1.ROOT_ID, __typename: entrypoint.concreteType },
|
|
72
73
|
variables,
|
|
73
74
|
networkRequest: networkRequest,
|
|
74
75
|
},
|
|
@@ -78,15 +79,19 @@ function getOrCreateCacheForArtifact(environment, entrypoint, variables, fetchOp
|
|
|
78
79
|
};
|
|
79
80
|
return getOrCreateItemInSuspenseCache(environment, cacheKey, factory);
|
|
80
81
|
}
|
|
81
|
-
function normalizeData(environment, normalizationAst, networkResponse, variables, nestedRefetchQueries) {
|
|
82
|
-
|
|
82
|
+
function normalizeData(environment, normalizationAst, networkResponse, variables, nestedRefetchQueries, root) {
|
|
83
|
+
var _a, _b;
|
|
84
|
+
var _c, _d, _e;
|
|
85
|
+
const encounteredIds = new Map();
|
|
83
86
|
(0, logging_1.logMessage)(environment, {
|
|
84
87
|
kind: 'AboutToNormalize',
|
|
85
88
|
normalizationAst,
|
|
86
89
|
networkResponse,
|
|
87
90
|
variables,
|
|
88
91
|
});
|
|
89
|
-
|
|
92
|
+
const recordsById = ((_a = (_c = environment.store)[_d = root.__typename]) !== null && _a !== void 0 ? _a : (_c[_d] = {}));
|
|
93
|
+
const newStoreRecord = ((_b = recordsById[_e = root.__link]) !== null && _b !== void 0 ? _b : (recordsById[_e] = {}));
|
|
94
|
+
normalizeDataIntoRecord(environment, normalizationAst, networkResponse, newStoreRecord, root, variables, nestedRefetchQueries, encounteredIds);
|
|
90
95
|
(0, logging_1.logMessage)(environment, {
|
|
91
96
|
kind: 'AfterNormalization',
|
|
92
97
|
store: environment.store,
|
|
@@ -147,6 +152,7 @@ function withErrorHandling(f) {
|
|
|
147
152
|
}
|
|
148
153
|
function callSubscriptions(environment, recordsEncounteredWhenNormalizing) {
|
|
149
154
|
environment.subscriptions.forEach(withErrorHandling((subscription) => {
|
|
155
|
+
var _a;
|
|
150
156
|
switch (subscription.kind) {
|
|
151
157
|
case 'FragmentSubscription': {
|
|
152
158
|
// TODO if there are multiple components subscribed to the same
|
|
@@ -189,7 +195,8 @@ function callSubscriptions(environment, recordsEncounteredWhenNormalizing) {
|
|
|
189
195
|
return;
|
|
190
196
|
}
|
|
191
197
|
case 'AnyChangesToRecord': {
|
|
192
|
-
if (
|
|
198
|
+
if ((_a = recordsEncounteredWhenNormalizing
|
|
199
|
+
.get(subscription.recordLink.__typename)) === null || _a === void 0 ? void 0 : _a.has(subscription.recordLink.__link)) {
|
|
193
200
|
subscription.callback();
|
|
194
201
|
}
|
|
195
202
|
return;
|
|
@@ -203,7 +210,20 @@ function callSubscriptions(environment, recordsEncounteredWhenNormalizing) {
|
|
|
203
210
|
}
|
|
204
211
|
}));
|
|
205
212
|
}
|
|
206
|
-
function hasOverlappingIds(
|
|
213
|
+
function hasOverlappingIds(ids1, ids2) {
|
|
214
|
+
for (const [typeName, set1] of ids1.entries()) {
|
|
215
|
+
const set2 = ids2.get(typeName);
|
|
216
|
+
if (set2 === undefined) {
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
if (isNotDisjointFrom(set1, set2)) {
|
|
220
|
+
return true;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
// TODO use a polyfill library
|
|
226
|
+
function isNotDisjointFrom(set1, set2) {
|
|
207
227
|
for (const id of set1) {
|
|
208
228
|
if (set2.has(id)) {
|
|
209
229
|
return true;
|
|
@@ -245,10 +265,19 @@ function normalizeDataIntoRecord(environment, normalizationAst, networkResponseP
|
|
|
245
265
|
}
|
|
246
266
|
}
|
|
247
267
|
if (recordHasBeenUpdated) {
|
|
248
|
-
mutableEncounteredIds
|
|
268
|
+
let encounteredRecordsIds = insertIfNotExists(mutableEncounteredIds, targetParentRecordLink.__typename);
|
|
269
|
+
encounteredRecordsIds.add(targetParentRecordLink.__link);
|
|
249
270
|
}
|
|
250
271
|
return recordHasBeenUpdated;
|
|
251
272
|
}
|
|
273
|
+
function insertIfNotExists(map, key) {
|
|
274
|
+
let result = map.get(key);
|
|
275
|
+
if (result === undefined) {
|
|
276
|
+
result = new Set();
|
|
277
|
+
map.set(key, result);
|
|
278
|
+
}
|
|
279
|
+
return result;
|
|
280
|
+
}
|
|
252
281
|
function normalizeScalarField(astNode, networkResponseParentRecord, targetStoreRecord, variables) {
|
|
253
282
|
const networkResponseKey = getNetworkResponseKey(astNode);
|
|
254
283
|
const networkResponseData = networkResponseParentRecord[networkResponseKey];
|
|
@@ -267,6 +296,7 @@ function normalizeScalarField(astNode, networkResponseParentRecord, targetStoreR
|
|
|
267
296
|
* Mutate targetParentRecord with a given linked field ast node.
|
|
268
297
|
*/
|
|
269
298
|
function normalizeLinkedField(environment, astNode, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, nestedRefetchQueries, mutableEncounteredIds) {
|
|
299
|
+
var _a, _b;
|
|
270
300
|
const networkResponseKey = getNetworkResponseKey(astNode);
|
|
271
301
|
const networkResponseData = networkResponseParentRecord[networkResponseKey];
|
|
272
302
|
const parentRecordKey = getParentRecordKey(astNode, variables);
|
|
@@ -289,18 +319,32 @@ function normalizeLinkedField(environment, astNode, networkResponseParentRecord,
|
|
|
289
319
|
continue;
|
|
290
320
|
}
|
|
291
321
|
const newStoreRecordId = normalizeNetworkResponseObject(environment, astNode, networkResponseObject, targetParentRecordLink, variables, i, nestedRefetchQueries, mutableEncounteredIds);
|
|
292
|
-
|
|
322
|
+
const __typename = (_a = astNode.concreteType) !== null && _a !== void 0 ? _a : networkResponseObject[exports.TYPENAME_FIELD_NAME];
|
|
323
|
+
if (__typename == null) {
|
|
324
|
+
throw new Error('Unexpected missing __typename in network response when normalizing a linked field. ' +
|
|
325
|
+
'This is indicative of a bug in Isograph.');
|
|
326
|
+
}
|
|
327
|
+
dataIds.push({
|
|
328
|
+
__link: newStoreRecordId,
|
|
329
|
+
__typename,
|
|
330
|
+
});
|
|
293
331
|
}
|
|
294
332
|
targetParentRecord[parentRecordKey] = dataIds;
|
|
295
333
|
return !dataIdsAreTheSame(existingValue, dataIds);
|
|
296
334
|
}
|
|
297
335
|
else {
|
|
298
336
|
const newStoreRecordId = normalizeNetworkResponseObject(environment, astNode, networkResponseData, targetParentRecordLink, variables, null, nestedRefetchQueries, mutableEncounteredIds);
|
|
337
|
+
let __typename = (_b = astNode.concreteType) !== null && _b !== void 0 ? _b : networkResponseData[exports.TYPENAME_FIELD_NAME];
|
|
338
|
+
if (__typename == null) {
|
|
339
|
+
throw new Error('Unexpected missing __typename in network response when normalizing a linked field. ' +
|
|
340
|
+
'This is indicative of a bug in Isograph.');
|
|
341
|
+
}
|
|
299
342
|
targetParentRecord[parentRecordKey] = {
|
|
300
343
|
__link: newStoreRecordId,
|
|
344
|
+
__typename,
|
|
301
345
|
};
|
|
302
346
|
const link = (0, IsographEnvironment_1.getLink)(existingValue);
|
|
303
|
-
return (link === null || link === void 0 ? void 0 : link.__link) !== newStoreRecordId;
|
|
347
|
+
return (link === null || link === void 0 ? void 0 : link.__link) !== newStoreRecordId || link.__typename !== __typename;
|
|
304
348
|
}
|
|
305
349
|
}
|
|
306
350
|
/**
|
|
@@ -308,21 +352,22 @@ function normalizeLinkedField(environment, astNode, networkResponseParentRecord,
|
|
|
308
352
|
*/
|
|
309
353
|
function normalizeInlineFragment(environment, astNode, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, nestedRefetchQueries, mutableEncounteredIds) {
|
|
310
354
|
const typeToRefineTo = astNode.type;
|
|
311
|
-
if (networkResponseParentRecord[TYPENAME_FIELD_NAME] === typeToRefineTo) {
|
|
355
|
+
if (networkResponseParentRecord[exports.TYPENAME_FIELD_NAME] === typeToRefineTo) {
|
|
312
356
|
const hasBeenModified = normalizeDataIntoRecord(environment, astNode.selections, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, nestedRefetchQueries, mutableEncounteredIds);
|
|
313
357
|
return hasBeenModified;
|
|
314
358
|
}
|
|
315
359
|
return false;
|
|
316
360
|
}
|
|
317
361
|
function dataIdsAreTheSame(existingValue, newDataIds) {
|
|
318
|
-
var _a;
|
|
362
|
+
var _a, _b;
|
|
319
363
|
if (Array.isArray(existingValue)) {
|
|
320
364
|
if (newDataIds.length !== existingValue.length) {
|
|
321
365
|
return false;
|
|
322
366
|
}
|
|
323
367
|
for (let i = 0; i < newDataIds.length; i++) {
|
|
324
368
|
const maybeLink = (0, IsographEnvironment_1.getLink)(existingValue[i]);
|
|
325
|
-
if (((_a = newDataIds[i]) === null || _a === void 0 ? void 0 : _a.__link) !== (maybeLink === null || maybeLink === void 0 ? void 0 : maybeLink.__link)
|
|
369
|
+
if (((_a = newDataIds[i]) === null || _a === void 0 ? void 0 : _a.__link) !== (maybeLink === null || maybeLink === void 0 ? void 0 : maybeLink.__link) ||
|
|
370
|
+
((_b = newDataIds[i]) === null || _b === void 0 ? void 0 : _b.__typename) !== (maybeLink === null || maybeLink === void 0 ? void 0 : maybeLink.__typename)) {
|
|
326
371
|
return false;
|
|
327
372
|
}
|
|
328
373
|
}
|
|
@@ -333,11 +378,17 @@ function dataIdsAreTheSame(existingValue, newDataIds) {
|
|
|
333
378
|
}
|
|
334
379
|
}
|
|
335
380
|
function normalizeNetworkResponseObject(environment, astNode, networkResponseData, targetParentRecordLink, variables, index, nestedRefetchQueries, mutableEncounteredIds) {
|
|
336
|
-
var _a;
|
|
381
|
+
var _a, _b, _c;
|
|
382
|
+
var _d;
|
|
337
383
|
const newStoreRecordId = getDataIdOfNetworkResponse(targetParentRecordLink, networkResponseData, astNode, variables, index);
|
|
338
|
-
const
|
|
339
|
-
|
|
340
|
-
|
|
384
|
+
const __typename = (_a = astNode.concreteType) !== null && _a !== void 0 ? _a : networkResponseData[exports.TYPENAME_FIELD_NAME];
|
|
385
|
+
if (__typename == null) {
|
|
386
|
+
throw new Error('Unexpected missing __typename in network response object. ' +
|
|
387
|
+
'This is indicative of a bug in Isograph.');
|
|
388
|
+
}
|
|
389
|
+
const recordsById = ((_b = (_d = environment.store)[__typename]) !== null && _b !== void 0 ? _b : (_d[__typename] = {}));
|
|
390
|
+
const newStoreRecord = ((_c = recordsById[newStoreRecordId]) !== null && _c !== void 0 ? _c : (recordsById[newStoreRecordId] = {}));
|
|
391
|
+
normalizeDataIntoRecord(environment, astNode.selections, networkResponseData, newStoreRecord, { __link: newStoreRecordId, __typename: __typename }, variables, nestedRefetchQueries, mutableEncounteredIds);
|
|
341
392
|
return newStoreRecordId;
|
|
342
393
|
}
|
|
343
394
|
function isScalarOrEmptyArray(data) {
|
|
@@ -440,13 +491,18 @@ exports.FIRST_SPLIT_KEY = '____';
|
|
|
440
491
|
exports.SECOND_SPLIT_KEY = '___';
|
|
441
492
|
// Returns a key to look up an item in the store
|
|
442
493
|
function getDataIdOfNetworkResponse(parentRecordLink, dataToNormalize, astNode, variables, index) {
|
|
494
|
+
// If we are dealing with nested Query, use __ROOT as id
|
|
495
|
+
// TODO do not hard code this value here
|
|
496
|
+
if (astNode.concreteType === 'Query') {
|
|
497
|
+
return IsographEnvironment_1.ROOT_ID;
|
|
498
|
+
}
|
|
443
499
|
// Check whether the dataToNormalize has an id field. If so, that is the key.
|
|
444
500
|
// If not, we construct an id from the parentRecordId and the field parameters.
|
|
445
501
|
const dataId = dataToNormalize.id;
|
|
446
502
|
if (dataId != null) {
|
|
447
503
|
return dataId;
|
|
448
504
|
}
|
|
449
|
-
let storeKey = `${parentRecordLink.__link}.${astNode.fieldName}`;
|
|
505
|
+
let storeKey = `${parentRecordLink.__typename}:${parentRecordLink.__link}.${astNode.fieldName}`;
|
|
450
506
|
if (index != null) {
|
|
451
507
|
storeKey += `.${index}`;
|
|
452
508
|
}
|
package/dist/core/check.d.ts
CHANGED
|
@@ -12,5 +12,5 @@ export type CheckResult = {
|
|
|
12
12
|
kind: 'MissingData';
|
|
13
13
|
record: Link;
|
|
14
14
|
};
|
|
15
|
-
export declare function check(environment: IsographEnvironment, normalizationAst: NormalizationAst, variables: Variables): CheckResult;
|
|
15
|
+
export declare function check(environment: IsographEnvironment, normalizationAst: NormalizationAst, variables: Variables, root: Link): CheckResult;
|
|
16
16
|
//# sourceMappingURL=check.d.ts.map
|
package/dist/core/check.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/core/check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAEL,mBAAmB,EACnB,IAAI,
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/core/check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAEL,mBAAmB,EACnB,IAAI,EAEL,MAAM,uBAAuB,CAAC;AAG/B,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,IAAI,GAAG,aAAa,CAAC;AAEvD,eAAO,MAAM,0BAA0B,EAAE,WAA2B,CAAC;AAErE,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB;IACE,IAAI,EAAE,YAAY,CAAC;CACpB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,IAAI,CAAC;CACd,CAAC;AAEN,wBAAgB,KAAK,CACnB,WAAW,EAAE,mBAAmB,EAChC,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,GACT,WAAW,CAgBb"}
|
package/dist/core/check.js
CHANGED
|
@@ -6,8 +6,12 @@ const cache_1 = require("./cache");
|
|
|
6
6
|
const IsographEnvironment_1 = require("./IsographEnvironment");
|
|
7
7
|
const logging_1 = require("./logging");
|
|
8
8
|
exports.DEFAULT_SHOULD_FETCH_VALUE = 'IfNecessary';
|
|
9
|
-
function check(environment, normalizationAst, variables) {
|
|
10
|
-
|
|
9
|
+
function check(environment, normalizationAst, variables, root) {
|
|
10
|
+
var _a, _b;
|
|
11
|
+
var _c, _d, _e;
|
|
12
|
+
const recordsById = ((_a = (_c = environment.store)[_d = root.__typename]) !== null && _a !== void 0 ? _a : (_c[_d] = {}));
|
|
13
|
+
const newStoreRecord = ((_b = recordsById[_e = root.__link]) !== null && _b !== void 0 ? _b : (recordsById[_e] = {}));
|
|
14
|
+
const checkResult = checkFromRecord(environment, normalizationAst, variables, newStoreRecord, root);
|
|
11
15
|
(0, logging_1.logMessage)(environment, {
|
|
12
16
|
kind: 'EnvironmentCheck',
|
|
13
17
|
result: checkResult,
|
|
@@ -15,6 +19,7 @@ function check(environment, normalizationAst, variables) {
|
|
|
15
19
|
return checkResult;
|
|
16
20
|
}
|
|
17
21
|
function checkFromRecord(environment, normalizationAst, variables, record, recordLink) {
|
|
22
|
+
var _a, _b;
|
|
18
23
|
normalizationAstLoop: for (const normalizationAstNode of normalizationAst) {
|
|
19
24
|
switch (normalizationAstNode.kind) {
|
|
20
25
|
case 'Scalar': {
|
|
@@ -49,7 +54,7 @@ function checkFromRecord(environment, normalizationAst, variables, record, recor
|
|
|
49
54
|
throw new Error('Unexpected non-link in the Isograph store. ' +
|
|
50
55
|
'This is indicative of a bug in Isograph.');
|
|
51
56
|
}
|
|
52
|
-
const linkedRecord = environment.store[link.__link];
|
|
57
|
+
const linkedRecord = (_a = environment.store[link.__typename]) === null || _a === void 0 ? void 0 : _a[link.__link];
|
|
53
58
|
if (linkedRecord === undefined) {
|
|
54
59
|
return {
|
|
55
60
|
kind: 'MissingData',
|
|
@@ -74,7 +79,7 @@ function checkFromRecord(environment, normalizationAst, variables, record, recor
|
|
|
74
79
|
throw new Error('Unexpected non-link in the Isograph store. ' +
|
|
75
80
|
'This is indicative of a bug in Isograph.');
|
|
76
81
|
}
|
|
77
|
-
const linkedRecord = environment.store[link.__link];
|
|
82
|
+
const linkedRecord = (_b = environment.store[link.__typename]) === null || _b === void 0 ? void 0 : _b[link.__link];
|
|
78
83
|
if (linkedRecord === undefined) {
|
|
79
84
|
return {
|
|
80
85
|
kind: 'MissingData',
|
|
@@ -21,6 +21,7 @@ export type IsographEntrypoint<TReadFromStore extends {
|
|
|
21
21
|
readonly kind: 'Entrypoint';
|
|
22
22
|
readonly networkRequestInfo: NetworkRequestInfo;
|
|
23
23
|
readonly readerWithRefetchQueries: ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>;
|
|
24
|
+
readonly concreteType: TypeName;
|
|
24
25
|
};
|
|
25
26
|
export type IsographEntrypointLoader<TReadFromStore extends {
|
|
26
27
|
parameters: object;
|
|
@@ -52,6 +53,7 @@ export type NormalizationInlineFragment = {
|
|
|
52
53
|
export type RefetchQueryNormalizationArtifact = {
|
|
53
54
|
readonly kind: 'RefetchQuery';
|
|
54
55
|
readonly networkRequestInfo: NetworkRequestInfo;
|
|
56
|
+
readonly concreteType: TypeName;
|
|
55
57
|
};
|
|
56
58
|
export type RefetchQueryNormalizationArtifactWrapper = {
|
|
57
59
|
readonly artifact: RefetchQueryNormalizationArtifact;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entrypoint.d.ts","sourceRoot":"","sources":["../../src/core/entrypoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC,MAAM,MAAM,wBAAwB,CAClC,cAAc,SAAS;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC3D,iBAAiB,IACf;IACF,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,CAAC,cAAc,EAAE,sBAAsB,CAC7C,cAAc,EACd,iBAAiB,EAEjB,GAAG,CACJ,CAAC;IACF,QAAQ,CAAC,oBAAoB,EAAE,wCAAwC,EAAE,CAAC;CAC3E,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAC5B,cAAc,SAAS;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC3D,iBAAiB,IACf;IACF,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAChD,QAAQ,CAAC,wBAAwB,EAAE,wBAAwB,CACzD,cAAc,EACd,iBAAiB,CAClB,CAAC;
|
|
1
|
+
{"version":3,"file":"entrypoint.d.ts","sourceRoot":"","sources":["../../src/core/entrypoint.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { IsographEnvironment } from './IsographEnvironment';
|
|
1
|
+
import { IsographEnvironment, type Link } from './IsographEnvironment';
|
|
2
2
|
import { NormalizationAst } from './entrypoint';
|
|
3
3
|
export type RetainedQuery = {
|
|
4
4
|
readonly normalizationAst: NormalizationAst;
|
|
5
5
|
readonly variables: {};
|
|
6
|
+
readonly root: Link;
|
|
6
7
|
};
|
|
7
8
|
type DidUnretainSomeQuery = boolean;
|
|
8
9
|
export declare function unretainQuery(environment: IsographEnvironment, retainedQuery: RetainedQuery): DidUnretainSomeQuery;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"garbageCollection.d.ts","sourceRoot":"","sources":["../../src/core/garbageCollection.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,mBAAmB,
|
|
1
|
+
{"version":3,"file":"garbageCollection.d.ts","sourceRoot":"","sources":["../../src/core/garbageCollection.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,mBAAmB,EAInB,KAAK,IAAI,EAEV,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;CACrB,CAAC;AAEF,KAAK,oBAAoB,GAAG,OAAO,CAAC;AACpC,wBAAgB,aAAa,CAC3B,WAAW,EAAE,mBAAmB,EAChC,aAAa,EAAE,aAAa,GAC3B,oBAAoB,CAUtB;AAED,wBAAgB,WAAW,CACzB,WAAW,EAAE,mBAAmB,EAChC,aAAa,EAAE,aAAa,QAM7B;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,mBAAmB,QA+BzE"}
|
|
@@ -21,47 +21,81 @@ function retainQuery(environment, queryToRetain) {
|
|
|
21
21
|
// id + variables
|
|
22
22
|
}
|
|
23
23
|
function garbageCollectEnvironment(environment) {
|
|
24
|
-
const retainedIds =
|
|
24
|
+
const retainedIds = {};
|
|
25
25
|
for (const query of environment.retainedQueries) {
|
|
26
26
|
recordReachableIds(environment.store, query, retainedIds);
|
|
27
27
|
}
|
|
28
28
|
for (const query of environment.gcBuffer) {
|
|
29
29
|
recordReachableIds(environment.store, query, retainedIds);
|
|
30
30
|
}
|
|
31
|
-
for (const
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
for (const typeName in environment.store) {
|
|
32
|
+
const dataById = environment.store[typeName];
|
|
33
|
+
if (dataById == null)
|
|
34
|
+
continue;
|
|
35
|
+
const retainedTypeIds = retainedIds[typeName];
|
|
36
|
+
// delete all objects
|
|
37
|
+
if (retainedTypeIds == undefined || retainedTypeIds.size == 0) {
|
|
38
|
+
delete environment.store[typeName];
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
for (const dataId in dataById) {
|
|
42
|
+
if (!retainedTypeIds.has(dataId)) {
|
|
43
|
+
delete dataById[dataId];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (Object.keys(dataById).length === 0) {
|
|
47
|
+
delete environment.store[typeName];
|
|
34
48
|
}
|
|
35
49
|
}
|
|
36
50
|
}
|
|
37
51
|
function recordReachableIds(store, retainedQuery, mutableRetainedIds) {
|
|
38
|
-
|
|
52
|
+
var _a, _b;
|
|
53
|
+
var _c;
|
|
54
|
+
const record = (_a = store[retainedQuery.root.__typename]) === null || _a === void 0 ? void 0 : _a[retainedQuery.root.__link];
|
|
55
|
+
const retainedRecordsIds = ((_b = mutableRetainedIds[_c = retainedQuery.root.__typename]) !== null && _b !== void 0 ? _b : (mutableRetainedIds[_c] = new Set()));
|
|
56
|
+
retainedRecordsIds.add(retainedQuery.root.__link);
|
|
57
|
+
if (record) {
|
|
58
|
+
recordReachableIdsFromRecord(store, record, mutableRetainedIds, retainedQuery.normalizationAst, retainedQuery.variables);
|
|
59
|
+
}
|
|
39
60
|
}
|
|
40
61
|
function recordReachableIdsFromRecord(store, currentRecord, mutableRetainedIds, selections, variables) {
|
|
62
|
+
var _a;
|
|
41
63
|
for (const selection of selections) {
|
|
42
64
|
switch (selection.kind) {
|
|
43
65
|
case 'Linked':
|
|
44
66
|
const linkKey = (0, cache_1.getParentRecordKey)(selection, variables !== null && variables !== void 0 ? variables : {});
|
|
45
67
|
const linkedFieldOrFields = currentRecord[linkKey];
|
|
46
|
-
const
|
|
68
|
+
const links = [];
|
|
47
69
|
if (Array.isArray(linkedFieldOrFields)) {
|
|
48
70
|
for (const maybeLink of linkedFieldOrFields) {
|
|
49
71
|
const link = (0, IsographEnvironment_1.assertLink)(maybeLink);
|
|
50
72
|
if (link != null) {
|
|
51
|
-
|
|
73
|
+
links.push(link);
|
|
52
74
|
}
|
|
53
75
|
}
|
|
54
76
|
}
|
|
55
77
|
else {
|
|
56
78
|
const link = (0, IsographEnvironment_1.assertLink)(linkedFieldOrFields);
|
|
57
79
|
if (link != null) {
|
|
58
|
-
|
|
80
|
+
links.push(link);
|
|
59
81
|
}
|
|
60
82
|
}
|
|
61
|
-
|
|
62
|
-
|
|
83
|
+
let typeStore = selection.concreteType !== null
|
|
84
|
+
? store[selection.concreteType]
|
|
85
|
+
: null;
|
|
86
|
+
if (typeStore == null && selection.concreteType !== null) {
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
for (const nextRecordLink of links) {
|
|
90
|
+
let __typename = nextRecordLink.__typename;
|
|
91
|
+
const resolvedTypeStore = typeStore !== null && typeStore !== void 0 ? typeStore : store[__typename];
|
|
92
|
+
if (resolvedTypeStore == null) {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
const nextRecord = resolvedTypeStore[nextRecordLink.__link];
|
|
63
96
|
if (nextRecord != null) {
|
|
64
|
-
mutableRetainedIds
|
|
97
|
+
const retainedRecordsIds = ((_a = mutableRetainedIds[__typename]) !== null && _a !== void 0 ? _a : (mutableRetainedIds[__typename] = new Set()));
|
|
98
|
+
retainedRecordsIds.add(nextRecordLink.__link);
|
|
65
99
|
recordReachableIdsFromRecord(store, nextRecord, mutableRetainedIds, selection.selections, variables);
|
|
66
100
|
}
|
|
67
101
|
}
|
package/dist/core/logging.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { CleanupFn } from '@isograph/disposable-types';
|
|
|
2
2
|
import { IsographEnvironment, IsographStore, StoreRecord, type Link } from './IsographEnvironment';
|
|
3
3
|
import { IsographEntrypoint, NormalizationAst, RefetchQueryNormalizationArtifact } from './entrypoint';
|
|
4
4
|
import { FragmentReference, Variables } from './FragmentReference';
|
|
5
|
-
import { NetworkResponseObject } from './cache';
|
|
5
|
+
import { NetworkResponseObject, type EncounteredIds } from './cache';
|
|
6
6
|
import { Arguments } from './util';
|
|
7
7
|
import { ReadDataResult } from './read';
|
|
8
8
|
import { CheckResult } from './check';
|
|
@@ -19,7 +19,7 @@ export type LogMessage = {
|
|
|
19
19
|
} | {
|
|
20
20
|
kind: 'AfterNormalization';
|
|
21
21
|
store: IsographStore;
|
|
22
|
-
encounteredIds:
|
|
22
|
+
encounteredIds: EncounteredIds;
|
|
23
23
|
} | {
|
|
24
24
|
kind: 'DeepEqualityCheck';
|
|
25
25
|
fragmentReference: FragmentReference<any, any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/core/logging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,KAAK,IAAI,EACV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,iCAAiC,EAClC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/core/logging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,KAAK,IAAI,EACV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,iCAAiC,EAClC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,MAAM,MAAM,UAAU,GAClB;IACE,IAAI,EAAE,0BAA0B,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC3C,KAAK,EAAE,OAAO,CAAC;CAChB,GACD;IACE,IAAI,EAAE,kBAAkB,CAAC;IACzB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,eAAe,EAAE,qBAAqB,CAAC;IACvC,SAAS,EAAE,SAAS,CAAC;CACtB,GACD;IACE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;CAChC,GACD;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,iBAAiB,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC/C,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,OAAO,CAAC;CACtB,GACD;IACE,IAAI,EAAE,qBAAqB,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,IAAI,CAAC;CAChB,GACD;IACE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,QAAQ,EACJ,iCAAiC,GACjC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GACD;IACE,IAAI,EAAE,yBAAyB,CAAC;IAEhC,eAAe,EAAE,GAAG,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GACD;IACE,IAAI,EAAE,2BAA2B,CAAC;IAClC,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,SAAS,CAAC;CACtB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;CAC/B,GACD;IACE,IAAI,EAAE,uBAAuB,CAAC;IAC9B,UAAU,EAAE,GAAG,CAAC;CACjB,GACD;IACE,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE,WAAW,CAAC;CACrB,CAAC;AAEN,MAAM,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;AAG3D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,WAAW,CAAC;CAClB,CAAC;AAEF,wBAAgB,UAAU,CACxB,WAAW,EAAE,mBAAmB,EAChC,OAAO,EAAE,UAAU,QAOpB;AAED,wBAAgB,cAAc,CAC5B,WAAW,EAAE,mBAAmB,EAChC,GAAG,EAAE,WAAW,GACf,SAAS,CAMX"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"makeNetworkRequest.d.ts","sourceRoot":"","sources":["../../src/core/makeNetworkRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EACL,kBAAkB,EAClB,iCAAiC,EAClC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAOhD,OAAO,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"makeNetworkRequest.d.ts","sourceRoot":"","sources":["../../src/core/makeNetworkRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EACL,kBAAkB,EAClB,iCAAiC,EAClC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAOhD,OAAO,EAAE,mBAAmB,EAAW,MAAM,uBAAuB,CAAC;AACrE,OAAO,EACL,QAAQ,EACR,cAAc,EAGf,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAS,WAAW,EAAE,MAAM,SAAS,CAAC;AAI7C,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,iCAAiC,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,EAC1E,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,GACvB,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAyBjD;AAED,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,iCAAiC,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,EAC1E,SAAS,EAAE,SAAS,GACnB,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CA6EjD"}
|