@isograph/react 0.0.0-main-4089db6d → 0.0.0-main-d564e834
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/{FragmentReference.d.ts → core/FragmentReference.d.ts} +1 -1
- package/dist/{cache.d.ts → core/cache.d.ts} +2 -3
- package/dist/{cache.js → core/cache.js} +3 -51
- package/dist/{componentCache.js → core/componentCache.js} +1 -1
- package/dist/core/makeNetworkRequest.d.ts +6 -0
- package/dist/core/makeNetworkRequest.js +54 -0
- package/dist/{read.js → core/read.js} +2 -1
- package/dist/index.d.ts +16 -15
- package/dist/index.js +17 -16
- package/dist/loadable-hooks/useClientSideDefer.d.ts +2 -2
- package/dist/loadable-hooks/useClientSideDefer.js +2 -2
- package/dist/react/FragmentReferenceReader.d.ts +10 -0
- package/dist/{EntrypointReader.js → react/FragmentReferenceReader.js} +3 -3
- package/dist/{IsographEnvironmentProvider.d.ts → react/IsographEnvironmentProvider.d.ts} +1 -1
- package/dist/{useImperativeReference.d.ts → react/useImperativeReference.d.ts} +2 -2
- package/dist/{useImperativeReference.js → react/useImperativeReference.js} +3 -3
- package/dist/{useLazyReference.d.ts → react/useLazyReference.d.ts} +2 -2
- package/dist/{useLazyReference.js → react/useLazyReference.js} +2 -2
- package/dist/{useReadAndSubscribe.d.ts → react/useReadAndSubscribe.d.ts} +2 -2
- package/dist/{useReadAndSubscribe.js → react/useReadAndSubscribe.js} +1 -1
- package/dist/{useRerenderOnChange.d.ts → react/useRerenderOnChange.d.ts} +3 -3
- package/dist/{useRerenderOnChange.js → react/useRerenderOnChange.js} +1 -1
- package/dist/{useResult.d.ts → react/useResult.d.ts} +1 -1
- package/dist/{useResult.js → react/useResult.js} +2 -2
- package/package.json +5 -4
- package/src/{FragmentReference.ts → core/FragmentReference.ts} +1 -1
- package/src/{cache.ts → core/cache.ts} +4 -89
- package/src/{componentCache.ts → core/componentCache.ts} +1 -1
- package/src/core/makeNetworkRequest.ts +90 -0
- package/src/{read.ts → core/read.ts} +2 -1
- package/src/index.ts +22 -19
- package/src/loadable-hooks/useClientSideDefer.ts +4 -4
- package/src/{EntrypointReader.tsx → react/FragmentReferenceReader.tsx} +4 -4
- package/src/{IsographEnvironmentProvider.tsx → react/IsographEnvironmentProvider.tsx} +1 -1
- package/src/{useImperativeReference.ts → react/useImperativeReference.ts} +4 -4
- package/src/{useLazyReference.ts → react/useLazyReference.ts} +4 -4
- package/src/{useReadAndSubscribe.ts → react/useReadAndSubscribe.ts} +3 -3
- package/src/{useRerenderOnChange.ts → react/useRerenderOnChange.ts} +4 -4
- package/src/{useResult.ts → react/useResult.ts} +3 -3
- package/src/tests/garbageCollection.test.ts +8 -2
- package/tsconfig.json +6 -0
- package/dist/EntrypointReader.d.ts +0 -10
- /package/dist/{FragmentReference.js → core/FragmentReference.js} +0 -0
- /package/dist/{IsographEnvironment.d.ts → core/IsographEnvironment.d.ts} +0 -0
- /package/dist/{IsographEnvironment.js → core/IsographEnvironment.js} +0 -0
- /package/dist/{PromiseWrapper.d.ts → core/PromiseWrapper.d.ts} +0 -0
- /package/dist/{PromiseWrapper.js → core/PromiseWrapper.js} +0 -0
- /package/dist/{areEqualWithDeepComparison.d.ts → core/areEqualWithDeepComparison.d.ts} +0 -0
- /package/dist/{areEqualWithDeepComparison.js → core/areEqualWithDeepComparison.js} +0 -0
- /package/dist/{componentCache.d.ts → core/componentCache.d.ts} +0 -0
- /package/dist/{entrypoint.d.ts → core/entrypoint.d.ts} +0 -0
- /package/dist/{entrypoint.js → core/entrypoint.js} +0 -0
- /package/dist/{garbageCollection.d.ts → core/garbageCollection.d.ts} +0 -0
- /package/dist/{garbageCollection.js → core/garbageCollection.js} +0 -0
- /package/dist/{read.d.ts → core/read.d.ts} +0 -0
- /package/dist/{reader.d.ts → core/reader.d.ts} +0 -0
- /package/dist/{reader.js → core/reader.js} +0 -0
- /package/dist/{util.d.ts → core/util.d.ts} +0 -0
- /package/dist/{util.js → core/util.js} +0 -0
- /package/dist/{IsographEnvironmentProvider.js → react/IsographEnvironmentProvider.js} +0 -0
- /package/src/{IsographEnvironment.tsx → core/IsographEnvironment.ts} +0 -0
- /package/src/{PromiseWrapper.ts → core/PromiseWrapper.ts} +0 -0
- /package/src/{areEqualWithDeepComparison.ts → core/areEqualWithDeepComparison.ts} +0 -0
- /package/src/{entrypoint.ts → core/entrypoint.ts} +0 -0
- /package/src/{garbageCollection.ts → core/garbageCollection.ts} +0 -0
- /package/src/{reader.ts → core/reader.ts} +0 -0
- /package/src/{util.ts → core/util.ts} +0 -0
@@ -1,5 +1,5 @@
|
|
1
1
|
import { DataId } from './IsographEnvironment';
|
2
|
-
import { RefetchQueryNormalizationArtifactWrapper } from '
|
2
|
+
import { RefetchQueryNormalizationArtifactWrapper } from '../core/entrypoint';
|
3
3
|
import { TopLevelReaderArtifact } from './reader';
|
4
4
|
export type VariableValue = string | number | boolean | null | object;
|
5
5
|
export type Variables = {
|
@@ -1,7 +1,7 @@
|
|
1
|
-
import { Factory,
|
1
|
+
import { Factory, ParentCache } from '@isograph/react-disposable-state';
|
2
2
|
import { PromiseWrapper } from './PromiseWrapper';
|
3
3
|
import { DataId, type IsographEnvironment } from './IsographEnvironment';
|
4
|
-
import { IsographEntrypoint, NormalizationAst, NormalizationLinkedField, NormalizationScalarField,
|
4
|
+
import { IsographEntrypoint, NormalizationAst, NormalizationLinkedField, NormalizationScalarField, RefetchQueryNormalizationArtifactWrapper } from '../core/entrypoint';
|
5
5
|
import { ReaderLinkedField, ReaderScalarField } from './reader';
|
6
6
|
import { WithEncounteredRecords } from './read';
|
7
7
|
import { FragmentReference, Variables } from './FragmentReference';
|
@@ -18,7 +18,6 @@ export declare function getOrCreateCache<T>(environment: IsographEnvironment, in
|
|
18
18
|
*/
|
19
19
|
export declare function stableCopy<T>(value: T): T;
|
20
20
|
export declare function getOrCreateCacheForArtifact<TReadFromStore extends Object, TClientFieldValue>(environment: IsographEnvironment, artifact: IsographEntrypoint<TReadFromStore, TClientFieldValue>, variables: Variables): ParentCache<PromiseWrapper<TClientFieldValue>>;
|
21
|
-
export declare function makeNetworkRequest<T>(environment: IsographEnvironment, artifact: RefetchQueryNormalizationArtifact | IsographEntrypoint<any, any>, variables: Variables): ItemCleanupPair<PromiseWrapper<T>>;
|
22
21
|
type NetworkResponseScalarValue = string | number | boolean;
|
23
22
|
type NetworkResponseValue = NetworkResponseScalarValue | null | NetworkResponseObject | NetworkResponseObject[] | NetworkResponseScalarValue[];
|
24
23
|
type NetworkResponseObject = {
|
@@ -1,12 +1,11 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.SECOND_SPLIT_KEY = exports.FIRST_SPLIT_KEY = exports.getParentRecordKey = exports.onNextChange = exports.subscribe = exports.subscribeToAnyChange = exports.normalizeData = exports.
|
3
|
+
exports.SECOND_SPLIT_KEY = exports.FIRST_SPLIT_KEY = exports.getParentRecordKey = exports.onNextChange = exports.subscribe = exports.subscribeToAnyChange = exports.normalizeData = exports.getOrCreateCacheForArtifact = exports.stableCopy = exports.getOrCreateCache = void 0;
|
4
4
|
const react_disposable_state_1 = require("@isograph/react-disposable-state");
|
5
|
-
const PromiseWrapper_1 = require("./PromiseWrapper");
|
6
5
|
const IsographEnvironment_1 = require("./IsographEnvironment");
|
7
|
-
const garbageCollection_1 = require("./garbageCollection");
|
8
6
|
const read_1 = require("./read");
|
9
7
|
const areEqualWithDeepComparison_1 = require("./areEqualWithDeepComparison");
|
8
|
+
const makeNetworkRequest_1 = require("./makeNetworkRequest");
|
10
9
|
const TYPENAME_FIELD_NAME = '__typename';
|
11
10
|
function getOrCreateCache(environment, index, factory) {
|
12
11
|
if (typeof window !== 'undefined' && window.__LOG) {
|
@@ -46,57 +45,10 @@ function stableCopy(value) {
|
|
46
45
|
exports.stableCopy = stableCopy;
|
47
46
|
function getOrCreateCacheForArtifact(environment, artifact, variables) {
|
48
47
|
const cacheKey = artifact.queryText + JSON.stringify(stableCopy(variables));
|
49
|
-
const factory = () => makeNetworkRequest(environment, artifact, variables);
|
48
|
+
const factory = () => (0, makeNetworkRequest_1.makeNetworkRequest)(environment, artifact, variables);
|
50
49
|
return getOrCreateCache(environment, cacheKey, factory);
|
51
50
|
}
|
52
51
|
exports.getOrCreateCacheForArtifact = getOrCreateCacheForArtifact;
|
53
|
-
function makeNetworkRequest(environment, artifact, variables) {
|
54
|
-
if (typeof window !== 'undefined' && window.__LOG) {
|
55
|
-
console.log('make network request', artifact, variables);
|
56
|
-
}
|
57
|
-
let status = {
|
58
|
-
kind: 'UndisposedIncomplete',
|
59
|
-
};
|
60
|
-
// This should be an observable, not a promise
|
61
|
-
const promise = environment
|
62
|
-
.networkFunction(artifact.queryText, variables)
|
63
|
-
.then((networkResponse) => {
|
64
|
-
if (typeof window !== 'undefined' && window.__LOG) {
|
65
|
-
console.log('network response', artifact, networkResponse);
|
66
|
-
}
|
67
|
-
if (status.kind === 'UndisposedIncomplete') {
|
68
|
-
normalizeData(environment, artifact.normalizationAst, networkResponse.data, variables, artifact.kind === 'Entrypoint' ? artifact.nestedRefetchQueries : []);
|
69
|
-
const retainedQuery = {
|
70
|
-
normalizationAst: artifact.normalizationAst,
|
71
|
-
variables,
|
72
|
-
};
|
73
|
-
status = {
|
74
|
-
kind: 'UndisposedComplete',
|
75
|
-
retainedQuery,
|
76
|
-
};
|
77
|
-
(0, garbageCollection_1.retainQuery)(environment, retainedQuery);
|
78
|
-
}
|
79
|
-
// TODO return null
|
80
|
-
return networkResponse;
|
81
|
-
});
|
82
|
-
const wrapper = (0, PromiseWrapper_1.wrapPromise)(promise);
|
83
|
-
const response = [
|
84
|
-
wrapper,
|
85
|
-
() => {
|
86
|
-
if (status.kind === 'UndisposedComplete') {
|
87
|
-
const didUnretainSomeQuery = (0, garbageCollection_1.unretainQuery)(environment, status.retainedQuery);
|
88
|
-
if (didUnretainSomeQuery) {
|
89
|
-
(0, garbageCollection_1.garbageCollectEnvironment)(environment);
|
90
|
-
}
|
91
|
-
}
|
92
|
-
status = {
|
93
|
-
kind: 'Disposed',
|
94
|
-
};
|
95
|
-
},
|
96
|
-
];
|
97
|
-
return response;
|
98
|
-
}
|
99
|
-
exports.makeNetworkRequest = makeNetworkRequest;
|
100
52
|
function normalizeData(environment, normalizationAst, networkResponse, variables, nestedRefetchQueries) {
|
101
53
|
const encounteredIds = new Set();
|
102
54
|
if (typeof window !== 'undefined' && window.__LOG) {
|
@@ -2,7 +2,7 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.getOrCreateCachedComponent = void 0;
|
4
4
|
const cache_1 = require("./cache");
|
5
|
-
const useReadAndSubscribe_1 = require("
|
5
|
+
const useReadAndSubscribe_1 = require("../react/useReadAndSubscribe");
|
6
6
|
function getOrCreateCachedComponent(environment, componentName, fragmentReference) {
|
7
7
|
var _a, _b, _c;
|
8
8
|
// cachedComponentsById is a three layer cache: id, then component name, then
|
@@ -0,0 +1,6 @@
|
|
1
|
+
import { ItemCleanupPair } from '@isograph/disposable-types';
|
2
|
+
import { IsographEntrypoint, RefetchQueryNormalizationArtifact } from './entrypoint';
|
3
|
+
import { Variables } from './FragmentReference';
|
4
|
+
import { IsographEnvironment } from './IsographEnvironment';
|
5
|
+
import { PromiseWrapper } from './PromiseWrapper';
|
6
|
+
export declare function makeNetworkRequest<T>(environment: IsographEnvironment, artifact: RefetchQueryNormalizationArtifact | IsographEntrypoint<any, any>, variables: Variables): ItemCleanupPair<PromiseWrapper<T>>;
|
@@ -0,0 +1,54 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.makeNetworkRequest = void 0;
|
4
|
+
const garbageCollection_1 = require("./garbageCollection");
|
5
|
+
const PromiseWrapper_1 = require("./PromiseWrapper");
|
6
|
+
const cache_1 = require("./cache");
|
7
|
+
function makeNetworkRequest(environment, artifact, variables) {
|
8
|
+
if (typeof window !== 'undefined' && window.__LOG) {
|
9
|
+
console.log('make network request', artifact, variables);
|
10
|
+
}
|
11
|
+
let status = {
|
12
|
+
kind: 'UndisposedIncomplete',
|
13
|
+
};
|
14
|
+
// This should be an observable, not a promise
|
15
|
+
const promise = environment
|
16
|
+
.networkFunction(artifact.queryText, variables)
|
17
|
+
.then((networkResponse) => {
|
18
|
+
var _a;
|
19
|
+
if (typeof window !== 'undefined' && window.__LOG) {
|
20
|
+
console.log('network response', artifact, networkResponse);
|
21
|
+
}
|
22
|
+
if (status.kind === 'UndisposedIncomplete') {
|
23
|
+
(0, cache_1.normalizeData)(environment, artifact.normalizationAst, (_a = networkResponse.data) !== null && _a !== void 0 ? _a : {}, variables, artifact.kind === 'Entrypoint' ? artifact.nestedRefetchQueries : []);
|
24
|
+
const retainedQuery = {
|
25
|
+
normalizationAst: artifact.normalizationAst,
|
26
|
+
variables,
|
27
|
+
};
|
28
|
+
status = {
|
29
|
+
kind: 'UndisposedComplete',
|
30
|
+
retainedQuery,
|
31
|
+
};
|
32
|
+
(0, garbageCollection_1.retainQuery)(environment, retainedQuery);
|
33
|
+
}
|
34
|
+
// TODO return null
|
35
|
+
return networkResponse;
|
36
|
+
});
|
37
|
+
const wrapper = (0, PromiseWrapper_1.wrapPromise)(promise);
|
38
|
+
const response = [
|
39
|
+
wrapper,
|
40
|
+
() => {
|
41
|
+
if (status.kind === 'UndisposedComplete') {
|
42
|
+
const didUnretainSomeQuery = (0, garbageCollection_1.unretainQuery)(environment, status.retainedQuery);
|
43
|
+
if (didUnretainSomeQuery) {
|
44
|
+
(0, garbageCollection_1.garbageCollectEnvironment)(environment);
|
45
|
+
}
|
46
|
+
}
|
47
|
+
status = {
|
48
|
+
kind: 'Disposed',
|
49
|
+
};
|
50
|
+
},
|
51
|
+
];
|
52
|
+
return response;
|
53
|
+
}
|
54
|
+
exports.makeNetworkRequest = makeNetworkRequest;
|
@@ -4,6 +4,7 @@ exports.readButDoNotEvaluate = void 0;
|
|
4
4
|
const cache_1 = require("./cache");
|
5
5
|
const componentCache_1 = require("./componentCache");
|
6
6
|
const IsographEnvironment_1 = require("./IsographEnvironment");
|
7
|
+
const makeNetworkRequest_1 = require("./makeNetworkRequest");
|
7
8
|
function readButDoNotEvaluate(environment, reference) {
|
8
9
|
var _a;
|
9
10
|
const mutableEncounteredRecords = new Set();
|
@@ -218,7 +219,7 @@ function readData(environment, ast, root, variables, nestedRefetchQueries, mutab
|
|
218
219
|
};
|
219
220
|
const localVariables = includeReadOutData(args !== null && args !== void 0 ? args : {}, refetchReaderParams.data);
|
220
221
|
writeQueryArgsToVariables(localVariables, field.queryArguments, variables);
|
221
|
-
const [_networkRequest, disposeNetworkRequest] = (0,
|
222
|
+
const [_networkRequest, disposeNetworkRequest] = (0, makeNetworkRequest_1.makeNetworkRequest)(environment, field.entrypoint, localVariables);
|
222
223
|
const fragmentReference = {
|
223
224
|
kind: 'FragmentReference',
|
224
225
|
readerArtifact: field.entrypoint.readerArtifact,
|
package/dist/index.d.ts
CHANGED
@@ -1,16 +1,17 @@
|
|
1
|
-
export { retainQuery, unretainQuery, type RetainedQuery, garbageCollectEnvironment, } from './garbageCollection';
|
2
|
-
export { type PromiseWrapper } from './PromiseWrapper';
|
3
|
-
export {
|
4
|
-
export {
|
5
|
-
export {
|
6
|
-
export {
|
7
|
-
export {
|
8
|
-
export {
|
9
|
-
export {
|
10
|
-
export {
|
11
|
-
export {
|
12
|
-
export {
|
13
|
-
export {
|
14
|
-
export {
|
15
|
-
export {
|
1
|
+
export { retainQuery, unretainQuery, type RetainedQuery, garbageCollectEnvironment, } from './core/garbageCollection';
|
2
|
+
export { type PromiseWrapper } from './core/PromiseWrapper';
|
3
|
+
export { subscribe, normalizeData } from './core/cache';
|
4
|
+
export { makeNetworkRequest } from './core/makeNetworkRequest';
|
5
|
+
export { ROOT_ID, type DataId, type DataTypeValue, type IsographEnvironment, type IsographNetworkFunction, type IsographStore, type Link, type StoreRecord, createIsographEnvironment, createIsographStore, defaultMissingFieldHandler, } from './core/IsographEnvironment';
|
6
|
+
export { EagerReaderArtifact, ComponentReaderArtifact, RefetchReaderArtifact, ReaderAst, ReaderAstNode, ReaderLinkedField, ReaderNonLoadableResolverField, ReaderScalarField, TopLevelReaderArtifact, LoadableField, } from './core/reader';
|
7
|
+
export { NormalizationAst, NormalizationAstNode, NormalizationLinkedField, NormalizationScalarField, IsographEntrypoint, assertIsEntrypoint, RefetchQueryNormalizationArtifact, RefetchQueryNormalizationArtifactWrapper, } from './core/entrypoint';
|
8
|
+
export { readButDoNotEvaluate } from './core/read';
|
9
|
+
export { ExtractSecondParam, Argument, ArgumentName, ArgumentValue, Arguments, } from './core/util';
|
10
|
+
export { type FragmentReference } from './core/FragmentReference';
|
11
|
+
export { IsographEnvironmentProvider, useIsographEnvironment, type IsographEnvironmentProviderProps, } from './react/IsographEnvironmentProvider';
|
12
|
+
export { useImperativeReference } from './react/useImperativeReference';
|
13
|
+
export { FragmentReferenceReader } from './react/FragmentReferenceReader';
|
14
|
+
export { useResult } from './react/useResult';
|
15
|
+
export { useLazyReference } from './react/useLazyReference';
|
16
|
+
export { useRerenderOnChange } from './react/useRerenderOnChange';
|
16
17
|
export { useClientSideDefer } from './loadable-hooks/useClientSideDefer';
|
package/dist/index.js
CHANGED
@@ -1,35 +1,36 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.useClientSideDefer = exports.useRerenderOnChange = exports.useLazyReference = exports.useResult = exports.
|
4
|
-
var garbageCollection_1 = require("./garbageCollection");
|
3
|
+
exports.useClientSideDefer = exports.useRerenderOnChange = exports.useLazyReference = exports.useResult = exports.FragmentReferenceReader = exports.useImperativeReference = exports.useIsographEnvironment = exports.IsographEnvironmentProvider = exports.readButDoNotEvaluate = exports.assertIsEntrypoint = exports.defaultMissingFieldHandler = exports.createIsographStore = exports.createIsographEnvironment = exports.ROOT_ID = exports.makeNetworkRequest = exports.normalizeData = exports.subscribe = exports.garbageCollectEnvironment = exports.unretainQuery = exports.retainQuery = void 0;
|
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; } });
|
7
7
|
Object.defineProperty(exports, "garbageCollectEnvironment", { enumerable: true, get: function () { return garbageCollection_1.garbageCollectEnvironment; } });
|
8
|
-
var cache_1 = require("./cache");
|
9
|
-
Object.defineProperty(exports, "makeNetworkRequest", { enumerable: true, get: function () { return cache_1.makeNetworkRequest; } });
|
8
|
+
var cache_1 = require("./core/cache");
|
10
9
|
Object.defineProperty(exports, "subscribe", { enumerable: true, get: function () { return cache_1.subscribe; } });
|
11
10
|
Object.defineProperty(exports, "normalizeData", { enumerable: true, get: function () { return cache_1.normalizeData; } });
|
12
|
-
var
|
11
|
+
var makeNetworkRequest_1 = require("./core/makeNetworkRequest");
|
12
|
+
Object.defineProperty(exports, "makeNetworkRequest", { enumerable: true, get: function () { return makeNetworkRequest_1.makeNetworkRequest; } });
|
13
|
+
var IsographEnvironment_1 = require("./core/IsographEnvironment");
|
13
14
|
Object.defineProperty(exports, "ROOT_ID", { enumerable: true, get: function () { return IsographEnvironment_1.ROOT_ID; } });
|
14
15
|
Object.defineProperty(exports, "createIsographEnvironment", { enumerable: true, get: function () { return IsographEnvironment_1.createIsographEnvironment; } });
|
15
16
|
Object.defineProperty(exports, "createIsographStore", { enumerable: true, get: function () { return IsographEnvironment_1.createIsographStore; } });
|
16
17
|
Object.defineProperty(exports, "defaultMissingFieldHandler", { enumerable: true, get: function () { return IsographEnvironment_1.defaultMissingFieldHandler; } });
|
17
|
-
var
|
18
|
+
var entrypoint_1 = require("./core/entrypoint");
|
19
|
+
Object.defineProperty(exports, "assertIsEntrypoint", { enumerable: true, get: function () { return entrypoint_1.assertIsEntrypoint; } });
|
20
|
+
var read_1 = require("./core/read");
|
21
|
+
Object.defineProperty(exports, "readButDoNotEvaluate", { enumerable: true, get: function () { return read_1.readButDoNotEvaluate; } });
|
22
|
+
var IsographEnvironmentProvider_1 = require("./react/IsographEnvironmentProvider");
|
18
23
|
Object.defineProperty(exports, "IsographEnvironmentProvider", { enumerable: true, get: function () { return IsographEnvironmentProvider_1.IsographEnvironmentProvider; } });
|
19
24
|
Object.defineProperty(exports, "useIsographEnvironment", { enumerable: true, get: function () { return IsographEnvironmentProvider_1.useIsographEnvironment; } });
|
20
|
-
var useImperativeReference_1 = require("./useImperativeReference");
|
25
|
+
var useImperativeReference_1 = require("./react/useImperativeReference");
|
21
26
|
Object.defineProperty(exports, "useImperativeReference", { enumerable: true, get: function () { return useImperativeReference_1.useImperativeReference; } });
|
22
|
-
var
|
23
|
-
Object.defineProperty(exports, "
|
24
|
-
var
|
25
|
-
Object.defineProperty(exports, "assertIsEntrypoint", { enumerable: true, get: function () { return entrypoint_1.assertIsEntrypoint; } });
|
26
|
-
var read_1 = require("./read");
|
27
|
-
Object.defineProperty(exports, "readButDoNotEvaluate", { enumerable: true, get: function () { return read_1.readButDoNotEvaluate; } });
|
28
|
-
var useResult_1 = require("./useResult");
|
27
|
+
var FragmentReferenceReader_1 = require("./react/FragmentReferenceReader");
|
28
|
+
Object.defineProperty(exports, "FragmentReferenceReader", { enumerable: true, get: function () { return FragmentReferenceReader_1.FragmentReferenceReader; } });
|
29
|
+
var useResult_1 = require("./react/useResult");
|
29
30
|
Object.defineProperty(exports, "useResult", { enumerable: true, get: function () { return useResult_1.useResult; } });
|
30
|
-
var useLazyReference_1 = require("./useLazyReference");
|
31
|
+
var useLazyReference_1 = require("./react/useLazyReference");
|
31
32
|
Object.defineProperty(exports, "useLazyReference", { enumerable: true, get: function () { return useLazyReference_1.useLazyReference; } });
|
32
|
-
var useRerenderOnChange_1 = require("./useRerenderOnChange");
|
33
|
+
var useRerenderOnChange_1 = require("./react/useRerenderOnChange");
|
33
34
|
Object.defineProperty(exports, "useRerenderOnChange", { enumerable: true, get: function () { return useRerenderOnChange_1.useRerenderOnChange; } });
|
34
35
|
var useClientSideDefer_1 = require("./loadable-hooks/useClientSideDefer");
|
35
36
|
Object.defineProperty(exports, "useClientSideDefer", { enumerable: true, get: function () { return useClientSideDefer_1.useClientSideDefer; } });
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { FragmentReference } from '../FragmentReference';
|
2
|
-
import { LoadableField } from '../reader';
|
1
|
+
import { FragmentReference } from '../core/FragmentReference';
|
2
|
+
import { LoadableField } from '../core/reader';
|
3
3
|
export declare function useClientSideDefer<TResult>(loadableField: LoadableField<void, TResult>): FragmentReference<any, TResult>;
|
4
4
|
export declare function useClientSideDefer<TArgs, TResult>(loadableField: LoadableField<TArgs, TResult>, args: TArgs): FragmentReference<any, TResult>;
|
@@ -1,8 +1,8 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.useClientSideDefer = void 0;
|
4
|
-
const IsographEnvironmentProvider_1 = require("../IsographEnvironmentProvider");
|
5
|
-
const cache_1 = require("../cache");
|
4
|
+
const IsographEnvironmentProvider_1 = require("../react/IsographEnvironmentProvider");
|
5
|
+
const cache_1 = require("../core/cache");
|
6
6
|
const react_disposable_state_1 = require("@isograph/react-disposable-state");
|
7
7
|
// TODO allow the user to pass props somehow
|
8
8
|
function useClientSideDefer(loadableField, args) {
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import * as React from 'react';
|
2
|
+
import { ExtractReadFromStore, IsographEntrypoint } from '../core/entrypoint';
|
3
|
+
import { FragmentReference } from '../core/FragmentReference';
|
4
|
+
export declare function FragmentReferenceReader<TProps extends Record<any, any>, TEntrypoint extends IsographEntrypoint<any, React.FC<TProps>>>(props: TProps extends Record<string, never> ? {
|
5
|
+
fragmentReference: FragmentReference<ExtractReadFromStore<TEntrypoint>, React.FC<{}>>;
|
6
|
+
additionalProps?: TProps;
|
7
|
+
} : {
|
8
|
+
fragmentReference: FragmentReference<ExtractReadFromStore<TEntrypoint>, React.FC<TProps>>;
|
9
|
+
additionalProps: TProps;
|
10
|
+
}): React.ReactNode;
|
@@ -23,11 +23,11 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
23
23
|
return result;
|
24
24
|
};
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
26
|
-
exports.
|
26
|
+
exports.FragmentReferenceReader = void 0;
|
27
27
|
const React = __importStar(require("react"));
|
28
28
|
const useResult_1 = require("./useResult");
|
29
|
-
function
|
29
|
+
function FragmentReferenceReader(props) {
|
30
30
|
const Component = (0, useResult_1.useResult)(props.fragmentReference);
|
31
31
|
return React.createElement(Component, Object.assign({}, props.additionalProps));
|
32
32
|
}
|
33
|
-
exports.
|
33
|
+
exports.FragmentReferenceReader = FragmentReferenceReader;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import * as React from 'react';
|
2
2
|
import { ReactNode } from 'react';
|
3
|
-
import { type IsographEnvironment } from '
|
3
|
+
import { type IsographEnvironment } from '../core/IsographEnvironment';
|
4
4
|
export declare const IsographEnvironmentContext: React.Context<IsographEnvironment | null>;
|
5
5
|
export type IsographEnvironmentProviderProps = {
|
6
6
|
readonly environment: IsographEnvironment;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { UnassignedState } from '@isograph/react-disposable-state';
|
2
|
-
import { IsographEntrypoint } from '
|
3
|
-
import { FragmentReference, Variables } from '
|
2
|
+
import { IsographEntrypoint } from '../core/entrypoint';
|
3
|
+
import { FragmentReference, Variables } from '../core/FragmentReference';
|
4
4
|
export declare function useImperativeReference<TReadFromStore extends Object, TClientFieldValue>(entrypoint: IsographEntrypoint<TReadFromStore, TClientFieldValue>): {
|
5
5
|
fragmentReference: FragmentReference<TReadFromStore, TClientFieldValue> | UnassignedState;
|
6
6
|
loadfragmentReference: (variables: Variables) => void;
|
@@ -3,15 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.useImperativeReference = void 0;
|
4
4
|
const react_disposable_state_1 = require("@isograph/react-disposable-state");
|
5
5
|
const IsographEnvironmentProvider_1 = require("./IsographEnvironmentProvider");
|
6
|
-
const
|
7
|
-
const
|
6
|
+
const IsographEnvironment_1 = require("../core/IsographEnvironment");
|
7
|
+
const makeNetworkRequest_1 = require("../core/makeNetworkRequest");
|
8
8
|
function useImperativeReference(entrypoint) {
|
9
9
|
const { state, setState } = (0, react_disposable_state_1.useUpdatableDisposableState)();
|
10
10
|
const environment = (0, IsographEnvironmentProvider_1.useIsographEnvironment)();
|
11
11
|
return {
|
12
12
|
fragmentReference: state,
|
13
13
|
loadfragmentReference: (variables) => {
|
14
|
-
const [_networkRequest, disposeNetworkRequest] = (0,
|
14
|
+
const [_networkRequest, disposeNetworkRequest] = (0, makeNetworkRequest_1.makeNetworkRequest)(environment, entrypoint, variables);
|
15
15
|
setState([
|
16
16
|
{
|
17
17
|
kind: 'FragmentReference',
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import { FragmentReference, Variables } from '
|
2
|
-
import { IsographEntrypoint } from '
|
1
|
+
import { FragmentReference, Variables } from '../core/FragmentReference';
|
2
|
+
import { IsographEntrypoint } from '../core/entrypoint';
|
3
3
|
export declare function useLazyReference<TReadFromStore extends Object, TClientFieldValue>(entrypoint: IsographEntrypoint<TReadFromStore, TClientFieldValue>, variables: Variables): {
|
4
4
|
fragmentReference: FragmentReference<TReadFromStore, TClientFieldValue>;
|
5
5
|
};
|
@@ -2,8 +2,8 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.useLazyReference = void 0;
|
4
4
|
const IsographEnvironmentProvider_1 = require("./IsographEnvironmentProvider");
|
5
|
-
const IsographEnvironment_1 = require("
|
6
|
-
const cache_1 = require("
|
5
|
+
const IsographEnvironment_1 = require("../core/IsographEnvironment");
|
6
|
+
const cache_1 = require("../core/cache");
|
7
7
|
const react_disposable_state_1 = require("@isograph/react-disposable-state");
|
8
8
|
function useLazyReference(entrypoint, variables) {
|
9
9
|
const environment = (0, IsographEnvironmentProvider_1.useIsographEnvironment)();
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import { FragmentReference } from '
|
2
|
-
import { IsographEnvironment } from '
|
1
|
+
import { FragmentReference } from '../core/FragmentReference';
|
2
|
+
import { IsographEnvironment } from '../core/IsographEnvironment';
|
3
3
|
/**
|
4
4
|
* Read the data from a fragment reference and subscribe to updates.
|
5
5
|
* Does not pass the data to the fragment reference's resolver function.
|
@@ -2,7 +2,7 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.useReadAndSubscribe = void 0;
|
4
4
|
const react_1 = require("react");
|
5
|
-
const read_1 = require("
|
5
|
+
const read_1 = require("../core/read");
|
6
6
|
const useRerenderOnChange_1 = require("./useRerenderOnChange");
|
7
7
|
/**
|
8
8
|
* Read the data from a fragment reference and subscribe to updates.
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { IsographEnvironment } from '
|
2
|
-
import { WithEncounteredRecords } from '
|
3
|
-
import { FragmentReference } from '
|
1
|
+
import { IsographEnvironment } from '../core/IsographEnvironment';
|
2
|
+
import { WithEncounteredRecords } from '../core/read';
|
3
|
+
import { FragmentReference } from '../core/FragmentReference';
|
4
4
|
export declare function useRerenderOnChange<TReadFromStore extends Object>(environment: IsographEnvironment, encounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>, fragmentReference: FragmentReference<any, any>, setEncounteredDataAndRecords: (data: WithEncounteredRecords<TReadFromStore>) => void): void;
|
@@ -2,7 +2,7 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.useRerenderOnChange = void 0;
|
4
4
|
const react_1 = require("react");
|
5
|
-
const cache_1 = require("
|
5
|
+
const cache_1 = require("../core/cache");
|
6
6
|
// TODO add unit tests for this. Add integration tests that test
|
7
7
|
// behavior when the encounteredRecords underneath a fragment change.
|
8
8
|
function useRerenderOnChange(environment, encounteredDataAndRecords, fragmentReference, setEncounteredDataAndRecords) {
|
@@ -1,2 +1,2 @@
|
|
1
|
-
import { FragmentReference } from '
|
1
|
+
import { FragmentReference } from '../core/FragmentReference';
|
2
2
|
export declare function useResult<TReadFromStore extends Object, TClientFieldValue>(fragmentReference: FragmentReference<TReadFromStore, TClientFieldValue>): TClientFieldValue;
|
@@ -1,8 +1,8 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.useResult = void 0;
|
4
|
-
const IsographEnvironmentProvider_1 = require("
|
5
|
-
const componentCache_1 = require("
|
4
|
+
const IsographEnvironmentProvider_1 = require("../react/IsographEnvironmentProvider");
|
5
|
+
const componentCache_1 = require("../core/componentCache");
|
6
6
|
const useReadAndSubscribe_1 = require("./useReadAndSubscribe");
|
7
7
|
function useResult(fragmentReference) {
|
8
8
|
const environment = (0, IsographEnvironmentProvider_1.useIsographEnvironment)();
|
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-d564e834",
|
4
4
|
"description": "Use Isograph with React",
|
5
5
|
"homepage": "https://isograph.dev",
|
6
6
|
"main": "dist/index.js",
|
@@ -13,11 +13,12 @@
|
|
13
13
|
"test": "vitest run",
|
14
14
|
"test-watch": "vitest watch",
|
15
15
|
"coverage": "vitest run --coverage",
|
16
|
-
"prepack": "yarn run test && yarn run compile"
|
16
|
+
"prepack": "yarn run test && yarn run compile",
|
17
|
+
"tsc": "tsc"
|
17
18
|
},
|
18
19
|
"dependencies": {
|
19
|
-
"@isograph/disposable-types": "0.0.0-main-
|
20
|
-
"@isograph/react-disposable-state": "0.0.0-main-
|
20
|
+
"@isograph/disposable-types": "0.0.0-main-d564e834",
|
21
|
+
"@isograph/react-disposable-state": "0.0.0-main-d564e834",
|
21
22
|
"react": "^18.2.0"
|
22
23
|
},
|
23
24
|
"devDependencies": {
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { DataId } from './IsographEnvironment';
|
2
|
-
import { RefetchQueryNormalizationArtifactWrapper } from '
|
2
|
+
import { RefetchQueryNormalizationArtifactWrapper } from '../core/entrypoint';
|
3
3
|
import { TopLevelReaderArtifact } from './reader';
|
4
4
|
|
5
5
|
// TODO type this better
|
@@ -1,9 +1,5 @@
|
|
1
|
-
import {
|
2
|
-
|
3
|
-
ItemCleanupPair,
|
4
|
-
ParentCache,
|
5
|
-
} from '@isograph/react-disposable-state';
|
6
|
-
import { PromiseWrapper, wrapPromise } from './PromiseWrapper';
|
1
|
+
import { Factory, ParentCache } from '@isograph/react-disposable-state';
|
2
|
+
import { PromiseWrapper } from './PromiseWrapper';
|
7
3
|
import {
|
8
4
|
DataId,
|
9
5
|
ROOT_ID,
|
@@ -13,26 +9,20 @@ import {
|
|
13
9
|
DataTypeValue,
|
14
10
|
getLink,
|
15
11
|
} from './IsographEnvironment';
|
16
|
-
import {
|
17
|
-
RetainedQuery,
|
18
|
-
garbageCollectEnvironment,
|
19
|
-
retainQuery,
|
20
|
-
unretainQuery,
|
21
|
-
} from './garbageCollection';
|
22
12
|
import {
|
23
13
|
IsographEntrypoint,
|
24
14
|
NormalizationAst,
|
25
15
|
NormalizationInlineFragment,
|
26
16
|
NormalizationLinkedField,
|
27
17
|
NormalizationScalarField,
|
28
|
-
RefetchQueryNormalizationArtifact,
|
29
18
|
RefetchQueryNormalizationArtifactWrapper,
|
30
|
-
} from '
|
19
|
+
} from '../core/entrypoint';
|
31
20
|
import { ReaderLinkedField, ReaderScalarField } from './reader';
|
32
21
|
import { Argument, ArgumentValue } from './util';
|
33
22
|
import { WithEncounteredRecords, readButDoNotEvaluate } from './read';
|
34
23
|
import { FragmentReference, Variables } from './FragmentReference';
|
35
24
|
import { areEqualObjectsWithDeepComparison } from './areEqualWithDeepComparison';
|
25
|
+
import { makeNetworkRequest } from './makeNetworkRequest';
|
36
26
|
|
37
27
|
const TYPENAME_FIELD_NAME = '__typename';
|
38
28
|
|
@@ -101,81 +91,6 @@ export function getOrCreateCacheForArtifact<
|
|
101
91
|
);
|
102
92
|
}
|
103
93
|
|
104
|
-
type NetworkRequestStatus =
|
105
|
-
| {
|
106
|
-
readonly kind: 'UndisposedIncomplete';
|
107
|
-
}
|
108
|
-
| {
|
109
|
-
readonly kind: 'Disposed';
|
110
|
-
}
|
111
|
-
| {
|
112
|
-
readonly kind: 'UndisposedComplete';
|
113
|
-
readonly retainedQuery: RetainedQuery;
|
114
|
-
};
|
115
|
-
|
116
|
-
export function makeNetworkRequest<T>(
|
117
|
-
environment: IsographEnvironment,
|
118
|
-
artifact: RefetchQueryNormalizationArtifact | IsographEntrypoint<any, any>,
|
119
|
-
variables: Variables,
|
120
|
-
): ItemCleanupPair<PromiseWrapper<T>> {
|
121
|
-
if (typeof window !== 'undefined' && window.__LOG) {
|
122
|
-
console.log('make network request', artifact, variables);
|
123
|
-
}
|
124
|
-
let status: NetworkRequestStatus = {
|
125
|
-
kind: 'UndisposedIncomplete',
|
126
|
-
};
|
127
|
-
// This should be an observable, not a promise
|
128
|
-
const promise = environment
|
129
|
-
.networkFunction(artifact.queryText, variables)
|
130
|
-
.then((networkResponse) => {
|
131
|
-
if (typeof window !== 'undefined' && window.__LOG) {
|
132
|
-
console.log('network response', artifact, networkResponse);
|
133
|
-
}
|
134
|
-
|
135
|
-
if (status.kind === 'UndisposedIncomplete') {
|
136
|
-
normalizeData(
|
137
|
-
environment,
|
138
|
-
artifact.normalizationAst,
|
139
|
-
networkResponse.data,
|
140
|
-
variables,
|
141
|
-
artifact.kind === 'Entrypoint' ? artifact.nestedRefetchQueries : [],
|
142
|
-
);
|
143
|
-
const retainedQuery = {
|
144
|
-
normalizationAst: artifact.normalizationAst,
|
145
|
-
variables,
|
146
|
-
};
|
147
|
-
status = {
|
148
|
-
kind: 'UndisposedComplete',
|
149
|
-
retainedQuery,
|
150
|
-
};
|
151
|
-
retainQuery(environment, retainedQuery);
|
152
|
-
}
|
153
|
-
// TODO return null
|
154
|
-
return networkResponse;
|
155
|
-
});
|
156
|
-
|
157
|
-
const wrapper = wrapPromise(promise);
|
158
|
-
|
159
|
-
const response: ItemCleanupPair<PromiseWrapper<T>> = [
|
160
|
-
wrapper,
|
161
|
-
() => {
|
162
|
-
if (status.kind === 'UndisposedComplete') {
|
163
|
-
const didUnretainSomeQuery = unretainQuery(
|
164
|
-
environment,
|
165
|
-
status.retainedQuery,
|
166
|
-
);
|
167
|
-
if (didUnretainSomeQuery) {
|
168
|
-
garbageCollectEnvironment(environment);
|
169
|
-
}
|
170
|
-
}
|
171
|
-
status = {
|
172
|
-
kind: 'Disposed',
|
173
|
-
};
|
174
|
-
},
|
175
|
-
];
|
176
|
-
return response;
|
177
|
-
}
|
178
|
-
|
179
94
|
type NetworkResponseScalarValue = string | number | boolean;
|
180
95
|
type NetworkResponseValue =
|
181
96
|
| NetworkResponseScalarValue
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { stableCopy } from './cache';
|
2
2
|
import { IsographEnvironment } from './IsographEnvironment';
|
3
3
|
import { FragmentReference } from './FragmentReference';
|
4
|
-
import { useReadAndSubscribe } from '
|
4
|
+
import { useReadAndSubscribe } from '../react/useReadAndSubscribe';
|
5
5
|
|
6
6
|
export function getOrCreateCachedComponent(
|
7
7
|
environment: IsographEnvironment,
|
@@ -0,0 +1,90 @@
|
|
1
|
+
import { ItemCleanupPair } from '@isograph/disposable-types';
|
2
|
+
import {
|
3
|
+
IsographEntrypoint,
|
4
|
+
RefetchQueryNormalizationArtifact,
|
5
|
+
} from './entrypoint';
|
6
|
+
import { Variables } from './FragmentReference';
|
7
|
+
import {
|
8
|
+
garbageCollectEnvironment,
|
9
|
+
RetainedQuery,
|
10
|
+
retainQuery,
|
11
|
+
unretainQuery,
|
12
|
+
} from './garbageCollection';
|
13
|
+
import { IsographEnvironment } from './IsographEnvironment';
|
14
|
+
import { PromiseWrapper, wrapPromise } from './PromiseWrapper';
|
15
|
+
import { normalizeData } from './cache';
|
16
|
+
|
17
|
+
export function makeNetworkRequest<T>(
|
18
|
+
environment: IsographEnvironment,
|
19
|
+
artifact: RefetchQueryNormalizationArtifact | IsographEntrypoint<any, any>,
|
20
|
+
variables: Variables,
|
21
|
+
): ItemCleanupPair<PromiseWrapper<T>> {
|
22
|
+
if (typeof window !== 'undefined' && window.__LOG) {
|
23
|
+
console.log('make network request', artifact, variables);
|
24
|
+
}
|
25
|
+
let status: NetworkRequestStatus = {
|
26
|
+
kind: 'UndisposedIncomplete',
|
27
|
+
};
|
28
|
+
// This should be an observable, not a promise
|
29
|
+
const promise = environment
|
30
|
+
.networkFunction(artifact.queryText, variables)
|
31
|
+
.then((networkResponse) => {
|
32
|
+
if (typeof window !== 'undefined' && window.__LOG) {
|
33
|
+
console.log('network response', artifact, networkResponse);
|
34
|
+
}
|
35
|
+
|
36
|
+
if (status.kind === 'UndisposedIncomplete') {
|
37
|
+
normalizeData(
|
38
|
+
environment,
|
39
|
+
artifact.normalizationAst,
|
40
|
+
networkResponse.data ?? {},
|
41
|
+
variables,
|
42
|
+
artifact.kind === 'Entrypoint' ? artifact.nestedRefetchQueries : [],
|
43
|
+
);
|
44
|
+
const retainedQuery = {
|
45
|
+
normalizationAst: artifact.normalizationAst,
|
46
|
+
variables,
|
47
|
+
};
|
48
|
+
status = {
|
49
|
+
kind: 'UndisposedComplete',
|
50
|
+
retainedQuery,
|
51
|
+
};
|
52
|
+
retainQuery(environment, retainedQuery);
|
53
|
+
}
|
54
|
+
// TODO return null
|
55
|
+
return networkResponse;
|
56
|
+
});
|
57
|
+
|
58
|
+
const wrapper = wrapPromise(promise);
|
59
|
+
|
60
|
+
const response: ItemCleanupPair<PromiseWrapper<T>> = [
|
61
|
+
wrapper,
|
62
|
+
() => {
|
63
|
+
if (status.kind === 'UndisposedComplete') {
|
64
|
+
const didUnretainSomeQuery = unretainQuery(
|
65
|
+
environment,
|
66
|
+
status.retainedQuery,
|
67
|
+
);
|
68
|
+
if (didUnretainSomeQuery) {
|
69
|
+
garbageCollectEnvironment(environment);
|
70
|
+
}
|
71
|
+
}
|
72
|
+
status = {
|
73
|
+
kind: 'Disposed',
|
74
|
+
};
|
75
|
+
},
|
76
|
+
];
|
77
|
+
return response;
|
78
|
+
}
|
79
|
+
|
80
|
+
type NetworkRequestStatus =
|
81
|
+
| {
|
82
|
+
readonly kind: 'UndisposedIncomplete';
|
83
|
+
}
|
84
|
+
| {
|
85
|
+
readonly kind: 'Disposed';
|
86
|
+
}
|
87
|
+
| {
|
88
|
+
readonly kind: 'UndisposedComplete';
|
89
|
+
readonly retainedQuery: RetainedQuery;
|
90
|
+
};
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { getParentRecordKey,
|
1
|
+
import { getParentRecordKey, onNextChange } from './cache';
|
2
2
|
import { getOrCreateCachedComponent } from './componentCache';
|
3
3
|
import { RefetchQueryNormalizationArtifactWrapper } from './entrypoint';
|
4
4
|
import { FragmentReference, Variables } from './FragmentReference';
|
@@ -8,6 +8,7 @@ import {
|
|
8
8
|
defaultMissingFieldHandler,
|
9
9
|
IsographEnvironment,
|
10
10
|
} from './IsographEnvironment';
|
11
|
+
import { makeNetworkRequest } from './makeNetworkRequest';
|
11
12
|
import { ReaderAst } from './reader';
|
12
13
|
import { Arguments } from './util';
|
13
14
|
|
package/src/index.ts
CHANGED
@@ -3,9 +3,10 @@ export {
|
|
3
3
|
unretainQuery,
|
4
4
|
type RetainedQuery,
|
5
5
|
garbageCollectEnvironment,
|
6
|
-
} from './garbageCollection';
|
7
|
-
export { type PromiseWrapper } from './PromiseWrapper';
|
8
|
-
export {
|
6
|
+
} from './core/garbageCollection';
|
7
|
+
export { type PromiseWrapper } from './core/PromiseWrapper';
|
8
|
+
export { subscribe, normalizeData } from './core/cache';
|
9
|
+
export { makeNetworkRequest } from './core/makeNetworkRequest';
|
9
10
|
export {
|
10
11
|
ROOT_ID,
|
11
12
|
type DataId,
|
@@ -18,14 +19,7 @@ export {
|
|
18
19
|
createIsographEnvironment,
|
19
20
|
createIsographStore,
|
20
21
|
defaultMissingFieldHandler,
|
21
|
-
} from './IsographEnvironment';
|
22
|
-
export {
|
23
|
-
IsographEnvironmentProvider,
|
24
|
-
useIsographEnvironment,
|
25
|
-
type IsographEnvironmentProviderProps,
|
26
|
-
} from './IsographEnvironmentProvider';
|
27
|
-
export { useImperativeReference } from './useImperativeReference';
|
28
|
-
export { EntrypointReader } from './EntrypointReader';
|
22
|
+
} from './core/IsographEnvironment';
|
29
23
|
export {
|
30
24
|
EagerReaderArtifact,
|
31
25
|
ComponentReaderArtifact,
|
@@ -37,7 +31,7 @@ export {
|
|
37
31
|
ReaderScalarField,
|
38
32
|
TopLevelReaderArtifact,
|
39
33
|
LoadableField,
|
40
|
-
} from './reader';
|
34
|
+
} from './core/reader';
|
41
35
|
export {
|
42
36
|
NormalizationAst,
|
43
37
|
NormalizationAstNode,
|
@@ -47,17 +41,26 @@ export {
|
|
47
41
|
assertIsEntrypoint,
|
48
42
|
RefetchQueryNormalizationArtifact,
|
49
43
|
RefetchQueryNormalizationArtifactWrapper,
|
50
|
-
} from './entrypoint';
|
51
|
-
export { readButDoNotEvaluate } from './read';
|
52
|
-
export { useResult } from './useResult';
|
53
|
-
export { type FragmentReference } from './FragmentReference';
|
54
|
-
export { useLazyReference } from './useLazyReference';
|
44
|
+
} from './core/entrypoint';
|
45
|
+
export { readButDoNotEvaluate } from './core/read';
|
55
46
|
export {
|
56
47
|
ExtractSecondParam,
|
57
48
|
Argument,
|
58
49
|
ArgumentName,
|
59
50
|
ArgumentValue,
|
60
51
|
Arguments,
|
61
|
-
} from './util';
|
62
|
-
export {
|
52
|
+
} from './core/util';
|
53
|
+
export { type FragmentReference } from './core/FragmentReference';
|
54
|
+
|
55
|
+
export {
|
56
|
+
IsographEnvironmentProvider,
|
57
|
+
useIsographEnvironment,
|
58
|
+
type IsographEnvironmentProviderProps,
|
59
|
+
} from './react/IsographEnvironmentProvider';
|
60
|
+
export { useImperativeReference } from './react/useImperativeReference';
|
61
|
+
export { FragmentReferenceReader } from './react/FragmentReferenceReader';
|
62
|
+
export { useResult } from './react/useResult';
|
63
|
+
export { useLazyReference } from './react/useLazyReference';
|
64
|
+
export { useRerenderOnChange } from './react/useRerenderOnChange';
|
65
|
+
|
63
66
|
export { useClientSideDefer } from './loadable-hooks/useClientSideDefer';
|
@@ -1,8 +1,8 @@
|
|
1
|
-
import { FragmentReference } from '../FragmentReference';
|
2
|
-
import { useIsographEnvironment } from '../IsographEnvironmentProvider';
|
3
|
-
import { getOrCreateCache } from '../cache';
|
1
|
+
import { FragmentReference } from '../core/FragmentReference';
|
2
|
+
import { useIsographEnvironment } from '../react/IsographEnvironmentProvider';
|
3
|
+
import { getOrCreateCache } from '../core/cache';
|
4
4
|
import { useLazyDisposableState } from '@isograph/react-disposable-state';
|
5
|
-
import { LoadableField } from '../reader';
|
5
|
+
import { LoadableField } from '../core/reader';
|
6
6
|
|
7
7
|
export function useClientSideDefer<TResult>(
|
8
8
|
loadableField: LoadableField<void, TResult>,
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import * as React from 'react';
|
2
|
-
import { ExtractReadFromStore, IsographEntrypoint } from '
|
3
|
-
import { FragmentReference } from '
|
2
|
+
import { ExtractReadFromStore, IsographEntrypoint } from '../core/entrypoint';
|
3
|
+
import { FragmentReference } from '../core/FragmentReference';
|
4
4
|
import { useResult } from './useResult';
|
5
5
|
|
6
|
-
export function
|
6
|
+
export function FragmentReferenceReader<
|
7
7
|
TProps extends Record<any, any>,
|
8
8
|
TEntrypoint extends IsographEntrypoint<any, React.FC<TProps>>,
|
9
9
|
>(
|
@@ -11,7 +11,7 @@ export function EntrypointReader<
|
|
11
11
|
? {
|
12
12
|
fragmentReference: FragmentReference<
|
13
13
|
ExtractReadFromStore<TEntrypoint>,
|
14
|
-
React.FC<
|
14
|
+
React.FC<{}>
|
15
15
|
>;
|
16
16
|
additionalProps?: TProps;
|
17
17
|
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import * as React from 'react';
|
2
2
|
import { ReactNode, createContext, useContext } from 'react';
|
3
|
-
import { type IsographEnvironment } from '
|
3
|
+
import { type IsographEnvironment } from '../core/IsographEnvironment';
|
4
4
|
|
5
5
|
export const IsographEnvironmentContext =
|
6
6
|
createContext<IsographEnvironment | null>(null);
|
@@ -2,11 +2,11 @@ import {
|
|
2
2
|
UnassignedState,
|
3
3
|
useUpdatableDisposableState,
|
4
4
|
} from '@isograph/react-disposable-state';
|
5
|
-
import { IsographEntrypoint } from '
|
6
|
-
import { FragmentReference, Variables } from '
|
5
|
+
import { IsographEntrypoint } from '../core/entrypoint';
|
6
|
+
import { FragmentReference, Variables } from '../core/FragmentReference';
|
7
7
|
import { useIsographEnvironment } from './IsographEnvironmentProvider';
|
8
|
-
import {
|
9
|
-
import {
|
8
|
+
import { ROOT_ID } from '../core/IsographEnvironment';
|
9
|
+
import { makeNetworkRequest } from '../core/makeNetworkRequest';
|
10
10
|
|
11
11
|
export function useImperativeReference<
|
12
12
|
TReadFromStore extends Object,
|
@@ -1,8 +1,8 @@
|
|
1
|
-
import { FragmentReference, Variables } from '
|
1
|
+
import { FragmentReference, Variables } from '../core/FragmentReference';
|
2
2
|
import { useIsographEnvironment } from './IsographEnvironmentProvider';
|
3
|
-
import { ROOT_ID } from '
|
4
|
-
import { IsographEntrypoint } from '
|
5
|
-
import { getOrCreateCacheForArtifact } from '
|
3
|
+
import { ROOT_ID } from '../core/IsographEnvironment';
|
4
|
+
import { IsographEntrypoint } from '../core/entrypoint';
|
5
|
+
import { getOrCreateCacheForArtifact } from '../core/cache';
|
6
6
|
import { useLazyDisposableState } from '@isograph/react-disposable-state';
|
7
7
|
|
8
8
|
export function useLazyReference<
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { useState } from 'react';
|
2
|
-
import { FragmentReference } from '
|
3
|
-
import { IsographEnvironment } from '
|
4
|
-
import { readButDoNotEvaluate } from '
|
2
|
+
import { FragmentReference } from '../core/FragmentReference';
|
3
|
+
import { IsographEnvironment } from '../core/IsographEnvironment';
|
4
|
+
import { readButDoNotEvaluate } from '../core/read';
|
5
5
|
import { useRerenderOnChange } from './useRerenderOnChange';
|
6
6
|
|
7
7
|
/**
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import { useEffect } from 'react';
|
2
|
-
import { IsographEnvironment } from '
|
3
|
-
import { subscribe } from '
|
4
|
-
import { WithEncounteredRecords } from '
|
5
|
-
import { FragmentReference } from '
|
2
|
+
import { IsographEnvironment } from '../core/IsographEnvironment';
|
3
|
+
import { subscribe } from '../core/cache';
|
4
|
+
import { WithEncounteredRecords } from '../core/read';
|
5
|
+
import { FragmentReference } from '../core/FragmentReference';
|
6
6
|
|
7
7
|
// TODO add unit tests for this. Add integration tests that test
|
8
8
|
// behavior when the encounteredRecords underneath a fragment change.
|
@@ -1,6 +1,6 @@
|
|
1
|
-
import { useIsographEnvironment } from '
|
2
|
-
import { FragmentReference } from '
|
3
|
-
import { getOrCreateCachedComponent } from '
|
1
|
+
import { useIsographEnvironment } from '../react/IsographEnvironmentProvider';
|
2
|
+
import { FragmentReference } from '../core/FragmentReference';
|
3
|
+
import { getOrCreateCachedComponent } from '../core/componentCache';
|
4
4
|
import { useReadAndSubscribe } from './useReadAndSubscribe';
|
5
5
|
|
6
6
|
export function useResult<TReadFromStore extends Object, TClientFieldValue>(
|
@@ -1,6 +1,12 @@
|
|
1
1
|
import { describe, test, expect } from 'vitest';
|
2
|
-
import {
|
3
|
-
|
2
|
+
import {
|
3
|
+
ROOT_ID,
|
4
|
+
createIsographEnvironment,
|
5
|
+
} from '../core/IsographEnvironment';
|
6
|
+
import {
|
7
|
+
garbageCollectEnvironment,
|
8
|
+
retainQuery,
|
9
|
+
} from '../core/garbageCollection';
|
4
10
|
import { iso } from './__isograph/iso';
|
5
11
|
import { nodeFieldRetainedQuery } from './nodeQuery';
|
6
12
|
|
package/tsconfig.json
ADDED
@@ -1,10 +0,0 @@
|
|
1
|
-
import * as React from 'react';
|
2
|
-
import { ExtractReadFromStore, IsographEntrypoint } from './entrypoint';
|
3
|
-
import { FragmentReference } from './FragmentReference';
|
4
|
-
export declare function EntrypointReader<TProps extends Record<any, any>, TEntrypoint extends IsographEntrypoint<any, React.FC<TProps>>>(props: TProps extends Record<string, never> ? {
|
5
|
-
fragmentReference: FragmentReference<ExtractReadFromStore<TEntrypoint>, React.FC<TProps>>;
|
6
|
-
additionalProps?: TProps;
|
7
|
-
} : {
|
8
|
-
fragmentReference: FragmentReference<ExtractReadFromStore<TEntrypoint>, React.FC<TProps>>;
|
9
|
-
additionalProps: TProps;
|
10
|
-
}): React.ReactNode;
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|