@isograph/react 0.0.0-main-176f90a3 → 0.0.0-main-c174d679
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/cache.js +14 -0
- package/dist/index.d.ts +1 -1
- package/dist/read.js +91 -3
- package/dist/reader.d.ts +12 -11
- package/dist/util.d.ts +6 -0
- package/package.json +3 -3
- package/src/cache.ts +14 -0
- package/src/index.ts +1 -2
- package/src/read.ts +120 -6
- package/src/reader.ts +20 -25
- package/src/util.ts +8 -0
package/dist/cache.js
CHANGED
@@ -364,6 +364,12 @@ function getStoreKeyChunkForArgumentValue(argumentValue, variables) {
|
|
364
364
|
case 'Variable': {
|
365
365
|
return variables[argumentValue.name];
|
366
366
|
}
|
367
|
+
case 'String': {
|
368
|
+
return argumentValue.value;
|
369
|
+
}
|
370
|
+
case 'Enum': {
|
371
|
+
return argumentValue.value;
|
372
|
+
}
|
367
373
|
default: {
|
368
374
|
// TODO configure eslint to allow unused vars starting with _
|
369
375
|
// Ensure we have covered all variants
|
@@ -393,6 +399,14 @@ function getNetworkResponseKey(astNode) {
|
|
393
399
|
argumentValueChunk = 'v_' + argumentValue.name;
|
394
400
|
break;
|
395
401
|
}
|
402
|
+
case 'String': {
|
403
|
+
argumentValueChunk = 's_' + argumentValue.value;
|
404
|
+
break;
|
405
|
+
}
|
406
|
+
case 'Enum': {
|
407
|
+
argumentValueChunk = 'e_' + argumentValue.value;
|
408
|
+
break;
|
409
|
+
}
|
396
410
|
default: {
|
397
411
|
// Ensure we have covered all variants
|
398
412
|
let _ = argumentValue;
|
package/dist/index.d.ts
CHANGED
@@ -5,7 +5,7 @@ export { ROOT_ID, type DataId, type DataTypeValue, type IsographEnvironment, typ
|
|
5
5
|
export { IsographEnvironmentProvider, useIsographEnvironment, type IsographEnvironmentProviderProps, } from './IsographEnvironmentProvider';
|
6
6
|
export { useImperativeReference } from './useImperativeReference';
|
7
7
|
export { EntrypointReader } from './EntrypointReader';
|
8
|
-
export { EagerReaderArtifact, ComponentReaderArtifact,
|
8
|
+
export { EagerReaderArtifact, ComponentReaderArtifact, RefetchReaderArtifact, ReaderAst, ReaderAstNode, ReaderLinkedField, ReaderNonLoadableResolverField, ReaderScalarField, TopLevelReaderArtifact, LoadableField, } from './reader';
|
9
9
|
export { NormalizationAst, NormalizationAstNode, NormalizationLinkedField, NormalizationScalarField, IsographEntrypoint, assertIsEntrypoint, RefetchQueryNormalizationArtifact, RefetchQueryNormalizationArtifactWrapper, } from './entrypoint';
|
10
10
|
export { readButDoNotEvaluate } from './read';
|
11
11
|
export { useResult } from './useResult';
|
package/dist/read.js
CHANGED
@@ -155,11 +155,13 @@ function readData(environment, ast, root, variables, nestedRefetchQueries, mutab
|
|
155
155
|
const allowedVariables = refetchQuery.allowedVariables;
|
156
156
|
// Second, we allow the user to call the resolver, which will ultimately
|
157
157
|
// use the resolver reader AST to get the resolver parameters.
|
158
|
-
target[field.alias] = (
|
158
|
+
target[field.alias] = (args) => [
|
159
159
|
// Stable id
|
160
160
|
root + '__' + field.name,
|
161
161
|
// Fetcher
|
162
|
-
field.refetchReaderArtifact.resolver(environment, refetchQueryArtifact, data.data, filterVariables(variables, allowedVariables), root,
|
162
|
+
field.refetchReaderArtifact.resolver(environment, refetchQueryArtifact, data.data, filterVariables(Object.assign(Object.assign({}, args), variables), allowedVariables), root,
|
163
|
+
// TODO these params should be removed
|
164
|
+
null, []),
|
163
165
|
];
|
164
166
|
}
|
165
167
|
break;
|
@@ -186,12 +188,51 @@ function readData(environment, ast, root, variables, nestedRefetchQueries, mutab
|
|
186
188
|
kind: 'FragmentReference',
|
187
189
|
readerArtifact: field.readerArtifact,
|
188
190
|
root,
|
189
|
-
variables,
|
191
|
+
variables: generateChildVariableMap(variables, field.arguments),
|
190
192
|
nestedRefetchQueries: resolverRefetchQueries,
|
191
193
|
});
|
192
194
|
}
|
193
195
|
break;
|
194
196
|
}
|
197
|
+
case 'LoadablySelectedField': {
|
198
|
+
const refetchReaderParams = readData(environment, field.refetchReaderAst, root, variables,
|
199
|
+
// Refetch fields just read the id, and don't need refetch query artifacts
|
200
|
+
[], mutableEncounteredRecords);
|
201
|
+
if (refetchReaderParams.kind === 'MissingData') {
|
202
|
+
return {
|
203
|
+
kind: 'MissingData',
|
204
|
+
reason: 'Missing data for ' + field.alias + ' on root ' + root,
|
205
|
+
nestedReason: refetchReaderParams,
|
206
|
+
};
|
207
|
+
}
|
208
|
+
else {
|
209
|
+
target[field.alias] = (args) => [
|
210
|
+
// Stable id
|
211
|
+
root + '__' + field.name,
|
212
|
+
// Fetcher
|
213
|
+
() => {
|
214
|
+
// TODO we should use the reader AST for this
|
215
|
+
const includeReadOutData = (variables, readOutData) => {
|
216
|
+
variables.id = readOutData.id;
|
217
|
+
return variables;
|
218
|
+
};
|
219
|
+
const localVariables = includeReadOutData(args !== null && args !== void 0 ? args : {}, refetchReaderParams.data);
|
220
|
+
writeQueryArgsToVariables(localVariables, field.queryArguments, variables);
|
221
|
+
const [_networkRequest, disposeNetworkRequest] = (0, cache_1.makeNetworkRequest)(environment, field.entrypoint, localVariables);
|
222
|
+
const fragmentReference = {
|
223
|
+
kind: 'FragmentReference',
|
224
|
+
readerArtifact: field.entrypoint.readerArtifact,
|
225
|
+
// TODO localVariables is not guaranteed to have an id field
|
226
|
+
root: localVariables.id,
|
227
|
+
variables: localVariables,
|
228
|
+
nestedRefetchQueries: field.entrypoint.nestedRefetchQueries,
|
229
|
+
};
|
230
|
+
return [fragmentReference, disposeNetworkRequest];
|
231
|
+
},
|
232
|
+
];
|
233
|
+
}
|
234
|
+
break;
|
235
|
+
}
|
195
236
|
default: {
|
196
237
|
// Ensure we have covered all variants
|
197
238
|
let _ = field;
|
@@ -214,3 +255,50 @@ function filterVariables(variables, allowedVariables) {
|
|
214
255
|
}
|
215
256
|
return result;
|
216
257
|
}
|
258
|
+
function generateChildVariableMap(variables, fieldArguments) {
|
259
|
+
if (fieldArguments == null) {
|
260
|
+
return {};
|
261
|
+
}
|
262
|
+
const childVars = {};
|
263
|
+
for (const [name, value] of fieldArguments) {
|
264
|
+
if (value.kind === 'Variable') {
|
265
|
+
// @ts-expect-error
|
266
|
+
childVars[name] = variables[value.name];
|
267
|
+
}
|
268
|
+
else {
|
269
|
+
// @ts-expect-error
|
270
|
+
childVars[name] = value;
|
271
|
+
}
|
272
|
+
}
|
273
|
+
return childVars;
|
274
|
+
}
|
275
|
+
function writeQueryArgsToVariables(targetVariables, queryArgs, variables) {
|
276
|
+
if (queryArgs == null) {
|
277
|
+
return;
|
278
|
+
}
|
279
|
+
for (const [name, argType] of queryArgs) {
|
280
|
+
switch (argType.kind) {
|
281
|
+
case 'Variable': {
|
282
|
+
targetVariables[name] = variables[argType.name];
|
283
|
+
break;
|
284
|
+
}
|
285
|
+
case 'Enum': {
|
286
|
+
targetVariables[name] = argType.value;
|
287
|
+
break;
|
288
|
+
}
|
289
|
+
case 'Literal': {
|
290
|
+
targetVariables[name] = argType.value;
|
291
|
+
break;
|
292
|
+
}
|
293
|
+
case 'String': {
|
294
|
+
targetVariables[name] = argType.value;
|
295
|
+
break;
|
296
|
+
}
|
297
|
+
default: {
|
298
|
+
const _ = argType;
|
299
|
+
_;
|
300
|
+
throw new Error('Unexpected case');
|
301
|
+
}
|
302
|
+
}
|
303
|
+
}
|
304
|
+
}
|
package/dist/reader.d.ts
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
import { Factory } from '@isograph/disposable-types';
|
3
3
|
import { FragmentReference } from './FragmentReference';
|
4
4
|
import { ComponentOrFieldName, DataId, IsographEnvironment } from './IsographEnvironment';
|
5
|
-
import { RefetchQueryNormalizationArtifact, RefetchQueryNormalizationArtifactWrapper } from './entrypoint';
|
5
|
+
import { IsographEntrypoint, RefetchQueryNormalizationArtifact, RefetchQueryNormalizationArtifactWrapper } from './entrypoint';
|
6
6
|
import { Arguments } from './util';
|
7
7
|
export type TopLevelReaderArtifact<TReadFromStore extends Object, TClientFieldValue, TComponentProps extends Record<string, never>> = EagerReaderArtifact<TReadFromStore, TClientFieldValue> | ComponentReaderArtifact<TReadFromStore, TComponentProps>;
|
8
8
|
export type EagerReaderArtifact<TReadFromStore extends Object, TClientFieldValue> = {
|
@@ -21,12 +21,7 @@ export type RefetchReaderArtifact = {
|
|
21
21
|
readonly readerAst: ReaderAst<unknown>;
|
22
22
|
readonly resolver: (environment: IsographEnvironment, artifact: RefetchQueryNormalizationArtifact, variables: any, filteredVariables: any, rootId: DataId, readerArtifact: TopLevelReaderArtifact<any, any, any> | null, nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[]) => () => void;
|
23
23
|
};
|
24
|
-
export type
|
25
|
-
readonly kind: 'MutationReaderArtifact';
|
26
|
-
readonly readerAst: ReaderAst<unknown>;
|
27
|
-
readonly resolver: (environment: IsographEnvironment, entrypoint: RefetchQueryNormalizationArtifact, readOutData: TReadFromStore, filteredVariables: any, rootId: DataId, readerArtifact: TopLevelReaderArtifact<any, any, any> | null, nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[]) => (mutationParams: any) => void;
|
28
|
-
};
|
29
|
-
export type ReaderAstNode = ReaderScalarField | ReaderLinkedField | ReaderResolverField | ReaderImperativelyLoadedField;
|
24
|
+
export type ReaderAstNode = ReaderScalarField | ReaderLinkedField | ReaderNonLoadableResolverField | ReaderImperativelyLoadedField | ReaderLoadableField;
|
30
25
|
export type ReaderAst<TReadFromStore> = ReadonlyArray<ReaderAstNode>;
|
31
26
|
export type ReaderScalarField = {
|
32
27
|
readonly kind: 'Scalar';
|
@@ -41,7 +36,7 @@ export type ReaderLinkedField = {
|
|
41
36
|
readonly selections: ReaderAst<unknown>;
|
42
37
|
readonly arguments: Arguments | null;
|
43
38
|
};
|
44
|
-
export type
|
39
|
+
export type ReaderNonLoadableResolverField = {
|
45
40
|
readonly kind: 'Resolver';
|
46
41
|
readonly alias: string;
|
47
42
|
readonly readerArtifact: TopLevelReaderArtifact<any, any, any>;
|
@@ -51,11 +46,17 @@ export type ReaderResolverField = {
|
|
51
46
|
export type ReaderImperativelyLoadedField = {
|
52
47
|
readonly kind: 'ImperativelyLoadedField';
|
53
48
|
readonly alias: string;
|
54
|
-
readonly refetchReaderArtifact:
|
55
|
-
readonly resolverReaderArtifact: TopLevelReaderArtifact<any, any, any> | null;
|
49
|
+
readonly refetchReaderArtifact: RefetchReaderArtifact;
|
56
50
|
readonly refetchQuery: number;
|
57
51
|
readonly name: string;
|
58
|
-
|
52
|
+
};
|
53
|
+
export type ReaderLoadableField = {
|
54
|
+
readonly kind: 'LoadablySelectedField';
|
55
|
+
readonly alias: string;
|
56
|
+
readonly name: string;
|
57
|
+
readonly queryArguments: Arguments | null;
|
58
|
+
readonly refetchReaderAst: ReaderAst<any>;
|
59
|
+
readonly entrypoint: IsographEntrypoint<any, any>;
|
59
60
|
};
|
60
61
|
type StableId = string;
|
61
62
|
export type LoadableField<TArgs, TResult> = (args: TArgs) => [StableId, Factory<FragmentReference<any, TResult>>];
|
package/dist/util.d.ts
CHANGED
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-c174d679",
|
4
4
|
"description": "Use Isograph with React",
|
5
5
|
"homepage": "https://isograph.dev",
|
6
6
|
"main": "dist/index.js",
|
@@ -16,8 +16,8 @@
|
|
16
16
|
"prepack": "yarn run test && yarn run compile"
|
17
17
|
},
|
18
18
|
"dependencies": {
|
19
|
-
"@isograph/disposable-types": "0.0.0-main-
|
20
|
-
"@isograph/react-disposable-state": "0.0.0-main-
|
19
|
+
"@isograph/disposable-types": "0.0.0-main-c174d679",
|
20
|
+
"@isograph/react-disposable-state": "0.0.0-main-c174d679",
|
21
21
|
"react": "^18.2.0"
|
22
22
|
},
|
23
23
|
"devDependencies": {
|
package/src/cache.ts
CHANGED
@@ -650,6 +650,12 @@ function getStoreKeyChunkForArgumentValue(
|
|
650
650
|
case 'Variable': {
|
651
651
|
return variables[argumentValue.name];
|
652
652
|
}
|
653
|
+
case 'String': {
|
654
|
+
return argumentValue.value;
|
655
|
+
}
|
656
|
+
case 'Enum': {
|
657
|
+
return argumentValue.value;
|
658
|
+
}
|
653
659
|
default: {
|
654
660
|
// TODO configure eslint to allow unused vars starting with _
|
655
661
|
// Ensure we have covered all variants
|
@@ -683,6 +689,14 @@ function getNetworkResponseKey(
|
|
683
689
|
argumentValueChunk = 'v_' + argumentValue.name;
|
684
690
|
break;
|
685
691
|
}
|
692
|
+
case 'String': {
|
693
|
+
argumentValueChunk = 's_' + argumentValue.value;
|
694
|
+
break;
|
695
|
+
}
|
696
|
+
case 'Enum': {
|
697
|
+
argumentValueChunk = 'e_' + argumentValue.value;
|
698
|
+
break;
|
699
|
+
}
|
686
700
|
default: {
|
687
701
|
// Ensure we have covered all variants
|
688
702
|
let _: never = argumentValue;
|
package/src/index.ts
CHANGED
@@ -29,12 +29,11 @@ export { EntrypointReader } from './EntrypointReader';
|
|
29
29
|
export {
|
30
30
|
EagerReaderArtifact,
|
31
31
|
ComponentReaderArtifact,
|
32
|
-
MutationReaderArtifact,
|
33
32
|
RefetchReaderArtifact,
|
34
33
|
ReaderAst,
|
35
34
|
ReaderAstNode,
|
36
35
|
ReaderLinkedField,
|
37
|
-
|
36
|
+
ReaderNonLoadableResolverField,
|
38
37
|
ReaderScalarField,
|
39
38
|
TopLevelReaderArtifact,
|
40
39
|
LoadableField,
|
package/src/read.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { getParentRecordKey, onNextChange } from './cache';
|
1
|
+
import { getParentRecordKey, makeNetworkRequest, onNextChange } from './cache';
|
2
2
|
import { getOrCreateCachedComponent } from './componentCache';
|
3
3
|
import { RefetchQueryNormalizationArtifactWrapper } from './entrypoint';
|
4
4
|
import { FragmentReference, Variables } from './FragmentReference';
|
@@ -9,6 +9,7 @@ import {
|
|
9
9
|
IsographEnvironment,
|
10
10
|
} from './IsographEnvironment';
|
11
11
|
import { ReaderAst } from './reader';
|
12
|
+
import { Arguments } from './util';
|
12
13
|
|
13
14
|
export type WithEncounteredRecords<T> = {
|
14
15
|
readonly encounteredRecords: Set<DataId>;
|
@@ -222,7 +223,7 @@ function readData<TReadFromStore>(
|
|
222
223
|
|
223
224
|
// Second, we allow the user to call the resolver, which will ultimately
|
224
225
|
// use the resolver reader AST to get the resolver parameters.
|
225
|
-
target[field.alias] = (
|
226
|
+
target[field.alias] = (args: any) => [
|
226
227
|
// Stable id
|
227
228
|
root + '__' + field.name,
|
228
229
|
// Fetcher
|
@@ -230,10 +231,11 @@ function readData<TReadFromStore>(
|
|
230
231
|
environment,
|
231
232
|
refetchQueryArtifact,
|
232
233
|
data.data,
|
233
|
-
filterVariables(variables, allowedVariables),
|
234
|
+
filterVariables({ ...args, ...variables }, allowedVariables),
|
234
235
|
root,
|
235
|
-
|
236
|
-
|
236
|
+
// TODO these params should be removed
|
237
|
+
null,
|
238
|
+
[],
|
237
239
|
),
|
238
240
|
];
|
239
241
|
}
|
@@ -272,13 +274,69 @@ function readData<TReadFromStore>(
|
|
272
274
|
kind: 'FragmentReference',
|
273
275
|
readerArtifact: field.readerArtifact,
|
274
276
|
root,
|
275
|
-
variables,
|
277
|
+
variables: generateChildVariableMap(variables, field.arguments),
|
276
278
|
nestedRefetchQueries: resolverRefetchQueries,
|
277
279
|
} as const,
|
278
280
|
);
|
279
281
|
}
|
280
282
|
break;
|
281
283
|
}
|
284
|
+
case 'LoadablySelectedField': {
|
285
|
+
const refetchReaderParams = readData(
|
286
|
+
environment,
|
287
|
+
field.refetchReaderAst,
|
288
|
+
root,
|
289
|
+
variables,
|
290
|
+
// Refetch fields just read the id, and don't need refetch query artifacts
|
291
|
+
[],
|
292
|
+
mutableEncounteredRecords,
|
293
|
+
);
|
294
|
+
if (refetchReaderParams.kind === 'MissingData') {
|
295
|
+
return {
|
296
|
+
kind: 'MissingData',
|
297
|
+
reason: 'Missing data for ' + field.alias + ' on root ' + root,
|
298
|
+
nestedReason: refetchReaderParams,
|
299
|
+
};
|
300
|
+
} else {
|
301
|
+
target[field.alias] = (args: any) => [
|
302
|
+
// Stable id
|
303
|
+
root + '__' + field.name,
|
304
|
+
// Fetcher
|
305
|
+
() => {
|
306
|
+
// TODO we should use the reader AST for this
|
307
|
+
const includeReadOutData = (variables: any, readOutData: any) => {
|
308
|
+
variables.id = readOutData.id;
|
309
|
+
return variables;
|
310
|
+
};
|
311
|
+
const localVariables = includeReadOutData(
|
312
|
+
args ?? {},
|
313
|
+
refetchReaderParams.data,
|
314
|
+
);
|
315
|
+
writeQueryArgsToVariables(
|
316
|
+
localVariables,
|
317
|
+
field.queryArguments,
|
318
|
+
variables,
|
319
|
+
);
|
320
|
+
const [_networkRequest, disposeNetworkRequest] =
|
321
|
+
makeNetworkRequest(
|
322
|
+
environment,
|
323
|
+
field.entrypoint,
|
324
|
+
localVariables,
|
325
|
+
);
|
326
|
+
const fragmentReference = {
|
327
|
+
kind: 'FragmentReference',
|
328
|
+
readerArtifact: field.entrypoint.readerArtifact,
|
329
|
+
// TODO localVariables is not guaranteed to have an id field
|
330
|
+
root: localVariables.id,
|
331
|
+
variables: localVariables,
|
332
|
+
nestedRefetchQueries: field.entrypoint.nestedRefetchQueries,
|
333
|
+
} as const;
|
334
|
+
return [fragmentReference, disposeNetworkRequest];
|
335
|
+
},
|
336
|
+
];
|
337
|
+
}
|
338
|
+
break;
|
339
|
+
}
|
282
340
|
default: {
|
283
341
|
// Ensure we have covered all variants
|
284
342
|
let _: never = field;
|
@@ -305,3 +363,59 @@ function filterVariables(
|
|
305
363
|
}
|
306
364
|
return result;
|
307
365
|
}
|
366
|
+
|
367
|
+
function generateChildVariableMap(
|
368
|
+
variables: Variables,
|
369
|
+
fieldArguments: Arguments | null,
|
370
|
+
): Variables {
|
371
|
+
if (fieldArguments == null) {
|
372
|
+
return {};
|
373
|
+
}
|
374
|
+
|
375
|
+
const childVars: Variables = {};
|
376
|
+
for (const [name, value] of fieldArguments) {
|
377
|
+
if (value.kind === 'Variable') {
|
378
|
+
// @ts-expect-error
|
379
|
+
childVars[name] = variables[value.name];
|
380
|
+
} else {
|
381
|
+
// @ts-expect-error
|
382
|
+
childVars[name] = value;
|
383
|
+
}
|
384
|
+
}
|
385
|
+
return childVars;
|
386
|
+
}
|
387
|
+
|
388
|
+
function writeQueryArgsToVariables(
|
389
|
+
targetVariables: any,
|
390
|
+
queryArgs: Arguments | null,
|
391
|
+
variables: Variables,
|
392
|
+
) {
|
393
|
+
if (queryArgs == null) {
|
394
|
+
return;
|
395
|
+
}
|
396
|
+
for (const [name, argType] of queryArgs) {
|
397
|
+
switch (argType.kind) {
|
398
|
+
case 'Variable': {
|
399
|
+
targetVariables[name] = variables[argType.name];
|
400
|
+
break;
|
401
|
+
}
|
402
|
+
case 'Enum': {
|
403
|
+
targetVariables[name] = argType.value;
|
404
|
+
break;
|
405
|
+
}
|
406
|
+
case 'Literal': {
|
407
|
+
targetVariables[name] = argType.value;
|
408
|
+
break;
|
409
|
+
}
|
410
|
+
case 'String': {
|
411
|
+
targetVariables[name] = argType.value;
|
412
|
+
break;
|
413
|
+
}
|
414
|
+
default: {
|
415
|
+
const _: never = argType;
|
416
|
+
_;
|
417
|
+
throw new Error('Unexpected case');
|
418
|
+
}
|
419
|
+
}
|
420
|
+
}
|
421
|
+
}
|
package/src/reader.ts
CHANGED
@@ -6,6 +6,7 @@ import {
|
|
6
6
|
IsographEnvironment,
|
7
7
|
} from './IsographEnvironment';
|
8
8
|
import {
|
9
|
+
IsographEntrypoint,
|
9
10
|
RefetchQueryNormalizationArtifact,
|
10
11
|
RefetchQueryNormalizationArtifactWrapper,
|
11
12
|
} from './entrypoint';
|
@@ -58,28 +59,12 @@ export type RefetchReaderArtifact = {
|
|
58
59
|
) => () => void;
|
59
60
|
};
|
60
61
|
|
61
|
-
export type MutationReaderArtifact<TReadFromStore extends Object> = {
|
62
|
-
readonly kind: 'MutationReaderArtifact';
|
63
|
-
readonly readerAst: ReaderAst<unknown>;
|
64
|
-
readonly resolver: (
|
65
|
-
environment: IsographEnvironment,
|
66
|
-
// TODO type this better
|
67
|
-
entrypoint: RefetchQueryNormalizationArtifact,
|
68
|
-
readOutData: TReadFromStore,
|
69
|
-
// TODO type this better
|
70
|
-
filteredVariables: any,
|
71
|
-
rootId: DataId,
|
72
|
-
readerArtifact: TopLevelReaderArtifact<any, any, any> | null,
|
73
|
-
// TODO type this better
|
74
|
-
nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],
|
75
|
-
) => (mutationParams: any) => void;
|
76
|
-
};
|
77
|
-
|
78
62
|
export type ReaderAstNode =
|
79
63
|
| ReaderScalarField
|
80
64
|
| ReaderLinkedField
|
81
|
-
|
|
82
|
-
| ReaderImperativelyLoadedField
|
65
|
+
| ReaderNonLoadableResolverField
|
66
|
+
| ReaderImperativelyLoadedField
|
67
|
+
| ReaderLoadableField;
|
83
68
|
|
84
69
|
// @ts-ignore
|
85
70
|
export type ReaderAst<TReadFromStore> = ReadonlyArray<ReaderAstNode>;
|
@@ -98,7 +83,7 @@ export type ReaderLinkedField = {
|
|
98
83
|
readonly arguments: Arguments | null;
|
99
84
|
};
|
100
85
|
|
101
|
-
export type
|
86
|
+
export type ReaderNonLoadableResolverField = {
|
102
87
|
readonly kind: 'Resolver';
|
103
88
|
readonly alias: string;
|
104
89
|
// TODO don't type this as any
|
@@ -110,13 +95,23 @@ export type ReaderResolverField = {
|
|
110
95
|
export type ReaderImperativelyLoadedField = {
|
111
96
|
readonly kind: 'ImperativelyLoadedField';
|
112
97
|
readonly alias: string;
|
113
|
-
readonly refetchReaderArtifact:
|
114
|
-
| MutationReaderArtifact<any>
|
115
|
-
| RefetchReaderArtifact;
|
116
|
-
readonly resolverReaderArtifact: TopLevelReaderArtifact<any, any, any> | null;
|
98
|
+
readonly refetchReaderArtifact: RefetchReaderArtifact;
|
117
99
|
readonly refetchQuery: number;
|
118
100
|
readonly name: string;
|
119
|
-
|
101
|
+
};
|
102
|
+
|
103
|
+
export type ReaderLoadableField = {
|
104
|
+
readonly kind: 'LoadablySelectedField';
|
105
|
+
readonly alias: string;
|
106
|
+
|
107
|
+
// To generate a stable id, we need the parent id + the name + the args that
|
108
|
+
// we pass to the field, which come from: queryArgs, refetchReaderAst
|
109
|
+
// (technically, but in practice that is always "id") and the user-provided args.
|
110
|
+
readonly name: string;
|
111
|
+
readonly queryArguments: Arguments | null;
|
112
|
+
readonly refetchReaderAst: ReaderAst<any>;
|
113
|
+
|
114
|
+
readonly entrypoint: IsographEntrypoint<any, any>;
|
120
115
|
};
|
121
116
|
|
122
117
|
type StableId = string;
|
package/src/util.ts
CHANGED