@isograph/react 0.0.0-main-05f9fa46 → 0.0.0-main-0300c896
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 +1 -1
- package/dist/core/FragmentReference.d.ts +3 -3
- package/dist/core/FragmentReference.d.ts.map +1 -1
- package/dist/core/cache.d.ts +1 -0
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/cache.js +1 -0
- package/dist/core/componentCache.d.ts.map +1 -1
- package/dist/core/componentCache.js +1 -1
- package/dist/core/makeNetworkRequest.js +1 -1
- package/dist/core/read.d.ts +1 -1
- package/dist/core/read.d.ts.map +1 -1
- package/dist/core/read.js +4 -4
- package/dist/core/startUpdate.d.ts +7 -4
- package/dist/core/startUpdate.d.ts.map +1 -1
- package/dist/core/startUpdate.js +144 -5
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/loadable-hooks/useConnectionSpecPagination.d.ts.map +1 -1
- package/dist/loadable-hooks/useConnectionSpecPagination.js +1 -1
- package/dist/loadable-hooks/useSkipLimitPagination.d.ts.map +1 -1
- package/dist/loadable-hooks/useSkipLimitPagination.js +1 -1
- package/dist/react/useResult.d.ts.map +1 -1
- package/dist/react/useResult.js +1 -1
- package/package.json +4 -4
- package/src/core/FragmentReference.ts +8 -5
- package/src/core/cache.ts +1 -1
- package/src/core/componentCache.ts +5 -1
- package/src/core/makeNetworkRequest.ts +1 -0
- package/src/core/read.ts +4 -0
- package/src/core/startUpdate.ts +304 -7
- package/src/index.ts +1 -0
- package/src/loadable-hooks/useConnectionSpecPagination.ts +1 -0
- package/src/loadable-hooks/useSkipLimitPagination.ts +1 -0
- package/src/react/useResult.ts +1 -0
- package/src/tests/__isograph/Node/asEconomist/resolver_reader.ts +28 -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/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/iso.ts +20 -0
- package/src/tests/startUpdate.test.ts +205 -0
package/src/core/startUpdate.ts
CHANGED
|
@@ -1,28 +1,325 @@
|
|
|
1
|
+
import {
|
|
2
|
+
callSubscriptions,
|
|
3
|
+
getParentRecordKey,
|
|
4
|
+
insertEmptySetIfMissing,
|
|
5
|
+
type EncounteredIds,
|
|
6
|
+
} from './cache';
|
|
7
|
+
import type { RefetchQueryNormalizationArtifactWrapper } from './entrypoint';
|
|
1
8
|
import {
|
|
2
9
|
stableIdForFragmentReference,
|
|
10
|
+
type ExtractParameters,
|
|
3
11
|
type ExtractStartUpdate,
|
|
12
|
+
type ExtractUpdatableData,
|
|
4
13
|
type FragmentReference,
|
|
5
14
|
type UnknownTReadFromStore,
|
|
6
15
|
} from './FragmentReference';
|
|
7
|
-
import
|
|
16
|
+
import {
|
|
17
|
+
assertLink,
|
|
18
|
+
type IsographEnvironment,
|
|
19
|
+
type Link,
|
|
20
|
+
} from './IsographEnvironment';
|
|
21
|
+
import { readPromise, type PromiseWrapper } from './PromiseWrapper';
|
|
22
|
+
import {
|
|
23
|
+
readImperativelyLoadedField,
|
|
24
|
+
readLinkedFieldData,
|
|
25
|
+
readLoadablySelectedFieldData,
|
|
26
|
+
readResolverFieldData,
|
|
27
|
+
readScalarFieldData,
|
|
28
|
+
type NetworkRequestReaderOptions,
|
|
29
|
+
type ReadDataResultSuccess,
|
|
30
|
+
} from './read';
|
|
31
|
+
import type { ReaderAst } from './reader';
|
|
8
32
|
|
|
9
33
|
export function getOrCreateCachedStartUpdate<
|
|
10
34
|
TReadFromStore extends UnknownTReadFromStore,
|
|
11
35
|
>(
|
|
12
36
|
environment: IsographEnvironment,
|
|
13
|
-
fragmentReference: FragmentReference<TReadFromStore,
|
|
37
|
+
fragmentReference: FragmentReference<TReadFromStore, unknown>,
|
|
14
38
|
eagerResolverName: string,
|
|
39
|
+
networkRequestOptions: NetworkRequestReaderOptions,
|
|
15
40
|
): ExtractStartUpdate<TReadFromStore> {
|
|
16
41
|
return (environment.eagerReaderCache[
|
|
17
42
|
stableIdForFragmentReference(fragmentReference, eagerResolverName)
|
|
18
|
-
] ??= createStartUpdate(
|
|
43
|
+
] ??= createStartUpdate(
|
|
44
|
+
environment,
|
|
45
|
+
fragmentReference,
|
|
46
|
+
networkRequestOptions,
|
|
47
|
+
));
|
|
19
48
|
}
|
|
20
49
|
|
|
21
50
|
export function createStartUpdate<TReadFromStore extends UnknownTReadFromStore>(
|
|
22
|
-
|
|
23
|
-
|
|
51
|
+
environment: IsographEnvironment,
|
|
52
|
+
fragmentReference: FragmentReference<TReadFromStore, unknown>,
|
|
53
|
+
networkRequestOptions: NetworkRequestReaderOptions,
|
|
24
54
|
): ExtractStartUpdate<TReadFromStore> {
|
|
25
|
-
return (
|
|
26
|
-
|
|
55
|
+
return (updater) => {
|
|
56
|
+
let mutableUpdatedIds: EncounteredIds = new Map();
|
|
57
|
+
|
|
58
|
+
let data = createUpdatableProxy(
|
|
59
|
+
environment,
|
|
60
|
+
fragmentReference,
|
|
61
|
+
networkRequestOptions,
|
|
62
|
+
mutableUpdatedIds,
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
try {
|
|
66
|
+
updater(data);
|
|
67
|
+
} catch (e) {
|
|
68
|
+
throw e;
|
|
69
|
+
} finally {
|
|
70
|
+
callSubscriptions(environment, mutableUpdatedIds);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export function createUpdatableProxy<
|
|
76
|
+
TReadFromStore extends UnknownTReadFromStore,
|
|
77
|
+
>(
|
|
78
|
+
environment: IsographEnvironment,
|
|
79
|
+
fragmentReference: FragmentReference<TReadFromStore, unknown>,
|
|
80
|
+
networkRequestOptions: NetworkRequestReaderOptions,
|
|
81
|
+
mutableUpdatedIds: EncounteredIds,
|
|
82
|
+
): ExtractUpdatableData<TReadFromStore> {
|
|
83
|
+
const readerWithRefetchQueries = readPromise(
|
|
84
|
+
fragmentReference.readerWithRefetchQueries,
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
return readUpdatableData(
|
|
88
|
+
environment,
|
|
89
|
+
readerWithRefetchQueries.readerArtifact.readerAst,
|
|
90
|
+
fragmentReference.root,
|
|
91
|
+
fragmentReference.variables ?? {},
|
|
92
|
+
readerWithRefetchQueries.nestedRefetchQueries,
|
|
93
|
+
fragmentReference.networkRequest,
|
|
94
|
+
networkRequestOptions,
|
|
95
|
+
{
|
|
96
|
+
lastInvalidated: 0,
|
|
97
|
+
},
|
|
98
|
+
mutableUpdatedIds,
|
|
99
|
+
).data;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
type MutableInvalidationState = {
|
|
103
|
+
lastInvalidated: number;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
function defineCachedProperty<T>(
|
|
107
|
+
target: T,
|
|
108
|
+
property: PropertyKey,
|
|
109
|
+
mutableState: MutableInvalidationState,
|
|
110
|
+
get: () => any,
|
|
111
|
+
set?: (v: any) => void,
|
|
112
|
+
) {
|
|
113
|
+
let value:
|
|
114
|
+
| { kind: 'Set'; value: T; validatedAt: number }
|
|
115
|
+
| {
|
|
116
|
+
kind: 'NotSet';
|
|
117
|
+
} = {
|
|
118
|
+
kind: 'NotSet',
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
Object.defineProperty(target, property, {
|
|
122
|
+
configurable: false,
|
|
123
|
+
enumerable: true,
|
|
124
|
+
get: () => {
|
|
125
|
+
if (
|
|
126
|
+
value.kind === 'NotSet' ||
|
|
127
|
+
value.validatedAt < mutableState.lastInvalidated
|
|
128
|
+
) {
|
|
129
|
+
value = {
|
|
130
|
+
kind: 'Set',
|
|
131
|
+
value: get(),
|
|
132
|
+
validatedAt: mutableState.lastInvalidated,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return value.value;
|
|
136
|
+
},
|
|
137
|
+
...(set && {
|
|
138
|
+
set: (newValue) => {
|
|
139
|
+
set(newValue);
|
|
140
|
+
mutableState.lastInvalidated++;
|
|
141
|
+
},
|
|
142
|
+
}),
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function readUpdatableData<TReadFromStore extends UnknownTReadFromStore>(
|
|
147
|
+
environment: IsographEnvironment,
|
|
148
|
+
ast: ReaderAst<TReadFromStore>,
|
|
149
|
+
root: Link,
|
|
150
|
+
variables: ExtractParameters<TReadFromStore>,
|
|
151
|
+
nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],
|
|
152
|
+
networkRequest: PromiseWrapper<void, any>,
|
|
153
|
+
networkRequestOptions: NetworkRequestReaderOptions,
|
|
154
|
+
mutableState: MutableInvalidationState,
|
|
155
|
+
mutableUpdatedIds: EncounteredIds,
|
|
156
|
+
): ReadDataResultSuccess<ExtractUpdatableData<TReadFromStore>> {
|
|
157
|
+
let storeRecord = environment.store[root.__typename]?.[root.__link];
|
|
158
|
+
if (storeRecord == null) {
|
|
159
|
+
return {
|
|
160
|
+
kind: 'Success',
|
|
161
|
+
data: null as any,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
let target: { [index: string]: any } = {};
|
|
166
|
+
|
|
167
|
+
for (const field of ast) {
|
|
168
|
+
switch (field.kind) {
|
|
169
|
+
case 'Scalar': {
|
|
170
|
+
const storeRecordName = getParentRecordKey(field, variables);
|
|
171
|
+
|
|
172
|
+
defineCachedProperty(
|
|
173
|
+
target,
|
|
174
|
+
field.alias ?? field.fieldName,
|
|
175
|
+
mutableState,
|
|
176
|
+
() => {
|
|
177
|
+
const data = readScalarFieldData(
|
|
178
|
+
field,
|
|
179
|
+
storeRecord,
|
|
180
|
+
root,
|
|
181
|
+
variables,
|
|
182
|
+
);
|
|
183
|
+
if (data.kind === 'MissingData') {
|
|
184
|
+
throw new Error(data.reason);
|
|
185
|
+
}
|
|
186
|
+
return data.data;
|
|
187
|
+
},
|
|
188
|
+
field.isUpdatable
|
|
189
|
+
? (newValue) => {
|
|
190
|
+
storeRecord[storeRecordName] = newValue;
|
|
191
|
+
const updatedIds = insertEmptySetIfMissing(
|
|
192
|
+
mutableUpdatedIds,
|
|
193
|
+
root.__typename,
|
|
194
|
+
);
|
|
195
|
+
updatedIds.add(root.__link);
|
|
196
|
+
}
|
|
197
|
+
: undefined,
|
|
198
|
+
);
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
case 'Linked': {
|
|
202
|
+
const storeRecordName = getParentRecordKey(field, variables);
|
|
203
|
+
defineCachedProperty(
|
|
204
|
+
target,
|
|
205
|
+
field.alias ?? field.fieldName,
|
|
206
|
+
mutableState,
|
|
207
|
+
() => {
|
|
208
|
+
const data = readLinkedFieldData(
|
|
209
|
+
environment,
|
|
210
|
+
field,
|
|
211
|
+
storeRecord,
|
|
212
|
+
root,
|
|
213
|
+
variables,
|
|
214
|
+
nestedRefetchQueries,
|
|
215
|
+
networkRequest,
|
|
216
|
+
networkRequestOptions,
|
|
217
|
+
(ast, root) =>
|
|
218
|
+
readUpdatableData(
|
|
219
|
+
environment,
|
|
220
|
+
ast,
|
|
221
|
+
root,
|
|
222
|
+
variables,
|
|
223
|
+
nestedRefetchQueries,
|
|
224
|
+
networkRequest,
|
|
225
|
+
networkRequestOptions,
|
|
226
|
+
mutableState,
|
|
227
|
+
mutableUpdatedIds,
|
|
228
|
+
),
|
|
229
|
+
);
|
|
230
|
+
if (data.kind === 'MissingData') {
|
|
231
|
+
throw new Error(data.reason);
|
|
232
|
+
}
|
|
233
|
+
return data.data;
|
|
234
|
+
},
|
|
235
|
+
'isUpdatable' in field && field.isUpdatable
|
|
236
|
+
? (newValue) => {
|
|
237
|
+
if (Array.isArray(newValue)) {
|
|
238
|
+
storeRecord[storeRecordName] = newValue.map((node) =>
|
|
239
|
+
assertLink(node?.link),
|
|
240
|
+
);
|
|
241
|
+
} else {
|
|
242
|
+
storeRecord[storeRecordName] = assertLink(newValue?.link);
|
|
243
|
+
}
|
|
244
|
+
const updatedIds = insertEmptySetIfMissing(
|
|
245
|
+
mutableUpdatedIds,
|
|
246
|
+
root.__typename,
|
|
247
|
+
);
|
|
248
|
+
updatedIds.add(root.__link);
|
|
249
|
+
}
|
|
250
|
+
: undefined,
|
|
251
|
+
);
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
case 'ImperativelyLoadedField': {
|
|
255
|
+
defineCachedProperty(target, field.alias, mutableState, () => {
|
|
256
|
+
const data = readImperativelyLoadedField(
|
|
257
|
+
environment,
|
|
258
|
+
field,
|
|
259
|
+
root,
|
|
260
|
+
variables,
|
|
261
|
+
nestedRefetchQueries,
|
|
262
|
+
networkRequest,
|
|
263
|
+
networkRequestOptions,
|
|
264
|
+
new Map(),
|
|
265
|
+
);
|
|
266
|
+
if (data.kind === 'MissingData') {
|
|
267
|
+
throw new Error(data.reason);
|
|
268
|
+
}
|
|
269
|
+
return data.data;
|
|
270
|
+
});
|
|
271
|
+
break;
|
|
272
|
+
}
|
|
273
|
+
case 'Resolver': {
|
|
274
|
+
defineCachedProperty(target, field.alias, mutableState, () => {
|
|
275
|
+
const data = readResolverFieldData(
|
|
276
|
+
environment,
|
|
277
|
+
field,
|
|
278
|
+
root,
|
|
279
|
+
variables,
|
|
280
|
+
nestedRefetchQueries,
|
|
281
|
+
networkRequest,
|
|
282
|
+
networkRequestOptions,
|
|
283
|
+
new Map(),
|
|
284
|
+
);
|
|
285
|
+
if (data.kind === 'MissingData') {
|
|
286
|
+
throw new Error(data.reason);
|
|
287
|
+
}
|
|
288
|
+
return data.data;
|
|
289
|
+
});
|
|
290
|
+
break;
|
|
291
|
+
}
|
|
292
|
+
case 'LoadablySelectedField': {
|
|
293
|
+
defineCachedProperty(target, field.alias, mutableState, () => {
|
|
294
|
+
const data = readLoadablySelectedFieldData(
|
|
295
|
+
environment,
|
|
296
|
+
field,
|
|
297
|
+
root,
|
|
298
|
+
variables,
|
|
299
|
+
networkRequest,
|
|
300
|
+
networkRequestOptions,
|
|
301
|
+
new Map(),
|
|
302
|
+
);
|
|
303
|
+
if (data.kind === 'MissingData') {
|
|
304
|
+
throw new Error(data.reason);
|
|
305
|
+
}
|
|
306
|
+
return data.data;
|
|
307
|
+
});
|
|
308
|
+
break;
|
|
309
|
+
}
|
|
310
|
+
case 'Link': {
|
|
311
|
+
target[field.alias] = root;
|
|
312
|
+
break;
|
|
313
|
+
}
|
|
314
|
+
default: {
|
|
315
|
+
field satisfies never;
|
|
316
|
+
throw new Error('Unexpected case.');
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
return {
|
|
322
|
+
kind: 'Success',
|
|
323
|
+
data: target as any,
|
|
27
324
|
};
|
|
28
325
|
}
|
package/src/index.ts
CHANGED
package/src/react/useResult.ts
CHANGED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { EagerReaderArtifact, ReaderAst, Link } from '@isograph/react';
|
|
2
|
+
|
|
3
|
+
const readerAst: ReaderAst<{ data: any, parameters: Record<PropertyKey, never> }> = [
|
|
4
|
+
{
|
|
5
|
+
kind: "Scalar",
|
|
6
|
+
fieldName: "__typename",
|
|
7
|
+
alias: null,
|
|
8
|
+
arguments: null,
|
|
9
|
+
isUpdatable: false,
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
kind: "Link",
|
|
13
|
+
alias: "link",
|
|
14
|
+
},
|
|
15
|
+
];
|
|
16
|
+
|
|
17
|
+
const artifact: EagerReaderArtifact<
|
|
18
|
+
{ data: any, parameters: Record<PropertyKey, never> },
|
|
19
|
+
Link | null
|
|
20
|
+
> = {
|
|
21
|
+
kind: "EagerReaderArtifact",
|
|
22
|
+
fieldName: "Node.asEconomist",
|
|
23
|
+
resolver: ({ data }) => data.__typename === "Economist" ? data.link : null,
|
|
24
|
+
readerAst,
|
|
25
|
+
hasUpdatable: false,
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export default artifact;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type {IsographEntrypoint, NormalizationAst, RefetchQueryNormalizationArtifactWrapper} from '@isograph/react';
|
|
2
|
+
import {Query__linkedUpdate__param} from './param_type';
|
|
3
|
+
import {Query__linkedUpdate__output_type} from './output_type';
|
|
4
|
+
import readerResolver from './resolver_reader';
|
|
5
|
+
import queryText from './query_text';
|
|
6
|
+
import normalizationAst from './normalization_ast';
|
|
7
|
+
const nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[] = [];
|
|
8
|
+
|
|
9
|
+
const artifact: IsographEntrypoint<
|
|
10
|
+
Query__linkedUpdate__param,
|
|
11
|
+
Query__linkedUpdate__output_type,
|
|
12
|
+
NormalizationAst
|
|
13
|
+
> = {
|
|
14
|
+
kind: "Entrypoint",
|
|
15
|
+
networkRequestInfo: {
|
|
16
|
+
kind: "NetworkRequestInfo",
|
|
17
|
+
operation: {
|
|
18
|
+
kind: "Operation",
|
|
19
|
+
text: queryText,
|
|
20
|
+
},
|
|
21
|
+
normalizationAst,
|
|
22
|
+
},
|
|
23
|
+
concreteType: "Query",
|
|
24
|
+
readerWithRefetchQueries: {
|
|
25
|
+
kind: "ReaderWithRefetchQueries",
|
|
26
|
+
nestedRefetchQueries,
|
|
27
|
+
readerArtifact: readerResolver,
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export default artifact;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type {NormalizationAst} from '@isograph/react';
|
|
2
|
+
const normalizationAst: NormalizationAst = {
|
|
3
|
+
kind: "NormalizationAst",
|
|
4
|
+
selections: [
|
|
5
|
+
{
|
|
6
|
+
kind: "Linked",
|
|
7
|
+
fieldName: "node",
|
|
8
|
+
arguments: [
|
|
9
|
+
[
|
|
10
|
+
"id",
|
|
11
|
+
{ kind: "Literal", value: 0 },
|
|
12
|
+
],
|
|
13
|
+
],
|
|
14
|
+
concreteType: null,
|
|
15
|
+
selections: [
|
|
16
|
+
{
|
|
17
|
+
kind: "Scalar",
|
|
18
|
+
fieldName: "__typename",
|
|
19
|
+
arguments: null,
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
kind: "Scalar",
|
|
23
|
+
fieldName: "id",
|
|
24
|
+
arguments: null,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
kind: "InlineFragment",
|
|
28
|
+
type: "Economist",
|
|
29
|
+
selections: [
|
|
30
|
+
{
|
|
31
|
+
kind: "Scalar",
|
|
32
|
+
fieldName: "__typename",
|
|
33
|
+
arguments: null,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
kind: "Scalar",
|
|
37
|
+
fieldName: "id",
|
|
38
|
+
arguments: null,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
kind: "Scalar",
|
|
42
|
+
fieldName: "name",
|
|
43
|
+
arguments: null,
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
kind: "Linked",
|
|
51
|
+
fieldName: "node",
|
|
52
|
+
arguments: [
|
|
53
|
+
[
|
|
54
|
+
"id",
|
|
55
|
+
{ kind: "Literal", value: 1 },
|
|
56
|
+
],
|
|
57
|
+
],
|
|
58
|
+
concreteType: null,
|
|
59
|
+
selections: [
|
|
60
|
+
{
|
|
61
|
+
kind: "Scalar",
|
|
62
|
+
fieldName: "__typename",
|
|
63
|
+
arguments: null,
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
kind: "Scalar",
|
|
67
|
+
fieldName: "id",
|
|
68
|
+
arguments: null,
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
kind: "InlineFragment",
|
|
72
|
+
type: "Economist",
|
|
73
|
+
selections: [
|
|
74
|
+
{
|
|
75
|
+
kind: "Scalar",
|
|
76
|
+
fieldName: "__typename",
|
|
77
|
+
arguments: null,
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
kind: "Scalar",
|
|
81
|
+
fieldName: "id",
|
|
82
|
+
arguments: null,
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
kind: "Scalar",
|
|
86
|
+
fieldName: "name",
|
|
87
|
+
arguments: null,
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
};
|
|
95
|
+
export default normalizationAst;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { Link } from '@isograph/react';
|
|
2
|
+
import type { StartUpdate } from '@isograph/react';
|
|
3
|
+
|
|
4
|
+
export type Query__linkedUpdate__param = {
|
|
5
|
+
readonly data: {
|
|
6
|
+
readonly node: ({
|
|
7
|
+
/**
|
|
8
|
+
A client pointer for the Economist type.
|
|
9
|
+
*/
|
|
10
|
+
readonly asEconomist: ({
|
|
11
|
+
readonly name: string,
|
|
12
|
+
} | null),
|
|
13
|
+
} | null),
|
|
14
|
+
readonly john_stuart_mill: ({
|
|
15
|
+
/**
|
|
16
|
+
A store Link for the Node type.
|
|
17
|
+
*/
|
|
18
|
+
readonly link: Link,
|
|
19
|
+
/**
|
|
20
|
+
A client pointer for the Economist type.
|
|
21
|
+
*/
|
|
22
|
+
readonly asEconomist: ({
|
|
23
|
+
readonly name: string,
|
|
24
|
+
} | null),
|
|
25
|
+
} | null),
|
|
26
|
+
},
|
|
27
|
+
readonly parameters: Record<PropertyKey, never>,
|
|
28
|
+
readonly startUpdate: StartUpdate<{
|
|
29
|
+
get node(): ({
|
|
30
|
+
/**
|
|
31
|
+
A client pointer for the Economist type.
|
|
32
|
+
*/
|
|
33
|
+
readonly asEconomist: ({
|
|
34
|
+
name: string,
|
|
35
|
+
} | null),
|
|
36
|
+
} | null),
|
|
37
|
+
set node(value: ({ link: Link } | null)),
|
|
38
|
+
readonly john_stuart_mill: ({
|
|
39
|
+
/**
|
|
40
|
+
A store Link for the Node type.
|
|
41
|
+
*/
|
|
42
|
+
readonly link: Link,
|
|
43
|
+
/**
|
|
44
|
+
A client pointer for the Economist type.
|
|
45
|
+
*/
|
|
46
|
+
readonly asEconomist: ({
|
|
47
|
+
readonly name: string,
|
|
48
|
+
} | null),
|
|
49
|
+
} | null),
|
|
50
|
+
}>,
|
|
51
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export default 'query linkedUpdate {\
|
|
2
|
+
node____id___l_0: node(id: 0) {\
|
|
3
|
+
__typename,\
|
|
4
|
+
id,\
|
|
5
|
+
... on Economist {\
|
|
6
|
+
__typename,\
|
|
7
|
+
id,\
|
|
8
|
+
name,\
|
|
9
|
+
},\
|
|
10
|
+
},\
|
|
11
|
+
node____id___l_1: node(id: 1) {\
|
|
12
|
+
__typename,\
|
|
13
|
+
id,\
|
|
14
|
+
... on Economist {\
|
|
15
|
+
__typename,\
|
|
16
|
+
id,\
|
|
17
|
+
name,\
|
|
18
|
+
},\
|
|
19
|
+
},\
|
|
20
|
+
}';
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { EagerReaderArtifact, ReaderAst } from '@isograph/react';
|
|
2
|
+
import { Query__linkedUpdate__param } from './param_type';
|
|
3
|
+
import { Query__linkedUpdate__output_type } from './output_type';
|
|
4
|
+
import { linkedUpdate as resolver } from '../../../startUpdate.test';
|
|
5
|
+
import Node__asEconomist__resolver_reader from '../../Node/asEconomist/resolver_reader';
|
|
6
|
+
|
|
7
|
+
const readerAst: ReaderAst<Query__linkedUpdate__param> = [
|
|
8
|
+
{
|
|
9
|
+
kind: "Linked",
|
|
10
|
+
fieldName: "node",
|
|
11
|
+
alias: null,
|
|
12
|
+
arguments: [
|
|
13
|
+
[
|
|
14
|
+
"id",
|
|
15
|
+
{ kind: "Literal", value: 0 },
|
|
16
|
+
],
|
|
17
|
+
],
|
|
18
|
+
condition: null,
|
|
19
|
+
isUpdatable: true,
|
|
20
|
+
selections: [
|
|
21
|
+
{
|
|
22
|
+
kind: "Linked",
|
|
23
|
+
fieldName: "asEconomist",
|
|
24
|
+
alias: null,
|
|
25
|
+
arguments: null,
|
|
26
|
+
condition: Node__asEconomist__resolver_reader,
|
|
27
|
+
isUpdatable: false,
|
|
28
|
+
selections: [
|
|
29
|
+
{
|
|
30
|
+
kind: "Scalar",
|
|
31
|
+
fieldName: "name",
|
|
32
|
+
alias: null,
|
|
33
|
+
arguments: null,
|
|
34
|
+
isUpdatable: true,
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
refetchQueryIndex: null,
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
refetchQueryIndex: null,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
kind: "Linked",
|
|
44
|
+
fieldName: "node",
|
|
45
|
+
alias: "john_stuart_mill",
|
|
46
|
+
arguments: [
|
|
47
|
+
[
|
|
48
|
+
"id",
|
|
49
|
+
{ kind: "Literal", value: 1 },
|
|
50
|
+
],
|
|
51
|
+
],
|
|
52
|
+
condition: null,
|
|
53
|
+
isUpdatable: false,
|
|
54
|
+
selections: [
|
|
55
|
+
{
|
|
56
|
+
kind: "Link",
|
|
57
|
+
alias: "link",
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
kind: "Linked",
|
|
61
|
+
fieldName: "asEconomist",
|
|
62
|
+
alias: null,
|
|
63
|
+
arguments: null,
|
|
64
|
+
condition: Node__asEconomist__resolver_reader,
|
|
65
|
+
isUpdatable: false,
|
|
66
|
+
selections: [
|
|
67
|
+
{
|
|
68
|
+
kind: "Scalar",
|
|
69
|
+
fieldName: "name",
|
|
70
|
+
alias: null,
|
|
71
|
+
arguments: null,
|
|
72
|
+
isUpdatable: false,
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
refetchQueryIndex: null,
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
refetchQueryIndex: null,
|
|
79
|
+
},
|
|
80
|
+
];
|
|
81
|
+
|
|
82
|
+
const artifact: EagerReaderArtifact<
|
|
83
|
+
Query__linkedUpdate__param,
|
|
84
|
+
Query__linkedUpdate__output_type
|
|
85
|
+
> = {
|
|
86
|
+
kind: "EagerReaderArtifact",
|
|
87
|
+
fieldName: "Query.linkedUpdate",
|
|
88
|
+
resolver,
|
|
89
|
+
readerAst,
|
|
90
|
+
hasUpdatable: true,
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
export default artifact;
|