@isograph/react 0.0.0-main-6a3c227d → 0.0.0-main-84b67b62

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 (41) hide show
  1. package/.turbo/turbo-compile-libs.log +1 -1
  2. package/dist/core/IsographEnvironment.d.ts +9 -6
  3. package/dist/core/IsographEnvironment.d.ts.map +1 -1
  4. package/dist/core/IsographEnvironment.js +7 -1
  5. package/dist/core/cache.d.ts +2 -1
  6. package/dist/core/cache.d.ts.map +1 -1
  7. package/dist/core/cache.js +17 -27
  8. package/dist/core/check.d.ts.map +1 -1
  9. package/dist/core/check.js +10 -7
  10. package/dist/core/garbageCollection.d.ts +2 -1
  11. package/dist/core/garbageCollection.d.ts.map +1 -1
  12. package/dist/core/garbageCollection.js +21 -13
  13. package/dist/core/logging.d.ts +3 -2
  14. package/dist/core/logging.d.ts.map +1 -1
  15. package/dist/core/makeNetworkRequest.d.ts.map +1 -1
  16. package/dist/core/makeNetworkRequest.js +10 -1
  17. package/dist/core/optimisticProxy.d.ts +51 -0
  18. package/dist/core/optimisticProxy.d.ts.map +1 -0
  19. package/dist/core/optimisticProxy.js +372 -0
  20. package/dist/core/read.d.ts.map +1 -1
  21. package/dist/core/read.js +5 -4
  22. package/dist/core/startUpdate.d.ts +2 -1
  23. package/dist/core/startUpdate.d.ts.map +1 -1
  24. package/dist/core/startUpdate.js +31 -32
  25. package/dist/index.d.ts +1 -1
  26. package/dist/index.d.ts.map +1 -1
  27. package/package.json +4 -4
  28. package/src/core/IsographEnvironment.ts +16 -6
  29. package/src/core/cache.ts +21 -14
  30. package/src/core/check.ts +11 -6
  31. package/src/core/garbageCollection.ts +27 -15
  32. package/src/core/logging.ts +2 -2
  33. package/src/core/makeNetworkRequest.ts +14 -1
  34. package/src/core/optimisticProxy.ts +510 -0
  35. package/src/core/read.ts +2 -1
  36. package/src/core/startUpdate.ts +44 -28
  37. package/src/index.ts +1 -1
  38. package/src/tests/garbageCollection.test.ts +2 -2
  39. package/src/tests/normalizeData.test.ts +5 -3
  40. package/src/tests/optimisticProxy.test.ts +860 -0
  41. package/src/tests/startUpdate.test.ts +7 -5
@@ -1,5 +1,5 @@
1
1
  ../.. |  WARN  Unsupported engine: wanted: {"node":"22.9.0"} (current: {"node":"v22.21.1","pnpm":"10.15.0"})
2
2
 
3
- > @isograph/react@0.0.0-main-6a3c227d compile-libs /home/runner/work/isograph/isograph/libs/isograph-react
3
+ > @isograph/react@0.0.0-main-84b67b62 compile-libs /home/runner/work/isograph/isograph/libs/isograph-react
4
4
  > rimraf dist && tsc -p tsconfig.pkg.json
5
5
 
@@ -1,12 +1,13 @@
1
1
  import { ParentCache } from '@isograph/react-disposable-state';
2
+ import type { Brand } from './brand';
2
3
  import { IsographEntrypoint, IsographOperation, IsographPersistedOperation } from './entrypoint';
3
4
  import { FragmentReference, Variables, type StableIdForFragmentReference, type UnknownTReadFromStore } from './FragmentReference';
4
5
  import type { RetainedQuery } from './garbageCollection';
5
6
  import { LogFunction, WrappedLogFunction } from './logging';
7
+ import { type StoreLayer } from './optimisticProxy';
6
8
  import { PromiseWrapper } from './PromiseWrapper';
7
9
  import { WithEncounteredRecords } from './read';
8
10
  import type { ReaderAst, StartUpdate } from './reader';
9
- import type { Brand } from './brand';
10
11
  export type ComponentOrFieldName = string;
11
12
  export type StringifiedArgs = string;
