@isograph/react 0.0.0-main-c06bc99a → 0.0.0-main-7fb13e90
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/dist/core/FragmentReference.d.ts +1 -1
- package/dist/core/PromiseWrapper.d.ts +2 -1
- package/dist/core/PromiseWrapper.js +12 -1
- package/dist/core/cache.js +3 -2
- package/dist/core/componentCache.js +3 -1
- package/dist/core/read.js +7 -5
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -1
- package/dist/loadable-hooks/useSuspensefulSkipLimitPagination.js +3 -1
- package/dist/react/useImperativeReference.js +3 -2
- package/dist/react/useResult.js +4 -3
- package/package.json +4 -4
- package/src/core/FragmentReference.ts +2 -3
- package/src/core/PromiseWrapper.ts +12 -1
- package/src/core/cache.ts +3 -2
- package/src/core/componentCache.ts +6 -1
- package/src/core/read.ts +18 -7
- package/src/index.ts +2 -0
- package/src/loadable-hooks/useSuspensefulSkipLimitPagination.ts +7 -1
- package/src/react/useImperativeReference.ts +3 -2
- package/src/react/useResult.ts +11 -6
- package/src/tests/__isograph/Query/meName/entrypoint.ts +1 -1
- package/src/tests/__isograph/Query/meNameSuccessor/entrypoint.ts +1 -1
- package/src/tests/__isograph/Query/nodeField/entrypoint.ts +1 -1
@@ -7,7 +7,7 @@ export type Variables = {
|
|
7
7
|
};
|
8
8
|
export type FragmentReference<TReadFromStore extends Object, TClientFieldValue> = {
|
9
9
|
readonly kind: 'FragmentReference';
|
10
|
-
readonly readerWithRefetchQueries: ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue
|
10
|
+
readonly readerWithRefetchQueries: PromiseWrapper<ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>>;
|
11
11
|
readonly root: DataId;
|
12
12
|
readonly variables: Variables | null;
|
13
13
|
readonly networkRequest: PromiseWrapper<void, any>;
|
@@ -12,11 +12,12 @@ type Result<T, E> = {
|
|
12
12
|
* Invariant:
|
13
13
|
* Before the promise is resolved, value becomes non-null.
|
14
14
|
*/
|
15
|
-
export type PromiseWrapper<T, E> = {
|
15
|
+
export type PromiseWrapper<T, E = any> = {
|
16
16
|
readonly promise: Promise<T>;
|
17
17
|
result: Result<Exclude<T, NotSet>, E> | NotSet;
|
18
18
|
};
|
19
19
|
export declare function wrapPromise<T>(promise: Promise<T>): PromiseWrapper<T, any>;
|
20
|
+
export declare function wrapResolvedValue<T>(value: T): PromiseWrapper<T, never>;
|
20
21
|
export declare function readPromise<T, E>(p: PromiseWrapper<T, E>): T;
|
21
22
|
export type PromiseState<T, E> = {
|
22
23
|
kind: 'Pending';
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.getPromiseState = exports.readPromise = exports.wrapPromise = void 0;
|
3
|
+
exports.getPromiseState = exports.readPromise = exports.wrapResolvedValue = exports.wrapPromise = void 0;
|
4
4
|
const NOT_SET = Symbol('NOT_SET');
|
5
5
|
function wrapPromise(promise) {
|
6
6
|
// TODO confirm suspense works if the promise is already resolved.
|
@@ -17,6 +17,17 @@ function wrapPromise(promise) {
|
|
17
17
|
return wrapper;
|
18
18
|
}
|
19
19
|
exports.wrapPromise = wrapPromise;
|
20
|
+
function wrapResolvedValue(value) {
|
21
|
+
return {
|
22
|
+
promise: Promise.resolve(value),
|
23
|
+
result: {
|
24
|
+
kind: 'Ok',
|
25
|
+
// @ts-expect-error one should not call wrapResolvedValue with NOT_SET
|
26
|
+
value,
|
27
|
+
},
|
28
|
+
};
|
29
|
+
}
|
30
|
+
exports.wrapResolvedValue = wrapResolvedValue;
|
20
31
|
function readPromise(p) {
|
21
32
|
const { result } = p;
|
22
33
|
if (result !== NOT_SET) {
|
package/dist/core/cache.js
CHANGED
@@ -6,6 +6,7 @@ const IsographEnvironment_1 = require("./IsographEnvironment");
|
|
6
6
|
const read_1 = require("./read");
|
7
7
|
const areEqualWithDeepComparison_1 = require("./areEqualWithDeepComparison");
|
8
8
|
const makeNetworkRequest_1 = require("./makeNetworkRequest");
|
9
|
+
const PromiseWrapper_1 = require("./PromiseWrapper");
|
9
10
|
const TYPENAME_FIELD_NAME = '__typename';
|
10
11
|
function getOrCreateItemInSuspenseCache(environment, index, factory) {
|
11
12
|
// @ts-expect-error
|
@@ -51,11 +52,11 @@ function getOrCreateCacheForArtifact(environment, entrypoint, variables) {
|
|
51
52
|
const itemCleanupPair = [
|
52
53
|
{
|
53
54
|
kind: 'FragmentReference',
|
54
|
-
readerWithRefetchQueries: {
|
55
|
+
readerWithRefetchQueries: (0, PromiseWrapper_1.wrapResolvedValue)({
|
55
56
|
kind: 'ReaderWithRefetchQueries',
|
56
57
|
readerArtifact: entrypoint.readerWithRefetchQueries.readerArtifact,
|
57
58
|
nestedRefetchQueries: entrypoint.readerWithRefetchQueries.nestedRefetchQueries,
|
58
|
-
},
|
59
|
+
}),
|
59
60
|
root: IsographEnvironment_1.ROOT_ID,
|
60
61
|
variables,
|
61
62
|
networkRequest: networkRequest,
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getOrCreateCachedComponent = void 0;
|
4
4
|
const cache_1 = require("./cache");
|
5
5
|
const useReadAndSubscribe_1 = require("../react/useReadAndSubscribe");
|
6
|
+
const PromiseWrapper_1 = require("./PromiseWrapper");
|
6
7
|
function getOrCreateCachedComponent(environment, componentName, fragmentReference, networkRequestOptions) {
|
7
8
|
var _a, _b, _c;
|
8
9
|
// cachedComponentsById is a three layer cache: id, then component name, then
|
@@ -26,7 +27,8 @@ function getOrCreateCachedComponent(environment, componentName, fragmentReferenc
|
|
26
27
|
' ' +
|
27
28
|
fragmentReference.root);
|
28
29
|
}
|
29
|
-
|
30
|
+
const readerWithRefetchQueries = (0, PromiseWrapper_1.readPromise)(fragmentReference.readerWithRefetchQueries);
|
31
|
+
return readerWithRefetchQueries.readerArtifact.resolver(data, additionalRuntimeProps);
|
30
32
|
}
|
31
33
|
Component.displayName = `${componentName} (id: ${fragmentReference.root}) @component`;
|
32
34
|
return Component;
|
package/dist/core/read.js
CHANGED
@@ -5,10 +5,12 @@ const cache_1 = require("./cache");
|
|
5
5
|
const componentCache_1 = require("./componentCache");
|
6
6
|
const IsographEnvironment_1 = require("./IsographEnvironment");
|
7
7
|
const makeNetworkRequest_1 = require("./makeNetworkRequest");
|
8
|
+
const PromiseWrapper_1 = require("./PromiseWrapper");
|
8
9
|
function readButDoNotEvaluate(environment, fragmentReference, networkRequestOptions) {
|
9
10
|
var _a;
|
10
11
|
const mutableEncounteredRecords = new Set();
|
11
|
-
const
|
12
|
+
const readerWithRefetchQueries = (0, PromiseWrapper_1.readPromise)(fragmentReference.readerWithRefetchQueries);
|
13
|
+
const response = readData(environment, readerWithRefetchQueries.readerArtifact.readerAst, fragmentReference.root, (_a = fragmentReference.variables) !== null && _a !== void 0 ? _a : {}, readerWithRefetchQueries.nestedRefetchQueries, fragmentReference.networkRequest, networkRequestOptions, mutableEncounteredRecords);
|
12
14
|
// @ts-expect-error
|
13
15
|
if (typeof window !== 'undefined' && window.__LOG) {
|
14
16
|
console.log('done reading', { response });
|
@@ -208,11 +210,11 @@ function readData(environment, ast, root, variables, nestedRefetchQueries, netwo
|
|
208
210
|
else if (kind === 'ComponentReaderArtifact') {
|
209
211
|
target[field.alias] = (0, componentCache_1.getOrCreateCachedComponent)(environment, field.readerArtifact.componentName, {
|
210
212
|
kind: 'FragmentReference',
|
211
|
-
readerWithRefetchQueries: {
|
213
|
+
readerWithRefetchQueries: (0, PromiseWrapper_1.wrapResolvedValue)({
|
212
214
|
kind: 'ReaderWithRefetchQueries',
|
213
215
|
readerArtifact: field.readerArtifact,
|
214
216
|
nestedRefetchQueries: resolverRefetchQueries,
|
215
|
-
},
|
217
|
+
}),
|
216
218
|
root,
|
217
219
|
variables: generateChildVariableMap(variables, field.arguments),
|
218
220
|
networkRequest,
|
@@ -252,12 +254,12 @@ function readData(environment, ast, root, variables, nestedRefetchQueries, netwo
|
|
252
254
|
const [networkRequest, disposeNetworkRequest] = (0, makeNetworkRequest_1.makeNetworkRequest)(environment, field.entrypoint, localVariables);
|
253
255
|
const fragmentReference = {
|
254
256
|
kind: 'FragmentReference',
|
255
|
-
readerWithRefetchQueries: {
|
257
|
+
readerWithRefetchQueries: (0, PromiseWrapper_1.wrapResolvedValue)({
|
256
258
|
kind: 'ReaderWithRefetchQueries',
|
257
259
|
readerArtifact: field.entrypoint.readerWithRefetchQueries.readerArtifact,
|
258
260
|
nestedRefetchQueries: field.entrypoint.readerWithRefetchQueries
|
259
261
|
.nestedRefetchQueries,
|
260
|
-
},
|
262
|
+
}),
|
261
263
|
// TODO localVariables is not guaranteed to have an id field
|
262
264
|
root: localVariables.id,
|
263
265
|
variables: localVariables,
|
package/dist/index.d.ts
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
export { retainQuery, unretainQuery, type RetainedQuery, garbageCollectEnvironment, } from './core/garbageCollection';
|
2
|
-
export { type PromiseWrapper, readPromise, getPromiseState, } from './core/PromiseWrapper';
|
2
|
+
export { type PromiseWrapper, readPromise, getPromiseState, wrapResolvedValue, wrapPromise, } from './core/PromiseWrapper';
|
3
3
|
export { subscribe, normalizeData } from './core/cache';
|
4
4
|
export { makeNetworkRequest } from './core/makeNetworkRequest';
|
5
5
|
export { ROOT_ID, type DataId, type DataTypeValue, type IsographEnvironment, type IsographNetworkFunction, type IsographStore, type Link, type StoreRecord, createIsographEnvironment, createIsographStore, defaultMissingFieldHandler, } from './core/IsographEnvironment';
|
package/dist/index.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.useSuspensefulSkipLimitPagination = exports.useClientSideDefer = exports.useRerenderOnChange = exports.useLazyReference = exports.useSubscribeToMultiple = exports.useReadAndSubscribe = exports.useResult = exports.FragmentReader = exports.useImperativeReference = exports.useIsographEnvironment = exports.IsographEnvironmentProvider = exports.stableIdForFragmentReference = exports.readButDoNotEvaluate = exports.assertIsEntrypoint = exports.defaultMissingFieldHandler = exports.createIsographStore = exports.createIsographEnvironment = exports.ROOT_ID = exports.makeNetworkRequest = exports.normalizeData = exports.subscribe = exports.getPromiseState = exports.readPromise = exports.garbageCollectEnvironment = exports.unretainQuery = exports.retainQuery = void 0;
|
3
|
+
exports.useSuspensefulSkipLimitPagination = exports.useClientSideDefer = exports.useRerenderOnChange = exports.useLazyReference = exports.useSubscribeToMultiple = exports.useReadAndSubscribe = exports.useResult = exports.FragmentReader = exports.useImperativeReference = exports.useIsographEnvironment = exports.IsographEnvironmentProvider = exports.stableIdForFragmentReference = exports.readButDoNotEvaluate = exports.assertIsEntrypoint = exports.defaultMissingFieldHandler = exports.createIsographStore = exports.createIsographEnvironment = exports.ROOT_ID = exports.makeNetworkRequest = exports.normalizeData = exports.subscribe = exports.wrapPromise = exports.wrapResolvedValue = exports.getPromiseState = exports.readPromise = exports.garbageCollectEnvironment = exports.unretainQuery = exports.retainQuery = void 0;
|
4
4
|
var garbageCollection_1 = require("./core/garbageCollection");
|
5
5
|
Object.defineProperty(exports, "retainQuery", { enumerable: true, get: function () { return garbageCollection_1.retainQuery; } });
|
6
6
|
Object.defineProperty(exports, "unretainQuery", { enumerable: true, get: function () { return garbageCollection_1.unretainQuery; } });
|
@@ -8,6 +8,8 @@ Object.defineProperty(exports, "garbageCollectEnvironment", { enumerable: true,
|
|
8
8
|
var PromiseWrapper_1 = require("./core/PromiseWrapper");
|
9
9
|
Object.defineProperty(exports, "readPromise", { enumerable: true, get: function () { return PromiseWrapper_1.readPromise; } });
|
10
10
|
Object.defineProperty(exports, "getPromiseState", { enumerable: true, get: function () { return PromiseWrapper_1.getPromiseState; } });
|
11
|
+
Object.defineProperty(exports, "wrapResolvedValue", { enumerable: true, get: function () { return PromiseWrapper_1.wrapResolvedValue; } });
|
12
|
+
Object.defineProperty(exports, "wrapPromise", { enumerable: true, get: function () { return PromiseWrapper_1.wrapPromise; } });
|
11
13
|
var cache_1 = require("./core/cache");
|
12
14
|
Object.defineProperty(exports, "subscribe", { enumerable: true, get: function () { return cache_1.subscribe; } });
|
13
15
|
Object.defineProperty(exports, "normalizeData", { enumerable: true, get: function () { return cache_1.normalizeData; } });
|
@@ -6,6 +6,7 @@ const useResult_1 = require("../react/useResult");
|
|
6
6
|
const read_1 = require("../core/read");
|
7
7
|
const react_disposable_state_1 = require("@isograph/react-disposable-state");
|
8
8
|
const reference_counted_pointer_1 = require("@isograph/reference-counted-pointer");
|
9
|
+
const PromiseWrapper_1 = require("../core/PromiseWrapper");
|
9
10
|
function flatten(arr) {
|
10
11
|
let outArray = [];
|
11
12
|
for (const subarr of arr) {
|
@@ -42,7 +43,8 @@ function useSuspensefulSkipLimitPagination(loadableField) {
|
|
42
43
|
}
|
43
44
|
(0, useResult_1.maybeUnwrapNetworkRequest)(fragmentReference.networkRequest, networkRequestOptions);
|
44
45
|
const data = (0, read_1.readButDoNotEvaluate)(environment, fragmentReference, networkRequestOptions);
|
45
|
-
|
46
|
+
const readerWithRefetchQueries = (0, PromiseWrapper_1.readPromise)(fragmentReference.readerWithRefetchQueries);
|
47
|
+
return readerWithRefetchQueries.readerArtifact.resolver(data.item, undefined);
|
46
48
|
});
|
47
49
|
const items = flatten(results);
|
48
50
|
const loadedSoFar = items.length;
|
@@ -5,6 +5,7 @@ const react_disposable_state_1 = require("@isograph/react-disposable-state");
|
|
5
5
|
const IsographEnvironmentProvider_1 = require("./IsographEnvironmentProvider");
|
6
6
|
const IsographEnvironment_1 = require("../core/IsographEnvironment");
|
7
7
|
const makeNetworkRequest_1 = require("../core/makeNetworkRequest");
|
8
|
+
const PromiseWrapper_1 = require("../core/PromiseWrapper");
|
8
9
|
function useImperativeReference(entrypoint) {
|
9
10
|
const { state, setState } = (0, react_disposable_state_1.useUpdatableDisposableState)();
|
10
11
|
const environment = (0, IsographEnvironmentProvider_1.useIsographEnvironment)();
|
@@ -15,11 +16,11 @@ function useImperativeReference(entrypoint) {
|
|
15
16
|
setState([
|
16
17
|
{
|
17
18
|
kind: 'FragmentReference',
|
18
|
-
readerWithRefetchQueries: {
|
19
|
+
readerWithRefetchQueries: (0, PromiseWrapper_1.wrapResolvedValue)({
|
19
20
|
kind: 'ReaderWithRefetchQueries',
|
20
21
|
readerArtifact: entrypoint.readerWithRefetchQueries.readerArtifact,
|
21
22
|
nestedRefetchQueries: entrypoint.readerWithRefetchQueries.nestedRefetchQueries,
|
22
|
-
},
|
23
|
+
}),
|
23
24
|
root: IsographEnvironment_1.ROOT_ID,
|
24
25
|
variables,
|
25
26
|
networkRequest,
|
package/dist/react/useResult.js
CHANGED
@@ -10,14 +10,15 @@ function useResult(fragmentReference, partialNetworkRequestOptions) {
|
|
10
10
|
const environment = (0, IsographEnvironmentProvider_1.useIsographEnvironment)();
|
11
11
|
const networkRequestOptions = (0, read_1.getNetworkRequestOptionsWithDefaults)(partialNetworkRequestOptions);
|
12
12
|
maybeUnwrapNetworkRequest(fragmentReference.networkRequest, networkRequestOptions);
|
13
|
-
|
13
|
+
const readerWithRefetchQueries = (0, PromiseWrapper_1.readPromise)(fragmentReference.readerWithRefetchQueries);
|
14
|
+
switch (readerWithRefetchQueries.readerArtifact.kind) {
|
14
15
|
case 'ComponentReaderArtifact': {
|
15
16
|
// @ts-expect-error
|
16
|
-
return (0, componentCache_1.getOrCreateCachedComponent)(environment,
|
17
|
+
return (0, componentCache_1.getOrCreateCachedComponent)(environment, readerWithRefetchQueries.readerArtifact.componentName, fragmentReference, networkRequestOptions);
|
17
18
|
}
|
18
19
|
case 'EagerReaderArtifact': {
|
19
20
|
const data = (0, useReadAndSubscribe_1.useReadAndSubscribe)(fragmentReference, networkRequestOptions);
|
20
|
-
return
|
21
|
+
return readerWithRefetchQueries.readerArtifact.resolver(data);
|
21
22
|
}
|
22
23
|
}
|
23
24
|
}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@isograph/react",
|
3
|
-
"version": "0.0.0-main-
|
3
|
+
"version": "0.0.0-main-7fb13e90",
|
4
4
|
"description": "Use Isograph with React",
|
5
5
|
"homepage": "https://isograph.dev",
|
6
6
|
"main": "dist/index.js",
|
@@ -17,9 +17,9 @@
|
|
17
17
|
"tsc": "tsc"
|
18
18
|
},
|
19
19
|
"dependencies": {
|
20
|
-
"@isograph/disposable-types": "0.0.0-main-
|
21
|
-
"@isograph/react-disposable-state": "0.0.0-main-
|
22
|
-
"@isograph/reference-counted-pointer": "0.0.0-main-
|
20
|
+
"@isograph/disposable-types": "0.0.0-main-7fb13e90",
|
21
|
+
"@isograph/react-disposable-state": "0.0.0-main-7fb13e90",
|
22
|
+
"@isograph/reference-counted-pointer": "0.0.0-main-7fb13e90"
|
23
23
|
},
|
24
24
|
"peerDependencies": {
|
25
25
|
"react": "18.2.0"
|
@@ -12,9 +12,8 @@ export type FragmentReference<
|
|
12
12
|
TClientFieldValue,
|
13
13
|
> = {
|
14
14
|
readonly kind: 'FragmentReference';
|
15
|
-
readonly readerWithRefetchQueries:
|
16
|
-
TReadFromStore,
|
17
|
-
TClientFieldValue
|
15
|
+
readonly readerWithRefetchQueries: PromiseWrapper<
|
16
|
+
ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>
|
18
17
|
>;
|
19
18
|
readonly root: DataId;
|
20
19
|
readonly variables: Variables | null;
|
@@ -17,7 +17,7 @@ type Result<T, E> =
|
|
17
17
|
* Invariant:
|
18
18
|
* Before the promise is resolved, value becomes non-null.
|
19
19
|
*/
|
20
|
-
export type PromiseWrapper<T, E> = {
|
20
|
+
export type PromiseWrapper<T, E = any> = {
|
21
21
|
readonly promise: Promise<T>;
|
22
22
|
result: Result<Exclude<T, NotSet>, E> | NotSet;
|
23
23
|
};
|
@@ -37,6 +37,17 @@ export function wrapPromise<T>(promise: Promise<T>): PromiseWrapper<T, any> {
|
|
37
37
|
return wrapper;
|
38
38
|
}
|
39
39
|
|
40
|
+
export function wrapResolvedValue<T>(value: T): PromiseWrapper<T, never> {
|
41
|
+
return {
|
42
|
+
promise: Promise.resolve(value),
|
43
|
+
result: {
|
44
|
+
kind: 'Ok',
|
45
|
+
// @ts-expect-error one should not call wrapResolvedValue with NOT_SET
|
46
|
+
value,
|
47
|
+
},
|
48
|
+
};
|
49
|
+
}
|
50
|
+
|
40
51
|
export function readPromise<T, E>(p: PromiseWrapper<T, E>): T {
|
41
52
|
const { result } = p;
|
42
53
|
if (result !== NOT_SET) {
|
package/src/core/cache.ts
CHANGED
@@ -27,6 +27,7 @@ import { WithEncounteredRecords, readButDoNotEvaluate } from './read';
|
|
27
27
|
import { FragmentReference, Variables } from './FragmentReference';
|
28
28
|
import { areEqualObjectsWithDeepComparison } from './areEqualWithDeepComparison';
|
29
29
|
import { makeNetworkRequest } from './makeNetworkRequest';
|
30
|
+
import { wrapResolvedValue } from './PromiseWrapper';
|
30
31
|
|
31
32
|
const TYPENAME_FIELD_NAME = '__typename';
|
32
33
|
|
@@ -95,12 +96,12 @@ export function getOrCreateCacheForArtifact<
|
|
95
96
|
> = [
|
96
97
|
{
|
97
98
|
kind: 'FragmentReference',
|
98
|
-
readerWithRefetchQueries: {
|
99
|
+
readerWithRefetchQueries: wrapResolvedValue({
|
99
100
|
kind: 'ReaderWithRefetchQueries',
|
100
101
|
readerArtifact: entrypoint.readerWithRefetchQueries.readerArtifact,
|
101
102
|
nestedRefetchQueries:
|
102
103
|
entrypoint.readerWithRefetchQueries.nestedRefetchQueries,
|
103
|
-
},
|
104
|
+
}),
|
104
105
|
root: ROOT_ID,
|
105
106
|
variables,
|
106
107
|
networkRequest: networkRequest,
|
@@ -3,6 +3,7 @@ import { IsographEnvironment } from './IsographEnvironment';
|
|
3
3
|
import { FragmentReference } from './FragmentReference';
|
4
4
|
import { useReadAndSubscribe } from '../react/useReadAndSubscribe';
|
5
5
|
import { NetworkRequestReaderOptions } from './read';
|
6
|
+
import { readPromise } from './PromiseWrapper';
|
6
7
|
|
7
8
|
export function getOrCreateCachedComponent(
|
8
9
|
environment: IsographEnvironment,
|
@@ -44,7 +45,11 @@ export function getOrCreateCachedComponent(
|
|
44
45
|
);
|
45
46
|
}
|
46
47
|
|
47
|
-
|
48
|
+
const readerWithRefetchQueries = readPromise(
|
49
|
+
fragmentReference.readerWithRefetchQueries,
|
50
|
+
);
|
51
|
+
|
52
|
+
return readerWithRefetchQueries.readerArtifact.resolver(
|
48
53
|
data,
|
49
54
|
additionalRuntimeProps,
|
50
55
|
);
|
package/src/core/read.ts
CHANGED
@@ -9,7 +9,11 @@ import {
|
|
9
9
|
IsographEnvironment,
|
10
10
|
} from './IsographEnvironment';
|
11
11
|
import { makeNetworkRequest } from './makeNetworkRequest';
|
12
|
-
import {
|
12
|
+
import {
|
13
|
+
PromiseWrapper,
|
14
|
+
readPromise,
|
15
|
+
wrapResolvedValue,
|
16
|
+
} from './PromiseWrapper';
|
13
17
|
import { ReaderAst } from './reader';
|
14
18
|
import { Arguments } from './util';
|
15
19
|
|
@@ -24,12 +28,17 @@ export function readButDoNotEvaluate<TReadFromStore extends Object>(
|
|
24
28
|
networkRequestOptions: NetworkRequestReaderOptions,
|
25
29
|
): WithEncounteredRecords<TReadFromStore> {
|
26
30
|
const mutableEncounteredRecords = new Set<DataId>();
|
31
|
+
|
32
|
+
const readerWithRefetchQueries = readPromise(
|
33
|
+
fragmentReference.readerWithRefetchQueries,
|
34
|
+
);
|
35
|
+
|
27
36
|
const response = readData(
|
28
37
|
environment,
|
29
|
-
|
38
|
+
readerWithRefetchQueries.readerArtifact.readerAst,
|
30
39
|
fragmentReference.root,
|
31
40
|
fragmentReference.variables ?? {},
|
32
|
-
|
41
|
+
readerWithRefetchQueries.nestedRefetchQueries,
|
33
42
|
fragmentReference.networkRequest,
|
34
43
|
networkRequestOptions,
|
35
44
|
mutableEncounteredRecords,
|
@@ -309,11 +318,11 @@ function readData<TReadFromStore>(
|
|
309
318
|
field.readerArtifact.componentName,
|
310
319
|
{
|
311
320
|
kind: 'FragmentReference',
|
312
|
-
readerWithRefetchQueries: {
|
321
|
+
readerWithRefetchQueries: wrapResolvedValue({
|
313
322
|
kind: 'ReaderWithRefetchQueries',
|
314
323
|
readerArtifact: field.readerArtifact,
|
315
324
|
nestedRefetchQueries: resolverRefetchQueries,
|
316
|
-
},
|
325
|
+
}),
|
317
326
|
root,
|
318
327
|
variables: generateChildVariableMap(variables, field.arguments),
|
319
328
|
networkRequest,
|
@@ -373,16 +382,18 @@ function readData<TReadFromStore>(
|
|
373
382
|
field.entrypoint,
|
374
383
|
localVariables,
|
375
384
|
);
|
385
|
+
|
376
386
|
const fragmentReference: FragmentReference<any, any> = {
|
377
387
|
kind: 'FragmentReference',
|
378
|
-
readerWithRefetchQueries: {
|
388
|
+
readerWithRefetchQueries: wrapResolvedValue({
|
379
389
|
kind: 'ReaderWithRefetchQueries',
|
380
390
|
readerArtifact:
|
381
391
|
field.entrypoint.readerWithRefetchQueries.readerArtifact,
|
382
392
|
nestedRefetchQueries:
|
383
393
|
field.entrypoint.readerWithRefetchQueries
|
384
394
|
.nestedRefetchQueries,
|
385
|
-
},
|
395
|
+
} as const),
|
396
|
+
|
386
397
|
// TODO localVariables is not guaranteed to have an id field
|
387
398
|
root: localVariables.id,
|
388
399
|
variables: localVariables,
|
package/src/index.ts
CHANGED
@@ -8,6 +8,8 @@ export {
|
|
8
8
|
type PromiseWrapper,
|
9
9
|
readPromise,
|
10
10
|
getPromiseState,
|
11
|
+
wrapResolvedValue,
|
12
|
+
wrapPromise,
|
11
13
|
} from './core/PromiseWrapper';
|
12
14
|
export { subscribe, normalizeData } from './core/cache';
|
13
15
|
export { makeNetworkRequest } from './core/makeNetworkRequest';
|
@@ -12,6 +12,7 @@ import {
|
|
12
12
|
createReferenceCountedPointer,
|
13
13
|
ReferenceCountedPointer,
|
14
14
|
} from '@isograph/reference-counted-pointer';
|
15
|
+
import { readPromise } from '../core/PromiseWrapper';
|
15
16
|
|
16
17
|
type SkipOrLimit = 'skip' | 'limit';
|
17
18
|
type OmitSkipLimit<TArgs> = keyof Omit<TArgs, SkipOrLimit> extends never
|
@@ -91,7 +92,12 @@ export function useSuspensefulSkipLimitPagination<
|
|
91
92
|
fragmentReference,
|
92
93
|
networkRequestOptions,
|
93
94
|
);
|
94
|
-
|
95
|
+
|
96
|
+
const readerWithRefetchQueries = readPromise(
|
97
|
+
fragmentReference.readerWithRefetchQueries,
|
98
|
+
);
|
99
|
+
|
100
|
+
return readerWithRefetchQueries.readerArtifact.resolver(
|
95
101
|
data.item,
|
96
102
|
undefined,
|
97
103
|
) as ReadonlyArray<any>;
|
@@ -7,6 +7,7 @@ import { FragmentReference, Variables } from '../core/FragmentReference';
|
|
7
7
|
import { useIsographEnvironment } from './IsographEnvironmentProvider';
|
8
8
|
import { ROOT_ID } from '../core/IsographEnvironment';
|
9
9
|
import { makeNetworkRequest } from '../core/makeNetworkRequest';
|
10
|
+
import { wrapResolvedValue } from '../core/PromiseWrapper';
|
10
11
|
|
11
12
|
export function useImperativeReference<
|
12
13
|
TReadFromStore extends Object,
|
@@ -35,12 +36,12 @@ export function useImperativeReference<
|
|
35
36
|
setState([
|
36
37
|
{
|
37
38
|
kind: 'FragmentReference',
|
38
|
-
readerWithRefetchQueries: {
|
39
|
+
readerWithRefetchQueries: wrapResolvedValue({
|
39
40
|
kind: 'ReaderWithRefetchQueries',
|
40
41
|
readerArtifact: entrypoint.readerWithRefetchQueries.readerArtifact,
|
41
42
|
nestedRefetchQueries:
|
42
43
|
entrypoint.readerWithRefetchQueries.nestedRefetchQueries,
|
43
|
-
},
|
44
|
+
}),
|
44
45
|
root: ROOT_ID,
|
45
46
|
variables,
|
46
47
|
networkRequest,
|
package/src/react/useResult.ts
CHANGED
@@ -6,7 +6,11 @@ import {
|
|
6
6
|
getNetworkRequestOptionsWithDefaults,
|
7
7
|
NetworkRequestReaderOptions,
|
8
8
|
} from '../core/read';
|
9
|
-
import {
|
9
|
+
import {
|
10
|
+
getPromiseState,
|
11
|
+
PromiseWrapper,
|
12
|
+
readPromise,
|
13
|
+
} from '../core/PromiseWrapper';
|
10
14
|
|
11
15
|
export function useResult<TReadFromStore extends Object, TClientFieldValue>(
|
12
16
|
fragmentReference: FragmentReference<TReadFromStore, TClientFieldValue>,
|
@@ -21,13 +25,16 @@ export function useResult<TReadFromStore extends Object, TClientFieldValue>(
|
|
21
25
|
fragmentReference.networkRequest,
|
22
26
|
networkRequestOptions,
|
23
27
|
);
|
28
|
+
const readerWithRefetchQueries = readPromise(
|
29
|
+
fragmentReference.readerWithRefetchQueries,
|
30
|
+
);
|
24
31
|
|
25
|
-
switch (
|
32
|
+
switch (readerWithRefetchQueries.readerArtifact.kind) {
|
26
33
|
case 'ComponentReaderArtifact': {
|
27
34
|
// @ts-expect-error
|
28
35
|
return getOrCreateCachedComponent(
|
29
36
|
environment,
|
30
|
-
|
37
|
+
readerWithRefetchQueries.readerArtifact.componentName,
|
31
38
|
fragmentReference,
|
32
39
|
networkRequestOptions,
|
33
40
|
);
|
@@ -37,9 +44,7 @@ export function useResult<TReadFromStore extends Object, TClientFieldValue>(
|
|
37
44
|
fragmentReference,
|
38
45
|
networkRequestOptions,
|
39
46
|
);
|
40
|
-
return
|
41
|
-
data,
|
42
|
-
);
|
47
|
+
return readerWithRefetchQueries.readerArtifact.resolver(data);
|
43
48
|
}
|
44
49
|
}
|
45
50
|
}
|