@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,69 +1,72 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
exports.assertLink = assertLink;
|
|
7
|
-
exports.getLink = getLink;
|
|
8
|
-
exports.getOrLoadIsographArtifact = getOrLoadIsographArtifact;
|
|
9
|
-
const PromiseWrapper_1 = require("./PromiseWrapper");
|
|
10
|
-
exports.ROOT_ID = '__ROOT';
|
|
1
|
+
const require_PromiseWrapper = require('./PromiseWrapper.js');
|
|
2
|
+
const require_util = require('./util.js');
|
|
3
|
+
|
|
4
|
+
//#region src/core/IsographEnvironment.ts
|
|
5
|
+
const ROOT_ID = "__ROOT";
|
|
11
6
|
const DEFAULT_GC_BUFFER_SIZE = 10;
|
|
12
|
-
function
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
7
|
+
function createIsographEnvironmentCore(baseStoreLayerData, networkFunction, componentFunction, missingFieldHandler, logFunction) {
|
|
8
|
+
logFunction?.({ kind: "EnvironmentCreated" });
|
|
9
|
+
return {
|
|
10
|
+
store: {
|
|
11
|
+
kind: "BaseStoreLayer",
|
|
12
|
+
data: baseStoreLayerData,
|
|
13
|
+
parentStoreLayer: null,
|
|
14
|
+
childStoreLayer: null
|
|
15
|
+
},
|
|
16
|
+
networkFunction,
|
|
17
|
+
componentFunction,
|
|
18
|
+
missingFieldHandler: missingFieldHandler ?? null,
|
|
19
|
+
componentCache: {},
|
|
20
|
+
eagerReaderCache: {},
|
|
21
|
+
subscriptions: /* @__PURE__ */ new Set(),
|
|
22
|
+
fragmentCache: {},
|
|
23
|
+
entrypointArtifactCache: /* @__PURE__ */ new Map(),
|
|
24
|
+
retainedQueries: /* @__PURE__ */ new Set(),
|
|
25
|
+
gcBuffer: [],
|
|
26
|
+
gcBufferSize: DEFAULT_GC_BUFFER_SIZE,
|
|
27
|
+
loggers: logFunction != null ? new Set([{ log: logFunction }]) : /* @__PURE__ */ new Set()
|
|
28
|
+
};
|
|
30
29
|
}
|
|
31
30
|
function createIsographStore() {
|
|
32
|
-
|
|
33
|
-
Query: {
|
|
34
|
-
[exports.ROOT_ID]: {},
|
|
35
|
-
},
|
|
36
|
-
};
|
|
31
|
+
return { Query: { [ROOT_ID]: {} } };
|
|
37
32
|
}
|
|
38
33
|
function assertLink(link) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return link;
|
|
44
|
-
}
|
|
45
|
-
if (typeof link === 'object') {
|
|
46
|
-
return link;
|
|
47
|
-
}
|
|
48
|
-
throw new Error('Invalid link');
|
|
34
|
+
if (require_util.isArray(link)) throw new Error("Unexpected array");
|
|
35
|
+
if (link == null) return link;
|
|
36
|
+
if (typeof link === "object") return link;
|
|
37
|
+
throw new Error("Invalid link");
|
|
49
38
|
}
|
|
50
39
|
function getLink(maybeLink) {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
'__link' in maybeLink &&
|
|
54
|
-
maybeLink.__link != null &&
|
|
55
|
-
'__typename' in maybeLink &&
|
|
56
|
-
maybeLink.__typename != null) {
|
|
57
|
-
return maybeLink;
|
|
58
|
-
}
|
|
59
|
-
return null;
|
|
40
|
+
if (maybeLink != null && typeof maybeLink === "object" && "__link" in maybeLink && maybeLink.__link != null && "__typename" in maybeLink && maybeLink.__typename != null) return maybeLink;
|
|
41
|
+
return null;
|
|
60
42
|
}
|
|
61
43
|
function getOrLoadIsographArtifact(environment, key, loader) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
44
|
+
const value = environment.entrypointArtifactCache.get(key);
|
|
45
|
+
if (value != null) return value;
|
|
46
|
+
const wrapped = require_PromiseWrapper.wrapPromise(loader());
|
|
47
|
+
environment.entrypointArtifactCache.set(key, wrapped);
|
|
48
|
+
return wrapped;
|
|
49
|
+
}
|
|
50
|
+
function getOrLoadReaderWithRefetchQueries(_environment, readerWithRefetchQueries) {
|
|
51
|
+
switch (readerWithRefetchQueries.kind) {
|
|
52
|
+
case "ReaderWithRefetchQueries": return {
|
|
53
|
+
readerWithRefetchQueries: require_PromiseWrapper.wrapResolvedValue(readerWithRefetchQueries),
|
|
54
|
+
fieldName: readerWithRefetchQueries.readerArtifact.fieldName,
|
|
55
|
+
readerArtifactKind: readerWithRefetchQueries.readerArtifact.kind
|
|
56
|
+
};
|
|
57
|
+
case "ReaderWithRefetchQueriesLoader": return {
|
|
58
|
+
readerWithRefetchQueries: require_PromiseWrapper.wrapPromise(readerWithRefetchQueries.loader()),
|
|
59
|
+
fieldName: readerWithRefetchQueries.fieldName,
|
|
60
|
+
readerArtifactKind: readerWithRefetchQueries.readerArtifactKind
|
|
61
|
+
};
|
|
62
|
+
}
|
|
69
63
|
}
|
|
64
|
+
|
|
65
|
+
//#endregion
|
|
66
|
+
exports.ROOT_ID = ROOT_ID;
|
|
67
|
+
exports.assertLink = assertLink;
|
|
68
|
+
exports.createIsographEnvironmentCore = createIsographEnvironmentCore;
|
|
69
|
+
exports.createIsographStore = createIsographStore;
|
|
70
|
+
exports.getLink = getLink;
|
|
71
|
+
exports.getOrLoadIsographArtifact = getOrLoadIsographArtifact;
|
|
72
|
+
exports.getOrLoadReaderWithRefetchQueries = getOrLoadReaderWithRefetchQueries;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { wrapPromise, wrapResolvedValue } from "./PromiseWrapper.mjs";
|
|
2
|
+
import { isArray } from "./util.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/core/IsographEnvironment.ts
|
|
5
|
+
const ROOT_ID = "__ROOT";
|
|
6
|
+
const DEFAULT_GC_BUFFER_SIZE = 10;
|
|
7
|
+
function createIsographEnvironmentCore(baseStoreLayerData, networkFunction, componentFunction, missingFieldHandler, logFunction) {
|
|
8
|
+
logFunction?.({ kind: "EnvironmentCreated" });
|
|
9
|
+
return {
|
|
10
|
+
store: {
|
|
11
|
+
kind: "BaseStoreLayer",
|
|
12
|
+
data: baseStoreLayerData,
|
|
13
|
+
parentStoreLayer: null,
|
|
14
|
+
childStoreLayer: null
|
|
15
|
+
},
|
|
16
|
+
networkFunction,
|
|
17
|
+
componentFunction,
|
|
18
|
+
missingFieldHandler: missingFieldHandler ?? null,
|
|
19
|
+
componentCache: {},
|
|
20
|
+
eagerReaderCache: {},
|
|
21
|
+
subscriptions: /* @__PURE__ */ new Set(),
|
|
22
|
+
fragmentCache: {},
|
|
23
|
+
entrypointArtifactCache: /* @__PURE__ */ new Map(),
|
|
24
|
+
retainedQueries: /* @__PURE__ */ new Set(),
|
|
25
|
+
gcBuffer: [],
|
|
26
|
+
gcBufferSize: DEFAULT_GC_BUFFER_SIZE,
|
|
27
|
+
loggers: logFunction != null ? new Set([{ log: logFunction }]) : /* @__PURE__ */ new Set()
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function createIsographStore() {
|
|
31
|
+
return { Query: { [ROOT_ID]: {} } };
|
|
32
|
+
}
|
|
33
|
+
function assertLink(link) {
|
|
34
|
+
if (isArray(link)) throw new Error("Unexpected array");
|
|
35
|
+
if (link == null) return link;
|
|
36
|
+
if (typeof link === "object") return link;
|
|
37
|
+
throw new Error("Invalid link");
|
|
38
|
+
}
|
|
39
|
+
function getLink(maybeLink) {
|
|
40
|
+
if (maybeLink != null && typeof maybeLink === "object" && "__link" in maybeLink && maybeLink.__link != null && "__typename" in maybeLink && maybeLink.__typename != null) return maybeLink;
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
function getOrLoadIsographArtifact(environment, key, loader) {
|
|
44
|
+
const value = environment.entrypointArtifactCache.get(key);
|
|
45
|
+
if (value != null) return value;
|
|
46
|
+
const wrapped = wrapPromise(loader());
|
|
47
|
+
environment.entrypointArtifactCache.set(key, wrapped);
|
|
48
|
+
return wrapped;
|
|
49
|
+
}
|
|
50
|
+
function getOrLoadReaderWithRefetchQueries(_environment, readerWithRefetchQueries) {
|
|
51
|
+
switch (readerWithRefetchQueries.kind) {
|
|
52
|
+
case "ReaderWithRefetchQueries": return {
|
|
53
|
+
readerWithRefetchQueries: wrapResolvedValue(readerWithRefetchQueries),
|
|
54
|
+
fieldName: readerWithRefetchQueries.readerArtifact.fieldName,
|
|
55
|
+
readerArtifactKind: readerWithRefetchQueries.readerArtifact.kind
|
|
56
|
+
};
|
|
57
|
+
case "ReaderWithRefetchQueriesLoader": return {
|
|
58
|
+
readerWithRefetchQueries: wrapPromise(readerWithRefetchQueries.loader()),
|
|
59
|
+
fieldName: readerWithRefetchQueries.fieldName,
|
|
60
|
+
readerArtifactKind: readerWithRefetchQueries.readerArtifactKind
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
//#endregion
|
|
66
|
+
export { ROOT_ID, assertLink, createIsographEnvironmentCore, createIsographStore, getLink, getOrLoadIsographArtifact, getOrLoadReaderWithRefetchQueries };
|
|
67
|
+
//# sourceMappingURL=IsographEnvironment.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IsographEnvironment.mjs","names":["ROOT_ID: DataId & '__ROOT'"],"sources":["../../src/core/IsographEnvironment.ts"],"sourcesContent":["import type { ParentCache } from '@isograph/react-disposable-state';\nimport type { Brand } from './brand';\nimport type {\n IsographEntrypoint,\n IsographOperation,\n IsographPersistedOperation,\n ReaderWithRefetchQueries,\n ReaderWithRefetchQueriesLoader,\n} from './entrypoint';\nimport type {\n ExtractStartUpdate,\n FragmentReference,\n StableIdForFragmentReference,\n UnknownTReadFromStore,\n Variables,\n} from './FragmentReference';\nimport type { RetainedQuery } from './garbageCollection';\nimport type { LogFunction, WrappedLogFunction } from './logging';\nimport { type StoreLayer } from './optimisticProxy';\nimport type { PromiseWrapper } from './PromiseWrapper';\nimport { wrapPromise, wrapResolvedValue } from './PromiseWrapper';\nimport type {\n NetworkRequestReaderOptions,\n WithEncounteredRecords,\n} from './read';\nimport type { ReaderAst, StartUpdate } from './reader';\nimport { isArray } from './util';\n\nexport type ComponentOrFieldName = string;\nexport type StringifiedArgs = string;\n\nexport type FieldCache<T> = {\n [key: StableIdForFragmentReference]: T;\n};\n\nexport type FragmentSubscription<TReadFromStore extends UnknownTReadFromStore> =\n {\n readonly kind: 'FragmentSubscription';\n readonly callback: (\n newEncounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>,\n ) => void;\n /** The value read out from the previous call to readButDoNotEvaluate */\n encounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>;\n readonly fragmentReference: FragmentReference<TReadFromStore, any>;\n readonly readerAst: ReaderAst<TReadFromStore>;\n };\n\nexport type AnyChangesToRecordSubscription = {\n readonly kind: 'AnyChangesToRecord';\n readonly callback: () => void;\n readonly recordLink: StoreLink;\n};\n\nexport type AnyRecordSubscription = {\n readonly kind: 'AnyRecords';\n readonly callback: () => void;\n};\n\nexport type Subscription =\n | FragmentSubscription<any>\n | AnyChangesToRecordSubscription\n | AnyRecordSubscription;\nexport type Subscriptions = Set<Subscription>;\n// Should this be a map?\nexport type CacheMap<T> = { [index: string]: ParentCache<T> };\n\nexport type IsographEnvironment = {\n store: StoreLayer;\n readonly networkFunction: IsographNetworkFunction;\n readonly componentFunction: IsographComponentFunction;\n readonly missingFieldHandler: MissingFieldHandler | null;\n readonly componentCache: FieldCache<React.FC<any>>;\n readonly eagerReaderCache: FieldCache<StartUpdate<any> | undefined>;\n readonly subscriptions: Subscriptions;\n // N.B. this must be <any, any>, but all *usages* of this should go through\n // a function that adds type parameters.\n readonly fragmentCache: CacheMap<FragmentReference<any, any>>;\n // TODO make this a CacheMap and add GC\n readonly entrypointArtifactCache: Map<\n string,\n PromiseWrapper<IsographEntrypoint<any, any, any, any>>\n >;\n readonly retainedQueries: Set<RetainedQuery>;\n readonly gcBuffer: Array<RetainedQuery>;\n readonly gcBufferSize: number;\n readonly loggers: Set<WrappedLogFunction>;\n};\n\nexport type MissingFieldHandler = (\n storeRecord: StoreRecord,\n root: StoreLink,\n fieldName: string,\n arguments_: { [index: string]: any } | null,\n variables: Variables | null,\n) => StoreLink | undefined;\n\nexport type IsographNetworkFunction = (\n operation: IsographOperation | IsographPersistedOperation,\n variables: Variables,\n) => Promise<any>;\n\nexport type IsographComponentFunction = <\n TReadFromStore extends UnknownTReadFromStore = any,\n>(\n environment: IsographEnvironment,\n fragmentReference: FragmentReference<TReadFromStore, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n startUpdate: ExtractStartUpdate<TReadFromStore>,\n) => React.FC<any>;\n\nexport interface Link<T extends TypeName> extends StoreLink {\n readonly __link: Brand<DataId, T>;\n readonly __typename: T;\n}\n\nexport type StoreLink = {\n readonly __link: DataId;\n readonly __typename: TypeName;\n};\n\nexport type DataTypeValue =\n // N.B. undefined is here to support optional id's, but\n // undefined should not *actually* be present in the store.\n | undefined\n // Singular scalar fields:\n | number\n | boolean\n | string\n | null\n // Singular linked fields:\n | StoreLink\n // Plural scalar and linked fields:\n | readonly DataTypeValue[];\n\nexport type StoreRecord = {\n [index: DataId | string]: DataTypeValue;\n // TODO __typename?: T, which is restricted to being a concrete string\n // TODO this shouldn't always be named id\n readonly id?: DataId;\n};\n\nexport type TypeName = string;\nexport type DataId = string;\n\nexport const ROOT_ID: DataId & '__ROOT' = '__ROOT';\n\nexport type StoreLayerData = {\n [index: TypeName]: {\n [index: DataId]: StoreRecord | null;\n } | null;\n};\n\nexport interface BaseStoreLayerData extends StoreLayerData {\n readonly Query: {\n readonly __ROOT: StoreRecord;\n };\n}\n\nconst DEFAULT_GC_BUFFER_SIZE = 10;\nexport function createIsographEnvironmentCore(\n baseStoreLayerData: BaseStoreLayerData,\n networkFunction: IsographNetworkFunction,\n componentFunction: IsographComponentFunction,\n missingFieldHandler?: MissingFieldHandler | null,\n logFunction?: LogFunction | null,\n): IsographEnvironment {\n logFunction?.({\n kind: 'EnvironmentCreated',\n });\n let store = {\n kind: 'BaseStoreLayer',\n data: baseStoreLayerData,\n parentStoreLayer: null,\n childStoreLayer: null,\n } as const;\n return {\n store,\n networkFunction,\n componentFunction,\n missingFieldHandler: missingFieldHandler ?? null,\n componentCache: {},\n eagerReaderCache: {},\n subscriptions: new Set(),\n fragmentCache: {},\n entrypointArtifactCache: new Map(),\n retainedQueries: new Set(),\n gcBuffer: [],\n gcBufferSize: DEFAULT_GC_BUFFER_SIZE,\n loggers: logFunction != null ? new Set([{ log: logFunction }]) : new Set(),\n };\n}\n\nexport function createIsographStore(): BaseStoreLayerData {\n return {\n Query: {\n [ROOT_ID]: {},\n },\n };\n}\n\nexport function assertLink(link: DataTypeValue): StoreLink | null | undefined {\n if (isArray(link)) {\n throw new Error('Unexpected array');\n }\n if (link == null) {\n return link;\n }\n if (typeof link === 'object') {\n return link;\n }\n throw new Error('Invalid link');\n}\n\nexport function getLink(maybeLink: DataTypeValue): StoreLink | null {\n if (\n maybeLink != null &&\n typeof maybeLink === 'object' &&\n '__link' in maybeLink &&\n maybeLink.__link != null &&\n '__typename' in maybeLink &&\n maybeLink.__typename != null\n ) {\n return maybeLink;\n }\n return null;\n}\n\nexport function getOrLoadIsographArtifact(\n environment: IsographEnvironment,\n key: string,\n loader: () => Promise<IsographEntrypoint<any, any, any, any>>,\n): PromiseWrapper<IsographEntrypoint<any, any, any, any>> {\n const value = environment.entrypointArtifactCache.get(key);\n if (value != null) {\n return value;\n }\n const wrapped = wrapPromise(loader());\n environment.entrypointArtifactCache.set(key, wrapped);\n return wrapped;\n}\n\nexport function getOrLoadReaderWithRefetchQueries(\n _environment: IsographEnvironment,\n readerWithRefetchQueries:\n | ReaderWithRefetchQueries<any, any>\n | ReaderWithRefetchQueriesLoader<any, any>,\n): {\n readerWithRefetchQueries: PromiseWrapper<ReaderWithRefetchQueries<any, any>>;\n fieldName: string;\n readerArtifactKind: 'EagerReaderArtifact' | 'ComponentReaderArtifact';\n} {\n switch (readerWithRefetchQueries.kind) {\n case 'ReaderWithRefetchQueries':\n return {\n readerWithRefetchQueries: wrapResolvedValue(readerWithRefetchQueries),\n fieldName: readerWithRefetchQueries.readerArtifact.fieldName,\n readerArtifactKind: readerWithRefetchQueries.readerArtifact.kind,\n };\n case 'ReaderWithRefetchQueriesLoader':\n return {\n // TODO: cache promise wrapper\n readerWithRefetchQueries: wrapPromise(\n readerWithRefetchQueries.loader(),\n ),\n fieldName: readerWithRefetchQueries.fieldName,\n readerArtifactKind: readerWithRefetchQueries.readerArtifactKind,\n };\n }\n}\n"],"mappings":";;;;AAgJA,MAAaA,UAA6B;AAc1C,MAAM,yBAAyB;AAC/B,SAAgB,8BACd,oBACA,iBACA,mBACA,qBACA,aACqB;AACrB,eAAc,EACZ,MAAM,sBACP,CAAC;AAOF,QAAO;EACL,OAPU;GACV,MAAM;GACN,MAAM;GACN,kBAAkB;GAClB,iBAAiB;GAClB;EAGC;EACA;EACA,qBAAqB,uBAAuB;EAC5C,gBAAgB,EAAE;EAClB,kBAAkB,EAAE;EACpB,+BAAe,IAAI,KAAK;EACxB,eAAe,EAAE;EACjB,yCAAyB,IAAI,KAAK;EAClC,iCAAiB,IAAI,KAAK;EAC1B,UAAU,EAAE;EACZ,cAAc;EACd,SAAS,eAAe,OAAO,IAAI,IAAI,CAAC,EAAE,KAAK,aAAa,CAAC,CAAC,mBAAG,IAAI,KAAK;EAC3E;;AAGH,SAAgB,sBAA0C;AACxD,QAAO,EACL,OAAO,GACJ,UAAU,EAAE,EACd,EACF;;AAGH,SAAgB,WAAW,MAAmD;AAC5E,KAAI,QAAQ,KAAK,CACf,OAAM,IAAI,MAAM,mBAAmB;AAErC,KAAI,QAAQ,KACV,QAAO;AAET,KAAI,OAAO,SAAS,SAClB,QAAO;AAET,OAAM,IAAI,MAAM,eAAe;;AAGjC,SAAgB,QAAQ,WAA4C;AAClE,KACE,aAAa,QACb,OAAO,cAAc,YACrB,YAAY,aACZ,UAAU,UAAU,QACpB,gBAAgB,aAChB,UAAU,cAAc,KAExB,QAAO;AAET,QAAO;;AAGT,SAAgB,0BACd,aACA,KACA,QACwD;CACxD,MAAM,QAAQ,YAAY,wBAAwB,IAAI,IAAI;AAC1D,KAAI,SAAS,KACX,QAAO;CAET,MAAM,UAAU,YAAY,QAAQ,CAAC;AACrC,aAAY,wBAAwB,IAAI,KAAK,QAAQ;AACrD,QAAO;;AAGT,SAAgB,kCACd,cACA,0BAOA;AACA,SAAQ,yBAAyB,MAAjC;EACE,KAAK,2BACH,QAAO;GACL,0BAA0B,kBAAkB,yBAAyB;GACrE,WAAW,yBAAyB,eAAe;GACnD,oBAAoB,yBAAyB,eAAe;GAC7D;EACH,KAAK,iCACH,QAAO;GAEL,0BAA0B,YACxB,yBAAyB,QAAQ,CAClC;GACD,WAAW,yBAAyB;GACpC,oBAAoB,yBAAyB;GAC9C"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
//#region src/core/PromiseWrapper.d.ts
|
|
2
|
+
type AnyError = any;
|
|
3
|
+
declare const NOT_SET: unique symbol;
|
|
4
|
+
type NotSet = typeof NOT_SET;
|
|
5
|
+
type Result<T, E> = {
|
|
6
|
+
readonly kind: 'Ok';
|
|
7
|
+
readonly value: T;
|
|
8
|
+
} | {
|
|
9
|
+
readonly kind: 'Err';
|
|
10
|
+
readonly error: E;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Invariant:
|
|
14
|
+
* Before the promise is resolved, value becomes non-null.
|
|
15
|
+
*/
|
|
16
|
+
type PromiseWrapper<T, E = any> = {
|
|
17
|
+
readonly promise: Promise<Exclude<T, NotSet>>;
|
|
18
|
+
result: Result<Exclude<T, NotSet>, E> | NotSet;
|
|
19
|
+
};
|
|
20
|
+
interface PromiseWrapperOk<T, E = any> extends PromiseWrapper<T, E> {
|
|
21
|
+
result: {
|
|
22
|
+
readonly kind: 'Ok';
|
|
23
|
+
readonly value: Exclude<T, NotSet>;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
declare function wrapPromise<T>(promise: Promise<Exclude<T, NotSet>>): PromiseWrapper<T, unknown>;
|
|
27
|
+
declare function wrapResolvedValue<T>(value: Exclude<T, NotSet>): PromiseWrapperOk<T, never>;
|
|
28
|
+
declare function readPromise<T, E>(p: PromiseWrapper<T, E>): T;
|
|
29
|
+
type PromiseState<T, E> = {
|
|
30
|
+
readonly kind: 'Pending';
|
|
31
|
+
readonly promise: Promise<T>;
|
|
32
|
+
} | Result<T, E>;
|
|
33
|
+
declare function getPromiseState<T, E>(p: PromiseWrapper<T, E>): PromiseState<T, E>;
|
|
34
|
+
//#endregion
|
|
35
|
+
export { AnyError, NOT_SET, NotSet, PromiseState, PromiseWrapper, Result, getPromiseState, readPromise, wrapPromise, wrapResolvedValue };
|
|
36
|
+
//# sourceMappingURL=PromiseWrapper.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromiseWrapper.d.mts","names":[],"sources":["../../src/core/PromiseWrapper.ts"],"sourcesContent":[],"mappings":";KAAY,QAAA;AAAA,cAEC,OAFO,EAAA,OAAA,MAAA;AAEP,KACD,MAAA,GAD4B,OACZ,OADY;AAC5B,KAEA,MAFM,CAAA,CAAA,EAAA,CAAA,CAAA,GAAU;EAEhB,SAAM,IAAA,EAAA,IAAA;EAcN,SAAA,KAAA,EAXU,CAWI;CACU,GAAA;EAAG,SAAA,IAAA,EAAA,KAAA;EAAX,SAAA,KAAA,EARN,CAQM;CAAR;;;;;AACV,KAFE,cAEF,CAAA,CAAA,EAAA,IAAA,GAAA,CAAA,GAAA;EAAgC,SAAA,OAAA,EADtB,OACsB,CADd,OACc,CADN,CACM,EADH,MACG,CAAA,CAAA;EAAM,MAAA,EAAtC,MAAsC,CAA/B,OAA+B,CAAvB,CAAuB,EAApB,MAAoB,CAAA,EAAX,CAAW,CAAA,GAAN,MAAM;AAGhD,CAAA;AAAqE,UAApD,gBAAoD,CAAA,CAAA,EAAA,IAAA,GAAA,CAAA,SAAf,cAAe,CAAA,CAAA,EAAG,CAAH,CAAA,CAAA;EAAG,MAAA,EAAA;IAG5C,SAAA,IAAA,EAAA,IAAA;IAAG,SAAA,KAAA,EAAX,OAAW,CAAH,CAAG,EAAA,MAAA,CAAA;EAAX,CAAA;;AAHgD,iBAOpD,WAPoD,CAAA,CAAA,CAAA,CAAA,OAAA,EAQzD,OARyD,CAQjD,OARiD,CAQzC,CARyC,EAQtC,MARsC,CAAA,CAAA,CAAA,EASjE,cATiE,CASlD,CATkD,EAAA,OAAA,CAAA;AAOpD,iBAeA,iBAfW,CAAA,CAAA,CAAA,CAAA,KAAA,EAgBlB,OAhBkB,CAgBV,CAhBU,EAgBP,MAhBO,CAAA,CAAA,EAiBxB,gBAjBwB,CAiBP,CAjBO,EAAA,KAAA,CAAA;AACA,iBA0BX,WA1BW,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EA0BU,cA1BV,CA0ByB,CA1BzB,EA0B4B,CA1B5B,CAAA,CAAA,EA0BiC,CA1BjC;AAAG,KAwClB,YAxCkB,CAAA,CAAA,EAAA,CAAA,CAAA,GAAA;EAAX,SAAA,IAAA,EAAA,SAAA;EAAR,SAAA,OAAA,EA2Ca,OA3Cb,CA2CqB,CA3CrB,CAAA;CACO,GA4Cd,MA5Cc,CA4CP,CA5CO,EA4CJ,CA5CI,CAAA;AAAf,iBA8Ca,eA9Cb,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EA+CE,cA/CF,CA+CiB,CA/CjB,EA+CoB,CA/CpB,CAAA,CAAA,EAgDA,YAhDA,CAgDa,CAhDb,EAgDgB,CAhDhB,CAAA"}
|
|
@@ -1,27 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
//#region src/core/PromiseWrapper.d.ts
|
|
2
|
+
type AnyError = any;
|
|
3
|
+
declare const NOT_SET: unique symbol;
|
|
4
|
+
type NotSet = typeof NOT_SET;
|
|
5
|
+
type Result<T, E> = {
|
|
6
|
+
readonly kind: 'Ok';
|
|
7
|
+
readonly value: T;
|
|
7
8
|
} | {
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
readonly kind: 'Err';
|
|
10
|
+
readonly error: E;
|
|
10
11
|
};
|
|
11
12
|
/**
|
|
12
13
|
* Invariant:
|
|
13
14
|
* Before the promise is resolved, value becomes non-null.
|
|
14
15
|
*/
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
type PromiseWrapper<T, E = any> = {
|
|
17
|
+
readonly promise: Promise<Exclude<T, NotSet>>;
|
|
18
|
+
result: Result<Exclude<T, NotSet>, E> | NotSet;
|
|
18
19
|
};
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
interface PromiseWrapperOk<T, E = any> extends PromiseWrapper<T, E> {
|
|
21
|
+
result: {
|
|
22
|
+
readonly kind: 'Ok';
|
|
23
|
+
readonly value: Exclude<T, NotSet>;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
declare function wrapPromise<T>(promise: Promise<Exclude<T, NotSet>>): PromiseWrapper<T, unknown>;
|
|
27
|
+
declare function wrapResolvedValue<T>(value: Exclude<T, NotSet>): PromiseWrapperOk<T, never>;
|
|
28
|
+
declare function readPromise<T, E>(p: PromiseWrapper<T, E>): T;
|
|
29
|
+
type PromiseState<T, E> = {
|
|
30
|
+
readonly kind: 'Pending';
|
|
31
|
+
readonly promise: Promise<T>;
|
|
25
32
|
} | Result<T, E>;
|
|
26
|
-
|
|
33
|
+
declare function getPromiseState<T, E>(p: PromiseWrapper<T, E>): PromiseState<T, E>;
|
|
34
|
+
//#endregion
|
|
35
|
+
export { AnyError, NOT_SET, NotSet, PromiseState, PromiseWrapper, Result, getPromiseState, readPromise, wrapPromise, wrapResolvedValue };
|
|
27
36
|
//# sourceMappingURL=PromiseWrapper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromiseWrapper.d.ts","
|
|
1
|
+
{"version":3,"file":"PromiseWrapper.d.ts","names":[],"sources":["../../src/core/PromiseWrapper.ts"],"sourcesContent":[],"mappings":";KAAY,QAAA;AAAA,cAEC,OAFO,EAAA,OAAA,MAAA;AAEP,KACD,MAAA,GAD4B,OACZ,OADY;AAC5B,KAEA,MAFM,CAAA,CAAA,EAAA,CAAA,CAAA,GAAU;EAEhB,SAAM,IAAA,EAAA,IAAA;EAcN,SAAA,KAAA,EAXU,CAWI;CACU,GAAA;EAAG,SAAA,IAAA,EAAA,KAAA;EAAX,SAAA,KAAA,EARN,CAQM;CAAR;;;;;AACV,KAFE,cAEF,CAAA,CAAA,EAAA,IAAA,GAAA,CAAA,GAAA;EAAgC,SAAA,OAAA,EADtB,OACsB,CADd,OACc,CADN,CACM,EADH,MACG,CAAA,CAAA;EAAM,MAAA,EAAtC,MAAsC,CAA/B,OAA+B,CAAvB,CAAuB,EAApB,MAAoB,CAAA,EAAX,CAAW,CAAA,GAAN,MAAM;AAGhD,CAAA;AAAqE,UAApD,gBAAoD,CAAA,CAAA,EAAA,IAAA,GAAA,CAAA,SAAf,cAAe,CAAA,CAAA,EAAG,CAAH,CAAA,CAAA;EAAG,MAAA,EAAA;IAG5C,SAAA,IAAA,EAAA,IAAA;IAAG,SAAA,KAAA,EAAX,OAAW,CAAH,CAAG,EAAA,MAAA,CAAA;EAAX,CAAA;;AAHgD,iBAOpD,WAPoD,CAAA,CAAA,CAAA,CAAA,OAAA,EAQzD,OARyD,CAQjD,OARiD,CAQzC,CARyC,EAQtC,MARsC,CAAA,CAAA,CAAA,EASjE,cATiE,CASlD,CATkD,EAAA,OAAA,CAAA;AAOpD,iBAeA,iBAfW,CAAA,CAAA,CAAA,CAAA,KAAA,EAgBlB,OAhBkB,CAgBV,CAhBU,EAgBP,MAhBO,CAAA,CAAA,EAiBxB,gBAjBwB,CAiBP,CAjBO,EAAA,KAAA,CAAA;AACA,iBA0BX,WA1BW,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EA0BU,cA1BV,CA0ByB,CA1BzB,EA0B4B,CA1B5B,CAAA,CAAA,EA0BiC,CA1BjC;AAAG,KAwClB,YAxCkB,CAAA,CAAA,EAAA,CAAA,CAAA,GAAA;EAAX,SAAA,IAAA,EAAA,SAAA;EAAR,SAAA,OAAA,EA2Ca,OA3Cb,CA2CqB,CA3CrB,CAAA;CACO,GA4Cd,MA5Cc,CA4CP,CA5CO,EA4CJ,CA5CI,CAAA;AAAf,iBA8Ca,eA9Cb,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EA+CE,cA/CF,CA+CiB,CA/CjB,EA+CoB,CA/CpB,CAAA,CAAA,EAgDA,YAhDA,CAgDa,CAhDb,EAgDgB,CAhDhB,CAAA"}
|
|
@@ -1,51 +1,53 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
exports.wrapPromise = wrapPromise;
|
|
5
|
-
exports.wrapResolvedValue = wrapResolvedValue;
|
|
6
|
-
exports.readPromise = readPromise;
|
|
7
|
-
exports.getPromiseState = getPromiseState;
|
|
8
|
-
exports.NOT_SET = Symbol('NOT_SET');
|
|
1
|
+
|
|
2
|
+
//#region src/core/PromiseWrapper.ts
|
|
3
|
+
const NOT_SET = Symbol("NOT_SET");
|
|
9
4
|
function wrapPromise(promise) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
5
|
+
const wrapper = {
|
|
6
|
+
promise,
|
|
7
|
+
result: NOT_SET
|
|
8
|
+
};
|
|
9
|
+
promise.then((v) => {
|
|
10
|
+
wrapper.result = {
|
|
11
|
+
kind: "Ok",
|
|
12
|
+
value: v
|
|
13
|
+
};
|
|
14
|
+
}).catch((e) => {
|
|
15
|
+
wrapper.result = {
|
|
16
|
+
kind: "Err",
|
|
17
|
+
error: e
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
return wrapper;
|
|
20
21
|
}
|
|
21
22
|
function wrapResolvedValue(value) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
return {
|
|
24
|
+
promise: Promise.resolve(value),
|
|
25
|
+
result: {
|
|
26
|
+
kind: "Ok",
|
|
27
|
+
value
|
|
28
|
+
}
|
|
29
|
+
};
|
|
29
30
|
}
|
|
30
31
|
function readPromise(p) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
throw resultKind.error;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
throw p.promise;
|
|
32
|
+
const { result } = p;
|
|
33
|
+
if (result !== NOT_SET) {
|
|
34
|
+
const resultKind = result;
|
|
35
|
+
if (resultKind.kind === "Ok") return resultKind.value;
|
|
36
|
+
else throw resultKind.error;
|
|
37
|
+
}
|
|
38
|
+
throw p.promise;
|
|
42
39
|
}
|
|
43
40
|
function getPromiseState(p) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
promise: p.promise,
|
|
50
|
-
};
|
|
41
|
+
if (p.result !== NOT_SET) return p.result;
|
|
42
|
+
return {
|
|
43
|
+
kind: "Pending",
|
|
44
|
+
promise: p.promise
|
|
45
|
+
};
|
|
51
46
|
}
|
|
47
|
+
|
|
48
|
+
//#endregion
|
|
49
|
+
exports.NOT_SET = NOT_SET;
|
|
50
|
+
exports.getPromiseState = getPromiseState;
|
|
51
|
+
exports.readPromise = readPromise;
|
|
52
|
+
exports.wrapPromise = wrapPromise;
|
|
53
|
+
exports.wrapResolvedValue = wrapResolvedValue;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
//#region src/core/PromiseWrapper.ts
|
|
2
|
+
const NOT_SET = Symbol("NOT_SET");
|
|
3
|
+
function wrapPromise(promise) {
|
|
4
|
+
const wrapper = {
|
|
5
|
+
promise,
|
|
6
|
+
result: NOT_SET
|
|
7
|
+
};
|
|
8
|
+
promise.then((v) => {
|
|
9
|
+
wrapper.result = {
|
|
10
|
+
kind: "Ok",
|
|
11
|
+
value: v
|
|
12
|
+
};
|
|
13
|
+
}).catch((e) => {
|
|
14
|
+
wrapper.result = {
|
|
15
|
+
kind: "Err",
|
|
16
|
+
error: e
|
|
17
|
+
};
|
|
18
|
+
});
|
|
19
|
+
return wrapper;
|
|
20
|
+
}
|
|
21
|
+
function wrapResolvedValue(value) {
|
|
22
|
+
return {
|
|
23
|
+
promise: Promise.resolve(value),
|
|
24
|
+
result: {
|
|
25
|
+
kind: "Ok",
|
|
26
|
+
value
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function readPromise(p) {
|
|
31
|
+
const { result } = p;
|
|
32
|
+
if (result !== NOT_SET) {
|
|
33
|
+
const resultKind = result;
|
|
34
|
+
if (resultKind.kind === "Ok") return resultKind.value;
|
|
35
|
+
else throw resultKind.error;
|
|
36
|
+
}
|
|
37
|
+
throw p.promise;
|
|
38
|
+
}
|
|
39
|
+
function getPromiseState(p) {
|
|
40
|
+
if (p.result !== NOT_SET) return p.result;
|
|
41
|
+
return {
|
|
42
|
+
kind: "Pending",
|
|
43
|
+
promise: p.promise
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
//#endregion
|
|
48
|
+
export { NOT_SET, getPromiseState, readPromise, wrapPromise, wrapResolvedValue };
|
|
49
|
+
//# sourceMappingURL=PromiseWrapper.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromiseWrapper.mjs","names":["wrapper: PromiseWrapper<T, any>"],"sources":["../../src/core/PromiseWrapper.ts"],"sourcesContent":["export type AnyError = any;\n\nexport const NOT_SET = Symbol('NOT_SET');\nexport type NotSet = typeof NOT_SET;\n\nexport type Result<T, E> =\n | {\n readonly kind: 'Ok';\n readonly value: T;\n }\n | {\n readonly kind: 'Err';\n readonly error: E;\n };\n\n/**\n * Invariant:\n * Before the promise is resolved, value becomes non-null.\n */\nexport type PromiseWrapper<T, E = any> = {\n readonly promise: Promise<Exclude<T, NotSet>>;\n result: Result<Exclude<T, NotSet>, E> | NotSet;\n};\n\nexport interface PromiseWrapperOk<T, E = any> extends PromiseWrapper<T, E> {\n result: {\n readonly kind: 'Ok';\n readonly value: Exclude<T, NotSet>;\n };\n}\n\nexport function wrapPromise<T>(\n promise: Promise<Exclude<T, NotSet>>,\n): PromiseWrapper<T, unknown> {\n // TODO confirm suspense works if the promise is already resolved.\n const wrapper: PromiseWrapper<T, any> = { promise, result: NOT_SET };\n promise\n .then((v) => {\n wrapper.result = { kind: 'Ok', value: v };\n })\n .catch((e) => {\n wrapper.result = { kind: 'Err', error: e };\n });\n return wrapper;\n}\n\nexport function wrapResolvedValue<T>(\n value: Exclude<T, NotSet>,\n): PromiseWrapperOk<T, never> {\n return {\n promise: Promise.resolve(value),\n result: {\n kind: 'Ok',\n value,\n },\n };\n}\n\nexport function readPromise<T, E>(p: PromiseWrapper<T, E>): T {\n const { result } = p;\n if (result !== NOT_SET) {\n const resultKind = result;\n if (resultKind.kind === 'Ok') {\n return resultKind.value;\n } else {\n throw resultKind.error;\n }\n }\n\n throw p.promise;\n}\n\nexport type PromiseState<T, E> =\n | {\n readonly kind: 'Pending';\n readonly promise: Promise<T>;\n }\n | Result<T, E>;\n\nexport function getPromiseState<T, E>(\n p: PromiseWrapper<T, E>,\n): PromiseState<T, E> {\n if (p.result !== NOT_SET) {\n return p.result;\n }\n return {\n kind: 'Pending',\n promise: p.promise,\n };\n}\n"],"mappings":";AAEA,MAAa,UAAU,OAAO,UAAU;AA6BxC,SAAgB,YACd,SAC4B;CAE5B,MAAMA,UAAkC;EAAE;EAAS,QAAQ;EAAS;AACpE,SACG,MAAM,MAAM;AACX,UAAQ,SAAS;GAAE,MAAM;GAAM,OAAO;GAAG;GACzC,CACD,OAAO,MAAM;AACZ,UAAQ,SAAS;GAAE,MAAM;GAAO,OAAO;GAAG;GAC1C;AACJ,QAAO;;AAGT,SAAgB,kBACd,OAC4B;AAC5B,QAAO;EACL,SAAS,QAAQ,QAAQ,MAAM;EAC/B,QAAQ;GACN,MAAM;GACN;GACD;EACF;;AAGH,SAAgB,YAAkB,GAA4B;CAC5D,MAAM,EAAE,WAAW;AACnB,KAAI,WAAW,SAAS;EACtB,MAAM,aAAa;AACnB,MAAI,WAAW,SAAS,KACtB,QAAO,WAAW;MAElB,OAAM,WAAW;;AAIrB,OAAM,EAAE;;AAUV,SAAgB,gBACd,GACoB;AACpB,KAAI,EAAE,WAAW,QACf,QAAO,EAAE;AAEX,QAAO;EACL,MAAM;EACN,SAAS,EAAE;EACZ"}
|