12
13
  export type FieldCache<T> = {
@@ -35,7 +36,7 @@ export type CacheMap<T> = {
35
36
  [index: string]: ParentCache<T>;
36
37
  };
37
38
  export type IsographEnvironment = {
38
- readonly store: IsographStore;
39
+ store: StoreLayer;
39
40
  readonly networkFunction: IsographNetworkFunction;
40
41
  readonly missingFieldHandler: MissingFieldHandler | null;
41
42
  readonly componentCache: FieldCache<React.FC<any>>;
@@ -68,16 +69,18 @@ export type StoreRecord = {
68
69
  export type TypeName = string;
69
70
  export type DataId = string;
70
71
  export declare const ROOT_ID: DataId & '__ROOT';
71
- export type IsographStore = {
72
+ export type StoreLayerData = {
72
73
  [index: TypeName]: {
73
74
  [index: DataId]: StoreRecord | null;
74
75
  } | null;
76
+ };
77
+ export interface BaseStoreLayerData extends StoreLayerData {
75
78
  readonly Query: {
76
79
  readonly __ROOT: StoreRecord;
77
80
  };
78
- };
79
- export declare function createIsographEnvironment(store: IsographStore, networkFunction: IsographNetworkFunction, missingFieldHandler?: MissingFieldHandler | null, logFunction?: LogFunction | null): IsographEnvironment;
80
- export declare function createIsographStore(): IsographStore;
81
+ }
82
+ export declare function createIsographEnvironment(baseStoreLayerData: BaseStoreLayerData, networkFunction: IsographNetworkFunction, missingFieldHandler?: MissingFieldHandler | null, logFunction?: LogFunction | null): IsographEnvironment;
83
+ export declare function createIsographStore(): BaseStoreLayerData;
81
84
  export declare function assertLink(link: DataTypeValue): StoreLink | null | undefined;
82
85
  export declare function getLink(maybeLink: DataTypeValue): StoreLink | null;
83
86
  export declare function getOrLoadIsographArtifact(environment: IsographEnvironment, key: string, loader: () => Promise<IsographEntrypoint<any, any, any>>): PromiseWrapper<IsographEntrypoint<any, any, any>>;
@@ -1 +1 @@
1
- {"version":3,"file":"IsographEnvironment.d.ts","sourceRoot":"","sources":["../../src/core/IsographEnvironment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IsographEnvironment.d.ts","sourceRoot":"","sources":["../../src/core/IsographEnvironment.ts"],"names":[],"mappings":"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"}
@@ -9,10 +9,16 @@ exports.getOrLoadIsographArtifact = getOrLoadIsographArtifact;
9
9
  const PromiseWrapper_1 = require("./PromiseWrapper");
10
10
  exports.ROOT_ID = '__ROOT';
11
11
  const DEFAULT_GC_BUFFER_SIZE = 10;
12
- function createIsographEnvironment(store, networkFunction, missingFieldHandler, logFunction) {
12
+ function createIsographEnvironment(baseStoreLayerData, networkFunction, missingFieldHandler, logFunction) {
13
13
  logFunction === null || logFunction === void 0 ? void 0 : logFunction({
14
14
  kind: 'EnvironmentCreated',
15
15
  });
16
+ let store = {
17
+ kind: 'BaseStoreLayer',
18
+ data: baseStoreLayerData,
19
+ parentStoreLayer: null,
20
+ childStoreLayer: null,
21
+ };
16
22
  return {
17
23
  store,
18
24
  networkFunction,
@@ -3,6 +3,7 @@ import { IsographEntrypoint, NormalizationLinkedField, NormalizationScalarField,
3
3
  import { FetchOptions } from './check';
4
4
  import { ExtractParameters, FragmentReference, Variables, type UnknownTReadFromStore } from './FragmentReference';
5
5
  import { DataId, StoreLink, type IsographEnvironment, type TypeName } from './IsographEnvironment';
6
+ import { type StoreLayerWithData } from './optimisticProxy';
6
7
  import { WithEncounteredRecords } from './read';
7
8
  import { ReaderLinkedField, ReaderScalarField, type ReaderAst } from './reader';
8
9
  export declare const TYPENAME_FIELD_NAME = "__typename";
@@ -21,7 +22,7 @@ export type NetworkResponseObject = {
21
22
  id?: DataId;
22
23
  __typename?: TypeName;
23
24
  };
24
- export declare function normalizeData(environment: IsographEnvironment, normalizationAst: NormalizationAstNodes, networkResponse: NetworkResponseObject, variables: Variables, root: StoreLink): EncounteredIds;
25
+ export declare function normalizeData(environment: IsographEnvironment, storeLayer: StoreLayerWithData, normalizationAst: NormalizationAstNodes, networkResponse: NetworkResponseObject, variables: Variables, root: StoreLink, encounteredIds: EncounteredIds): EncounteredIds;
25
26
  export declare function subscribeToAnyChange(environment: IsographEnvironment, callback: () => void): () => void;
26
27
  export declare function subscribeToAnyChangesToRecord(environment: IsographEnvironment, recordLink: StoreLink, callback: () => void): () => void;
27
28
  export declare function subscribe<TReadFromStore extends UnknownTReadFromStore>(environment: IsographEnvironment, encounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>, fragmentReference: FragmentReference<TReadFromStore, any>, callback: (newEncounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>) => void, readerAst: ReaderAst<TReadFromStore>): () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/core/cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/core/cache.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,7 @@ const areEqualWithDeepComparison_1 = require("./areEqualWithDeepComparison");
17
17
  const IsographEnvironment_1 = require("./IsographEnvironment");
18
18
  const logging_1 = require("./logging");
19
19
  const makeNetworkRequest_1 = require("./makeNetworkRequest");
20
+ const optimisticProxy_1 = require("./optimisticProxy");
20
21
  const PromiseWrapper_1 = require("./PromiseWrapper");
21
22
  const read_1 = require("./read");
22
23
  exports.TYPENAME_FIELD_NAME = '__typename';
@@ -81,25 +82,15 @@ function getOrCreateCacheForArtifact(environment, entrypoint, variables, fetchOp
81
82
  };
82
83
  return getOrCreateItemInSuspenseCache(environment, cacheKey, factory);
83
84
  }
84
- function normalizeData(environment, normalizationAst, networkResponse, variables, root) {
85
- var _a, _b;
86
- var _c, _d, _e;
87
- const encounteredIds = new Map();
85
+ function normalizeData(environment, storeLayer, normalizationAst, networkResponse, variables, root, encounteredIds) {
88
86
  (0, logging_1.logMessage)(environment, () => ({
89
87
  kind: 'AboutToNormalize',
90
88
  normalizationAst,
91
89
  networkResponse,
92
90
  variables,
93
91
  }));
94
- const recordsById = ((_a = (_c = environment.store)[_d = root.__typename]) !== null && _a !== void 0 ? _a : (_c[_d] = {}));
95
- const newStoreRecord = ((_b = recordsById[_e = root.__link]) !== null && _b !== void 0 ? _b : (recordsById[_e] = {}));
96
- normalizeDataIntoRecord(environment, normalizationAst, networkResponse, newStoreRecord, root, variables, encounteredIds);
97
- (0, logging_1.logMessage)(environment, () => ({
98
- kind: 'AfterNormalization',
99
- store: environment.store,
100
- encounteredIds,
101
- }));
102
- callSubscriptions(environment, encounteredIds);
92
+ const newStoreRecord = (0, optimisticProxy_1.getMutableStoreRecordProxy)(storeLayer, root);
93
+ normalizeDataIntoRecord(environment, storeLayer, normalizationAst, networkResponse, newStoreRecord, root, variables, encounteredIds);
103
94
  return encounteredIds;
104
95
  }
105
96
  function subscribeToAnyChange(environment, callback) {
@@ -250,7 +241,7 @@ function isNotDisjointFrom(set1, set2) {
250
241
  /**
251
242
  * Mutate targetParentRecord according to the normalizationAst and networkResponseParentRecord.
252
243
  */
253
- function normalizeDataIntoRecord(environment, normalizationAst, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, mutableEncounteredIds) {
244
+ function normalizeDataIntoRecord(environment, storeLayer, normalizationAst, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, mutableEncounteredIds) {
254
245
  let recordHasBeenUpdated = false;
255
246
  for (const normalizationNode of normalizationAst) {
256
247
  switch (normalizationNode.kind) {
@@ -261,13 +252,13 @@ function normalizeDataIntoRecord(environment, normalizationAst, networkResponseP
261
252
  break;
262
253
  }
263
254
  case 'Linked': {
264
- const linkedFieldResultedInChange = normalizeLinkedField(environment, normalizationNode, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, mutableEncounteredIds);
255
+ const linkedFieldResultedInChange = normalizeLinkedField(environment, storeLayer, normalizationNode, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, mutableEncounteredIds);
265
256
  recordHasBeenUpdated =
266
257
  recordHasBeenUpdated || linkedFieldResultedInChange;
267
258
  break;
268
259
  }
269
260
  case 'InlineFragment': {
270
- const inlineFragmentResultedInChange = normalizeInlineFragment(environment, normalizationNode, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, mutableEncounteredIds);
261
+ const inlineFragmentResultedInChange = normalizeInlineFragment(environment, storeLayer, normalizationNode, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, mutableEncounteredIds);
271
262
  recordHasBeenUpdated =
272
263
  recordHasBeenUpdated || inlineFragmentResultedInChange;
273
264
  break;
@@ -311,7 +302,7 @@ function normalizeScalarField(astNode, networkResponseParentRecord, targetStoreR
311
302
  /**
312
303
  * Mutate targetParentRecord with a given linked field ast node.
313
304
  */
314
- function normalizeLinkedField(environment, astNode, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, mutableEncounteredIds) {
305
+ function normalizeLinkedField(environment, storeLayer, astNode, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, mutableEncounteredIds) {
315
306
  var _a, _b;
316
307
  const networkResponseKey = getNetworkResponseKey(astNode);
317
308
  const networkResponseData = networkResponseParentRecord[networkResponseKey];
@@ -334,7 +325,7 @@ function normalizeLinkedField(environment, astNode, networkResponseParentRecord,
334
325
  dataIds.push(null);
335
326
  continue;
336
327
  }
337
- const newStoreRecordId = normalizeNetworkResponseObject(environment, astNode, networkResponseObject, targetParentRecordLink, variables, i, mutableEncounteredIds);
328
+ const newStoreRecordId = normalizeNetworkResponseObject(environment, storeLayer, astNode, networkResponseObject, targetParentRecordLink, variables, i, mutableEncounteredIds);
338
329
  const __typename = (_a = astNode.concreteType) !== null && _a !== void 0 ? _a : networkResponseObject[exports.TYPENAME_FIELD_NAME];
339
330
  if (__typename == null) {
340
331
  throw new Error('Unexpected missing __typename in network response when normalizing a linked field. ' +
@@ -349,7 +340,7 @@ function normalizeLinkedField(environment, astNode, networkResponseParentRecord,
349
340
  return !dataIdsAreTheSame(existingValue, dataIds);
350
341
  }
351
342
  else {
352
- const newStoreRecordId = normalizeNetworkResponseObject(environment, astNode, networkResponseData, targetParentRecordLink, variables, null, mutableEncounteredIds);
343
+ const newStoreRecordId = normalizeNetworkResponseObject(environment, storeLayer, astNode, networkResponseData, targetParentRecordLink, variables, null, mutableEncounteredIds);
353
344
  let __typename = (_b = astNode.concreteType) !== null && _b !== void 0 ? _b : networkResponseData[exports.TYPENAME_FIELD_NAME];
354
345
  if (__typename == null) {
355
346
  throw new Error('Unexpected missing __typename in network response when normalizing a linked field. ' +
@@ -366,10 +357,10 @@ function normalizeLinkedField(environment, astNode, networkResponseParentRecord,
366
357
  /**
367
358
  * Mutate targetParentRecord with a given linked field ast node.
368
359
  */
369
- function normalizeInlineFragment(environment, astNode, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, mutableEncounteredIds) {
360
+ function normalizeInlineFragment(environment, storeLayer, astNode, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, mutableEncounteredIds) {
370
361
  const typeToRefineTo = astNode.type;
371
362
  if (networkResponseParentRecord[exports.TYPENAME_FIELD_NAME] === typeToRefineTo) {
372
- const hasBeenModified = normalizeDataIntoRecord(environment, astNode.selections, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, mutableEncounteredIds);
363
+ const hasBeenModified = normalizeDataIntoRecord(environment, storeLayer, astNode.selections, networkResponseParentRecord, targetParentRecord, targetParentRecordLink, variables, mutableEncounteredIds);
373
364
  return hasBeenModified;
374
365
  }
375
366
  return false;
@@ -393,18 +384,17 @@ function dataIdsAreTheSame(existingValue, newDataIds) {
393
384
  return false;
394
385
  }
395
386
  }
396
- function normalizeNetworkResponseObject(environment, astNode, networkResponseData, targetParentRecordLink, variables, index, mutableEncounteredIds) {
397
- var _a, _b, _c;
398
- var _d;
387
+ function normalizeNetworkResponseObject(environment, storeLayer, astNode, networkResponseData, targetParentRecordLink, variables, index, mutableEncounteredIds) {
388
+ var _a;
399
389
  const newStoreRecordId = getDataIdOfNetworkResponse(targetParentRecordLink, networkResponseData, astNode, variables, index);
400
390
  const __typename = (_a = astNode.concreteType) !== null && _a !== void 0 ? _a : networkResponseData[exports.TYPENAME_FIELD_NAME];
401
391
  if (__typename == null) {
402
392
  throw new Error('Unexpected missing __typename in network response object. ' +
403
393
  'This is indicative of a bug in Isograph.');
404
394
  }
405
- const recordsById = ((_b = (_d = environment.store)[__typename]) !== null && _b !== void 0 ? _b : (_d[__typename] = {}));
406
- const newStoreRecord = ((_c = recordsById[newStoreRecordId]) !== null && _c !== void 0 ? _c : (recordsById[newStoreRecordId] = {}));
407
- normalizeDataIntoRecord(environment, astNode.selections, networkResponseData, newStoreRecord, { __link: newStoreRecordId, __typename: __typename }, variables, mutableEncounteredIds);
395
+ const link = { __link: newStoreRecordId, __typename };
396
+ const newStoreRecord = (0, optimisticProxy_1.getMutableStoreRecordProxy)(storeLayer, link);
397
+ normalizeDataIntoRecord(environment, storeLayer, astNode.selections, networkResponseData, newStoreRecord, link, variables, mutableEncounteredIds);
408
398
  return newStoreRecordId;
409
399
  }
410
400
  function isScalarOrEmptyArray(data) {
@@ -1 +1 @@
1
- {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/core/check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAEL,mBAAmB,EACnB,SAAS,EAEV,MAAM,uBAAuB,CAAC;AAG/B,MAAM,MAAM,WAAW,GAAG,mBAAmB,GAAG,aAAa,CAAC;AAC9D,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,IAAI,CAAC;AAE/C,eAAO,MAAM,0BAA0B,EAAE,WAA2B,CAAC;AAErE,MAAM,MAAM,YAAY,CAAC,YAAY,IAAI;IACvC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAAC,YAAY,IAAI;IAC/C,WAAW,EAAE,mBAAmB,CAAC;CAClC,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;AAE/B,MAAM,MAAM,WAAW,GACnB;IACE,IAAI,EAAE,YAAY,CAAC;CACpB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEN,wBAAgB,KAAK,CACnB,WAAW,EAAE,mBAAmB,EAChC,gBAAgB,EAAE,qBAAqB,EACvC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,SAAS,GACd,WAAW,CAgBb"}
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/core/check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAEL,mBAAmB,EACnB,SAAS,EAEV,MAAM,uBAAuB,CAAC;AAI/B,MAAM,MAAM,WAAW,GAAG,mBAAmB,GAAG,aAAa,CAAC;AAC9D,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,IAAI,CAAC;AAE/C,eAAO,MAAM,0BAA0B,EAAE,WAA2B,CAAC;AAErE,MAAM,MAAM,YAAY,CAAC,YAAY,IAAI;IACvC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAAC,YAAY,IAAI;IAC/C,WAAW,EAAE,mBAAmB,CAAC;CAClC,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;AAE/B,MAAM,MAAM,WAAW,GACnB;IACE,IAAI,EAAE,YAAY,CAAC;CACpB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEN,wBAAgB,KAAK,CACnB,WAAW,EAAE,mBAAmB,EAChC,gBAAgB,EAAE,qBAAqB,EACvC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,SAAS,GACd,WAAW,CAsBb"}
@@ -5,12 +5,16 @@ exports.check = check;
5
5
  const cache_1 = require("./cache");
6
6
  const IsographEnvironment_1 = require("./IsographEnvironment");
7
7
  const logging_1 = require("./logging");
8
+ const optimisticProxy_1 = require("./optimisticProxy");
8
9
  exports.DEFAULT_SHOULD_FETCH_VALUE = 'IfNecessary';
9
10
  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] = {}));
11
+ const newStoreRecord = (0, optimisticProxy_1.getStoreRecordProxy)(environment.store, root);
12
+ if (newStoreRecord == null) {
13
+ return {
14
+ kind: 'MissingData',
15
+ record: root,
16
+ };
17
+ }
14
18
  const checkResult = checkFromRecord(environment, normalizationAst, variables, newStoreRecord, root);
15
19
  (0, logging_1.logMessage)(environment, () => ({
16
20
  kind: 'EnvironmentCheck',
@@ -19,7 +23,6 @@ function check(environment, normalizationAst, variables, root) {
19
23
  return checkResult;
20
24
  }
21
25
  function checkFromRecord(environment, normalizationAst, variables, record, recordLink) {
22
- var _a, _b;
23
26
  normalizationAstLoop: for (const normalizationAstNode of normalizationAst) {
24
27
  switch (normalizationAstNode.kind) {
25
28
  case 'Scalar': {
@@ -54,7 +57,7 @@ function checkFromRecord(environment, normalizationAst, variables, record, recor
54
57
  throw new Error('Unexpected non-link in the Isograph store. ' +
55
58
  'This is indicative of a bug in Isograph.');
56
59
  }
57
- const linkedRecord = (_a = environment.store[link.__typename]) === null || _a === void 0 ? void 0 : _a[link.__link];
60
+ const linkedRecord = (0, optimisticProxy_1.getStoreRecordProxy)(environment.store, link);
58
61
  if (linkedRecord === undefined) {
59
62
  return {
60
63
  kind: 'MissingData',
@@ -79,7 +82,7 @@ function checkFromRecord(environment, normalizationAst, variables, record, recor
79
82
  throw new Error('Unexpected non-link in the Isograph store. ' +
80
83
  'This is indicative of a bug in Isograph.');
81
84
  }
82
- const linkedRecord = (_b = environment.store[link.__typename]) === null || _b === void 0 ? void 0 : _b[link.__link];
85
+ const linkedRecord = (0, optimisticProxy_1.getStoreRecordProxy)(environment.store, link);
83
86
  if (linkedRecord === undefined) {
84
87
  return {
85
88
  kind: 'MissingData',
@@ -1,5 +1,5 @@
1
1
  import { type NormalizationAst } from './entrypoint';
2
- import { IsographEnvironment, type StoreLink } from './IsographEnvironment';
2
+ import { IsographEnvironment, type StoreLayerData, type StoreLink } from './IsographEnvironment';
3
3
  import { type PromiseWrapper, type PromiseWrapperOk } from './PromiseWrapper';
4
4
  export type RetainedQuery = {
5
5
  readonly normalizationAst: PromiseWrapper<NormalizationAst>;
@@ -13,4 +13,5 @@ export type DidUnretainSomeQuery = boolean;
13
13
  export declare function unretainQuery(environment: IsographEnvironment, retainedQuery: RetainedQuery): DidUnretainSomeQuery;
14
14
  export declare function retainQuery(environment: IsographEnvironment, queryToRetain: RetainedQuery): void;
15
15
  export declare function garbageCollectEnvironment(environment: IsographEnvironment): void;
16
+ export declare function garbageCollectLayer(retainedQueries: RetainedQueryWithNormalizationAst[], dataLayer: StoreLayerData): void;
16
17
  //# sourceMappingURL=garbageCollection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"garbageCollection.d.ts","sourceRoot":"","sources":["../../src/core/garbageCollection.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE5E,OAAO,EAGL,mBAAmB,EAGnB,KAAK,SAAS,EAEf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAC5D,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;CAC1B,CAAC;AAEF,MAAM,WAAW,iCAAkC,SAAQ,aAAa;IACtE,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;CAC/D;AAWD,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAC3C,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,QA2CzE"}
1
+ {"version":3,"file":"garbageCollection.d.ts","sourceRoot":"","sources":["../../src/core/garbageCollection.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE5E,OAAO,EAGL,mBAAmB,EAEnB,KAAK,cAAc,EACnB,KAAK,SAAS,EAEf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAC5D,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;CAC1B,CAAC;AAEF,MAAM,WAAW,iCAAkC,SAAQ,aAAa;IACtE,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;CAC/D;AAWD,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAC3C,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,QAqBzE;AAED,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,iCAAiC,EAAE,EACpD,SAAS,EAAE,cAAc,QA6B1B"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.unretainQuery = unretainQuery;
4
4
  exports.retainQuery = retainQuery;
5
5
  exports.garbageCollectEnvironment = garbageCollectEnvironment;
6
+ exports.garbageCollectLayer = garbageCollectLayer;
6
7
  const cache_1 = require("./cache");
7
8
  const IsographEnvironment_1 = require("./IsographEnvironment");
8
9
  const PromiseWrapper_1 = require("./PromiseWrapper");
@@ -26,7 +27,6 @@ function retainQuery(environment, queryToRetain) {
26
27
  // id + variables
27
28
  }
28
29
  function garbageCollectEnvironment(environment) {
29
- const retainedIds = {};
30
30
  const retainedQueries = [];
31
31
  for (const query of environment.retainedQueries) {
32
32
  if (!isRetainedQueryWithNormalizationAst(query)) {
@@ -40,17 +40,25 @@ function garbageCollectEnvironment(environment) {
40
40
  }
41
41
  retainedQueries.push(query);
42
42
  }
43
+ let node = environment.store;
44
+ while (node !== null) {
45
+ garbageCollectLayer(retainedQueries, node.data);
46
+ node = node.parentStoreLayer;
47
+ }
48
+ }
49
+ function garbageCollectLayer(retainedQueries, dataLayer) {
50
+ const retainedIds = {};
43
51
  for (const query of retainedQueries) {
44
- recordReachableIds(environment.store, query, retainedIds);
52
+ recordReachableIds(dataLayer, query, retainedIds);
45
53
  }
46
- for (const typeName in environment.store) {
47
- const dataById = environment.store[typeName];
54
+ for (const typeName in dataLayer) {
55
+ const dataById = dataLayer[typeName];
48
56
  if (dataById == null)
49
57
  continue;
50
58
  const retainedTypeIds = retainedIds[typeName];
51
59
  // delete all objects
52
60
  if (retainedTypeIds == undefined || retainedTypeIds.size == 0) {
53
- delete environment.store[typeName];
61
+ delete dataLayer[typeName];
54
62
  continue;
55
63
  }
56
64
  for (const dataId in dataById) {
@@ -59,21 +67,21 @@ function garbageCollectEnvironment(environment) {
59
67
  }
60
68
  }
61
69
  if (Object.keys(dataById).length === 0) {
62
- delete environment.store[typeName];
70
+ delete dataLayer[typeName];
63
71
  }
64
72
  }
65
73
  }
66
- function recordReachableIds(store, retainedQuery, mutableRetainedIds) {
74
+ function recordReachableIds(dataLayer, retainedQuery, mutableRetainedIds) {
67
75
  var _a, _b;
68
76
  var _c;
69
- const record = (_a = store[retainedQuery.root.__typename]) === null || _a === void 0 ? void 0 : _a[retainedQuery.root.__link];
77
+ const record = (_a = dataLayer[retainedQuery.root.__typename]) === null || _a === void 0 ? void 0 : _a[retainedQuery.root.__link];
70
78
  const retainedRecordsIds = ((_b = mutableRetainedIds[_c = retainedQuery.root.__typename]) !== null && _b !== void 0 ? _b : (mutableRetainedIds[_c] = new Set()));
71
79
  retainedRecordsIds.add(retainedQuery.root.__link);
72
80
  if (record) {
73
- recordReachableIdsFromRecord(store, record, mutableRetainedIds, retainedQuery.normalizationAst.result.value.selections, retainedQuery.variables);
81
+ recordReachableIdsFromRecord(dataLayer, record, mutableRetainedIds, retainedQuery.normalizationAst.result.value.selections, retainedQuery.variables);
74
82
  }
75
83
  }
76
- function recordReachableIdsFromRecord(store, currentRecord, mutableRetainedIds, selections, variables) {
84
+ function recordReachableIdsFromRecord(dataLayer, currentRecord, mutableRetainedIds, selections, variables) {
77
85
  var _a;
78
86
  for (const selection of selections) {
79
87
  switch (selection.kind) {
@@ -96,14 +104,14 @@ function recordReachableIdsFromRecord(store, currentRecord, mutableRetainedIds,
96
104
  }
97
105
  }
98
106
  let typeStore = selection.concreteType !== null
99
- ? store[selection.concreteType]
107
+ ? dataLayer[selection.concreteType]
100
108
  : null;
101
109
  if (typeStore == null && selection.concreteType !== null) {
102
110
  continue;
103
111
  }
104
112
  for (const nextRecordLink of links) {
105
113
  let __typename = nextRecordLink.__typename;
106
- const resolvedTypeStore = typeStore !== null && typeStore !== void 0 ? typeStore : store[__typename];
114
+ const resolvedTypeStore = typeStore !== null && typeStore !== void 0 ? typeStore : dataLayer[__typename];
107
115
  if (resolvedTypeStore == null) {
108
116
  continue;
109
117
  }
@@ -111,7 +119,7 @@ function recordReachableIdsFromRecord(store, currentRecord, mutableRetainedIds,
111
119
  if (nextRecord != null) {
112
120
  const retainedRecordsIds = ((_a = mutableRetainedIds[__typename]) !== null && _a !== void 0 ? _a : (mutableRetainedIds[__typename] = new Set()));
113
121
  retainedRecordsIds.add(nextRecordLink.__link);
114
- recordReachableIdsFromRecord(store, nextRecord, mutableRetainedIds, selection.selections, variables);
122
+ recordReachableIdsFromRecord(dataLayer, nextRecord, mutableRetainedIds, selection.selections, variables);
115
123
  }
116
124
  }
117
125
  continue;
@@ -3,9 +3,10 @@ import { NetworkResponseObject, type EncounteredIds } from './cache';
3
3
  import { CheckResult } from './check';
4
4
  import { IsographEntrypoint, RefetchQueryNormalizationArtifact, type NormalizationAstNodes } from './entrypoint';
5
5
  import { FragmentReference, Variables } from './FragmentReference';
6
- import { IsographEnvironment, IsographStore, StoreRecord, type StoreLink } from './IsographEnvironment';
6
+ import { IsographEnvironment, StoreRecord, type StoreLink } from './IsographEnvironment';
7
7
  import { ReadDataResult } from './read';
8
8
  import { Arguments } from './util';
9
+ import type { StoreLayer } from './optimisticProxy';
9
10
  export type LogMessage = {
10
11
  kind: 'AboutToNormalize';
11
12
  normalizationAst: NormalizationAstNodes;
@@ -13,7 +14,7 @@ export type LogMessage = {
13
14
  variables: Variables;
14
15
  } | {
15
16
  kind: 'AfterNormalization';
16
- store: IsographStore;
17
+ store: StoreLayer;
17
18
  encounteredIds: EncounteredIds;
18
19
  } | {
19
20
  kind: 'DeepEqualityCheck';
@@ -1 +1 @@
1
- {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/core/logging.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/core/logging.ts"],"names":[],"mappings":"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"}
@@ -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;AAE7D,OAAO,EAAqC,YAAY,EAAE,MAAM,SAAS,CAAC;AAE1E,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,iCAAiC,EACjC,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EAEjB,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAC;AAO7B,OAAO,EAAE,mBAAmB,EAAsB,MAAM,uBAAuB,CAAC;AAEhF,OAAO,EACL,QAAQ,EACR,cAAc,EAGf,MAAM,kBAAkB,CAAC;AAM1B,wBAAgB,uBAAuB,CACrC,cAAc,SAAS,qBAAqB,EAC5C,iBAAiB,EACjB,SAAS,SACL,iCAAiC,GACjC,kBAAkB,CAAC,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,EAC5E,iBAAiB,SAAS,gBAAgB,GAAG,sBAAsB,EAEnE,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC5C,wBAAwB,EAAE,cAAc,CACtC,wBAAwB,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAC5D,GAAG,IAAI,EACR,YAAY,EAAE,YAAY,CAAC,iBAAiB,CAAC,GAAG,IAAI,GACnD,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAsDjD;AAqCD,wBAAgB,kBAAkB,CAChC,cAAc,SAAS,qBAAqB,EAC5C,iBAAiB,EACjB,SAAS,SACL,iCAAiC,GACjC,kBAAkB,CAAC,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,EAC5E,iBAAiB,SAAS,gBAAgB,GAAG,sBAAsB,EAEnE,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC5C,wBAAwB,EAAE,cAAc,CACtC,wBAAwB,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAC5D,GAAG,IAAI,EACR,YAAY,EAAE,YAAY,CAAC,iBAAiB,CAAC,GAAG,IAAI,GACnD,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAqGjD"}
1
+ {"version":3,"file":"makeNetworkRequest.d.ts","sourceRoot":"","sources":["../../src/core/makeNetworkRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,EAAqC,YAAY,EAAE,MAAM,SAAS,CAAC;AAE1E,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,iCAAiC,EACjC,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EAEjB,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAC;AAO7B,OAAO,EAAE,mBAAmB,EAAsB,MAAM,uBAAuB,CAAC;AAGhF,OAAO,EACL,QAAQ,EACR,cAAc,EAGf,MAAM,kBAAkB,CAAC;AAM1B,wBAAgB,uBAAuB,CACrC,cAAc,SAAS,qBAAqB,EAC5C,iBAAiB,EACjB,SAAS,SACL,iCAAiC,GACjC,kBAAkB,CAAC,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,EAC5E,iBAAiB,SAAS,gBAAgB,GAAG,sBAAsB,EAEnE,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC5C,wBAAwB,EAAE,cAAc,CACtC,wBAAwB,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAC5D,GAAG,IAAI,EACR,YAAY,EAAE,YAAY,CAAC,iBAAiB,CAAC,GAAG,IAAI,GACnD,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAsDjD;AAqCD,wBAAgB,kBAAkB,CAChC,cAAc,SAAS,qBAAqB,EAC5C,iBAAiB,EACjB,SAAS,SACL,iCAAiC,GACjC,kBAAkB,CAAC,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,EAC5E,iBAAiB,SAAS,gBAAgB,GAAG,sBAAsB,EAEnE,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC5C,wBAAwB,EAAE,cAAc,CACtC,wBAAwB,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAC5D,GAAG,IAAI,EACR,YAAY,EAAE,YAAY,CAAC,iBAAiB,CAAC,GAAG,IAAI,GACnD,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAiHjD"}
@@ -8,6 +8,7 @@ const componentCache_1 = require("./componentCache");
8
8
  const garbageCollection_1 = require("./garbageCollection");
9
9
  const IsographEnvironment_1 = require("./IsographEnvironment");
10
10
  const logging_1 = require("./logging");
11
+ const optimisticProxy_1 = require("./optimisticProxy");
11
12
  const PromiseWrapper_1 = require("./PromiseWrapper");
12
13
  const read_1 = require("./read");
13
14
  const startUpdate_1 = require("./startUpdate");
@@ -94,7 +95,15 @@ function makeNetworkRequest(environment, artifact, variables, readerWithRefetchQ
94
95
  }
95
96
  const root = { __link: IsographEnvironment_1.ROOT_ID, __typename: artifact.concreteType };
96
97
  if (status.kind === 'Undisposed') {
97
- (0, cache_1.normalizeData)(environment, normalizationAst.selections, (_b = networkResponse.data) !== null && _b !== void 0 ? _b : {}, variables, root);
98
+ const encounteredIds = new Map();
99
+ environment.store = (0, optimisticProxy_1.addNetworkResponseStoreLayer)(environment.store);
100
+ (0, cache_1.normalizeData)(environment, environment.store, normalizationAst.selections, (_b = networkResponse.data) !== null && _b !== void 0 ? _b : {}, variables, root, encounteredIds);
101
+ (0, logging_1.logMessage)(environment, () => ({
102
+ kind: 'AfterNormalization',
103
+ store: environment.store,
104
+ encounteredIds: encounteredIds,
105
+ }));
106
+ (0, cache_1.callSubscriptions)(environment, encounteredIds);
98
107
  }
99
108
  const onComplete = fetchOptions === null || fetchOptions === void 0 ? void 0 : fetchOptions.onComplete;
100
109
  if (onComplete != null) {
@@ -0,0 +1,51 @@
1
+ import type { BaseStoreLayerData, IsographEnvironment, StoreLayerData, StoreLink, StoreRecord } from './IsographEnvironment';
2
+ export declare function getOrInsertRecord(dataLayer: StoreLayerData, link: StoreLink): StoreRecord;
3
+ /**
4
+ * Given the child-most store layer (i.e. environment.store) and a link (identifying a
5
+ * store record), create a proxy object that attempts to read through each successive
6
+ * store layer until a value (i.e. field name) is found. If found, return that value.
7
+ */
8
+ export declare function getStoreRecordProxy(storeLayer: StoreLayer, link: StoreLink): Readonly<StoreRecord> | null | undefined;
9
+ export declare function getMutableStoreRecordProxy(childMostStoreLayer: StoreLayer, link: StoreLink): StoreRecord;
10
+ export type BaseStoreLayer = {
11
+ readonly kind: 'BaseStoreLayer';
12
+ childStoreLayer: OptimisticStoreLayer | null;
13
+ readonly parentStoreLayer: null;
14
+ readonly data: BaseStoreLayerData;
15
+ };
16
+ export type NetworkResponseStoreLayer = {
17
+ readonly kind: 'NetworkResponseStoreLayer';
18
+ childStoreLayer: OptimisticStoreLayer | StartUpdateStoreLayer | null;
19
+ parentStoreLayer: OptimisticStoreLayer | StartUpdateStoreLayer;
20
+ readonly data: StoreLayerData;
21
+ };
22
+ export type DataUpdate<TStoreLayer extends StoreLayer> = (storeLayer: TStoreLayer) => void;
23
+ export type StartUpdateStoreLayer = {
24
+ readonly kind: 'StartUpdateStoreLayer';
25
+ childStoreLayer: OptimisticStoreLayer | NetworkResponseStoreLayer | null;
26
+ parentStoreLayer: OptimisticStoreLayer | NetworkResponseStoreLayer;
27
+ data: StoreLayerData;
28
+ startUpdate: DataUpdate<StartUpdateStoreLayer | BaseStoreLayer>;
29
+ };
30
+ export type OptimisticStoreLayer = {
31
+ readonly kind: 'OptimisticStoreLayer';
32
+ childStoreLayer: OptimisticStoreLayer | StartUpdateStoreLayer | NetworkResponseStoreLayer | null;
33
+ parentStoreLayer: OptimisticStoreLayer | StartUpdateStoreLayer | NetworkResponseStoreLayer | BaseStoreLayer;
34
+ data: StoreLayerData;
35
+ readonly startUpdate: DataUpdate<OptimisticStoreLayer>;
36
+ };
37
+ export declare function addNetworkResponseStoreLayer(parent: StoreLayer): StoreLayerWithData;
38
+ export declare function addStartUpdateStoreLayer(parent: StoreLayer, startUpdate: StartUpdateStoreLayer['startUpdate']): StoreLayer;
39
+ export declare function addOptimisticStoreLayer(parent: StoreLayer, startUpdate: OptimisticStoreLayer['startUpdate']): OptimisticStoreLayer;
40
+ /**
41
+ * Remove an optimistic store layer from the stack, potentially replacing it
42
+ * with a network response.
43
+ *
44
+ * After we do this, we must re-execute all child startUpdate and optimistic
45
+ * layers (since their data may have changed.) We also keep track of changed
46
+ * records, in order to call affected subscriptions.
47
+ */
48
+ export declare function revertOptimisticStoreLayerAndMaybeReplace(environment: IsographEnvironment, optimisticNode: OptimisticStoreLayer, normalizeData: null | ((storeLayer: StoreLayerWithData) => void)): void;
49
+ export type StoreLayer = OptimisticStoreLayer | NetworkResponseStoreLayer | StartUpdateStoreLayer | BaseStoreLayer;
50
+ export type StoreLayerWithData = BaseStoreLayer | NetworkResponseStoreLayer;
51
+ //# sourceMappingURL=optimisticProxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimisticProxy.d.ts","sourceRoot":"","sources":["../../src/core/optimisticProxy.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,SAAS,EACT,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAE/B,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,SAAS,GACd,WAAW,CAGb;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,SAAS,GACd,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,GAAG,SAAS,CAc1C;AAED,wBAAgB,0BAA0B,CACxC,mBAAmB,EAAE,UAAU,EAC/B,IAAI,EAAE,SAAS,GACd,WAAW,CAgDb;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,eAAe,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,IAAI,EAAE,2BAA2B,CAAC;IAC3C,eAAe,EAAE,oBAAoB,GAAG,qBAAqB,GAAG,IAAI,CAAC;IACrE,gBAAgB,EAAE,oBAAoB,GAAG,qBAAqB,CAAC;IAC/D,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,WAAW,SAAS,UAAU,IAAI,CACvD,UAAU,EAAE,WAAW,KACpB,IAAI,CAAC;AAEV,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;IACvC,eAAe,EAAE,oBAAoB,GAAG,yBAAyB,GAAG,IAAI,CAAC;IACzE,gBAAgB,EAAE,oBAAoB,GAAG,yBAAyB,CAAC;IACnE,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW,EAAE,UAAU,CAAC,qBAAqB,GAAG,cAAc,CAAC,CAAC;CACjE,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,eAAe,EACX,oBAAoB,GACpB,qBAAqB,GACrB,yBAAyB,GACzB,IAAI,CAAC;IACT,gBAAgB,EACZ,oBAAoB,GACpB,qBAAqB,GACrB,yBAAyB,GACzB,cAAc,CAAC;IACnB,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,oBAAoB,CAAC,CAAC;CACxD,CAAC;AAEF,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,UAAU,GACjB,kBAAkB,CAuBpB;AAoBD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,qBAAqB,CAAC,aAAa,CAAC,GAChD,UAAU,CAqCZ;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,oBAAoB,CAAC,aAAa,CAAC,GAC/C,oBAAoB,CAwBtB;AAmGD;;;;;;;GAOG;AACH,wBAAgB,yCAAyC,CACvD,WAAW,EAAE,mBAAmB,EAChC,cAAc,EAAE,oBAAoB,EACpC,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,kBAAkB,KAAK,IAAI,CAAC,GAC/D,IAAI,CAgGN;AAED,MAAM,MAAM,UAAU,GAClB,oBAAoB,GACpB,yBAAyB,GACzB,qBAAqB,GACrB,cAAc,CAAC;AAEnB,MAAM,MAAM,kBAAkB,GAAG,cAAc,GAAG,yBAAyB,CAAC"}