@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
|
@@ -1,42 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.js');
|
|
2
|
+
const require_logging = require('../core/logging.js');
|
|
3
|
+
const require_IsographEnvironmentProvider = require('./IsographEnvironmentProvider.js');
|
|
4
|
+
const require_getOrCreateCacheForArtifact = require('../core/getOrCreateCacheForArtifact.js');
|
|
5
|
+
let __isograph_react_disposable_state = require("@isograph/react-disposable-state");
|
|
6
|
+
__isograph_react_disposable_state = require_rolldown_runtime.__toESM(__isograph_react_disposable_state);
|
|
7
|
+
|
|
8
|
+
//#region src/react/useLazyReference.ts
|
|
8
9
|
function useLazyReference(entrypoint, variables, ...[fetchOptions]) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}));
|
|
16
|
-
}
|
|
17
|
-
const cache = (0, cache_1.getOrCreateCacheForArtifact)(environment, entrypoint, variables, fetchOptions);
|
|
18
|
-
return {
|
|
19
|
-
fragmentReference: (0, react_disposable_state_1.useLazyDisposableState)(cache).state,
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
// @ts-ignore
|
|
23
|
-
function tsTests() {
|
|
24
|
-
let withAst;
|
|
25
|
-
let withAstLoader;
|
|
26
|
-
let withAstOrLoader;
|
|
27
|
-
useLazyReference(withAst, {});
|
|
28
|
-
useLazyReference(withAst, {}, { shouldFetch: 'Yes' });
|
|
29
|
-
useLazyReference(withAst, {}, { shouldFetch: 'IfNecessary' });
|
|
30
|
-
// @ts-expect-error if there's no ast, require `shouldFetch` to be specified
|
|
31
|
-
useLazyReference(withAstLoader, {});
|
|
32
|
-
useLazyReference(withAstLoader, {}, { shouldFetch: 'Yes' });
|
|
33
|
-
// @ts-expect-error if there's no ast, `shouldFetch` can't be `IfNecessary`
|
|
34
|
-
useLazyReference(withAstLoader, {}, { shouldFetch: 'IfNecessary' });
|
|
35
|
-
// if the type is unknown there can be no ast so we should use the same rules
|
|
36
|
-
// but because of TS bugs with inference we just return unknown
|
|
37
|
-
// @ts-expect-error this returns unknown which doesn't satisfy the constraint
|
|
38
|
-
useLazyReference(withAstOrLoader, {});
|
|
39
|
-
// @ts-expect-error this returns unknown which doesn't satisfy the constraint
|
|
40
|
-
useLazyReference(withAstOrLoader, {}, { shouldFetch: 'Yes' });
|
|
41
|
-
useLazyReference(withAstOrLoader, {}, { shouldFetch: 'IfNecessary' });
|
|
10
|
+
const environment = require_IsographEnvironmentProvider.useIsographEnvironment();
|
|
11
|
+
if (entrypoint?.kind !== "Entrypoint") require_logging.logMessage(environment, () => ({
|
|
12
|
+
kind: "NonEntrypointReceived",
|
|
13
|
+
entrypoint
|
|
14
|
+
}));
|
|
15
|
+
return { fragmentReference: (0, __isograph_react_disposable_state.useLazyDisposableState)(require_getOrCreateCacheForArtifact.getOrCreateCacheForArtifact(environment, entrypoint, variables, fetchOptions)).state };
|
|
42
16
|
}
|
|
17
|
+
|
|
18
|
+
//#endregion
|
|
19
|
+
exports.useLazyReference = useLazyReference;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { logMessage } from "../core/logging.mjs";
|
|
2
|
+
import { useIsographEnvironment } from "./IsographEnvironmentProvider.mjs";
|
|
3
|
+
import { getOrCreateCacheForArtifact } from "../core/getOrCreateCacheForArtifact.mjs";
|
|
4
|
+
import { useLazyDisposableState } from "@isograph/react-disposable-state";
|
|
5
|
+
|
|
6
|
+
//#region src/react/useLazyReference.ts
|
|
7
|
+
function useLazyReference(entrypoint, variables, ...[fetchOptions]) {
|
|
8
|
+
const environment = useIsographEnvironment();
|
|
9
|
+
if (entrypoint?.kind !== "Entrypoint") logMessage(environment, () => ({
|
|
10
|
+
kind: "NonEntrypointReceived",
|
|
11
|
+
entrypoint
|
|
12
|
+
}));
|
|
13
|
+
return { fragmentReference: useLazyDisposableState(getOrCreateCacheForArtifact(environment, entrypoint, variables, fetchOptions)).state };
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
export { useLazyReference };
|
|
18
|
+
//# sourceMappingURL=useLazyReference.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLazyReference.mjs","names":[],"sources":["../../src/react/useLazyReference.ts"],"sourcesContent":["import { useLazyDisposableState } from '@isograph/react-disposable-state';\nimport { type NetworkResponseObject } from '../core/cache';\nimport type { FetchOptions } from '../core/check';\nimport { type RequiredFetchOptions } from '../core/check';\nimport type { IsographEntrypoint } from '../core/entrypoint';\nimport {\n type NormalizationAst,\n type NormalizationAstLoader,\n} from '../core/entrypoint';\nimport type {\n ExtractParameters,\n FragmentReference,\n} from '../core/FragmentReference';\nimport { type UnknownTReadFromStore } from '../core/FragmentReference';\nimport { logMessage } from '../core/logging';\nimport { useIsographEnvironment } from './IsographEnvironmentProvider';\nimport { getOrCreateCacheForArtifact } from '../core/getOrCreateCacheForArtifact';\n\nexport function useLazyReference<\n TReadFromStore extends UnknownTReadFromStore,\n TClientFieldValue,\n TNormalizationAst extends NormalizationAst | NormalizationAstLoader,\n TRawResponseType extends NetworkResponseObject,\n>(\n entrypoint: IsographEntrypoint<\n TReadFromStore,\n TClientFieldValue,\n TNormalizationAst,\n TRawResponseType\n >,\n variables: ExtractParameters<TReadFromStore>,\n ...[fetchOptions]: TNormalizationAst extends NormalizationAstLoader\n ? [fetchOptions: RequiredFetchOptions<TClientFieldValue>]\n : [fetchOptions?: FetchOptions<TClientFieldValue, TRawResponseType>]\n): NormalizationAst | NormalizationAstLoader extends TNormalizationAst\n ? unknown\n : {\n fragmentReference: FragmentReference<TReadFromStore, TClientFieldValue>;\n } {\n const environment = useIsographEnvironment();\n\n if (entrypoint?.kind !== 'Entrypoint') {\n // TODO have a separate error logger\n logMessage(environment, () => ({\n kind: 'NonEntrypointReceived',\n entrypoint,\n }));\n }\n\n const cache = getOrCreateCacheForArtifact(\n environment,\n entrypoint,\n variables,\n fetchOptions,\n );\n\n return {\n fragmentReference: useLazyDisposableState(cache).state,\n };\n}\n\n// @ts-ignore\nfunction tsTests() {\n let withAst!: IsographEntrypoint<any, unknown, NormalizationAst, any>;\n let withAstLoader!: IsographEntrypoint<\n any,\n unknown,\n NormalizationAstLoader,\n {}\n >;\n let withAstOrLoader!: IsographEntrypoint<\n any,\n unknown,\n NormalizationAst | NormalizationAstLoader,\n {}\n >;\n\n useLazyReference(withAst, {}) satisfies {};\n useLazyReference(withAst, {}, { shouldFetch: 'Yes' }) satisfies {};\n useLazyReference(withAst, {}, { shouldFetch: 'IfNecessary' }) satisfies {};\n\n // @ts-expect-error if there's no ast, require `shouldFetch` to be specified\n useLazyReference(withAstLoader, {});\n useLazyReference(withAstLoader, {}, { shouldFetch: 'Yes' }) satisfies {};\n // @ts-expect-error if there's no ast, `shouldFetch` can't be `IfNecessary`\n useLazyReference(withAstLoader, {}, { shouldFetch: 'IfNecessary' });\n\n // if the type is unknown there can be no ast so we should use the same rules\n // but because of TS bugs with inference we just return unknown\n // @ts-expect-error this returns unknown which doesn't satisfy the constraint\n useLazyReference(withAstOrLoader, {}) satisfies {};\n // @ts-expect-error this returns unknown which doesn't satisfy the constraint\n useLazyReference(withAstOrLoader, {}, { shouldFetch: 'Yes' }) satisfies {};\n useLazyReference(\n withAstOrLoader,\n {},\n { shouldFetch: 'IfNecessary' },\n // @ts-expect-error this returns unknown which doesn't satisfy the constraint\n ) satisfies {};\n}\n"],"mappings":";;;;;;AAkBA,SAAgB,iBAMd,YAMA,WACA,GAAG,CAAC,eAOA;CACJ,MAAM,cAAc,wBAAwB;AAE5C,KAAI,YAAY,SAAS,aAEvB,YAAW,oBAAoB;EAC7B,MAAM;EACN;EACD,EAAE;AAUL,QAAO,EACL,mBAAmB,uBARP,4BACZ,aACA,YACA,WACA,aACD,CAGiD,CAAC,OAClD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ReaderAst } from "../core/reader.mjs";
|
|
2
|
+
import { NetworkRequestReaderOptions, WithEncounteredRecords } from "../core/read.mjs";
|
|
3
|
+
import "../core/IsographEnvironment.mjs";
|
|
4
|
+
import { ExtractData, FragmentReference, UnknownTReadFromStore } from "../core/FragmentReference.mjs";
|
|
5
|
+
|
|
6
|
+
//#region src/react/useReadAndSubscribe.d.ts
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Read the data from a fragment reference and subscribe to updates.
|
|
10
|
+
*/
|
|
11
|
+
declare function useReadAndSubscribe<TReadFromStore extends UnknownTReadFromStore>(fragmentReference: FragmentReference<TReadFromStore, any>, networkRequestOptions: NetworkRequestReaderOptions, readerAst: ReaderAst<TReadFromStore>): ExtractData<TReadFromStore>;
|
|
12
|
+
declare function useSubscribeToMultiple<TReadFromStore extends UnknownTReadFromStore>(items: ReadonlyArray<{
|
|
13
|
+
records: WithEncounteredRecords<TReadFromStore>;
|
|
14
|
+
callback: (updatedRecords: WithEncounteredRecords<TReadFromStore>) => void;
|
|
15
|
+
fragmentReference: FragmentReference<TReadFromStore, any>;
|
|
16
|
+
readerAst: ReaderAst<TReadFromStore>;
|
|
17
|
+
}>): void;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { useReadAndSubscribe, useSubscribeToMultiple };
|
|
20
|
+
//# sourceMappingURL=useReadAndSubscribe.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useReadAndSubscribe.d.mts","names":[],"sources":["../../src/react/useReadAndSubscribe.ts"],"sourcesContent":[],"mappings":";;;;;;;;;AAwBA;AACyB,iBADT,mBACS,CAAA,uBAAA,qBAAA,CAAA,CAAA,iBAAA,EAEJ,iBAFI,CAEc,cAFd,EAAA,GAAA,CAAA,EAAA,qBAAA,EAGA,2BAHA,EAAA,SAAA,EAIZ,SAJY,CAIF,cAJE,CAAA,CAAA,EAKtB,WALsB,CAKV,cALU,CAAA;AAEc,iBAiBvB,sBAjBuB,CAAA,uBAkBd,qBAlBc,CAAA,CAAA,KAAA,EAoB9B,aApB8B,CAAA;EAAlB,OAAA,EAqBR,sBArBQ,CAqBe,cArBf,CAAA;EACI,QAAA,EAAA,CAAA,cAAA,EAqBM,sBArBN,CAqB6B,cArB7B,CAAA,EAAA,GAAA,IAAA;EACF,iBAAA,EAqBA,iBArBA,CAqBkB,cArBlB,EAAA,GAAA,CAAA;EAAV,SAAA,EAsBE,SAtBF,CAsBY,cAtBZ,CAAA;CACE,CAAA,CAAA,EAAA,IAAA"}
|
|
@@ -1,14 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { NetworkRequestReaderOptions, WithEncounteredRecords } from
|
|
3
|
-
import
|
|
1
|
+
import { ReaderAst } from "../core/reader.js";
|
|
2
|
+
import { NetworkRequestReaderOptions, WithEncounteredRecords } from "../core/read.js";
|
|
3
|
+
import { ExtractData, FragmentReference, UnknownTReadFromStore } from "../core/FragmentReference.js";
|
|
4
|
+
|
|
5
|
+
//#region src/react/useReadAndSubscribe.d.ts
|
|
6
|
+
|
|
4
7
|
/**
|
|
5
8
|
* Read the data from a fragment reference and subscribe to updates.
|
|
6
9
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
declare function useReadAndSubscribe<TReadFromStore extends UnknownTReadFromStore>(fragmentReference: FragmentReference<TReadFromStore, any>, networkRequestOptions: NetworkRequestReaderOptions, readerAst: ReaderAst<TReadFromStore>): ExtractData<TReadFromStore>;
|
|
11
|
+
declare function useSubscribeToMultiple<TReadFromStore extends UnknownTReadFromStore>(items: ReadonlyArray<{
|
|
12
|
+
records: WithEncounteredRecords<TReadFromStore>;
|
|
13
|
+
callback: (updatedRecords: WithEncounteredRecords<TReadFromStore>) => void;
|
|
14
|
+
fragmentReference: FragmentReference<TReadFromStore, any>;
|
|
15
|
+
readerAst: ReaderAst<TReadFromStore>;
|
|
13
16
|
}>): void;
|
|
17
|
+
//#endregion
|
|
18
|
+
export { useReadAndSubscribe, useSubscribeToMultiple };
|
|
14
19
|
//# sourceMappingURL=useReadAndSubscribe.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useReadAndSubscribe.d.ts","
|
|
1
|
+
{"version":3,"file":"useReadAndSubscribe.d.ts","names":[],"sources":["../../src/react/useReadAndSubscribe.ts"],"sourcesContent":[],"mappings":";;;;;;;AAwBA;;AAGuC,iBAHvB,mBAGuB,CAAA,uBAFd,qBAEc,CAAA,CAAA,iBAAA,EAAlB,iBAAkB,CAAA,cAAA,EAAA,GAAA,CAAA,EAAA,qBAAA,EACd,2BADc,EAAA,SAAA,EAE1B,SAF0B,CAEhB,cAFgB,CAAA,CAAA,EAGpC,WAHoC,CAGxB,cAHwB,CAAA;AAAlB,iBAiBL,sBAjBK,CAAA,uBAkBI,qBAlBJ,CAAA,CAAA,KAAA,EAoBZ,aApBY,CAAA;EACI,OAAA,EAoBZ,sBApBY,CAoBW,cApBX,CAAA;EACF,QAAA,EAAA,CAAA,cAAA,EAoBQ,sBApBR,CAoB+B,cApB/B,CAAA,EAAA,GAAA,IAAA;EAAV,iBAAA,EAqBU,iBArBV,CAqB4B,cArB5B,EAAA,GAAA,CAAA;EACE,SAAA,EAqBA,SArBA,CAqBU,cArBV,CAAA;CAAZ,CAAA,CAAA,EAAA,IAAA"}
|
|
@@ -1,42 +1,62 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
1
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.js');
|
|
2
|
+
const require_PromiseWrapper = require('../core/PromiseWrapper.js');
|
|
3
|
+
const require_logging = require('../core/logging.js');
|
|
4
|
+
const require_FragmentReference = require('../core/FragmentReference.js');
|
|
5
|
+
const require_read = require('../core/read.js');
|
|
6
|
+
const require_subscribe = require('../core/subscribe.js');
|
|
7
|
+
const require_IsographEnvironmentProvider = require('./IsographEnvironmentProvider.js');
|
|
8
|
+
const require_maybeUnwrapNetworkRequest = require('./maybeUnwrapNetworkRequest.js');
|
|
9
|
+
const require_useRerenderOnChange = require('./useRerenderOnChange.js');
|
|
10
|
+
let react = require("react");
|
|
11
|
+
react = require_rolldown_runtime.__toESM(react);
|
|
12
|
+
|
|
13
|
+
//#region src/react/useReadAndSubscribe.ts
|
|
11
14
|
/**
|
|
12
|
-
|
|
13
|
-
|
|
15
|
+
* Read the data from a fragment reference and subscribe to updates.
|
|
16
|
+
*/
|
|
14
17
|
function useReadAndSubscribe(fragmentReference, networkRequestOptions, readerAst) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
const environment = require_IsographEnvironmentProvider.useIsographEnvironment();
|
|
19
|
+
const [readOutDataAndRecords, setReadOutDataAndRecords] = (0, react.useState)(() => require_read.readButDoNotEvaluate(environment, fragmentReference, networkRequestOptions));
|
|
20
|
+
require_useRerenderOnChange.useRerenderOnChange(readOutDataAndRecords, fragmentReference, setReadOutDataAndRecords, readerAst);
|
|
21
|
+
return readOutDataAndRecords.item;
|
|
19
22
|
}
|
|
20
23
|
function useSubscribeToMultiple(items) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
// TODO find out
|
|
35
|
-
[
|
|
36
|
-
items
|
|
37
|
-
.map(({ fragmentReference }) => {
|
|
38
|
-
(0, FragmentReference_1.stableIdForFragmentReference)(fragmentReference);
|
|
39
|
-
})
|
|
40
|
-
.join('.'),
|
|
41
|
-
]);
|
|
24
|
+
const environment = require_IsographEnvironmentProvider.useIsographEnvironment();
|
|
25
|
+
(0, react.useEffect)(() => {
|
|
26
|
+
const cleanupFns = items.map(({ records, callback, fragmentReference, readerAst }) => {
|
|
27
|
+
return require_subscribe.subscribe(environment, records, fragmentReference, callback, readerAst);
|
|
28
|
+
});
|
|
29
|
+
return () => {
|
|
30
|
+
cleanupFns.forEach((loader) => {
|
|
31
|
+
loader();
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
}, [items.map(({ fragmentReference }) => {
|
|
35
|
+
require_FragmentReference.stableIdForFragmentReference(fragmentReference);
|
|
36
|
+
}).join(".")]);
|
|
42
37
|
}
|
|
38
|
+
const componentFunction = (environment, fragmentReference, networkRequestOptions, startUpdate) => {
|
|
39
|
+
function Component(additionalRuntimeProps) {
|
|
40
|
+
require_maybeUnwrapNetworkRequest.maybeUnwrapNetworkRequest(fragmentReference.networkRequest, networkRequestOptions);
|
|
41
|
+
const readerWithRefetchQueries = require_PromiseWrapper.readPromise(fragmentReference.readerWithRefetchQueries);
|
|
42
|
+
const data = useReadAndSubscribe(fragmentReference, networkRequestOptions, readerWithRefetchQueries.readerArtifact.readerAst);
|
|
43
|
+
require_logging.logMessage(environment, () => ({
|
|
44
|
+
kind: "ComponentRerendered",
|
|
45
|
+
componentName: fragmentReference.fieldName,
|
|
46
|
+
rootLink: fragmentReference.root
|
|
47
|
+
}));
|
|
48
|
+
return readerWithRefetchQueries.readerArtifact.resolver({
|
|
49
|
+
data,
|
|
50
|
+
parameters: fragmentReference.variables,
|
|
51
|
+
startUpdate: readerWithRefetchQueries.readerArtifact.hasUpdatable ? startUpdate : void 0
|
|
52
|
+
}, additionalRuntimeProps);
|
|
53
|
+
}
|
|
54
|
+
const idString = `(type: ${fragmentReference.root.__typename}, id: ${fragmentReference.root.__link})`;
|
|
55
|
+
Component.displayName = `${fragmentReference.fieldName} ${idString} @component`;
|
|
56
|
+
return Component;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
//#endregion
|
|
60
|
+
exports.componentFunction = componentFunction;
|
|
61
|
+
exports.useReadAndSubscribe = useReadAndSubscribe;
|
|
62
|
+
exports.useSubscribeToMultiple = useSubscribeToMultiple;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { readPromise } from "../core/PromiseWrapper.mjs";
|
|
2
|
+
import { logMessage } from "../core/logging.mjs";
|
|
3
|
+
import { stableIdForFragmentReference } from "../core/FragmentReference.mjs";
|
|
4
|
+
import { readButDoNotEvaluate } from "../core/read.mjs";
|
|
5
|
+
import { subscribe } from "../core/subscribe.mjs";
|
|
6
|
+
import { useIsographEnvironment } from "./IsographEnvironmentProvider.mjs";
|
|
7
|
+
import { maybeUnwrapNetworkRequest } from "./maybeUnwrapNetworkRequest.mjs";
|
|
8
|
+
import { useRerenderOnChange } from "./useRerenderOnChange.mjs";
|
|
9
|
+
import { useEffect, useState } from "react";
|
|
10
|
+
|
|
11
|
+
//#region src/react/useReadAndSubscribe.ts
|
|
12
|
+
/**
|
|
13
|
+
* Read the data from a fragment reference and subscribe to updates.
|
|
14
|
+
*/
|
|
15
|
+
function useReadAndSubscribe(fragmentReference, networkRequestOptions, readerAst) {
|
|
16
|
+
const environment = useIsographEnvironment();
|
|
17
|
+
const [readOutDataAndRecords, setReadOutDataAndRecords] = useState(() => readButDoNotEvaluate(environment, fragmentReference, networkRequestOptions));
|
|
18
|
+
useRerenderOnChange(readOutDataAndRecords, fragmentReference, setReadOutDataAndRecords, readerAst);
|
|
19
|
+
return readOutDataAndRecords.item;
|
|
20
|
+
}
|
|
21
|
+
function useSubscribeToMultiple(items) {
|
|
22
|
+
const environment = useIsographEnvironment();
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
const cleanupFns = items.map(({ records, callback, fragmentReference, readerAst }) => {
|
|
25
|
+
return subscribe(environment, records, fragmentReference, callback, readerAst);
|
|
26
|
+
});
|
|
27
|
+
return () => {
|
|
28
|
+
cleanupFns.forEach((loader) => {
|
|
29
|
+
loader();
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
}, [items.map(({ fragmentReference }) => {
|
|
33
|
+
stableIdForFragmentReference(fragmentReference);
|
|
34
|
+
}).join(".")]);
|
|
35
|
+
}
|
|
36
|
+
const componentFunction = (environment, fragmentReference, networkRequestOptions, startUpdate) => {
|
|
37
|
+
function Component(additionalRuntimeProps) {
|
|
38
|
+
maybeUnwrapNetworkRequest(fragmentReference.networkRequest, networkRequestOptions);
|
|
39
|
+
const readerWithRefetchQueries = readPromise(fragmentReference.readerWithRefetchQueries);
|
|
40
|
+
const data = useReadAndSubscribe(fragmentReference, networkRequestOptions, readerWithRefetchQueries.readerArtifact.readerAst);
|
|
41
|
+
logMessage(environment, () => ({
|
|
42
|
+
kind: "ComponentRerendered",
|
|
43
|
+
componentName: fragmentReference.fieldName,
|
|
44
|
+
rootLink: fragmentReference.root
|
|
45
|
+
}));
|
|
46
|
+
return readerWithRefetchQueries.readerArtifact.resolver({
|
|
47
|
+
data,
|
|
48
|
+
parameters: fragmentReference.variables,
|
|
49
|
+
startUpdate: readerWithRefetchQueries.readerArtifact.hasUpdatable ? startUpdate : void 0
|
|
50
|
+
}, additionalRuntimeProps);
|
|
51
|
+
}
|
|
52
|
+
const idString = `(type: ${fragmentReference.root.__typename}, id: ${fragmentReference.root.__link})`;
|
|
53
|
+
Component.displayName = `${fragmentReference.fieldName} ${idString} @component`;
|
|
54
|
+
return Component;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
//#endregion
|
|
58
|
+
export { componentFunction, useReadAndSubscribe, useSubscribeToMultiple };
|
|
59
|
+
//# sourceMappingURL=useReadAndSubscribe.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useReadAndSubscribe.mjs","names":["componentFunction: IsographComponentFunction"],"sources":["../../src/react/useReadAndSubscribe.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport {\n type ExtractData,\n type FragmentReference,\n stableIdForFragmentReference,\n type UnknownTReadFromStore,\n} from '../core/FragmentReference';\nimport type { IsographComponentFunction } from '../core/IsographEnvironment';\nimport { logMessage } from '../core/logging';\nimport { readPromise } from '../core/PromiseWrapper';\nimport {\n type NetworkRequestReaderOptions,\n readButDoNotEvaluate,\n type WithEncounteredRecords,\n} from '../core/read';\nimport type { ReaderAst } from '../core/reader';\nimport { subscribe } from '../core/subscribe';\nimport { useIsographEnvironment } from './IsographEnvironmentProvider';\nimport { maybeUnwrapNetworkRequest } from './maybeUnwrapNetworkRequest';\nimport { useRerenderOnChange } from './useRerenderOnChange';\n\n/**\n * Read the data from a fragment reference and subscribe to updates.\n */\nexport function useReadAndSubscribe<\n TReadFromStore extends UnknownTReadFromStore,\n>(\n fragmentReference: FragmentReference<TReadFromStore, any>,\n networkRequestOptions: NetworkRequestReaderOptions,\n readerAst: ReaderAst<TReadFromStore>,\n): ExtractData<TReadFromStore> {\n const environment = useIsographEnvironment();\n const [readOutDataAndRecords, setReadOutDataAndRecords] = useState(() =>\n readButDoNotEvaluate(environment, fragmentReference, networkRequestOptions),\n );\n useRerenderOnChange(\n readOutDataAndRecords,\n fragmentReference,\n setReadOutDataAndRecords,\n readerAst,\n );\n return readOutDataAndRecords.item;\n}\n\nexport function useSubscribeToMultiple<\n TReadFromStore extends UnknownTReadFromStore,\n>(\n items: ReadonlyArray<{\n records: WithEncounteredRecords<TReadFromStore>;\n callback: (updatedRecords: WithEncounteredRecords<TReadFromStore>) => void;\n fragmentReference: FragmentReference<TReadFromStore, any>;\n readerAst: ReaderAst<TReadFromStore>;\n }>,\n) {\n const environment = useIsographEnvironment();\n useEffect(\n () => {\n const cleanupFns = items.map(\n ({ records, callback, fragmentReference, readerAst }) => {\n return subscribe(\n environment,\n records,\n fragmentReference,\n callback,\n readerAst,\n );\n },\n );\n return () => {\n cleanupFns.forEach((loader) => {\n loader();\n });\n };\n },\n // By analogy to useReadAndSubscribe, we can have an empty dependency array?\n // Maybe callback has to be depended on. I don't know!\n // TODO find out\n [\n items\n .map(({ fragmentReference }) => {\n stableIdForFragmentReference(fragmentReference);\n })\n .join('.'),\n ],\n );\n}\n\nexport const componentFunction: IsographComponentFunction = (\n environment,\n fragmentReference,\n networkRequestOptions,\n startUpdate,\n) => {\n function Component(additionalRuntimeProps: { [key: string]: any }) {\n maybeUnwrapNetworkRequest(\n fragmentReference.networkRequest,\n networkRequestOptions,\n );\n const readerWithRefetchQueries = readPromise(\n fragmentReference.readerWithRefetchQueries,\n );\n\n const data = useReadAndSubscribe(\n fragmentReference,\n networkRequestOptions,\n readerWithRefetchQueries.readerArtifact.readerAst,\n );\n\n logMessage(environment, () => ({\n kind: 'ComponentRerendered',\n componentName: fragmentReference.fieldName,\n rootLink: fragmentReference.root,\n }));\n\n return readerWithRefetchQueries.readerArtifact.resolver(\n // @ts-expect-error\n {\n data,\n parameters: fragmentReference.variables,\n startUpdate: readerWithRefetchQueries.readerArtifact.hasUpdatable\n ? startUpdate\n : undefined,\n },\n additionalRuntimeProps,\n );\n }\n const idString = `(type: ${fragmentReference.root.__typename}, id: ${fragmentReference.root.__link})`;\n Component.displayName = `${fragmentReference.fieldName} ${idString} @component`;\n return Component;\n};\n"],"mappings":";;;;;;;;;;;;;;AAwBA,SAAgB,oBAGd,mBACA,uBACA,WAC6B;CAC7B,MAAM,cAAc,wBAAwB;CAC5C,MAAM,CAAC,uBAAuB,4BAA4B,eACxD,qBAAqB,aAAa,mBAAmB,sBAAsB,CAC5E;AACD,qBACE,uBACA,mBACA,0BACA,UACD;AACD,QAAO,sBAAsB;;AAG/B,SAAgB,uBAGd,OAMA;CACA,MAAM,cAAc,wBAAwB;AAC5C,iBACQ;EACJ,MAAM,aAAa,MAAM,KACtB,EAAE,SAAS,UAAU,mBAAmB,gBAAgB;AACvD,UAAO,UACL,aACA,SACA,mBACA,UACA,UACD;IAEJ;AACD,eAAa;AACX,cAAW,SAAS,WAAW;AAC7B,YAAQ;KACR;;IAMN,CACE,MACG,KAAK,EAAE,wBAAwB;AAC9B,+BAA6B,kBAAkB;GAC/C,CACD,KAAK,IAAI,CACb,CACF;;AAGH,MAAaA,qBACX,aACA,mBACA,uBACA,gBACG;CACH,SAAS,UAAU,wBAAgD;AACjE,4BACE,kBAAkB,gBAClB,sBACD;EACD,MAAM,2BAA2B,YAC/B,kBAAkB,yBACnB;EAED,MAAM,OAAO,oBACX,mBACA,uBACA,yBAAyB,eAAe,UACzC;AAED,aAAW,oBAAoB;GAC7B,MAAM;GACN,eAAe,kBAAkB;GACjC,UAAU,kBAAkB;GAC7B,EAAE;AAEH,SAAO,yBAAyB,eAAe,SAE7C;GACE;GACA,YAAY,kBAAkB;GAC9B,aAAa,yBAAyB,eAAe,eACjD,cACA;GACL,EACD,uBACD;;CAEH,MAAM,WAAW,UAAU,kBAAkB,KAAK,WAAW,QAAQ,kBAAkB,KAAK,OAAO;AACnG,WAAU,cAAc,GAAG,kBAAkB,UAAU,GAAG,SAAS;AACnE,QAAO"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ReaderAst } from "../core/reader.mjs";
|
|
2
|
+
import { WithEncounteredRecords } from "../core/read.mjs";
|
|
3
|
+
import { FragmentReference } from "../core/FragmentReference.mjs";
|
|
4
|
+
|
|
5
|
+
//#region src/react/useRerenderOnChange.d.ts
|
|
6
|
+
declare function useRerenderOnChange<TReadFromStore extends {
|
|
7
|
+
parameters: object;
|
|
8
|
+
data: object;
|
|
9
|
+
}>(encounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>, fragmentReference: FragmentReference<any, any>, setEncounteredDataAndRecords: (data: WithEncounteredRecords<TReadFromStore>) => void, readerAst: ReaderAst<TReadFromStore>): void;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { useRerenderOnChange };
|
|
12
|
+
//# sourceMappingURL=useRerenderOnChange.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRerenderOnChange.d.mts","names":[],"sources":["../../src/react/useRerenderOnChange.ts"],"sourcesContent":[],"mappings":";;;;;iBASgB;;EAAA,IAAA,EAAA,MAAA;CAGoC,CAAA,CAAA,yBAAA,EAAvB,sBAAuB,CAAA,cAAA,CAAA,EAAA,iBAAA,EAC/B,iBAD+B,CAAA,GAAA,EAAA,GAAA,CAAA,EAAA,4BAAA,EAAA,CAAA,IAAA,EAG1C,sBAH0C,CAGnB,cAHmB,CAAA,EAAA,GAAA,IAAA,EAAA,SAAA,EAKvC,SALuC,CAK7B,cAL6B,CAAA,CAAA,EAAA,IAAA"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { WithEncounteredRecords } from
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { ReaderAst } from "../core/reader.js";
|
|
2
|
+
import { WithEncounteredRecords } from "../core/read.js";
|
|
3
|
+
import { FragmentReference } from "../core/FragmentReference.js";
|
|
4
|
+
|
|
5
|
+
//#region src/react/useRerenderOnChange.d.ts
|
|
6
|
+
declare function useRerenderOnChange<TReadFromStore extends {
|
|
7
|
+
parameters: object;
|
|
8
|
+
data: object;
|
|
7
9
|
}>(encounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>, fragmentReference: FragmentReference<any, any>, setEncounteredDataAndRecords: (data: WithEncounteredRecords<TReadFromStore>) => void, readerAst: ReaderAst<TReadFromStore>): void;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { useRerenderOnChange };
|
|
8
12
|
//# sourceMappingURL=useRerenderOnChange.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRerenderOnChange.d.ts","
|
|
1
|
+
{"version":3,"file":"useRerenderOnChange.d.ts","names":[],"sources":["../../src/react/useRerenderOnChange.ts"],"sourcesContent":[],"mappings":";;;;;iBASgB;;EAAA,IAAA,EAAA,MAAA;CAGoC,CAAA,CAAA,yBAAA,EAAvB,sBAAuB,CAAA,cAAA,CAAA,EAAA,iBAAA,EAC/B,iBAD+B,CAAA,GAAA,EAAA,GAAA,CAAA,EAAA,4BAAA,EAAA,CAAA,IAAA,EAG1C,sBAH0C,CAGnB,cAHmB,CAAA,EAAA,GAAA,IAAA,EAAA,SAAA,EAKvC,SALuC,CAK7B,cAL6B,CAAA,CAAA,EAAA,IAAA"}
|
|
@@ -1,22 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
// behavior when the encounteredRecords underneath a fragment change.
|
|
1
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.js');
|
|
2
|
+
const require_subscribe = require('../core/subscribe.js');
|
|
3
|
+
const require_IsographEnvironmentProvider = require('./IsographEnvironmentProvider.js');
|
|
4
|
+
let react = require("react");
|
|
5
|
+
react = require_rolldown_runtime.__toESM(react);
|
|
6
|
+
|
|
7
|
+
//#region src/react/useRerenderOnChange.ts
|
|
9
8
|
function useRerenderOnChange(encounteredDataAndRecords, fragmentReference, setEncounteredDataAndRecords, readerAst) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
// - the fragment reference is stable for the life of the component
|
|
17
|
-
// - ownership of encounteredDataAndRecords is transferred into the
|
|
18
|
-
// environment
|
|
19
|
-
// - though maybe we need to include setEncounteredDataAndRecords in
|
|
20
|
-
// the dependency array
|
|
21
|
-
}, []);
|
|
9
|
+
const environment = require_IsographEnvironmentProvider.useIsographEnvironment();
|
|
10
|
+
(0, react.useEffect)(() => {
|
|
11
|
+
return require_subscribe.subscribe(environment, encounteredDataAndRecords, fragmentReference, (newEncounteredDataAndRecords) => {
|
|
12
|
+
setEncounteredDataAndRecords(newEncounteredDataAndRecords);
|
|
13
|
+
}, readerAst);
|
|
14
|
+
}, []);
|
|
22
15
|
}
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
exports.useRerenderOnChange = useRerenderOnChange;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { subscribe } from "../core/subscribe.mjs";
|
|
2
|
+
import { useIsographEnvironment } from "./IsographEnvironmentProvider.mjs";
|
|
3
|
+
import { useEffect } from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/react/useRerenderOnChange.ts
|
|
6
|
+
function useRerenderOnChange(encounteredDataAndRecords, fragmentReference, setEncounteredDataAndRecords, readerAst) {
|
|
7
|
+
const environment = useIsographEnvironment();
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
return subscribe(environment, encounteredDataAndRecords, fragmentReference, (newEncounteredDataAndRecords) => {
|
|
10
|
+
setEncounteredDataAndRecords(newEncounteredDataAndRecords);
|
|
11
|
+
}, readerAst);
|
|
12
|
+
}, []);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
//#endregion
|
|
16
|
+
export { useRerenderOnChange };
|
|
17
|
+
//# sourceMappingURL=useRerenderOnChange.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRerenderOnChange.mjs","names":[],"sources":["../../src/react/useRerenderOnChange.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport type { FragmentReference } from '../core/FragmentReference';\nimport type { WithEncounteredRecords } from '../core/read';\nimport type { ReaderAst } from '../core/reader';\nimport { subscribe } from '../core/subscribe';\nimport { useIsographEnvironment } from './IsographEnvironmentProvider';\n\n// TODO add unit tests for this. Add integration tests that test\n// behavior when the encounteredRecords underneath a fragment change.\nexport function useRerenderOnChange<\n TReadFromStore extends { parameters: object; data: object },\n>(\n encounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>,\n fragmentReference: FragmentReference<any, any>,\n setEncounteredDataAndRecords: (\n data: WithEncounteredRecords<TReadFromStore>,\n ) => void,\n readerAst: ReaderAst<TReadFromStore>,\n) {\n const environment = useIsographEnvironment();\n useEffect(() => {\n return subscribe(\n environment,\n encounteredDataAndRecords,\n fragmentReference,\n (newEncounteredDataAndRecords) => {\n setEncounteredDataAndRecords(newEncounteredDataAndRecords);\n },\n readerAst,\n );\n // Note: this is an empty array on purpose:\n // - the fragment reference is stable for the life of the component\n // - ownership of encounteredDataAndRecords is transferred into the\n // environment\n // - though maybe we need to include setEncounteredDataAndRecords in\n // the dependency array\n }, []);\n}\n"],"mappings":";;;;;AASA,SAAgB,oBAGd,2BACA,mBACA,8BAGA,WACA;CACA,MAAM,cAAc,wBAAwB;AAC5C,iBAAgB;AACd,SAAO,UACL,aACA,2BACA,oBACC,iCAAiC;AAChC,gCAA6B,6BAA6B;KAE5D,UACD;IAOA,EAAE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { NetworkRequestReaderOptions } from "../core/read.mjs";
|
|
2
|
+
import { FragmentReference, UnknownTReadFromStore } from "../core/FragmentReference.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/react/useResult.d.ts
|
|
5
|
+
declare function useResult<TReadFromStore extends UnknownTReadFromStore, TClientFieldValue>(fragmentReference: FragmentReference<TReadFromStore, TClientFieldValue>, partialNetworkRequestOptions?: Partial<NetworkRequestReaderOptions> | void): TClientFieldValue;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { useResult };
|
|
8
|
+
//# sourceMappingURL=useResult.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useResult.d.mts","names":[],"sources":["../../src/react/useResult.ts"],"sourcesContent":[],"mappings":";;;;iBAegB,iCACS,6DAGJ,kBAAkB,gBAAgB,mDACtB,QAAQ,sCACtC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { NetworkRequestReaderOptions } from "../core/read.js";
|
|
2
|
+
import { FragmentReference, UnknownTReadFromStore } from "../core/FragmentReference.js";
|
|
3
|
+
|
|
4
|
+
//#region src/react/useResult.d.ts
|
|
5
|
+
declare function useResult<TReadFromStore extends UnknownTReadFromStore, TClientFieldValue>(fragmentReference: FragmentReference<TReadFromStore, TClientFieldValue>, partialNetworkRequestOptions?: Partial<NetworkRequestReaderOptions> | void): TClientFieldValue;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { useResult };
|
|
6
8
|
//# sourceMappingURL=useResult.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useResult.d.ts","
|
|
1
|
+
{"version":3,"file":"useResult.d.ts","names":[],"sources":["../../src/react/useResult.ts"],"sourcesContent":[],"mappings":";;;;iBAegB,iCACS,6DAGJ,kBAAkB,gBAAgB,mDACtB,QAAQ,sCACtC"}
|
package/dist/react/useResult.js
CHANGED
|
@@ -1,42 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const useReadAndSubscribe_1 = require("./useReadAndSubscribe");
|
|
1
|
+
const require_PromiseWrapper = require('../core/PromiseWrapper.js');
|
|
2
|
+
const require_startUpdate = require('../core/startUpdate.js');
|
|
3
|
+
const require_componentCache = require('../core/componentCache.js');
|
|
4
|
+
const require_read = require('../core/read.js');
|
|
5
|
+
const require_IsographEnvironmentProvider = require('./IsographEnvironmentProvider.js');
|
|
6
|
+
const require_maybeUnwrapNetworkRequest = require('./maybeUnwrapNetworkRequest.js');
|
|
7
|
+
const require_useReadAndSubscribe = require('./useReadAndSubscribe.js');
|
|
8
|
+
|
|
9
|
+
//#region src/react/useResult.ts
|
|
11
10
|
function useResult(fragmentReference, partialNetworkRequestOptions) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
: undefined));
|
|
28
|
-
// @ts-expect-error
|
|
29
|
-
return readerWithRefetchQueries.readerArtifact.resolver(param);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
function maybeUnwrapNetworkRequest(networkRequest, networkRequestOptions) {
|
|
34
|
-
const state = (0, PromiseWrapper_1.getPromiseState)(networkRequest);
|
|
35
|
-
if (state.kind === 'Err' && networkRequestOptions.throwOnNetworkError) {
|
|
36
|
-
throw state.error;
|
|
37
|
-
}
|
|
38
|
-
else if (state.kind === 'Pending' &&
|
|
39
|
-
networkRequestOptions.suspendIfInFlight) {
|
|
40
|
-
throw state.promise;
|
|
41
|
-
}
|
|
11
|
+
const environment = require_IsographEnvironmentProvider.useIsographEnvironment();
|
|
12
|
+
const networkRequestOptions = require_read.getNetworkRequestOptionsWithDefaults(partialNetworkRequestOptions);
|
|
13
|
+
switch (fragmentReference.readerArtifactKind) {
|
|
14
|
+
case "ComponentReaderArtifact": return require_componentCache.getOrCreateCachedComponent(environment, fragmentReference, networkRequestOptions);
|
|
15
|
+
case "EagerReaderArtifact": {
|
|
16
|
+
require_maybeUnwrapNetworkRequest.maybeUnwrapNetworkRequest(fragmentReference.networkRequest, networkRequestOptions);
|
|
17
|
+
const readerWithRefetchQueries = require_PromiseWrapper.readPromise(fragmentReference.readerWithRefetchQueries);
|
|
18
|
+
const param = {
|
|
19
|
+
data: require_useReadAndSubscribe.useReadAndSubscribe(fragmentReference, networkRequestOptions, readerWithRefetchQueries.readerArtifact.readerAst),
|
|
20
|
+
parameters: fragmentReference.variables,
|
|
21
|
+
...readerWithRefetchQueries.readerArtifact.hasUpdatable ? { startUpdate: require_startUpdate.getOrCreateCachedStartUpdate(environment, fragmentReference, networkRequestOptions) } : void 0
|
|
22
|
+
};
|
|
23
|
+
return readerWithRefetchQueries.readerArtifact.resolver(param);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
42
26
|
}
|
|
27
|
+
|
|
28
|
+
//#endregion
|
|
29
|
+
exports.useResult = useResult;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { readPromise } from "../core/PromiseWrapper.mjs";
|
|
2
|
+
import { getOrCreateCachedStartUpdate } from "../core/startUpdate.mjs";
|
|
3
|
+
import { getOrCreateCachedComponent } from "../core/componentCache.mjs";
|
|
4
|
+
import { getNetworkRequestOptionsWithDefaults } from "../core/read.mjs";
|
|
5
|
+
import { useIsographEnvironment } from "./IsographEnvironmentProvider.mjs";
|
|
6
|
+
import { maybeUnwrapNetworkRequest } from "./maybeUnwrapNetworkRequest.mjs";
|
|
7
|
+
import { useReadAndSubscribe } from "./useReadAndSubscribe.mjs";
|
|
8
|
+
|
|
9
|
+
//#region src/react/useResult.ts
|
|
10
|
+
function useResult(fragmentReference, partialNetworkRequestOptions) {
|
|
11
|
+
const environment = useIsographEnvironment();
|
|
12
|
+
const networkRequestOptions = getNetworkRequestOptionsWithDefaults(partialNetworkRequestOptions);
|
|
13
|
+
switch (fragmentReference.readerArtifactKind) {
|
|
14
|
+
case "ComponentReaderArtifact": return getOrCreateCachedComponent(environment, fragmentReference, networkRequestOptions);
|
|
15
|
+
case "EagerReaderArtifact": {
|
|
16
|
+
maybeUnwrapNetworkRequest(fragmentReference.networkRequest, networkRequestOptions);
|
|
17
|
+
const readerWithRefetchQueries = readPromise(fragmentReference.readerWithRefetchQueries);
|
|
18
|
+
const param = {
|
|
19
|
+
data: useReadAndSubscribe(fragmentReference, networkRequestOptions, readerWithRefetchQueries.readerArtifact.readerAst),
|
|
20
|
+
parameters: fragmentReference.variables,
|
|
21
|
+
...readerWithRefetchQueries.readerArtifact.hasUpdatable ? { startUpdate: getOrCreateCachedStartUpdate(environment, fragmentReference, networkRequestOptions) } : void 0
|
|
22
|
+
};
|
|
23
|
+
return readerWithRefetchQueries.readerArtifact.resolver(param);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
//#endregion
|
|
29
|
+
export { useResult };
|
|
30
|
+
//# sourceMappingURL=useResult.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useResult.mjs","names":[],"sources":["../../src/react/useResult.ts"],"sourcesContent":["import { getOrCreateCachedComponent } from '../core/componentCache';\nimport type {\n FragmentReference,\n UnknownTReadFromStore,\n} from '../core/FragmentReference';\nimport { readPromise } from '../core/PromiseWrapper';\nimport {\n type NetworkRequestReaderOptions,\n getNetworkRequestOptionsWithDefaults,\n} from '../core/read';\nimport { getOrCreateCachedStartUpdate } from '../core/startUpdate';\nimport { useIsographEnvironment } from './IsographEnvironmentProvider';\nimport { maybeUnwrapNetworkRequest } from './maybeUnwrapNetworkRequest';\nimport { useReadAndSubscribe } from './useReadAndSubscribe';\n\nexport function useResult<\n TReadFromStore extends UnknownTReadFromStore,\n TClientFieldValue,\n>(\n fragmentReference: FragmentReference<TReadFromStore, TClientFieldValue>,\n partialNetworkRequestOptions?: Partial<NetworkRequestReaderOptions> | void,\n): TClientFieldValue {\n const environment = useIsographEnvironment();\n const networkRequestOptions = getNetworkRequestOptionsWithDefaults(\n partialNetworkRequestOptions,\n );\n\n switch (fragmentReference.readerArtifactKind) {\n case 'ComponentReaderArtifact': {\n // @ts-expect-error\n return getOrCreateCachedComponent(\n environment,\n fragmentReference,\n networkRequestOptions,\n );\n }\n case 'EagerReaderArtifact': {\n maybeUnwrapNetworkRequest(\n fragmentReference.networkRequest,\n networkRequestOptions,\n );\n const readerWithRefetchQueries = readPromise(\n fragmentReference.readerWithRefetchQueries,\n );\n const data = useReadAndSubscribe(\n fragmentReference,\n networkRequestOptions,\n readerWithRefetchQueries.readerArtifact.readerAst,\n );\n const param = {\n data: data,\n parameters: fragmentReference.variables,\n ...(readerWithRefetchQueries.readerArtifact.hasUpdatable\n ? {\n startUpdate: getOrCreateCachedStartUpdate(\n environment,\n fragmentReference,\n networkRequestOptions,\n ),\n }\n : undefined),\n };\n // @ts-expect-error\n return readerWithRefetchQueries.readerArtifact.resolver(param);\n }\n }\n}\n"],"mappings":";;;;;;;;;AAeA,SAAgB,UAId,mBACA,8BACmB;CACnB,MAAM,cAAc,wBAAwB;CAC5C,MAAM,wBAAwB,qCAC5B,6BACD;AAED,SAAQ,kBAAkB,oBAA1B;EACE,KAAK,0BAEH,QAAO,2BACL,aACA,mBACA,sBACD;EAEH,KAAK,uBAAuB;AAC1B,6BACE,kBAAkB,gBAClB,sBACD;GACD,MAAM,2BAA2B,YAC/B,kBAAkB,yBACnB;GAMD,MAAM,QAAQ;IACZ,MANW,oBACX,mBACA,uBACA,yBAAyB,eAAe,UACzC;IAGC,YAAY,kBAAkB;IAC9B,GAAI,yBAAyB,eAAe,eACxC,EACE,aAAa,6BACX,aACA,mBACA,sBACD,EACF,GACD;IACL;AAED,UAAO,yBAAyB,eAAe,SAAS,MAAM"}
|