@isograph/react 0.5.0 → 0.5.1
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/.turbo/turbo-compile-libs.log +9 -2
- package/dist/_virtual/rolldown_runtime.js +25 -0
- package/dist/core/FragmentReference.d.mts +38 -0
- package/dist/core/FragmentReference.d.mts.map +1 -0
- package/dist/core/FragmentReference.d.ts +31 -29
- package/dist/core/FragmentReference.d.ts.map +1 -1
- package/dist/core/FragmentReference.js +7 -5
- package/dist/core/FragmentReference.mjs +10 -0
- package/dist/core/FragmentReference.mjs.map +1 -0
- package/dist/core/IsographEnvironment.d.mts +89 -0
- package/dist/core/IsographEnvironment.d.mts.map +1 -0
- package/dist/core/IsographEnvironment.d.ts +76 -79
- package/dist/core/IsographEnvironment.d.ts.map +1 -1
- package/dist/core/IsographEnvironment.js +60 -82
- package/dist/core/IsographEnvironment.mjs +67 -0
- package/dist/core/IsographEnvironment.mjs.map +1 -0
- package/dist/core/PromiseWrapper.d.mts +36 -0
- package/dist/core/PromiseWrapper.d.mts.map +1 -0
- package/dist/core/PromiseWrapper.d.ts +26 -23
- package/dist/core/PromiseWrapper.d.ts.map +1 -1
- package/dist/core/PromiseWrapper.js +45 -43
- package/dist/core/PromiseWrapper.mjs +49 -0
- package/dist/core/PromiseWrapper.mjs.map +1 -0
- package/dist/core/areEqualWithDeepComparison.js +56 -108
- package/dist/core/areEqualWithDeepComparison.mjs +62 -0
- package/dist/core/areEqualWithDeepComparison.mjs.map +1 -0
- package/dist/core/brand.d.mts +19 -0
- package/dist/core/brand.d.mts.map +1 -0
- package/dist/core/brand.d.ts +6 -6
- package/dist/core/brand.d.ts.map +1 -1
- package/dist/core/cache.d.mts +20 -0
- package/dist/core/cache.d.mts.map +1 -0
- package/dist/core/cache.d.ts +18 -37
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/cache.js +203 -537
- package/dist/core/cache.mjs +237 -0
- package/dist/core/cache.mjs.map +1 -0
- package/dist/core/check.d.mts +28 -0
- package/dist/core/check.d.mts.map +1 -0
- package/dist/core/check.d.ts +21 -19
- package/dist/core/check.d.ts.map +1 -1
- package/dist/core/check.js +80 -127
- package/dist/core/check.mjs +84 -0
- package/dist/core/check.mjs.map +1 -0
- package/dist/core/componentCache.js +9 -35
- package/dist/core/componentCache.mjs +12 -0
- package/dist/core/componentCache.mjs.map +1 -0
- package/dist/core/entrypoint.d.mts +99 -0
- package/dist/core/entrypoint.d.mts.map +1 -0
- package/dist/core/entrypoint.d.ts +83 -78
- package/dist/core/entrypoint.d.ts.map +1 -1
- package/dist/core/entrypoint.js +6 -5
- package/dist/core/entrypoint.mjs +8 -0
- package/dist/core/entrypoint.mjs.map +1 -0
- package/dist/core/garbageCollection.d.mts +18 -0
- package/dist/core/garbageCollection.d.mts.map +1 -0
- package/dist/core/garbageCollection.d.ts +15 -16
- package/dist/core/garbageCollection.d.ts.map +1 -1
- package/dist/core/garbageCollection.js +76 -115
- package/dist/core/garbageCollection.mjs +89 -0
- package/dist/core/garbageCollection.mjs.map +1 -0
- package/dist/core/getOrCreateCacheForArtifact.js +37 -0
- package/dist/core/getOrCreateCacheForArtifact.mjs +38 -0
- package/dist/core/getOrCreateCacheForArtifact.mjs.map +1 -0
- package/dist/core/logging.d.mts +95 -0
- package/dist/core/logging.d.mts.map +1 -0
- package/dist/core/logging.d.ts +66 -61
- package/dist/core/logging.d.ts.map +1 -1
- package/dist/core/logging.js +17 -18
- package/dist/core/logging.mjs +20 -0
- package/dist/core/logging.mjs.map +1 -0
- package/dist/core/makeNetworkRequest.d.mts +13 -0
- package/dist/core/makeNetworkRequest.d.mts.map +1 -0
- package/dist/core/makeNetworkRequest.d.ts +12 -10
- package/dist/core/makeNetworkRequest.d.ts.map +1 -1
- package/dist/core/makeNetworkRequest.js +180 -264
- package/dist/core/makeNetworkRequest.mjs +195 -0
- package/dist/core/makeNetworkRequest.mjs.map +1 -0
- package/dist/core/optimisticProxy.d.mts +43 -0
- package/dist/core/optimisticProxy.d.mts.map +1 -0
- package/dist/core/optimisticProxy.d.ts +37 -53
- package/dist/core/optimisticProxy.d.ts.map +1 -1
- package/dist/core/optimisticProxy.js +245 -371
- package/dist/core/optimisticProxy.mjs +268 -0
- package/dist/core/optimisticProxy.mjs.map +1 -0
- package/dist/core/read.d.mts +29 -0
- package/dist/core/read.d.mts.map +1 -0
- package/dist/core/read.d.ts +23 -28
- package/dist/core/read.d.ts.map +1 -1
- package/dist/core/read.js +435 -650
- package/dist/core/read.mjs +456 -0
- package/dist/core/read.mjs.map +1 -0
- package/dist/core/reader.d.mts +89 -0
- package/dist/core/reader.d.mts.map +1 -0
- package/dist/core/reader.d.ts +78 -77
- package/dist/core/reader.d.ts.map +1 -1
- package/dist/core/startUpdate.js +115 -152
- package/dist/core/startUpdate.mjs +125 -0
- package/dist/core/startUpdate.mjs.map +1 -0
- package/dist/core/subscribe.d.mts +12 -0
- package/dist/core/subscribe.d.mts.map +1 -0
- package/dist/core/subscribe.d.ts +12 -0
- package/dist/core/subscribe.d.ts.map +1 -0
- package/dist/core/subscribe.js +79 -0
- package/dist/core/subscribe.mjs +79 -0
- package/dist/core/subscribe.mjs.map +1 -0
- package/dist/core/util.d.mts +27 -0
- package/dist/core/util.d.mts.map +1 -0
- package/dist/core/util.d.ts +21 -17
- package/dist/core/util.d.ts.map +1 -1
- package/dist/core/util.js +22 -2
- package/dist/core/util.mjs +21 -0
- package/dist/core/util.mjs.map +1 -0
- package/dist/core/writeData.d.mts +11 -0
- package/dist/core/writeData.d.mts.map +1 -0
- package/dist/core/writeData.d.ts +11 -0
- package/dist/core/writeData.d.ts.map +1 -0
- package/dist/core/writeData.js +41 -0
- package/dist/core/writeData.mjs +42 -0
- package/dist/core/writeData.mjs.map +1 -0
- package/dist/index.d.mts +32 -0
- package/dist/index.d.ts +32 -29
- package/dist/index.js +70 -69
- package/dist/index.mjs +31 -0
- package/dist/loadable-hooks/useClientSideDefer.d.mts +12 -0
- package/dist/loadable-hooks/useClientSideDefer.d.mts.map +1 -0
- package/dist/loadable-hooks/useClientSideDefer.d.ts +9 -12
- package/dist/loadable-hooks/useClientSideDefer.d.ts.map +1 -1
- package/dist/loadable-hooks/useClientSideDefer.js +13 -44
- package/dist/loadable-hooks/useClientSideDefer.mjs +14 -0
- package/dist/loadable-hooks/useClientSideDefer.mjs.map +1 -0
- package/dist/loadable-hooks/useConnectionSpecPagination.d.mts +33 -0
- package/dist/loadable-hooks/useConnectionSpecPagination.d.mts.map +1 -0
- package/dist/loadable-hooks/useConnectionSpecPagination.d.ts +26 -22
- package/dist/loadable-hooks/useConnectionSpecPagination.d.ts.map +1 -1
- package/dist/loadable-hooks/useConnectionSpecPagination.js +133 -172
- package/dist/loadable-hooks/useConnectionSpecPagination.mjs +134 -0
- package/dist/loadable-hooks/useConnectionSpecPagination.mjs.map +1 -0
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.mts +8 -0
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.mts.map +1 -0
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts +6 -3
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts.map +1 -1
- package/dist/loadable-hooks/useImperativeExposedMutationField.js +9 -12
- package/dist/loadable-hooks/useImperativeExposedMutationField.mjs +11 -0
- package/dist/loadable-hooks/useImperativeExposedMutationField.mjs.map +1 -0
- package/dist/loadable-hooks/useImperativeLoadableField.d.mts +19 -0
- package/dist/loadable-hooks/useImperativeLoadableField.d.mts.map +1 -0
- package/dist/loadable-hooks/useImperativeLoadableField.d.ts +15 -11
- package/dist/loadable-hooks/useImperativeLoadableField.d.ts.map +1 -1
- package/dist/loadable-hooks/useImperativeLoadableField.js +16 -12
- package/dist/loadable-hooks/useImperativeLoadableField.mjs +17 -0
- package/dist/loadable-hooks/useImperativeLoadableField.mjs.map +1 -0
- package/dist/loadable-hooks/useSkipLimitPagination.d.mts +24 -0
- package/dist/loadable-hooks/useSkipLimitPagination.d.mts.map +1 -0
- package/dist/loadable-hooks/useSkipLimitPagination.d.ts +19 -15
- package/dist/loadable-hooks/useSkipLimitPagination.d.ts.map +1 -1
- package/dist/loadable-hooks/useSkipLimitPagination.js +118 -160
- package/dist/loadable-hooks/useSkipLimitPagination.mjs +119 -0
- package/dist/loadable-hooks/useSkipLimitPagination.mjs.map +1 -0
- package/dist/react/FragmentReader.d.mts +18 -0
- package/dist/react/FragmentReader.d.mts.map +1 -0
- package/dist/react/FragmentReader.d.ts +16 -8
- package/dist/react/FragmentReader.d.ts.map +1 -1
- package/dist/react/FragmentReader.js +8 -7
- package/dist/react/FragmentReader.mjs +10 -0
- package/dist/react/FragmentReader.mjs.map +1 -0
- package/dist/react/FragmentRenderer.d.mts +20 -0
- package/dist/react/FragmentRenderer.d.mts.map +1 -0
- package/dist/react/FragmentRenderer.d.ts +18 -14
- package/dist/react/FragmentRenderer.d.ts.map +1 -1
- package/dist/react/FragmentRenderer.js +11 -33
- package/dist/react/FragmentRenderer.mjs +12 -0
- package/dist/react/FragmentRenderer.mjs.map +1 -0
- package/dist/react/IsographEnvironmentProvider.d.mts +17 -0
- package/dist/react/IsographEnvironmentProvider.d.mts.map +1 -0
- package/dist/react/IsographEnvironmentProvider.d.ts +15 -9
- package/dist/react/IsographEnvironmentProvider.d.ts.map +1 -1
- package/dist/react/IsographEnvironmentProvider.js +15 -39
- package/dist/react/IsographEnvironmentProvider.mjs +17 -0
- package/dist/react/IsographEnvironmentProvider.mjs.map +1 -0
- package/dist/react/LoadableFieldReader.d.mts +21 -0
- package/dist/react/LoadableFieldReader.d.mts.map +1 -0
- package/dist/react/LoadableFieldReader.d.ts +15 -12
- package/dist/react/LoadableFieldReader.d.ts.map +1 -1
- package/dist/react/LoadableFieldReader.js +13 -47
- package/dist/react/LoadableFieldReader.mjs +14 -0
- package/dist/react/LoadableFieldReader.mjs.map +1 -0
- package/dist/react/LoadableFieldRenderer.d.mts +22 -0
- package/dist/react/LoadableFieldRenderer.d.mts.map +1 -0
- package/dist/react/LoadableFieldRenderer.d.ts +16 -13
- package/dist/react/LoadableFieldRenderer.d.ts.map +1 -1
- package/dist/react/LoadableFieldRenderer.js +13 -70
- package/dist/react/LoadableFieldRenderer.mjs +14 -0
- package/dist/react/LoadableFieldRenderer.mjs.map +1 -0
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.mts +18 -0
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.mts.map +1 -0
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.ts +11 -3
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.ts.map +1 -1
- package/dist/react/RenderAfterCommit__DO_NOT_USE.js +17 -13
- package/dist/react/RenderAfterCommit__DO_NOT_USE.mjs +18 -0
- package/dist/react/RenderAfterCommit__DO_NOT_USE.mjs.map +1 -0
- package/dist/react/createIsographEnvironment.d.mts +9 -0
- package/dist/react/createIsographEnvironment.d.mts.map +1 -0
- package/dist/react/createIsographEnvironment.d.ts +8 -0
- package/dist/react/createIsographEnvironment.d.ts.map +1 -0
- package/dist/react/createIsographEnvironment.js +10 -0
- package/dist/react/createIsographEnvironment.mjs +11 -0
- package/dist/react/createIsographEnvironment.mjs.map +1 -0
- package/dist/react/maybeUnwrapNetworkRequest.js +11 -0
- package/dist/react/maybeUnwrapNetworkRequest.mjs +12 -0
- package/dist/react/maybeUnwrapNetworkRequest.mjs.map +1 -0
- package/dist/react/useImperativeReference.d.mts +15 -0
- package/dist/react/useImperativeReference.d.mts.map +1 -0
- package/dist/react/useImperativeReference.d.ts +13 -8
- package/dist/react/useImperativeReference.d.ts.map +1 -1
- package/dist/react/useImperativeReference.js +34 -30
- package/dist/react/useImperativeReference.mjs +35 -0
- package/dist/react/useImperativeReference.mjs.map +1 -0
- package/dist/react/useLazyReference.d.mts +13 -0
- package/dist/react/useLazyReference.d.mts.map +1 -0
- package/dist/react/useLazyReference.d.ts +11 -6
- package/dist/react/useLazyReference.d.ts.map +1 -1
- package/dist/react/useLazyReference.js +17 -40
- package/dist/react/useLazyReference.mjs +18 -0
- package/dist/react/useLazyReference.mjs.map +1 -0
- package/dist/react/useReadAndSubscribe.d.mts +20 -0
- package/dist/react/useReadAndSubscribe.d.mts.map +1 -0
- package/dist/react/useReadAndSubscribe.d.ts +14 -9
- package/dist/react/useReadAndSubscribe.d.ts.map +1 -1
- package/dist/react/useReadAndSubscribe.js +57 -37
- package/dist/react/useReadAndSubscribe.mjs +59 -0
- package/dist/react/useReadAndSubscribe.mjs.map +1 -0
- package/dist/react/useRerenderOnChange.d.mts +12 -0
- package/dist/react/useRerenderOnChange.d.mts.map +1 -0
- package/dist/react/useRerenderOnChange.d.ts +10 -6
- package/dist/react/useRerenderOnChange.d.ts.map +1 -1
- package/dist/react/useRerenderOnChange.js +16 -20
- package/dist/react/useRerenderOnChange.mjs +17 -0
- package/dist/react/useRerenderOnChange.mjs.map +1 -0
- package/dist/react/useResult.d.mts +8 -0
- package/dist/react/useResult.d.mts.map +1 -0
- package/dist/react/useResult.d.ts +7 -5
- package/dist/react/useResult.d.ts.map +1 -1
- package/dist/react/useResult.js +27 -40
- package/dist/react/useResult.mjs +30 -0
- package/dist/react/useResult.mjs.map +1 -0
- package/package.json +17 -9
- package/src/core/FragmentReference.ts +3 -3
- package/src/core/IsographEnvironment.ts +29 -16
- package/src/core/areEqualWithDeepComparison.ts +2 -18
- package/src/core/cache.ts +18 -383
- package/src/core/check.ts +9 -16
- package/src/core/componentCache.ts +10 -47
- package/src/core/entrypoint.ts +15 -3
- package/src/core/garbageCollection.ts +21 -10
- package/src/core/getOrCreateCacheForArtifact.ts +86 -0
- package/src/core/logging.ts +10 -10
- package/src/core/makeNetworkRequest.ts +16 -23
- package/src/core/optimisticProxy.ts +28 -47
- package/src/core/read.ts +21 -38
- package/src/core/reader.ts +8 -11
- package/src/core/startUpdate.ts +2 -6
- package/src/core/subscribe.ts +189 -0
- package/src/core/util.ts +26 -0
- package/src/core/writeData.ts +79 -0
- package/src/index.ts +5 -4
- package/src/loadable-hooks/useClientSideDefer.ts +4 -4
- package/src/loadable-hooks/useConnectionSpecPagination.ts +20 -18
- package/src/loadable-hooks/useImperativeLoadableField.ts +3 -3
- package/src/loadable-hooks/useSkipLimitPagination.ts +20 -18
- package/src/react/IsographEnvironmentProvider.tsx +2 -1
- package/src/react/LoadableFieldReader.tsx +2 -4
- package/src/react/LoadableFieldRenderer.tsx +2 -4
- package/src/react/createIsographEnvironment.ts +23 -0
- package/src/react/maybeUnwrapNetworkRequest.ts +17 -0
- package/src/react/useImperativeReference.ts +5 -4
- package/src/react/useLazyReference.ts +7 -8
- package/src/react/useReadAndSubscribe.ts +53 -5
- package/src/react/useRerenderOnChange.ts +3 -3
- package/src/react/useResult.ts +6 -24
- package/src/tests/__isograph/Economist/__link/output_type.ts +2 -0
- package/src/tests/garbageCollection.test.ts +3 -6
- package/src/tests/meNameSuccessor.ts +1 -1
- package/src/tests/nodeQuery.ts +2 -2
- package/src/tests/normalizeData.test.ts +5 -3
- package/src/tests/optimisticProxy.test.ts +7 -5
- package/src/tests/startUpdate.test.ts +5 -7
- package/vitest.config.ts +5 -0
- package/dist/core/areEqualWithDeepComparison.d.ts +0 -3
- package/dist/core/areEqualWithDeepComparison.d.ts.map +0 -1
- package/dist/core/brand.js +0 -2
- package/dist/core/componentCache.d.ts +0 -5
- package/dist/core/componentCache.d.ts.map +0 -1
- package/dist/core/reader.js +0 -2
- package/dist/core/startUpdate.d.ts +0 -9
- package/dist/core/startUpdate.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
package/src/core/check.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { getParentRecordKey } from './cache';
|
|
2
|
-
import { NormalizationAstNodes } from './entrypoint';
|
|
3
|
-
import { Variables } from './FragmentReference';
|
|
4
|
-
import {
|
|
5
|
-
getLink,
|
|
2
|
+
import type { NormalizationAstNodes } from './entrypoint';
|
|
3
|
+
import type { Variables } from './FragmentReference';
|
|
4
|
+
import type {
|
|
6
5
|
IsographEnvironment,
|
|
7
6
|
StoreLink,
|
|
8
7
|
StoreRecord,
|
|
9
8
|
} from './IsographEnvironment';
|
|
9
|
+
import { getLink } from './IsographEnvironment';
|
|
10
10
|
import { logMessage } from './logging';
|
|
11
11
|
import { getStoreRecordProxy } from './optimisticProxy';
|
|
12
12
|
|
|
@@ -108,12 +108,12 @@ function checkFromRecord(
|
|
|
108
108
|
kind: 'MissingData',
|
|
109
109
|
record: recordLink,
|
|
110
110
|
};
|
|
111
|
-
} else if (linkedValue
|
|
111
|
+
} else if (linkedValue == null) {
|
|
112
112
|
continue;
|
|
113
113
|
} else if (Array.isArray(linkedValue)) {
|
|
114
114
|
arrayItemsLoop: for (const item of linkedValue) {
|
|
115
115
|
const link = getLink(item);
|
|
116
|
-
if (link
|
|
116
|
+
if (link == null) {
|
|
117
117
|
throw new Error(
|
|
118
118
|
'Unexpected non-link in the Isograph store. ' +
|
|
119
119
|
'This is indicative of a bug in Isograph.',
|
|
@@ -127,7 +127,7 @@ function checkFromRecord(
|
|
|
127
127
|
kind: 'MissingData',
|
|
128
128
|
record: link,
|
|
129
129
|
};
|
|
130
|
-
} else if (linkedRecord
|
|
130
|
+
} else if (linkedRecord == null) {
|
|
131
131
|
continue arrayItemsLoop;
|
|
132
132
|
} else {
|
|
133
133
|
// TODO in __DEV__ assert linkedRecord is an object
|
|
@@ -146,7 +146,7 @@ function checkFromRecord(
|
|
|
146
146
|
}
|
|
147
147
|
} else {
|
|
148
148
|
const link = getLink(linkedValue);
|
|
149
|
-
if (link
|
|
149
|
+
if (link == null) {
|
|
150
150
|
throw new Error(
|
|
151
151
|
'Unexpected non-link in the Isograph store. ' +
|
|
152
152
|
'This is indicative of a bug in Isograph.',
|
|
@@ -160,7 +160,7 @@ function checkFromRecord(
|
|
|
160
160
|
kind: 'MissingData',
|
|
161
161
|
record: link,
|
|
162
162
|
};
|
|
163
|
-
} else if (linkedRecord
|
|
163
|
+
} else if (linkedRecord == null) {
|
|
164
164
|
continue normalizationAstLoop;
|
|
165
165
|
} else {
|
|
166
166
|
// TODO in __DEV__ assert linkedRecord is an object
|
|
@@ -206,13 +206,6 @@ function checkFromRecord(
|
|
|
206
206
|
|
|
207
207
|
continue normalizationAstLoop;
|
|
208
208
|
}
|
|
209
|
-
default: {
|
|
210
|
-
let _: never = normalizationAstNode;
|
|
211
|
-
_;
|
|
212
|
-
throw new Error(
|
|
213
|
-
'Unexpected case. This is indicative of a bug in Isograph.',
|
|
214
|
-
);
|
|
215
|
-
}
|
|
216
209
|
}
|
|
217
210
|
}
|
|
218
211
|
|
|
@@ -1,13 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
stableIdForFragmentReference,
|
|
6
|
-
} from './FragmentReference';
|
|
7
|
-
import { IsographEnvironment } from './IsographEnvironment';
|
|
8
|
-
import { logMessage } from './logging';
|
|
9
|
-
import { readPromise } from './PromiseWrapper';
|
|
10
|
-
import { NetworkRequestReaderOptions } from './read';
|
|
1
|
+
import type { FragmentReference } from './FragmentReference';
|
|
2
|
+
import { stableIdForFragmentReference } from './FragmentReference';
|
|
3
|
+
import type { IsographEnvironment } from './IsographEnvironment';
|
|
4
|
+
import type { NetworkRequestReaderOptions } from './read';
|
|
11
5
|
import { createStartUpdate } from './startUpdate';
|
|
12
6
|
|
|
13
7
|
export function getOrCreateCachedComponent(
|
|
@@ -24,41 +18,10 @@ export function getOrCreateCachedComponent(
|
|
|
24
18
|
|
|
25
19
|
return (environment.componentCache[
|
|
26
20
|
stableIdForFragmentReference(fragmentReference)
|
|
27
|
-
] ??= (
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const readerWithRefetchQueries = readPromise(
|
|
34
|
-
fragmentReference.readerWithRefetchQueries,
|
|
35
|
-
);
|
|
36
|
-
|
|
37
|
-
const data = useReadAndSubscribe(
|
|
38
|
-
fragmentReference,
|
|
39
|
-
networkRequestOptions,
|
|
40
|
-
readerWithRefetchQueries.readerArtifact.readerAst,
|
|
41
|
-
);
|
|
42
|
-
|
|
43
|
-
logMessage(environment, () => ({
|
|
44
|
-
kind: 'ComponentRerendered',
|
|
45
|
-
componentName: fragmentReference.fieldName,
|
|
46
|
-
rootLink: fragmentReference.root,
|
|
47
|
-
}));
|
|
48
|
-
|
|
49
|
-
return readerWithRefetchQueries.readerArtifact.resolver(
|
|
50
|
-
{
|
|
51
|
-
data,
|
|
52
|
-
parameters: fragmentReference.variables,
|
|
53
|
-
startUpdate: readerWithRefetchQueries.readerArtifact.hasUpdatable
|
|
54
|
-
? startUpdate
|
|
55
|
-
: undefined,
|
|
56
|
-
},
|
|
57
|
-
additionalRuntimeProps,
|
|
58
|
-
);
|
|
59
|
-
}
|
|
60
|
-
const idString = `(type: ${fragmentReference.root.__typename}, id: ${fragmentReference.root.__link})`;
|
|
61
|
-
Component.displayName = `${fragmentReference.fieldName} ${idString} @component`;
|
|
62
|
-
return Component;
|
|
63
|
-
})());
|
|
21
|
+
] ??= environment.componentFunction(
|
|
22
|
+
environment,
|
|
23
|
+
fragmentReference,
|
|
24
|
+
networkRequestOptions,
|
|
25
|
+
startUpdate,
|
|
26
|
+
));
|
|
64
27
|
}
|
package/src/core/entrypoint.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import type { Contravariant, PhantomData } from './brand';
|
|
2
2
|
import type { NetworkResponseObject } from './cache';
|
|
3
|
-
import type {
|
|
3
|
+
import type {
|
|
4
|
+
FragmentReference,
|
|
5
|
+
UnknownTReadFromStore,
|
|
6
|
+
} from './FragmentReference';
|
|
4
7
|
import type { ComponentOrFieldName, TypeName } from './IsographEnvironment';
|
|
5
|
-
import { TopLevelReaderArtifact } from './reader';
|
|
6
|
-
import { Arguments } from './util';
|
|
8
|
+
import type { TopLevelReaderArtifact } from './reader';
|
|
9
|
+
import type { Arguments } from './util';
|
|
7
10
|
|
|
8
11
|
export type ReaderWithRefetchQueries<
|
|
9
12
|
TReadFromStore extends UnknownTReadFromStore,
|
|
@@ -75,6 +78,13 @@ export type IsographEntrypoint<
|
|
|
75
78
|
readonly '~TRawResponseType'?: PhantomData<Contravariant<TRawResponseType>>;
|
|
76
79
|
};
|
|
77
80
|
|
|
81
|
+
export type FragmentReferenceOfEntrypoint<
|
|
82
|
+
TEntrypoint extends IsographEntrypoint<any, any, any, any>,
|
|
83
|
+
> = FragmentReference<
|
|
84
|
+
ExtractReadFromStore<TEntrypoint>,
|
|
85
|
+
ExtractClientFieldValue<TEntrypoint>
|
|
86
|
+
>;
|
|
87
|
+
|
|
78
88
|
export type IsographEntrypointLoader<
|
|
79
89
|
TReadFromStore extends UnknownTReadFromStore,
|
|
80
90
|
TClientFieldValue,
|
|
@@ -173,6 +183,8 @@ export function assertIsEntrypoint<
|
|
|
173
183
|
|
|
174
184
|
export type ExtractReadFromStore<Type> =
|
|
175
185
|
Type extends IsographEntrypoint<infer X, any, any, any> ? X : never;
|
|
186
|
+
export type ExtractClientFieldValue<Type> =
|
|
187
|
+
Type extends IsographEntrypoint<any, infer X, any, any> ? X : never;
|
|
176
188
|
export type ExtractRawResponseType<Type> =
|
|
177
189
|
Type extends IsographEntrypoint<any, any, any, infer X> ? X : never;
|
|
178
190
|
export type ExtractResolverResult<Type> =
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { getParentRecordKey } from './cache';
|
|
2
|
-
import { NormalizationAstNodes,
|
|
3
|
-
import { Variables } from './FragmentReference';
|
|
1
|
+
import { getParentRecordKey, TYPENAME_FIELD_NAME } from './cache';
|
|
2
|
+
import type { NormalizationAstNodes, NormalizationAst } from './entrypoint';
|
|
3
|
+
import type { Variables } from './FragmentReference';
|
|
4
4
|
import {
|
|
5
5
|
assertLink,
|
|
6
|
-
DataId,
|
|
7
|
-
IsographEnvironment,
|
|
8
|
-
StoreRecord,
|
|
6
|
+
type DataId,
|
|
7
|
+
type IsographEnvironment,
|
|
8
|
+
type StoreRecord,
|
|
9
9
|
type StoreLayerData,
|
|
10
10
|
type StoreLink,
|
|
11
11
|
type TypeName,
|
|
@@ -101,7 +101,7 @@ export function garbageCollectBaseStoreLayer(
|
|
|
101
101
|
const retainedTypeIds = retainedIds[typeName];
|
|
102
102
|
|
|
103
103
|
// delete all objects
|
|
104
|
-
if (retainedTypeIds
|
|
104
|
+
if (retainedTypeIds === undefined || retainedTypeIds.size === 0) {
|
|
105
105
|
delete baseStoreLayer.data[typeName];
|
|
106
106
|
continue;
|
|
107
107
|
}
|
|
@@ -135,7 +135,7 @@ function recordReachableIds(
|
|
|
135
135
|
] ??= new Set());
|
|
136
136
|
retainedRecordsIds.add(retainedQuery.root.__link);
|
|
137
137
|
|
|
138
|
-
if (record) {
|
|
138
|
+
if (record != null) {
|
|
139
139
|
recordReachableIdsFromRecord(
|
|
140
140
|
dataLayer,
|
|
141
141
|
record,
|
|
@@ -155,6 +155,17 @@ function recordReachableIdsFromRecord(
|
|
|
155
155
|
) {
|
|
156
156
|
for (const selection of selections) {
|
|
157
157
|
switch (selection.kind) {
|
|
158
|
+
case 'InlineFragment':
|
|
159
|
+
if (currentRecord[TYPENAME_FIELD_NAME] === selection.type) {
|
|
160
|
+
recordReachableIdsFromRecord(
|
|
161
|
+
dataLayer,
|
|
162
|
+
currentRecord,
|
|
163
|
+
mutableRetainedIds,
|
|
164
|
+
selection.selections,
|
|
165
|
+
variables,
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
continue;
|
|
158
169
|
case 'Linked':
|
|
159
170
|
const linkKey = getParentRecordKey(selection, variables ?? {});
|
|
160
171
|
const linkedFieldOrFields = currentRecord[linkKey];
|
|
@@ -175,11 +186,11 @@ function recordReachableIdsFromRecord(
|
|
|
175
186
|
}
|
|
176
187
|
|
|
177
188
|
let typeStore =
|
|
178
|
-
selection.concreteType
|
|
189
|
+
selection.concreteType != null
|
|
179
190
|
? dataLayer[selection.concreteType]
|
|
180
191
|
: null;
|
|
181
192
|
|
|
182
|
-
if (typeStore == null && selection.concreteType
|
|
193
|
+
if (typeStore == null && selection.concreteType != null) {
|
|
183
194
|
continue;
|
|
184
195
|
}
|
|
185
196
|
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { ItemCleanupPair } from '@isograph/isograph-disposable-types/dist';
|
|
2
|
+
import type { ParentCache } from '@isograph/isograph-react-disposable-state/dist';
|
|
3
|
+
import {
|
|
4
|
+
type NetworkResponseObject,
|
|
5
|
+
getOrCreateItemInSuspenseCache,
|
|
6
|
+
} from './cache';
|
|
7
|
+
import type { FetchOptions } from './check';
|
|
8
|
+
import type {
|
|
9
|
+
IsographEntrypoint,
|
|
10
|
+
NormalizationAst,
|
|
11
|
+
NormalizationAstLoader,
|
|
12
|
+
} from './entrypoint';
|
|
13
|
+
import type {
|
|
14
|
+
ExtractParameters,
|
|
15
|
+
FragmentReference,
|
|
16
|
+
UnknownTReadFromStore,
|
|
17
|
+
} from './FragmentReference';
|
|
18
|
+
import {
|
|
19
|
+
type IsographEnvironment,
|
|
20
|
+
getOrLoadReaderWithRefetchQueries,
|
|
21
|
+
ROOT_ID,
|
|
22
|
+
} from './IsographEnvironment';
|
|
23
|
+
import { maybeMakeNetworkRequest } from './makeNetworkRequest';
|
|
24
|
+
import { stableCopy } from './util';
|
|
25
|
+
|
|
26
|
+
export function getOrCreateCacheForArtifact<
|
|
27
|
+
TReadFromStore extends UnknownTReadFromStore,
|
|
28
|
+
TClientFieldValue,
|
|
29
|
+
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
|
30
|
+
TRawResponseType extends NetworkResponseObject,
|
|
31
|
+
>(
|
|
32
|
+
environment: IsographEnvironment,
|
|
33
|
+
entrypoint: IsographEntrypoint<
|
|
34
|
+
TReadFromStore,
|
|
35
|
+
TClientFieldValue,
|
|
36
|
+
TNormalizationAst,
|
|
37
|
+
TRawResponseType
|
|
38
|
+
>,
|
|
39
|
+
variables: ExtractParameters<TReadFromStore>,
|
|
40
|
+
fetchOptions?: FetchOptions<TClientFieldValue, TRawResponseType>,
|
|
41
|
+
): ParentCache<FragmentReference<TReadFromStore, TClientFieldValue>> {
|
|
42
|
+
let cacheKey = '';
|
|
43
|
+
switch (entrypoint.networkRequestInfo.operation.kind) {
|
|
44
|
+
case 'Operation':
|
|
45
|
+
cacheKey =
|
|
46
|
+
entrypoint.networkRequestInfo.operation.text +
|
|
47
|
+
JSON.stringify(stableCopy(variables));
|
|
48
|
+
break;
|
|
49
|
+
case 'PersistedOperation':
|
|
50
|
+
cacheKey =
|
|
51
|
+
entrypoint.networkRequestInfo.operation.operationId +
|
|
52
|
+
JSON.stringify(stableCopy(variables));
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
const factory = () => {
|
|
56
|
+
const { fieldName, readerArtifactKind, readerWithRefetchQueries } =
|
|
57
|
+
getOrLoadReaderWithRefetchQueries(
|
|
58
|
+
environment,
|
|
59
|
+
entrypoint.readerWithRefetchQueries,
|
|
60
|
+
);
|
|
61
|
+
const [networkRequest, disposeNetworkRequest] = maybeMakeNetworkRequest(
|
|
62
|
+
environment,
|
|
63
|
+
entrypoint,
|
|
64
|
+
variables,
|
|
65
|
+
readerWithRefetchQueries,
|
|
66
|
+
fetchOptions ?? null,
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
const itemCleanupPair: ItemCleanupPair<
|
|
70
|
+
FragmentReference<TReadFromStore, TClientFieldValue>
|
|
71
|
+
> = [
|
|
72
|
+
{
|
|
73
|
+
kind: 'FragmentReference',
|
|
74
|
+
readerWithRefetchQueries,
|
|
75
|
+
fieldName,
|
|
76
|
+
readerArtifactKind,
|
|
77
|
+
root: { __link: ROOT_ID, __typename: entrypoint.concreteType },
|
|
78
|
+
variables,
|
|
79
|
+
networkRequest: networkRequest,
|
|
80
|
+
},
|
|
81
|
+
disposeNetworkRequest,
|
|
82
|
+
];
|
|
83
|
+
return itemCleanupPair;
|
|
84
|
+
};
|
|
85
|
+
return getOrCreateItemInSuspenseCache(environment, cacheKey, factory);
|
|
86
|
+
}
|
package/src/core/logging.ts
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { CleanupFn } from '@isograph/disposable-types';
|
|
2
|
-
import { NetworkResponseObject,
|
|
3
|
-
import { CheckResult } from './check';
|
|
4
|
-
import {
|
|
1
|
+
import type { CleanupFn } from '@isograph/disposable-types';
|
|
2
|
+
import type { NetworkResponseObject, EncounteredIds } from './cache';
|
|
3
|
+
import type { CheckResult } from './check';
|
|
4
|
+
import type {
|
|
5
5
|
IsographEntrypoint,
|
|
6
6
|
RefetchQueryNormalizationArtifact,
|
|
7
|
-
|
|
7
|
+
NormalizationAstNodes,
|
|
8
8
|
} from './entrypoint';
|
|
9
|
-
import { FragmentReference, Variables } from './FragmentReference';
|
|
10
|
-
import {
|
|
9
|
+
import type { FragmentReference, Variables } from './FragmentReference';
|
|
10
|
+
import type {
|
|
11
11
|
IsographEnvironment,
|
|
12
12
|
StoreRecord,
|
|
13
|
-
|
|
13
|
+
StoreLink,
|
|
14
14
|
} from './IsographEnvironment';
|
|
15
|
-
import { ReadDataResult } from './read';
|
|
16
|
-
import { Arguments } from './util';
|
|
15
|
+
import type { ReadDataResult } from './read';
|
|
16
|
+
import type { Arguments } from './util';
|
|
17
17
|
import type { StoreLayer } from './optimisticProxy';
|
|
18
18
|
|
|
19
19
|
/**
|
|
@@ -1,31 +1,32 @@
|
|
|
1
|
-
import { ItemCleanupPair } from '@isograph/disposable-types';
|
|
1
|
+
import type { ItemCleanupPair } from '@isograph/disposable-types';
|
|
2
2
|
import {
|
|
3
|
-
callSubscriptions,
|
|
4
3
|
normalizeData,
|
|
5
4
|
type EncounteredIds,
|
|
6
5
|
type NetworkResponseObject,
|
|
7
6
|
} from './cache';
|
|
8
|
-
import {
|
|
7
|
+
import type { FetchOptions } from './check';
|
|
8
|
+
import { check, DEFAULT_SHOULD_FETCH_VALUE } from './check';
|
|
9
9
|
import { getOrCreateCachedComponent } from './componentCache';
|
|
10
|
-
import {
|
|
10
|
+
import type {
|
|
11
11
|
IsographEntrypoint,
|
|
12
|
+
NormalizationAst,
|
|
13
|
+
NormalizationAstLoader,
|
|
12
14
|
ReaderWithRefetchQueries,
|
|
13
15
|
RefetchQueryNormalizationArtifact,
|
|
14
|
-
type NormalizationAst,
|
|
15
|
-
type NormalizationAstLoader,
|
|
16
16
|
} from './entrypoint';
|
|
17
|
-
import {
|
|
17
|
+
import type {
|
|
18
18
|
ExtractParameters,
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
FragmentReference,
|
|
20
|
+
UnknownTReadFromStore,
|
|
21
21
|
} from './FragmentReference';
|
|
22
|
+
import type { RetainedQuery } from './garbageCollection';
|
|
22
23
|
import {
|
|
23
24
|
garbageCollectEnvironment,
|
|
24
|
-
RetainedQuery,
|
|
25
25
|
retainQuery,
|
|
26
26
|
unretainQuery,
|
|
27
27
|
} from './garbageCollection';
|
|
28
|
-
import { IsographEnvironment,
|
|
28
|
+
import type { IsographEnvironment, StoreLink } from './IsographEnvironment';
|
|
29
|
+
import { ROOT_ID } from './IsographEnvironment';
|
|
29
30
|
import { logMessage } from './logging';
|
|
30
31
|
import {
|
|
31
32
|
addNetworkResponseStoreLayer,
|
|
@@ -34,14 +35,11 @@ import {
|
|
|
34
35
|
type OptimisticStoreLayer,
|
|
35
36
|
type StoreLayerWithData,
|
|
36
37
|
} from './optimisticProxy';
|
|
37
|
-
import {
|
|
38
|
-
|
|
39
|
-
PromiseWrapper,
|
|
40
|
-
wrapPromise,
|
|
41
|
-
wrapResolvedValue,
|
|
42
|
-
} from './PromiseWrapper';
|
|
38
|
+
import type { AnyError, PromiseWrapper } from './PromiseWrapper';
|
|
39
|
+
import { wrapPromise, wrapResolvedValue } from './PromiseWrapper';
|
|
43
40
|
import { readButDoNotEvaluate } from './read';
|
|
44
41
|
import { getOrCreateCachedStartUpdate } from './startUpdate';
|
|
42
|
+
import { callSubscriptions } from './subscribe';
|
|
45
43
|
|
|
46
44
|
let networkRequestId = 0;
|
|
47
45
|
|
|
@@ -460,11 +458,6 @@ function readDataForOnComplete<
|
|
|
460
458
|
: undefined),
|
|
461
459
|
});
|
|
462
460
|
}
|
|
463
|
-
default: {
|
|
464
|
-
const _: never = readerArtifact;
|
|
465
|
-
_;
|
|
466
|
-
throw new Error('Expected case');
|
|
467
|
-
}
|
|
468
461
|
}
|
|
469
462
|
}
|
|
470
463
|
return null;
|
|
@@ -557,7 +550,7 @@ function revertOptimisticStoreLayerAndMaybeReplaceIfUndisposedIncomplete(
|
|
|
557
550
|
status: NetworkRequestStatusUndisposedIncomplete,
|
|
558
551
|
normalizeData: null | ((storeLayer: StoreLayerWithData) => void),
|
|
559
552
|
): NetworkRequestStatusUndisposedComplete {
|
|
560
|
-
if (status.optimistic) {
|
|
553
|
+
if (status.optimistic != null) {
|
|
561
554
|
revertOptimisticStoreLayerAndMaybeReplace(
|
|
562
555
|
environment,
|
|
563
556
|
status.optimistic,
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
insertEmptySetIfMissing,
|
|
4
|
-
type EncounteredIds,
|
|
5
|
-
} from './cache';
|
|
1
|
+
import { insertEmptySetIfMissing, type EncounteredIds } from './cache';
|
|
2
|
+
import { callSubscriptions } from './subscribe';
|
|
6
3
|
import type {
|
|
7
4
|
BaseStoreLayerData,
|
|
8
5
|
IsographEnvironment,
|
|
@@ -29,15 +26,18 @@ export function getStoreRecordProxy(
|
|
|
29
26
|
link: StoreLink,
|
|
30
27
|
): Readonly<StoreRecord> | null | undefined {
|
|
31
28
|
let startNode: StoreLayer | null = storeLayer;
|
|
32
|
-
while (startNode
|
|
29
|
+
while (startNode != null) {
|
|
33
30
|
const storeRecord = startNode.data[link.__typename]?.[link.__link];
|
|
34
|
-
if (storeRecord ===
|
|
35
|
-
|
|
31
|
+
if (storeRecord === undefined) {
|
|
32
|
+
startNode = startNode.parentStoreLayer;
|
|
33
|
+
continue;
|
|
36
34
|
}
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
|
|
36
|
+
if (storeRecord == null) {
|
|
37
|
+
return null;
|
|
39
38
|
}
|
|
40
|
-
|
|
39
|
+
|
|
40
|
+
return getMutableStoreRecordProxy(startNode, link);
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
return undefined;
|
|
@@ -52,13 +52,13 @@ export function getMutableStoreRecordProxy(
|
|
|
52
52
|
{
|
|
53
53
|
get(_, propertyName) {
|
|
54
54
|
let currentStoreLayer: StoreLayer | null = childMostStoreLayer;
|
|
55
|
-
while (currentStoreLayer
|
|
55
|
+
while (currentStoreLayer != null) {
|
|
56
56
|
const storeRecord =
|
|
57
57
|
currentStoreLayer.data[link.__typename]?.[link.__link];
|
|
58
|
-
if (storeRecord
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
if (storeRecord !== undefined) {
|
|
59
|
+
if (storeRecord == null) {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
62
|
const value = Reflect.get(storeRecord, propertyName);
|
|
63
63
|
if (value !== undefined) {
|
|
64
64
|
return value;
|
|
@@ -69,15 +69,16 @@ export function getMutableStoreRecordProxy(
|
|
|
69
69
|
},
|
|
70
70
|
has(_, propertyName) {
|
|
71
71
|
let currentStoreLayer: StoreLayer | null = childMostStoreLayer;
|
|
72
|
-
while (currentStoreLayer
|
|
72
|
+
while (currentStoreLayer != null) {
|
|
73
73
|
const storeRecord =
|
|
74
74
|
currentStoreLayer.data[link.__typename]?.[link.__link];
|
|
75
|
-
if (storeRecord
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
75
|
+
if (storeRecord !== undefined) {
|
|
76
|
+
if (storeRecord == null) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
|
|
79
80
|
const value = Reflect.has(storeRecord, propertyName);
|
|
80
|
-
if (value
|
|
81
|
+
if (value) {
|
|
81
82
|
return true;
|
|
82
83
|
}
|
|
83
84
|
}
|
|
@@ -178,10 +179,6 @@ export function addNetworkResponseStoreLayer(
|
|
|
178
179
|
|
|
179
180
|
return node;
|
|
180
181
|
}
|
|
181
|
-
default: {
|
|
182
|
-
parent satisfies never;
|
|
183
|
-
throw new Error('Unreachable. This is a bug in Isograph.');
|
|
184
|
-
}
|
|
185
182
|
}
|
|
186
183
|
}
|
|
187
184
|
|
|
@@ -193,7 +190,7 @@ function mergeDataLayer(target: StoreLayerData, source: StoreLayerData): void {
|
|
|
193
190
|
}
|
|
194
191
|
const targetRecordById = (target[typeName] ??= {});
|
|
195
192
|
for (const [id, sourceRecord] of Object.entries(sourceById)) {
|
|
196
|
-
if (sourceRecord
|
|
193
|
+
if (sourceRecord == null) {
|
|
197
194
|
targetRecordById[id] = null;
|
|
198
195
|
continue;
|
|
199
196
|
}
|
|
@@ -239,10 +236,6 @@ export function addStartUpdateStoreLayer(
|
|
|
239
236
|
startUpdate(node);
|
|
240
237
|
return node;
|
|
241
238
|
}
|
|
242
|
-
default: {
|
|
243
|
-
parent satisfies never;
|
|
244
|
-
throw new Error('Unreachable. This is a bug in Isograph.');
|
|
245
|
-
}
|
|
246
239
|
}
|
|
247
240
|
}
|
|
248
241
|
|
|
@@ -269,10 +262,6 @@ export function addOptimisticUpdaterStoreLayer(
|
|
|
269
262
|
|
|
270
263
|
return node;
|
|
271
264
|
}
|
|
272
|
-
default: {
|
|
273
|
-
parent satisfies never;
|
|
274
|
-
throw new Error('Unreachable. This is a bug in Isograph.');
|
|
275
|
-
}
|
|
276
265
|
}
|
|
277
266
|
}
|
|
278
267
|
|
|
@@ -296,10 +285,6 @@ export function addOptimisticNetworkResponseStoreLayer(
|
|
|
296
285
|
|
|
297
286
|
return node;
|
|
298
287
|
}
|
|
299
|
-
default: {
|
|
300
|
-
parent satisfies never;
|
|
301
|
-
throw new Error('Unreachable. This is a bug in Isograph.');
|
|
302
|
-
}
|
|
303
288
|
}
|
|
304
289
|
}
|
|
305
290
|
|
|
@@ -321,7 +306,7 @@ function mergeLayersWithDataIntoBaseLayer(
|
|
|
321
306
|
baseStoreLayer: BaseStoreLayer,
|
|
322
307
|
) {
|
|
323
308
|
while (
|
|
324
|
-
storeLayerToMerge &&
|
|
309
|
+
storeLayerToMerge != null &&
|
|
325
310
|
storeLayerToMerge.kind !== 'OptimisticUpdaterStoreLayer'
|
|
326
311
|
) {
|
|
327
312
|
mergeDataLayer(baseStoreLayer.data, storeLayerToMerge.data);
|
|
@@ -355,7 +340,7 @@ function reexecuteUpdatesAndMergeData(
|
|
|
355
340
|
// reflects whatever replaced the optimistic layer
|
|
356
341
|
newMergedData: StoreLayerData,
|
|
357
342
|
): void {
|
|
358
|
-
while (storeLayer
|
|
343
|
+
while (storeLayer != null) {
|
|
359
344
|
mergeDataLayer(oldMergedData, storeLayer.data);
|
|
360
345
|
switch (storeLayer.kind) {
|
|
361
346
|
case 'OptimisticNetworkResponseStoreLayer':
|
|
@@ -371,10 +356,6 @@ function reexecuteUpdatesAndMergeData(
|
|
|
371
356
|
storeLayer.startUpdate(storeLayer);
|
|
372
357
|
break;
|
|
373
358
|
}
|
|
374
|
-
default: {
|
|
375
|
-
storeLayer satisfies never;
|
|
376
|
-
throw new Error('Unreachable. This is a bug in Isograph.');
|
|
377
|
-
}
|
|
378
359
|
}
|
|
379
360
|
mergeDataLayer(newMergedData, storeLayer.data);
|
|
380
361
|
|
|
@@ -394,7 +375,7 @@ function setChildOfNode<TStoreLayer extends StoreLayer>(
|
|
|
394
375
|
newChildStoreLayer: TStoreLayer['childStoreLayer'],
|
|
395
376
|
) {
|
|
396
377
|
storeLayerToModify.childStoreLayer = newChildStoreLayer;
|
|
397
|
-
if (newChildStoreLayer
|
|
378
|
+
if (newChildStoreLayer != null) {
|
|
398
379
|
newChildStoreLayer.parentStoreLayer = storeLayerToModify;
|
|
399
380
|
} else {
|
|
400
381
|
environment.store = storeLayerToModify;
|
|
@@ -427,7 +408,7 @@ export function revertOptimisticStoreLayerAndMaybeReplace(
|
|
|
427
408
|
|
|
428
409
|
let newMergedData = {};
|
|
429
410
|
let childNode = optimisticNode.childStoreLayer;
|
|
430
|
-
if (normalizeData
|
|
411
|
+
if (normalizeData != null) {
|
|
431
412
|
const networkResponseStoreLayer: NetworkResponseStoreLayer = {
|
|
432
413
|
kind: 'NetworkResponseStoreLayer',
|
|
433
414
|
data: {},
|