@isograph/react 0.4.3 → 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 +10 -3
- 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 -27
- package/dist/core/FragmentReference.d.ts.map +1 -1
- package/dist/core/FragmentReference.js +8 -6
- 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 +77 -72
- package/dist/core/IsographEnvironment.d.ts.map +1 -1
- package/dist/core/IsographEnvironment.js +62 -59
- 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 +27 -18
- 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 +18 -1
- 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 -34
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/cache.js +210 -516
- 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 +24 -18
- package/dist/core/check.d.ts.map +1 -1
- package/dist/core/check.js +80 -124
- package/dist/core/check.mjs +84 -0
- package/dist/core/check.mjs.map +1 -0
- package/dist/core/componentCache.js +10 -34
- 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 -68
- 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 -10
- package/dist/core/garbageCollection.d.ts.map +1 -1
- package/dist/core/garbageCollection.js +82 -99
- 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 +78 -60
- 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 -8
- package/dist/core/makeNetworkRequest.d.ts.map +1 -1
- package/dist/core/makeNetworkRequest.js +188 -195
- 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 +43 -0
- package/dist/core/optimisticProxy.d.ts.map +1 -0
- package/dist/core/optimisticProxy.js +273 -0
- 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 -27
- package/dist/core/read.d.ts.map +1 -1
- package/dist/core/read.js +438 -618
- 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 -74
- package/dist/core/reader.d.ts.map +1 -1
- package/dist/core/startUpdate.js +118 -156
- 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 -68
- 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 +10 -8
- package/dist/loadable-hooks/useClientSideDefer.d.ts.map +1 -1
- package/dist/loadable-hooks/useClientSideDefer.js +14 -12
- 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 +27 -21
- package/dist/loadable-hooks/useConnectionSpecPagination.d.ts.map +1 -1
- package/dist/loadable-hooks/useConnectionSpecPagination.js +133 -158
- 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 -7
- 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 -13
- 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 +20 -11
- package/dist/react/LoadableFieldReader.d.ts.map +1 -1
- package/dist/react/LoadableFieldReader.js +13 -8
- 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 +21 -12
- package/dist/react/LoadableFieldRenderer.d.ts.map +1 -1
- package/dist/react/LoadableFieldRenderer.js +13 -35
- 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 -7
- package/dist/react/useImperativeReference.d.ts.map +1 -1
- package/dist/react/useImperativeReference.js +34 -32
- 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 -5
- 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 -39
- 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 -39
- package/dist/react/useResult.mjs +30 -0
- package/dist/react/useResult.mjs.map +1 -0
- package/package.json +26 -19
- package/src/core/FragmentReference.ts +13 -7
- package/src/core/IsographEnvironment.ts +80 -21
- package/src/core/PromiseWrapper.ts +14 -7
- package/src/core/areEqualWithDeepComparison.ts +2 -18
- package/src/core/brand.ts +18 -0
- package/src/core/cache.ts +62 -332
- package/src/core/check.ts +30 -26
- package/src/core/componentCache.ts +11 -44
- package/src/core/entrypoint.ts +50 -9
- package/src/core/garbageCollection.ts +81 -28
- package/src/core/getOrCreateCacheForArtifact.ts +86 -0
- package/src/core/logging.ts +25 -13
- package/src/core/makeNetworkRequest.ts +320 -94
- package/src/core/optimisticProxy.ts +544 -0
- package/src/core/read.ts +251 -198
- package/src/core/reader.ts +18 -17
- package/src/core/startUpdate.ts +47 -36
- 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 +6 -4
- package/src/loadable-hooks/useClientSideDefer.ts +80 -30
- package/src/loadable-hooks/useConnectionSpecPagination.ts +54 -35
- package/src/loadable-hooks/useImperativeLoadableField.ts +5 -5
- package/src/loadable-hooks/useSkipLimitPagination.ts +22 -21
- package/src/react/FragmentReader.tsx +3 -1
- package/src/react/FragmentRenderer.tsx +8 -1
- package/src/react/IsographEnvironmentProvider.tsx +2 -1
- package/src/react/LoadableFieldReader.tsx +125 -16
- package/src/react/LoadableFieldRenderer.tsx +124 -16
- package/src/react/createIsographEnvironment.ts +23 -0
- package/src/react/maybeUnwrapNetworkRequest.ts +17 -0
- package/src/react/useImperativeReference.ts +25 -15
- package/src/react/useLazyReference.ts +20 -10
- package/src/react/useReadAndSubscribe.ts +53 -12
- package/src/react/useRerenderOnChange.ts +3 -3
- package/src/react/useResult.ts +15 -35
- package/src/tests/__isograph/Node/asEconomist/resolver_reader.ts +1 -1
- package/src/tests/__isograph/Query/linkedUpdate/entrypoint.ts +3 -1
- package/src/tests/__isograph/Query/linkedUpdate/raw_response_type.ts +13 -0
- package/src/tests/__isograph/Query/linkedUpdate/resolver_reader.ts +1 -1
- package/src/tests/__isograph/Query/meName/entrypoint.ts +3 -1
- package/src/tests/__isograph/Query/meName/raw_response_type.ts +7 -0
- package/src/tests/__isograph/Query/meName/resolver_reader.ts +1 -1
- package/src/tests/__isograph/Query/meNameSuccessor/entrypoint.ts +3 -1
- package/src/tests/__isograph/Query/meNameSuccessor/raw_response_type.ts +14 -0
- package/src/tests/__isograph/Query/meNameSuccessor/resolver_reader.ts +1 -1
- package/src/tests/__isograph/Query/nodeField/entrypoint.ts +3 -1
- package/src/tests/__isograph/Query/nodeField/raw_response_type.ts +7 -0
- package/src/tests/__isograph/Query/nodeField/resolver_reader.ts +1 -1
- package/src/tests/__isograph/Query/normalizeUndefinedField/entrypoint.ts +33 -0
- package/src/tests/__isograph/Query/normalizeUndefinedField/normalization_ast.ts +25 -0
- package/src/tests/__isograph/Query/normalizeUndefinedField/output_type.ts +3 -0
- package/src/tests/__isograph/Query/normalizeUndefinedField/param_type.ts +9 -0
- package/src/tests/__isograph/Query/normalizeUndefinedField/query_text.ts +6 -0
- package/src/tests/__isograph/Query/normalizeUndefinedField/raw_response_type.ts +7 -0
- package/src/tests/__isograph/Query/normalizeUndefinedField/resolver_reader.ts +38 -0
- package/src/tests/__isograph/Query/startUpdate/entrypoint.ts +3 -1
- package/src/tests/__isograph/Query/startUpdate/raw_response_type.ts +8 -0
- package/src/tests/__isograph/Query/startUpdate/resolver_reader.ts +1 -1
- package/src/tests/__isograph/Query/subquery/entrypoint.ts +3 -1
- package/src/tests/__isograph/Query/subquery/raw_response_type.ts +9 -0
- package/src/tests/__isograph/Query/subquery/resolver_reader.ts +1 -1
- package/src/tests/__isograph/iso.ts +11 -1
- package/src/tests/garbageCollection.test.ts +10 -10
- package/src/tests/meNameSuccessor.ts +7 -4
- package/src/tests/nodeQuery.ts +6 -4
- package/src/tests/normalizeData.test.ts +94 -18
- package/src/tests/optimisticProxy.test.ts +862 -0
- package/src/tests/startUpdate.test.ts +11 -11
- 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 -8
- package/dist/core/startUpdate.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
|
@@ -1,21 +1,30 @@
|
|
|
1
|
-
import { ParentCache } from '@isograph/react-disposable-state';
|
|
2
|
-
import {
|
|
1
|
+
import type { ParentCache } from '@isograph/react-disposable-state';
|
|
2
|
+
import type { Brand } from './brand';
|
|
3
|
+
import type {
|
|
3
4
|
IsographEntrypoint,
|
|
4
5
|
IsographOperation,
|
|
5
6
|
IsographPersistedOperation,
|
|
7
|
+
ReaderWithRefetchQueries,
|
|
8
|
+
ReaderWithRefetchQueriesLoader,
|
|
6
9
|
} from './entrypoint';
|
|
7
|
-
import {
|
|
10
|
+
import type {
|
|
11
|
+
ExtractStartUpdate,
|
|
8
12
|
FragmentReference,
|
|
13
|
+
StableIdForFragmentReference,
|
|
14
|
+
UnknownTReadFromStore,
|
|
9
15
|
Variables,
|
|
10
|
-
type StableIdForFragmentReference,
|
|
11
|
-
type UnknownTReadFromStore,
|
|
12
16
|
} from './FragmentReference';
|
|
13
|
-
import { RetainedQuery } from './garbageCollection';
|
|
14
|
-
import { LogFunction, WrappedLogFunction } from './logging';
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
+
import type { RetainedQuery } from './garbageCollection';
|
|
18
|
+
import type { LogFunction, WrappedLogFunction } from './logging';
|
|
19
|
+
import { type StoreLayer } from './optimisticProxy';
|
|
20
|
+
import type { PromiseWrapper } from './PromiseWrapper';
|
|
21
|
+
import { wrapPromise, wrapResolvedValue } from './PromiseWrapper';
|
|
22
|
+
import type {
|
|
23
|
+
NetworkRequestReaderOptions,
|
|
24
|
+
WithEncounteredRecords,
|
|
25
|
+
} from './read';
|
|
17
26
|
import type { ReaderAst, StartUpdate } from './reader';
|
|
18
|
-
import
|
|
27
|
+
import { isArray } from './util';
|
|
19
28
|
|
|
20
29
|
export type ComponentOrFieldName = string;
|
|
21
30
|
export type StringifiedArgs = string;
|
|
@@ -56,8 +65,9 @@ export type Subscriptions = Set<Subscription>;
|
|
|
56
65
|
export type CacheMap<T> = { [index: string]: ParentCache<T> };
|
|
57
66
|
|
|
58
67
|
export type IsographEnvironment = {
|
|
59
|
-
|
|
68
|
+
store: StoreLayer;
|
|
60
69
|
readonly networkFunction: IsographNetworkFunction;
|
|
70
|
+
readonly componentFunction: IsographComponentFunction;
|
|
61
71
|
readonly missingFieldHandler: MissingFieldHandler | null;
|
|
62
72
|
readonly componentCache: FieldCache<React.FC<any>>;
|
|
63
73
|
readonly eagerReaderCache: FieldCache<StartUpdate<any> | undefined>;
|
|
@@ -68,7 +78,7 @@ export type IsographEnvironment = {
|
|
|
68
78
|
// TODO make this a CacheMap and add GC
|
|
69
79
|
readonly entrypointArtifactCache: Map<
|
|
70
80
|
string,
|
|
71
|
-
PromiseWrapper<IsographEntrypoint<any, any, any>>
|
|
81
|
+
PromiseWrapper<IsographEntrypoint<any, any, any, any>>
|
|
72
82
|
>;
|
|
73
83
|
readonly retainedQueries: Set<RetainedQuery>;
|
|
74
84
|
readonly gcBuffer: Array<RetainedQuery>;
|
|
@@ -89,6 +99,15 @@ export type IsographNetworkFunction = (
|
|
|
89
99
|
variables: Variables,
|
|
90
100
|
) => Promise<any>;
|
|
91
101
|
|
|
102
|
+
export type IsographComponentFunction = <
|
|
103
|
+
TReadFromStore extends UnknownTReadFromStore = any,
|
|
104
|
+
>(
|
|
105
|
+
environment: IsographEnvironment,
|
|
106
|
+
fragmentReference: FragmentReference<TReadFromStore, any>,
|
|
107
|
+
networkRequestOptions: NetworkRequestReaderOptions,
|
|
108
|
+
startUpdate: ExtractStartUpdate<TReadFromStore>,
|
|
109
|
+
) => React.FC<any>;
|
|
110
|
+
|
|
92
111
|
export interface Link<T extends TypeName> extends StoreLink {
|
|
93
112
|
readonly __link: Brand<DataId, T>;
|
|
94
113
|
readonly __typename: T;
|
|
@@ -111,7 +130,7 @@ export type DataTypeValue =
|
|
|
111
130
|
// Singular linked fields:
|
|
112
131
|
| StoreLink
|
|
113
132
|
// Plural scalar and linked fields:
|
|
114
|
-
| DataTypeValue[];
|
|
133
|
+
| readonly DataTypeValue[];
|
|
115
134
|
|
|
116
135
|
export type StoreRecord = {
|
|
117
136
|
[index: DataId | string]: DataTypeValue;
|
|
@@ -125,28 +144,39 @@ export type DataId = string;
|
|
|
125
144
|
|
|
126
145
|
export const ROOT_ID: DataId & '__ROOT' = '__ROOT';
|
|
127
146
|
|
|
128
|
-
export type
|
|
147
|
+
export type StoreLayerData = {
|
|
129
148
|
[index: TypeName]: {
|
|
130
149
|
[index: DataId]: StoreRecord | null;
|
|
131
150
|
} | null;
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
export interface BaseStoreLayerData extends StoreLayerData {
|
|
132
154
|
readonly Query: {
|
|
133
155
|
readonly __ROOT: StoreRecord;
|
|
134
156
|
};
|
|
135
|
-
}
|
|
157
|
+
}
|
|
136
158
|
|
|
137
159
|
const DEFAULT_GC_BUFFER_SIZE = 10;
|
|
138
|
-
export function
|
|
139
|
-
|
|
160
|
+
export function createIsographEnvironmentCore(
|
|
161
|
+
baseStoreLayerData: BaseStoreLayerData,
|
|
140
162
|
networkFunction: IsographNetworkFunction,
|
|
163
|
+
componentFunction: IsographComponentFunction,
|
|
141
164
|
missingFieldHandler?: MissingFieldHandler | null,
|
|
142
165
|
logFunction?: LogFunction | null,
|
|
143
166
|
): IsographEnvironment {
|
|
144
167
|
logFunction?.({
|
|
145
168
|
kind: 'EnvironmentCreated',
|
|
146
169
|
});
|
|
170
|
+
let store = {
|
|
171
|
+
kind: 'BaseStoreLayer',
|
|
172
|
+
data: baseStoreLayerData,
|
|
173
|
+
parentStoreLayer: null,
|
|
174
|
+
childStoreLayer: null,
|
|
175
|
+
} as const;
|
|
147
176
|
return {
|
|
148
177
|
store,
|
|
149
178
|
networkFunction,
|
|
179
|
+
componentFunction,
|
|
150
180
|
missingFieldHandler: missingFieldHandler ?? null,
|
|
151
181
|
componentCache: {},
|
|
152
182
|
eagerReaderCache: {},
|
|
@@ -160,7 +190,7 @@ export function createIsographEnvironment(
|
|
|
160
190
|
};
|
|
161
191
|
}
|
|
162
192
|
|
|
163
|
-
export function createIsographStore():
|
|
193
|
+
export function createIsographStore(): BaseStoreLayerData {
|
|
164
194
|
return {
|
|
165
195
|
Query: {
|
|
166
196
|
[ROOT_ID]: {},
|
|
@@ -169,7 +199,7 @@ export function createIsographStore(): IsographStore {
|
|
|
169
199
|
}
|
|
170
200
|
|
|
171
201
|
export function assertLink(link: DataTypeValue): StoreLink | null | undefined {
|
|
172
|
-
if (
|
|
202
|
+
if (isArray(link)) {
|
|
173
203
|
throw new Error('Unexpected array');
|
|
174
204
|
}
|
|
175
205
|
if (link == null) {
|
|
@@ -198,8 +228,8 @@ export function getLink(maybeLink: DataTypeValue): StoreLink | null {
|
|
|
198
228
|
export function getOrLoadIsographArtifact(
|
|
199
229
|
environment: IsographEnvironment,
|
|
200
230
|
key: string,
|
|
201
|
-
loader: () => Promise<IsographEntrypoint<any, any, any>>,
|
|
202
|
-
): PromiseWrapper<IsographEntrypoint<any, any, any>> {
|
|
231
|
+
loader: () => Promise<IsographEntrypoint<any, any, any, any>>,
|
|
232
|
+
): PromiseWrapper<IsographEntrypoint<any, any, any, any>> {
|
|
203
233
|
const value = environment.entrypointArtifactCache.get(key);
|
|
204
234
|
if (value != null) {
|
|
205
235
|
return value;
|
|
@@ -208,3 +238,32 @@ export function getOrLoadIsographArtifact(
|
|
|
208
238
|
environment.entrypointArtifactCache.set(key, wrapped);
|
|
209
239
|
return wrapped;
|
|
210
240
|
}
|
|
241
|
+
|
|
242
|
+
export function getOrLoadReaderWithRefetchQueries(
|
|
243
|
+
_environment: IsographEnvironment,
|
|
244
|
+
readerWithRefetchQueries:
|
|
245
|
+
| ReaderWithRefetchQueries<any, any>
|
|
246
|
+
| ReaderWithRefetchQueriesLoader<any, any>,
|
|
247
|
+
): {
|
|
248
|
+
readerWithRefetchQueries: PromiseWrapper<ReaderWithRefetchQueries<any, any>>;
|
|
249
|
+
fieldName: string;
|
|
250
|
+
readerArtifactKind: 'EagerReaderArtifact' | 'ComponentReaderArtifact';
|
|
251
|
+
} {
|
|
252
|
+
switch (readerWithRefetchQueries.kind) {
|
|
253
|
+
case 'ReaderWithRefetchQueries':
|
|
254
|
+
return {
|
|
255
|
+
readerWithRefetchQueries: wrapResolvedValue(readerWithRefetchQueries),
|
|
256
|
+
fieldName: readerWithRefetchQueries.readerArtifact.fieldName,
|
|
257
|
+
readerArtifactKind: readerWithRefetchQueries.readerArtifact.kind,
|
|
258
|
+
};
|
|
259
|
+
case 'ReaderWithRefetchQueriesLoader':
|
|
260
|
+
return {
|
|
261
|
+
// TODO: cache promise wrapper
|
|
262
|
+
readerWithRefetchQueries: wrapPromise(
|
|
263
|
+
readerWithRefetchQueries.loader(),
|
|
264
|
+
),
|
|
265
|
+
fieldName: readerWithRefetchQueries.fieldName,
|
|
266
|
+
readerArtifactKind: readerWithRefetchQueries.readerArtifactKind,
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
}
|
|
@@ -5,12 +5,12 @@ export type NotSet = typeof NOT_SET;
|
|
|
5
5
|
|
|
6
6
|
export type Result<T, E> =
|
|
7
7
|
| {
|
|
8
|
-
kind: 'Ok';
|
|
9
|
-
value: T;
|
|
8
|
+
readonly kind: 'Ok';
|
|
9
|
+
readonly value: T;
|
|
10
10
|
}
|
|
11
11
|
| {
|
|
12
|
-
kind: 'Err';
|
|
13
|
-
error: E;
|
|
12
|
+
readonly kind: 'Err';
|
|
13
|
+
readonly error: E;
|
|
14
14
|
};
|
|
15
15
|
|
|
16
16
|
/**
|
|
@@ -22,6 +22,13 @@ export type PromiseWrapper<T, E = any> = {
|
|
|
22
22
|
result: Result<Exclude<T, NotSet>, E> | NotSet;
|
|
23
23
|
};
|
|
24
24
|
|
|
25
|
+
export interface PromiseWrapperOk<T, E = any> extends PromiseWrapper<T, E> {
|
|
26
|
+
result: {
|
|
27
|
+
readonly kind: 'Ok';
|
|
28
|
+
readonly value: Exclude<T, NotSet>;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
|
|
25
32
|
export function wrapPromise<T>(
|
|
26
33
|
promise: Promise<Exclude<T, NotSet>>,
|
|
27
34
|
): PromiseWrapper<T, unknown> {
|
|
@@ -39,7 +46,7 @@ export function wrapPromise<T>(
|
|
|
39
46
|
|
|
40
47
|
export function wrapResolvedValue<T>(
|
|
41
48
|
value: Exclude<T, NotSet>,
|
|
42
|
-
):
|
|
49
|
+
): PromiseWrapperOk<T, never> {
|
|
43
50
|
return {
|
|
44
51
|
promise: Promise.resolve(value),
|
|
45
52
|
result: {
|
|
@@ -65,8 +72,8 @@ export function readPromise<T, E>(p: PromiseWrapper<T, E>): T {
|
|
|
65
72
|
|
|
66
73
|
export type PromiseState<T, E> =
|
|
67
74
|
| {
|
|
68
|
-
kind: 'Pending';
|
|
69
|
-
promise: Promise<T>;
|
|
75
|
+
readonly kind: 'Pending';
|
|
76
|
+
readonly promise: Promise<T>;
|
|
70
77
|
}
|
|
71
78
|
| Result<T, E>;
|
|
72
79
|
|
|
@@ -6,12 +6,8 @@ function mergeUsingReaderAst(
|
|
|
6
6
|
oldItem: unknown,
|
|
7
7
|
newItem: unknown,
|
|
8
8
|
): unknown {
|
|
9
|
-
if (newItem
|
|
10
|
-
return
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
if (newItem === undefined) {
|
|
14
|
-
return oldItem === undefined ? oldItem : newItem;
|
|
9
|
+
if (newItem == null || oldItem == null) {
|
|
10
|
+
return newItem;
|
|
15
11
|
}
|
|
16
12
|
|
|
17
13
|
if (Array.isArray(newItem)) {
|
|
@@ -31,12 +27,6 @@ function mergeUsingReaderAst(
|
|
|
31
27
|
}
|
|
32
28
|
|
|
33
29
|
return mergeObjectsUsingReaderAst(field.selections, oldItem, newItem);
|
|
34
|
-
default: {
|
|
35
|
-
// Ensure we have covered all variants
|
|
36
|
-
let _: never = field;
|
|
37
|
-
_;
|
|
38
|
-
throw new Error('Unexpected case.');
|
|
39
|
-
}
|
|
40
30
|
}
|
|
41
31
|
}
|
|
42
32
|
|
|
@@ -124,12 +114,6 @@ export function mergeObjectsUsingReaderAst(
|
|
|
124
114
|
case 'ImperativelyLoadedField':
|
|
125
115
|
case 'LoadablySelectedField':
|
|
126
116
|
break;
|
|
127
|
-
default: {
|
|
128
|
-
// Ensure we have covered all variants
|
|
129
|
-
let _: never = field;
|
|
130
|
-
_;
|
|
131
|
-
throw new Error('Unexpected case.');
|
|
132
|
-
}
|
|
133
117
|
}
|
|
134
118
|
}
|
|
135
119
|
|
package/src/core/brand.ts
CHANGED
|
@@ -16,3 +16,21 @@ export type Brand<
|
|
|
16
16
|
Brand extends symbol | string,
|
|
17
17
|
// @ts-ignore
|
|
18
18
|
> = infer _ extends Brand ? BaseType : never;
|
|
19
|
+
|
|
20
|
+
declare const PhantomDataBrand: unique symbol;
|
|
21
|
+
/**
|
|
22
|
+
* A phantom data type is one that shouldn't show up at runtime, but is checked statically (and only) at compile time.
|
|
23
|
+
* Data types can use extra properties to act as markers or to perform type checking at compile time. These extra properties should hold no storage values, and have no runtime behavior.
|
|
24
|
+
*
|
|
25
|
+
* ```tsx
|
|
26
|
+
* type MyType<T> = {
|
|
27
|
+
* readonly value: number;
|
|
28
|
+
* readonly '~T'?: PhantomData<T>;
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export type PhantomData<T> = Brand<T, typeof PhantomDataBrand>;
|
|
33
|
+
|
|
34
|
+
export type Invariant<T> = (_: T) => T;
|
|
35
|
+
export type Covariant<T> = (_: never) => T;
|
|
36
|
+
export type Contravariant<T> = (_: T) => void;
|