@isograph/react 0.3.1 → 0.4.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 +5 -0
- package/dist/core/FragmentReference.d.ts +5 -5
- package/dist/core/FragmentReference.d.ts.map +1 -1
- package/dist/core/IsographEnvironment.d.ts +15 -10
- package/dist/core/IsographEnvironment.d.ts.map +1 -1
- package/dist/core/PromiseWrapper.d.ts +4 -4
- package/dist/core/PromiseWrapper.d.ts.map +1 -1
- package/dist/core/PromiseWrapper.js +2 -9
- package/dist/core/areEqualWithDeepComparison.d.ts +1 -3
- package/dist/core/areEqualWithDeepComparison.d.ts.map +1 -1
- package/dist/core/areEqualWithDeepComparison.js +0 -2
- package/dist/core/brand.d.ts +2 -0
- package/dist/core/brand.d.ts.map +1 -0
- package/dist/core/brand.js +2 -0
- package/dist/core/cache.d.ts +7 -6
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/cache.js +57 -36
- package/dist/core/check.d.ts +3 -3
- package/dist/core/check.d.ts.map +1 -1
- package/dist/core/componentCache.d.ts.map +1 -1
- package/dist/core/componentCache.js +3 -2
- package/dist/core/entrypoint.d.ts +20 -2
- package/dist/core/entrypoint.d.ts.map +1 -1
- package/dist/core/garbageCollection.d.ts +2 -2
- package/dist/core/garbageCollection.d.ts.map +1 -1
- package/dist/core/logging.d.ts +13 -4
- package/dist/core/logging.d.ts.map +1 -1
- package/dist/core/makeNetworkRequest.d.ts +3 -3
- package/dist/core/makeNetworkRequest.d.ts.map +1 -1
- package/dist/core/makeNetworkRequest.js +15 -15
- package/dist/core/read.d.ts +8 -8
- package/dist/core/read.d.ts.map +1 -1
- package/dist/core/read.js +98 -29
- package/dist/core/reader.d.ts +12 -8
- package/dist/core/reader.d.ts.map +1 -1
- package/dist/core/startUpdate.d.ts +7 -4
- package/dist/core/startUpdate.d.ts.map +1 -1
- package/dist/core/startUpdate.js +153 -5
- package/dist/core/util.d.ts +2 -1
- package/dist/core/util.d.ts.map +1 -1
- package/dist/index.d.ts +8 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/loadable-hooks/useConnectionSpecPagination.d.ts.map +1 -1
- package/dist/loadable-hooks/useConnectionSpecPagination.js +1 -1
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts +1 -1
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts.map +1 -1
- package/dist/loadable-hooks/useImperativeExposedMutationField.js +1 -1
- package/dist/loadable-hooks/useImperativeLoadableField.d.ts +1 -1
- package/dist/loadable-hooks/useImperativeLoadableField.d.ts.map +1 -1
- package/dist/loadable-hooks/useImperativeLoadableField.js +1 -1
- package/dist/loadable-hooks/useSkipLimitPagination.d.ts.map +1 -1
- package/dist/loadable-hooks/useSkipLimitPagination.js +1 -1
- package/dist/react/FragmentReader.d.ts +7 -13
- package/dist/react/FragmentReader.d.ts.map +1 -1
- package/dist/react/FragmentReader.js +3 -30
- package/dist/react/FragmentRenderer.d.ts +15 -0
- package/dist/react/FragmentRenderer.d.ts.map +1 -0
- package/dist/react/FragmentRenderer.js +35 -0
- package/dist/react/LoadableFieldReader.d.ts +12 -0
- package/dist/react/LoadableFieldReader.d.ts.map +1 -0
- package/dist/react/LoadableFieldReader.js +10 -0
- package/dist/react/LoadableFieldRenderer.d.ts +13 -0
- package/dist/react/LoadableFieldRenderer.d.ts.map +1 -0
- package/dist/react/LoadableFieldRenderer.js +37 -0
- package/dist/react/useImperativeReference.d.ts.map +1 -1
- package/dist/react/useImperativeReference.js +6 -6
- package/dist/react/useResult.d.ts.map +1 -1
- package/dist/react/useResult.js +1 -1
- package/package.json +4 -5
- package/src/core/FragmentReference.ts +16 -7
- package/src/core/IsographEnvironment.ts +20 -10
- package/src/core/PromiseWrapper.ts +13 -16
- package/src/core/areEqualWithDeepComparison.ts +5 -5
- package/src/core/brand.ts +18 -0
- package/src/core/cache.ts +74 -51
- package/src/core/check.ts +4 -4
- package/src/core/componentCache.ts +7 -2
- package/src/core/entrypoint.ts +32 -5
- package/src/core/garbageCollection.ts +3 -3
- package/src/core/logging.ts +16 -4
- package/src/core/makeNetworkRequest.ts +48 -23
- package/src/core/read.ts +153 -48
- package/src/core/reader.ts +11 -7
- package/src/core/startUpdate.ts +313 -7
- package/src/core/util.ts +4 -2
- package/src/index.ts +11 -3
- package/src/loadable-hooks/useConnectionSpecPagination.ts +1 -0
- package/src/loadable-hooks/useImperativeExposedMutationField.ts +2 -2
- package/src/loadable-hooks/useImperativeLoadableField.ts +2 -2
- package/src/loadable-hooks/useSkipLimitPagination.ts +1 -0
- package/src/react/FragmentReader.tsx +23 -39
- package/src/react/FragmentRenderer.tsx +46 -0
- package/src/react/LoadableFieldReader.tsx +40 -0
- package/src/react/LoadableFieldRenderer.tsx +41 -0
- package/src/react/useImperativeReference.ts +9 -8
- package/src/react/useResult.ts +1 -0
- package/src/tests/__isograph/Economist/link/output_type.ts +2 -0
- package/src/tests/__isograph/Node/asEconomist/resolver_reader.ts +28 -0
- package/src/tests/__isograph/Node/link/output_type.ts +3 -0
- package/src/tests/__isograph/Query/linkedUpdate/entrypoint.ts +31 -0
- package/src/tests/__isograph/Query/linkedUpdate/normalization_ast.ts +95 -0
- package/src/tests/__isograph/Query/linkedUpdate/output_type.ts +3 -0
- package/src/tests/__isograph/Query/linkedUpdate/param_type.ts +51 -0
- package/src/tests/__isograph/Query/linkedUpdate/query_text.ts +20 -0
- package/src/tests/__isograph/Query/linkedUpdate/resolver_reader.ts +93 -0
- package/src/tests/__isograph/Query/meName/entrypoint.ts +4 -1
- package/src/tests/__isograph/Query/meName/query_text.ts +1 -1
- package/src/tests/__isograph/Query/meName/resolver_reader.ts +1 -0
- package/src/tests/__isograph/Query/meNameSuccessor/entrypoint.ts +4 -1
- package/src/tests/__isograph/Query/meNameSuccessor/query_text.ts +1 -1
- package/src/tests/__isograph/Query/meNameSuccessor/resolver_reader.ts +3 -0
- package/src/tests/__isograph/Query/nodeField/entrypoint.ts +4 -1
- package/src/tests/__isograph/Query/nodeField/query_text.ts +1 -1
- package/src/tests/__isograph/Query/nodeField/resolver_reader.ts +1 -0
- package/src/tests/__isograph/Query/startUpdate/entrypoint.ts +31 -0
- package/src/tests/__isograph/Query/startUpdate/normalization_ast.ts +51 -0
- package/src/tests/__isograph/Query/startUpdate/output_type.ts +3 -0
- package/src/tests/__isograph/Query/startUpdate/param_type.ts +26 -0
- package/src/tests/__isograph/Query/startUpdate/parameters_type.ts +3 -0
- package/src/tests/__isograph/Query/startUpdate/query_text.ts +11 -0
- package/src/tests/__isograph/Query/startUpdate/resolver_reader.ts +55 -0
- package/src/tests/__isograph/Query/subquery/entrypoint.ts +4 -1
- package/src/tests/__isograph/Query/subquery/query_text.ts +1 -1
- package/src/tests/__isograph/Query/subquery/resolver_reader.ts +2 -0
- package/src/tests/__isograph/iso.ts +21 -1
- package/src/tests/__isograph/tsconfig.json +8 -0
- package/src/tests/normalizeData.test.ts +0 -1
- package/src/tests/startUpdate.test.ts +205 -0
- package/.turbo/turbo-compile-typescript.log +0 -4
package/src/core/check.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { Variables } from './FragmentReference';
|
|
|
4
4
|
import {
|
|
5
5
|
getLink,
|
|
6
6
|
IsographEnvironment,
|
|
7
|
-
|
|
7
|
+
StoreLink,
|
|
8
8
|
StoreRecord,
|
|
9
9
|
} from './IsographEnvironment';
|
|
10
10
|
import { logMessage } from './logging';
|
|
@@ -30,14 +30,14 @@ export type CheckResult =
|
|
|
30
30
|
}
|
|
31
31
|
| {
|
|
32
32
|
kind: 'MissingData';
|
|
33
|
-
record:
|
|
33
|
+
record: StoreLink;
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
export function check(
|
|
37
37
|
environment: IsographEnvironment,
|
|
38
38
|
normalizationAst: NormalizationAstNodes,
|
|
39
39
|
variables: Variables,
|
|
40
|
-
root:
|
|
40
|
+
root: StoreLink,
|
|
41
41
|
): CheckResult {
|
|
42
42
|
const recordsById = (environment.store[root.__typename] ??= {});
|
|
43
43
|
const newStoreRecord = (recordsById[root.__link] ??= {});
|
|
@@ -61,7 +61,7 @@ function checkFromRecord(
|
|
|
61
61
|
normalizationAst: NormalizationAstNodes,
|
|
62
62
|
variables: Variables,
|
|
63
63
|
record: StoreRecord,
|
|
64
|
-
recordLink:
|
|
64
|
+
recordLink: StoreLink,
|
|
65
65
|
): CheckResult {
|
|
66
66
|
normalizationAstLoop: for (const normalizationAstNode of normalizationAst) {
|
|
67
67
|
switch (normalizationAstNode.kind) {
|
|
@@ -16,7 +16,11 @@ export function getOrCreateCachedComponent(
|
|
|
16
16
|
networkRequestOptions: NetworkRequestReaderOptions,
|
|
17
17
|
): React.FC<any> {
|
|
18
18
|
// We create startUpdate outside of component to make it stable
|
|
19
|
-
const startUpdate = createStartUpdate(
|
|
19
|
+
const startUpdate = createStartUpdate(
|
|
20
|
+
environment,
|
|
21
|
+
fragmentReference,
|
|
22
|
+
networkRequestOptions,
|
|
23
|
+
);
|
|
20
24
|
|
|
21
25
|
return (environment.componentCache[
|
|
22
26
|
stableIdForFragmentReference(fragmentReference, componentName)
|
|
@@ -49,7 +53,8 @@ export function getOrCreateCachedComponent(
|
|
|
49
53
|
additionalRuntimeProps,
|
|
50
54
|
);
|
|
51
55
|
}
|
|
52
|
-
|
|
56
|
+
const idString = `(type: ${fragmentReference.root.__typename}, id: ${fragmentReference.root.__link})`;
|
|
57
|
+
Component.displayName = `${componentName} ${idString} @component`;
|
|
53
58
|
return Component;
|
|
54
59
|
})());
|
|
55
60
|
}
|
package/src/core/entrypoint.ts
CHANGED
|
@@ -17,11 +17,39 @@ export type ReaderWithRefetchQueries<
|
|
|
17
17
|
readonly nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[];
|
|
18
18
|
};
|
|
19
19
|
|
|
20
|
+
export type ReaderWithRefetchQueriesLoader<
|
|
21
|
+
TReadFromStore extends UnknownTReadFromStore,
|
|
22
|
+
TClientFieldValue,
|
|
23
|
+
> = {
|
|
24
|
+
readonly kind: 'ReaderWithRefetchQueriesLoader';
|
|
25
|
+
readonly loader: () => Promise<
|
|
26
|
+
ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>
|
|
27
|
+
>;
|
|
28
|
+
};
|
|
29
|
+
|
|
20
30
|
export type NetworkRequestInfo<TNormalizationAst> = {
|
|
21
31
|
readonly kind: 'NetworkRequestInfo';
|
|
22
|
-
readonly
|
|
32
|
+
readonly operation: IsographOperation | IsographPersistedOperation;
|
|
23
33
|
readonly normalizationAst: TNormalizationAst;
|
|
24
34
|
};
|
|
35
|
+
|
|
36
|
+
export type IsographOperation = {
|
|
37
|
+
readonly kind: 'Operation';
|
|
38
|
+
readonly text: string;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export type IsographPersistedOperation = {
|
|
42
|
+
readonly kind: 'PersistedOperation';
|
|
43
|
+
readonly operationId: string;
|
|
44
|
+
readonly extraInfo: IsographPersistedOperationExtraInfo | null;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export type IsographPersistedOperationExtraInfo = {
|
|
48
|
+
readonly kind: 'PersistedOperationExtraInfo';
|
|
49
|
+
readonly operationName: string | null;
|
|
50
|
+
readonly operationKind: 'Query' | 'Mutation' | 'Subscription';
|
|
51
|
+
};
|
|
52
|
+
|
|
25
53
|
// This type should be treated as an opaque type.
|
|
26
54
|
export type IsographEntrypoint<
|
|
27
55
|
TReadFromStore extends UnknownTReadFromStore,
|
|
@@ -30,10 +58,9 @@ export type IsographEntrypoint<
|
|
|
30
58
|
> = {
|
|
31
59
|
readonly kind: 'Entrypoint';
|
|
32
60
|
readonly networkRequestInfo: NetworkRequestInfo<TNormalizationAst>;
|
|
33
|
-
readonly readerWithRefetchQueries:
|
|
34
|
-
TReadFromStore,
|
|
35
|
-
TClientFieldValue
|
|
36
|
-
>;
|
|
61
|
+
readonly readerWithRefetchQueries:
|
|
62
|
+
| ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>
|
|
63
|
+
| ReaderWithRefetchQueriesLoader<TReadFromStore, TClientFieldValue>;
|
|
37
64
|
readonly concreteType: TypeName;
|
|
38
65
|
};
|
|
39
66
|
|
|
@@ -7,14 +7,14 @@ import {
|
|
|
7
7
|
IsographEnvironment,
|
|
8
8
|
IsographStore,
|
|
9
9
|
StoreRecord,
|
|
10
|
-
type
|
|
10
|
+
type StoreLink,
|
|
11
11
|
type TypeName,
|
|
12
12
|
} from './IsographEnvironment';
|
|
13
13
|
|
|
14
14
|
export type RetainedQuery = {
|
|
15
15
|
readonly normalizationAst: NormalizationAstNodes;
|
|
16
16
|
readonly variables: {};
|
|
17
|
-
readonly root:
|
|
17
|
+
readonly root: StoreLink;
|
|
18
18
|
};
|
|
19
19
|
|
|
20
20
|
export type DidUnretainSomeQuery = boolean;
|
|
@@ -117,7 +117,7 @@ function recordReachableIdsFromRecord(
|
|
|
117
117
|
const linkKey = getParentRecordKey(selection, variables ?? {});
|
|
118
118
|
const linkedFieldOrFields = currentRecord[linkKey];
|
|
119
119
|
|
|
120
|
-
const links:
|
|
120
|
+
const links: StoreLink[] = [];
|
|
121
121
|
if (Array.isArray(linkedFieldOrFields)) {
|
|
122
122
|
for (const maybeLink of linkedFieldOrFields) {
|
|
123
123
|
const link = assertLink(maybeLink);
|
package/src/core/logging.ts
CHANGED
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
IsographEnvironment,
|
|
12
12
|
IsographStore,
|
|
13
13
|
StoreRecord,
|
|
14
|
-
type
|
|
14
|
+
type StoreLink,
|
|
15
15
|
} from './IsographEnvironment';
|
|
16
16
|
import { ReadDataResult } from './read';
|
|
17
17
|
import { Arguments } from './util';
|
|
@@ -38,7 +38,7 @@ export type LogMessage =
|
|
|
38
38
|
| {
|
|
39
39
|
kind: 'ComponentRerendered';
|
|
40
40
|
componentName: string;
|
|
41
|
-
rootLink:
|
|
41
|
+
rootLink: StoreLink;
|
|
42
42
|
}
|
|
43
43
|
| {
|
|
44
44
|
kind: 'MakeNetworkRequest';
|
|
@@ -61,7 +61,7 @@ export type LogMessage =
|
|
|
61
61
|
}
|
|
62
62
|
| {
|
|
63
63
|
kind: 'MissingFieldHandlerCalled';
|
|
64
|
-
root:
|
|
64
|
+
root: StoreLink;
|
|
65
65
|
storeRecord: StoreRecord;
|
|
66
66
|
fieldName: string;
|
|
67
67
|
arguments: Arguments | null;
|
|
@@ -71,7 +71,7 @@ export type LogMessage =
|
|
|
71
71
|
kind: 'DoneReading';
|
|
72
72
|
response: ReadDataResult<any>;
|
|
73
73
|
fieldName: string;
|
|
74
|
-
root:
|
|
74
|
+
root: StoreLink;
|
|
75
75
|
}
|
|
76
76
|
| {
|
|
77
77
|
kind: 'NonEntrypointReceived';
|
|
@@ -83,6 +83,18 @@ export type LogMessage =
|
|
|
83
83
|
}
|
|
84
84
|
| {
|
|
85
85
|
kind: 'EnvironmentCreated';
|
|
86
|
+
}
|
|
87
|
+
| {
|
|
88
|
+
kind: 'StartUpdateError';
|
|
89
|
+
error: any;
|
|
90
|
+
}
|
|
91
|
+
| {
|
|
92
|
+
kind: 'StartUpdateComplete';
|
|
93
|
+
updatedIds: EncounteredIds;
|
|
94
|
+
}
|
|
95
|
+
| {
|
|
96
|
+
kind: 'ErrorEncounteredInWithErrorHandling';
|
|
97
|
+
error: any;
|
|
86
98
|
};
|
|
87
99
|
|
|
88
100
|
export type LogFunction = (logMessage: LogMessage) => void;
|
|
@@ -4,6 +4,7 @@ import { check, DEFAULT_SHOULD_FETCH_VALUE, FetchOptions } from './check';
|
|
|
4
4
|
import { getOrCreateCachedComponent } from './componentCache';
|
|
5
5
|
import {
|
|
6
6
|
IsographEntrypoint,
|
|
7
|
+
ReaderWithRefetchQueries,
|
|
7
8
|
RefetchQueryNormalizationArtifact,
|
|
8
9
|
type NormalizationAst,
|
|
9
10
|
type NormalizationAstLoader,
|
|
@@ -19,7 +20,7 @@ import {
|
|
|
19
20
|
retainQuery,
|
|
20
21
|
unretainQuery,
|
|
21
22
|
} from './garbageCollection';
|
|
22
|
-
import { IsographEnvironment,
|
|
23
|
+
import { IsographEnvironment, ROOT_ID, StoreLink } from './IsographEnvironment';
|
|
23
24
|
import { logMessage } from './logging';
|
|
24
25
|
import {
|
|
25
26
|
AnyError,
|
|
@@ -35,18 +36,28 @@ let networkRequestId = 0;
|
|
|
35
36
|
export function maybeMakeNetworkRequest<
|
|
36
37
|
TReadFromStore extends UnknownTReadFromStore,
|
|
37
38
|
TClientFieldValue,
|
|
39
|
+
TArtifact extends
|
|
40
|
+
| RefetchQueryNormalizationArtifact
|
|
41
|
+
| IsographEntrypoint<TReadFromStore, TClientFieldValue, TNormalizationAst>,
|
|
38
42
|
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
|
39
43
|
>(
|
|
40
44
|
environment: IsographEnvironment,
|
|
41
|
-
artifact:
|
|
42
|
-
| RefetchQueryNormalizationArtifact
|
|
43
|
-
| IsographEntrypoint<TReadFromStore, TClientFieldValue, TNormalizationAst>,
|
|
45
|
+
artifact: TArtifact,
|
|
44
46
|
variables: ExtractParameters<TReadFromStore>,
|
|
45
|
-
|
|
47
|
+
readerWithRefetchQueries: PromiseWrapper<
|
|
48
|
+
ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>
|
|
49
|
+
> | null,
|
|
50
|
+
fetchOptions: FetchOptions<TClientFieldValue> | null,
|
|
46
51
|
): ItemCleanupPair<PromiseWrapper<void, AnyError>> {
|
|
47
52
|
switch (fetchOptions?.shouldFetch ?? DEFAULT_SHOULD_FETCH_VALUE) {
|
|
48
53
|
case 'Yes': {
|
|
49
|
-
return makeNetworkRequest(
|
|
54
|
+
return makeNetworkRequest(
|
|
55
|
+
environment,
|
|
56
|
+
artifact,
|
|
57
|
+
variables,
|
|
58
|
+
readerWithRefetchQueries,
|
|
59
|
+
fetchOptions,
|
|
60
|
+
);
|
|
50
61
|
}
|
|
51
62
|
case 'No': {
|
|
52
63
|
return [wrapResolvedValue(undefined), () => {}];
|
|
@@ -77,6 +88,7 @@ export function maybeMakeNetworkRequest<
|
|
|
77
88
|
environment,
|
|
78
89
|
artifact,
|
|
79
90
|
variables,
|
|
91
|
+
readerWithRefetchQueries,
|
|
80
92
|
fetchOptions,
|
|
81
93
|
);
|
|
82
94
|
}
|
|
@@ -100,14 +112,18 @@ function loadNormalizationAst(
|
|
|
100
112
|
export function makeNetworkRequest<
|
|
101
113
|
TReadFromStore extends UnknownTReadFromStore,
|
|
102
114
|
TClientFieldValue,
|
|
115
|
+
TArtifact extends
|
|
116
|
+
| RefetchQueryNormalizationArtifact
|
|
117
|
+
| IsographEntrypoint<TReadFromStore, TClientFieldValue, TNormalizationAst>,
|
|
103
118
|
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
|
104
119
|
>(
|
|
105
120
|
environment: IsographEnvironment,
|
|
106
|
-
artifact:
|
|
107
|
-
| RefetchQueryNormalizationArtifact
|
|
108
|
-
| IsographEntrypoint<TReadFromStore, TClientFieldValue, TNormalizationAst>,
|
|
121
|
+
artifact: TArtifact,
|
|
109
122
|
variables: ExtractParameters<TReadFromStore>,
|
|
110
|
-
|
|
123
|
+
readerWithRefetchQueries: PromiseWrapper<
|
|
124
|
+
ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>
|
|
125
|
+
> | null,
|
|
126
|
+
fetchOptions: FetchOptions<TClientFieldValue> | null,
|
|
111
127
|
): ItemCleanupPair<PromiseWrapper<void, AnyError>> {
|
|
112
128
|
// TODO this should be a DataId and stored in the store
|
|
113
129
|
const myNetworkRequestId = networkRequestId + '';
|
|
@@ -126,12 +142,13 @@ export function makeNetworkRequest<
|
|
|
126
142
|
// This should be an observable, not a promise
|
|
127
143
|
const promise = Promise.all([
|
|
128
144
|
environment.networkFunction(
|
|
129
|
-
artifact.networkRequestInfo.
|
|
145
|
+
artifact.networkRequestInfo.operation,
|
|
130
146
|
variables,
|
|
131
147
|
),
|
|
132
148
|
loadNormalizationAst(artifact.networkRequestInfo.normalizationAst),
|
|
149
|
+
readerWithRefetchQueries?.promise,
|
|
133
150
|
])
|
|
134
|
-
.then(([networkResponse, normalizationAst]) => {
|
|
151
|
+
.then(([networkResponse, normalizationAst, readerWithRefetchQueries]) => {
|
|
135
152
|
logMessage(environment, () => ({
|
|
136
153
|
kind: 'ReceivedNetworkResponse',
|
|
137
154
|
networkResponse,
|
|
@@ -154,9 +171,6 @@ export function makeNetworkRequest<
|
|
|
154
171
|
normalizationAst.selections,
|
|
155
172
|
networkResponse.data ?? {},
|
|
156
173
|
variables,
|
|
157
|
-
artifact.kind === 'Entrypoint'
|
|
158
|
-
? artifact.readerWithRefetchQueries.nestedRefetchQueries
|
|
159
|
-
: [],
|
|
160
174
|
root,
|
|
161
175
|
);
|
|
162
176
|
const retainedQuery = {
|
|
@@ -178,6 +192,7 @@ export function makeNetworkRequest<
|
|
|
178
192
|
environment,
|
|
179
193
|
root,
|
|
180
194
|
variables,
|
|
195
|
+
readerWithRefetchQueries,
|
|
181
196
|
);
|
|
182
197
|
|
|
183
198
|
try {
|
|
@@ -238,14 +253,18 @@ type NetworkRequestStatus =
|
|
|
238
253
|
function readDataForOnComplete<
|
|
239
254
|
TReadFromStore extends UnknownTReadFromStore,
|
|
240
255
|
TClientFieldValue,
|
|
241
|
-
|
|
242
|
-
>(
|
|
243
|
-
artifact:
|
|
256
|
+
TArtifact extends
|
|
244
257
|
| RefetchQueryNormalizationArtifact
|
|
245
258
|
| IsographEntrypoint<TReadFromStore, TClientFieldValue, TNormalizationAst>,
|
|
259
|
+
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
|
260
|
+
>(
|
|
261
|
+
artifact: TArtifact,
|
|
246
262
|
environment: IsographEnvironment,
|
|
247
|
-
root:
|
|
263
|
+
root: StoreLink,
|
|
248
264
|
variables: ExtractParameters<TReadFromStore>,
|
|
265
|
+
readerWithRefetchQueries:
|
|
266
|
+
| ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>
|
|
267
|
+
| undefined,
|
|
249
268
|
): TClientFieldValue | null {
|
|
250
269
|
// An entrypoint, but not a RefetchQueryNormalizationArtifact, has a reader ASTs.
|
|
251
270
|
// So, we can only pass data to onComplete if makeNetworkRequest was passed an entrypoint.
|
|
@@ -262,12 +281,17 @@ function readDataForOnComplete<
|
|
|
262
281
|
suspendIfInFlight: false,
|
|
263
282
|
throwOnNetworkError: false,
|
|
264
283
|
};
|
|
284
|
+
const resolvedReaderWithRefetchQueries =
|
|
285
|
+
readerWithRefetchQueries as ReaderWithRefetchQueries<
|
|
286
|
+
TReadFromStore,
|
|
287
|
+
TClientFieldValue
|
|
288
|
+
>;
|
|
265
289
|
|
|
266
290
|
const fragment: FragmentReference<TReadFromStore, TClientFieldValue> = {
|
|
267
291
|
kind: 'FragmentReference',
|
|
268
292
|
// TODO this smells.
|
|
269
293
|
readerWithRefetchQueries: wrapResolvedValue(
|
|
270
|
-
|
|
294
|
+
resolvedReaderWithRefetchQueries,
|
|
271
295
|
),
|
|
272
296
|
root,
|
|
273
297
|
variables,
|
|
@@ -278,7 +302,7 @@ function readDataForOnComplete<
|
|
|
278
302
|
fragment,
|
|
279
303
|
fakeNetworkRequestOptions,
|
|
280
304
|
).item;
|
|
281
|
-
const readerArtifact =
|
|
305
|
+
const readerArtifact = resolvedReaderWithRefetchQueries.readerArtifact;
|
|
282
306
|
switch (readerArtifact.kind) {
|
|
283
307
|
case 'ComponentReaderArtifact': {
|
|
284
308
|
// @ts-expect-error We should find a way to encode this in the type system:
|
|
@@ -293,7 +317,7 @@ function readDataForOnComplete<
|
|
|
293
317
|
kind: 'ReaderWithRefetchQueries',
|
|
294
318
|
readerArtifact: readerArtifact,
|
|
295
319
|
nestedRefetchQueries:
|
|
296
|
-
|
|
320
|
+
resolvedReaderWithRefetchQueries.nestedRefetchQueries,
|
|
297
321
|
}),
|
|
298
322
|
root,
|
|
299
323
|
variables,
|
|
@@ -311,7 +335,8 @@ function readDataForOnComplete<
|
|
|
311
335
|
startUpdate: getOrCreateCachedStartUpdate(
|
|
312
336
|
environment,
|
|
313
337
|
fragment,
|
|
314
|
-
|
|
338
|
+
resolvedReaderWithRefetchQueries.readerArtifact.fieldName,
|
|
339
|
+
fakeNetworkRequestOptions,
|
|
315
340
|
),
|
|
316
341
|
}
|
|
317
342
|
: undefined),
|