@isograph/react 0.0.0-main-eeb92fa4 → 0.0.0-main-5354e704
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/read.d.ts +2 -1
- package/dist/core/read.d.ts.map +1 -1
- package/dist/core/read.js +139 -109
- package/dist/core/reader.d.ts +4 -1
- package/dist/core/reader.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/core/read.ts +206 -144
- package/src/core/reader.ts +5 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
../.. | WARN Unsupported engine: wanted: {"node":"22.9.0"} (current: {"node":"v22.20.0","pnpm":"10.15.0"})
|
|
2
2
|
|
|
3
|
-
> @isograph/react@0.0.0-main-
|
|
3
|
+
> @isograph/react@0.0.0-main-5354e704 compile-libs /home/runner/work/isograph/isograph/libs/isograph-react
|
|
4
4
|
> rimraf dist && tsc -p tsconfig.pkg.json
|
|
5
5
|
|
package/dist/core/read.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { RefetchQueryNormalizationArtifactWrapper } from './entrypoint';
|
|
|
3
3
|
import { ExtractData, FragmentReference, Variables, type UnknownTReadFromStore } from './FragmentReference';
|
|
4
4
|
import { IsographEnvironment, type DataTypeValue, type StoreLink, type StoreRecord } from './IsographEnvironment';
|
|
5
5
|
import { PromiseWrapper } from './PromiseWrapper';
|
|
6
|
-
import { ReaderAst, type LoadablySelectedField, type ReaderImperativelyLoadedField, type ReaderLinkedField, type ReaderNonLoadableResolverField, type ReaderScalarField } from './reader';
|
|
6
|
+
import { ReaderAst, type LoadablySelectedField, type ReaderClientPointer, type ReaderImperativelyLoadedField, type ReaderLinkedField, type ReaderNonLoadableResolverField, type ReaderScalarField } from './reader';
|
|
7
7
|
export type WithEncounteredRecords<T> = {
|
|
8
8
|
readonly encounteredRecords: EncounteredIds;
|
|
9
9
|
readonly item: ExtractData<T>;
|
|
@@ -23,6 +23,7 @@ export declare function readLoadablySelectedFieldData(environment: IsographEnvir
|
|
|
23
23
|
export declare function readResolverFieldData(environment: IsographEnvironment, field: ReaderNonLoadableResolverField, root: StoreLink, variables: Variables, nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[], networkRequest: PromiseWrapper<void, any>, networkRequestOptions: NetworkRequestReaderOptions, mutableEncounteredRecords: EncounteredIds): ReadDataResult<unknown>;
|
|
24
24
|
export declare function readScalarFieldData(field: ReaderScalarField, storeRecord: StoreRecord, root: StoreLink, variables: Variables): ReadDataResult<string | number | boolean | StoreLink | DataTypeValue[] | null>;
|
|
25
25
|
export declare function readLinkedFieldData(environment: IsographEnvironment, field: ReaderLinkedField, storeRecord: StoreRecord, root: StoreLink, variables: Variables, nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[], networkRequest: PromiseWrapper<void, any>, networkRequestOptions: NetworkRequestReaderOptions, readData: <TReadFromStore>(ast: ReaderAst<TReadFromStore>, root: StoreLink) => ReadDataResult<object>): ReadDataResult<unknown>;
|
|
26
|
+
export declare function readClientPointerData(environment: IsographEnvironment, field: ReaderClientPointer, root: StoreLink, variables: Variables, nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[], readData: <TReadFromStore>(ast: ReaderAst<TReadFromStore>, root: StoreLink) => ReadDataResult<object>): ReadDataResult<unknown>;
|
|
26
27
|
export type NetworkRequestReaderOptions = {
|
|
27
28
|
suspendIfInFlight: boolean;
|
|
28
29
|
throwOnNetworkError: boolean;
|
package/dist/core/read.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/core/read.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/core/read.ts"],"names":[],"mappings":"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"}
|
package/dist/core/read.js
CHANGED
|
@@ -5,6 +5,7 @@ exports.readLoadablySelectedFieldData = readLoadablySelectedFieldData;
|
|
|
5
5
|
exports.readResolverFieldData = readResolverFieldData;
|
|
6
6
|
exports.readScalarFieldData = readScalarFieldData;
|
|
7
7
|
exports.readLinkedFieldData = readLinkedFieldData;
|
|
8
|
+
exports.readClientPointerData = readClientPointerData;
|
|
8
9
|
exports.getNetworkRequestOptionsWithDefaults = getNetworkRequestOptionsWithDefaults;
|
|
9
10
|
exports.readImperativelyLoadedField = readImperativelyLoadedField;
|
|
10
11
|
const cache_1 = require("./cache");
|
|
@@ -378,7 +379,43 @@ function readScalarFieldData(field, storeRecord, root, variables) {
|
|
|
378
379
|
}
|
|
379
380
|
function readLinkedFieldData(environment, field, storeRecord, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, readData) {
|
|
380
381
|
const storeRecordName = (0, cache_1.getParentRecordKey)(field, variables);
|
|
381
|
-
|
|
382
|
+
let value = storeRecord[storeRecordName];
|
|
383
|
+
if (field.condition) {
|
|
384
|
+
const data = readData(field.condition.readerAst, root);
|
|
385
|
+
if (data.kind === 'MissingData') {
|
|
386
|
+
return {
|
|
387
|
+
kind: 'MissingData',
|
|
388
|
+
reason: 'Missing data for ' + storeRecordName + ' on root ' + root.__link,
|
|
389
|
+
nestedReason: data,
|
|
390
|
+
recordLink: data.recordLink,
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
const readerWithRefetchQueries = {
|
|
394
|
+
kind: 'ReaderWithRefetchQueries',
|
|
395
|
+
readerArtifact: field.condition,
|
|
396
|
+
// TODO this is wrong
|
|
397
|
+
// should map field.condition.usedRefetchQueries
|
|
398
|
+
// but it doesn't exist
|
|
399
|
+
nestedRefetchQueries: [],
|
|
400
|
+
};
|
|
401
|
+
const fragment = {
|
|
402
|
+
kind: 'FragmentReference',
|
|
403
|
+
readerWithRefetchQueries: (0, PromiseWrapper_1.wrapResolvedValue)(readerWithRefetchQueries),
|
|
404
|
+
root,
|
|
405
|
+
variables: generateChildVariableMap(variables,
|
|
406
|
+
// TODO this is wrong
|
|
407
|
+
// should use field.arguments
|
|
408
|
+
// but it doesn't exist
|
|
409
|
+
[]),
|
|
410
|
+
networkRequest,
|
|
411
|
+
};
|
|
412
|
+
const condition = field.condition.resolver(Object.assign({ data: data.data, parameters: {} }, (field.condition.hasUpdatable
|
|
413
|
+
? {
|
|
414
|
+
startUpdate: (0, startUpdate_1.getOrCreateCachedStartUpdate)(environment, fragment, readerWithRefetchQueries.readerArtifact.fieldName, networkRequestOptions),
|
|
415
|
+
}
|
|
416
|
+
: undefined)));
|
|
417
|
+
value = condition;
|
|
418
|
+
}
|
|
382
419
|
if (Array.isArray(value)) {
|
|
383
420
|
const results = [];
|
|
384
421
|
for (const item of value) {
|
|
@@ -399,6 +436,24 @@ function readLinkedFieldData(environment, field, storeRecord, root, variables, n
|
|
|
399
436
|
results.push(null);
|
|
400
437
|
continue;
|
|
401
438
|
}
|
|
439
|
+
if (isClientPointer(field)) {
|
|
440
|
+
const result = readClientPointerData(environment, field, link, variables, nestedRefetchQueries, readData);
|
|
441
|
+
if (result.kind === 'MissingData') {
|
|
442
|
+
return {
|
|
443
|
+
kind: 'MissingData',
|
|
444
|
+
reason: 'Missing data for ' +
|
|
445
|
+
storeRecordName +
|
|
446
|
+
' on root ' +
|
|
447
|
+
root.__link +
|
|
448
|
+
'. Link is ' +
|
|
449
|
+
JSON.stringify(item),
|
|
450
|
+
nestedReason: result,
|
|
451
|
+
recordLink: result.recordLink,
|
|
452
|
+
};
|
|
453
|
+
}
|
|
454
|
+
results.push(result.data);
|
|
455
|
+
continue;
|
|
456
|
+
}
|
|
402
457
|
const result = readData(field.selections, link);
|
|
403
458
|
if (result.kind === 'MissingData') {
|
|
404
459
|
return {
|
|
@@ -421,42 +476,6 @@ function readLinkedFieldData(environment, field, storeRecord, root, variables, n
|
|
|
421
476
|
};
|
|
422
477
|
}
|
|
423
478
|
let link = (0, IsographEnvironment_1.assertLink)(value);
|
|
424
|
-
if (field.condition) {
|
|
425
|
-
const data = readData(field.condition.readerAst, root);
|
|
426
|
-
if (data.kind === 'MissingData') {
|
|
427
|
-
return {
|
|
428
|
-
kind: 'MissingData',
|
|
429
|
-
reason: 'Missing data for ' + storeRecordName + ' on root ' + root.__link,
|
|
430
|
-
nestedReason: data,
|
|
431
|
-
recordLink: data.recordLink,
|
|
432
|
-
};
|
|
433
|
-
}
|
|
434
|
-
const readerWithRefetchQueries = {
|
|
435
|
-
kind: 'ReaderWithRefetchQueries',
|
|
436
|
-
readerArtifact: field.condition,
|
|
437
|
-
// TODO this is wrong
|
|
438
|
-
// should map field.condition.usedRefetchQueries
|
|
439
|
-
// but it doesn't exist
|
|
440
|
-
nestedRefetchQueries: [],
|
|
441
|
-
};
|
|
442
|
-
const fragment = {
|
|
443
|
-
kind: 'FragmentReference',
|
|
444
|
-
readerWithRefetchQueries: (0, PromiseWrapper_1.wrapResolvedValue)(readerWithRefetchQueries),
|
|
445
|
-
root,
|
|
446
|
-
variables: generateChildVariableMap(variables,
|
|
447
|
-
// TODO this is wrong
|
|
448
|
-
// should use field.arguments
|
|
449
|
-
// but it doesn't exist
|
|
450
|
-
[]),
|
|
451
|
-
networkRequest,
|
|
452
|
-
};
|
|
453
|
-
const condition = field.condition.resolver(Object.assign({ data: data.data, parameters: {} }, (field.condition.hasUpdatable
|
|
454
|
-
? {
|
|
455
|
-
startUpdate: (0, startUpdate_1.getOrCreateCachedStartUpdate)(environment, fragment, readerWithRefetchQueries.readerArtifact.fieldName, networkRequestOptions),
|
|
456
|
-
}
|
|
457
|
-
: undefined)));
|
|
458
|
-
link = condition;
|
|
459
|
-
}
|
|
460
479
|
if (link === undefined) {
|
|
461
480
|
// TODO make this configurable, and also generated and derived from the schema
|
|
462
481
|
const missingFieldHandler = environment.missingFieldHandler;
|
|
@@ -491,83 +510,19 @@ function readLinkedFieldData(environment, field, storeRecord, root, variables, n
|
|
|
491
510
|
data: null,
|
|
492
511
|
};
|
|
493
512
|
}
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
// if field.refetchQueryIndex is not null, then the field is a client pointer, i.e.
|
|
498
|
-
// it is like a loadable field that returns the selections.
|
|
499
|
-
const refetchReaderParams = readData([
|
|
500
|
-
{
|
|
501
|
-
kind: 'Scalar',
|
|
502
|
-
fieldName: 'id',
|
|
503
|
-
alias: null,
|
|
504
|
-
arguments: null,
|
|
505
|
-
isUpdatable: false,
|
|
506
|
-
},
|
|
507
|
-
], targetId);
|
|
508
|
-
if (refetchReaderParams.kind === 'MissingData') {
|
|
513
|
+
if (isClientPointer(field)) {
|
|
514
|
+
const data = readClientPointerData(environment, field, link, variables, nestedRefetchQueries, readData);
|
|
515
|
+
if (data.kind === 'MissingData') {
|
|
509
516
|
return {
|
|
510
517
|
kind: 'MissingData',
|
|
511
|
-
reason: 'Missing data for ' +
|
|
512
|
-
nestedReason:
|
|
513
|
-
recordLink:
|
|
518
|
+
reason: 'Missing data for ' + storeRecordName + ' on root ' + root.__link,
|
|
519
|
+
nestedReason: data,
|
|
520
|
+
recordLink: data.recordLink,
|
|
514
521
|
};
|
|
515
522
|
}
|
|
516
|
-
|
|
517
|
-
if (refetchQuery == null) {
|
|
518
|
-
throw new Error('refetchQuery is null in RefetchField. This is indicative of a bug in Isograph.');
|
|
519
|
-
}
|
|
520
|
-
const refetchQueryArtifact = refetchQuery.artifact;
|
|
521
|
-
const allowedVariables = refetchQuery.allowedVariables;
|
|
522
|
-
return {
|
|
523
|
-
kind: 'Success',
|
|
524
|
-
data: (args,
|
|
525
|
-
// TODO get the associated type for FetchOptions from the loadably selected field
|
|
526
|
-
fetchOptions) => {
|
|
527
|
-
const includeReadOutData = (variables, readOutData) => {
|
|
528
|
-
variables.id = readOutData.id;
|
|
529
|
-
return variables;
|
|
530
|
-
};
|
|
531
|
-
const localVariables = includeReadOutData(args !== null && args !== void 0 ? args : {}, refetchReaderParams.data);
|
|
532
|
-
writeQueryArgsToVariables(localVariables, field.arguments, variables);
|
|
533
|
-
return [
|
|
534
|
-
// Stable id
|
|
535
|
-
targetId.__typename +
|
|
536
|
-
':' +
|
|
537
|
-
targetId.__link +
|
|
538
|
-
'/' +
|
|
539
|
-
field.fieldName +
|
|
540
|
-
'/' +
|
|
541
|
-
stableStringifyArgs(localVariables),
|
|
542
|
-
// Fetcher
|
|
543
|
-
() => {
|
|
544
|
-
const variables = includeReadOutData(filterVariables(Object.assign(Object.assign({}, args), localVariables), allowedVariables), refetchReaderParams.data);
|
|
545
|
-
const readerWithRefetchQueries = (0, PromiseWrapper_1.wrapResolvedValue)({
|
|
546
|
-
kind: 'ReaderWithRefetchQueries',
|
|
547
|
-
readerArtifact: {
|
|
548
|
-
kind: 'EagerReaderArtifact',
|
|
549
|
-
fieldName: field.fieldName,
|
|
550
|
-
readerAst: field.selections,
|
|
551
|
-
resolver: ({ data }) => data,
|
|
552
|
-
hasUpdatable: false,
|
|
553
|
-
},
|
|
554
|
-
nestedRefetchQueries,
|
|
555
|
-
});
|
|
556
|
-
const [networkRequest, disposeNetworkRequest] = (0, makeNetworkRequest_1.maybeMakeNetworkRequest)(environment, refetchQueryArtifact, variables, readerWithRefetchQueries, fetchOptions !== null && fetchOptions !== void 0 ? fetchOptions : null);
|
|
557
|
-
const fragmentReference = {
|
|
558
|
-
kind: 'FragmentReference',
|
|
559
|
-
readerWithRefetchQueries: readerWithRefetchQueries,
|
|
560
|
-
root: targetId,
|
|
561
|
-
variables,
|
|
562
|
-
networkRequest,
|
|
563
|
-
};
|
|
564
|
-
return [fragmentReference, disposeNetworkRequest];
|
|
565
|
-
},
|
|
566
|
-
];
|
|
567
|
-
},
|
|
568
|
-
};
|
|
523
|
+
return data;
|
|
569
524
|
}
|
|
570
|
-
const data = readData(field.selections,
|
|
525
|
+
const data = readData(field.selections, link);
|
|
571
526
|
if (data.kind === 'MissingData') {
|
|
572
527
|
return {
|
|
573
528
|
kind: 'MissingData',
|
|
@@ -578,6 +533,81 @@ function readLinkedFieldData(environment, field, storeRecord, root, variables, n
|
|
|
578
533
|
}
|
|
579
534
|
return data;
|
|
580
535
|
}
|
|
536
|
+
function isClientPointer(field) {
|
|
537
|
+
return field.refetchQueryIndex !== null;
|
|
538
|
+
}
|
|
539
|
+
function readClientPointerData(environment, field, root, variables, nestedRefetchQueries, readData) {
|
|
540
|
+
const refetchReaderParams = readData([
|
|
541
|
+
{
|
|
542
|
+
kind: 'Scalar',
|
|
543
|
+
fieldName: 'id',
|
|
544
|
+
alias: null,
|
|
545
|
+
arguments: null,
|
|
546
|
+
isUpdatable: false,
|
|
547
|
+
},
|
|
548
|
+
], root);
|
|
549
|
+
if (refetchReaderParams.kind === 'MissingData') {
|
|
550
|
+
return {
|
|
551
|
+
kind: 'MissingData',
|
|
552
|
+
reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,
|
|
553
|
+
nestedReason: refetchReaderParams,
|
|
554
|
+
recordLink: refetchReaderParams.recordLink,
|
|
555
|
+
};
|
|
556
|
+
}
|
|
557
|
+
const refetchQuery = nestedRefetchQueries[field.refetchQueryIndex];
|
|
558
|
+
if (refetchQuery == null) {
|
|
559
|
+
throw new Error('refetchQuery is null in RefetchField. This is indicative of a bug in Isograph.');
|
|
560
|
+
}
|
|
561
|
+
const refetchQueryArtifact = refetchQuery.artifact;
|
|
562
|
+
const allowedVariables = refetchQuery.allowedVariables;
|
|
563
|
+
return {
|
|
564
|
+
kind: 'Success',
|
|
565
|
+
data: (args,
|
|
566
|
+
// TODO get the associated type for FetchOptions from the loadably selected field
|
|
567
|
+
fetchOptions) => {
|
|
568
|
+
const includeReadOutData = (variables, readOutData) => {
|
|
569
|
+
variables.id = readOutData.id;
|
|
570
|
+
return variables;
|
|
571
|
+
};
|
|
572
|
+
const localVariables = includeReadOutData(args !== null && args !== void 0 ? args : {}, refetchReaderParams.data);
|
|
573
|
+
writeQueryArgsToVariables(localVariables, field.arguments, variables);
|
|
574
|
+
return [
|
|
575
|
+
// Stable id
|
|
576
|
+
root.__typename +
|
|
577
|
+
':' +
|
|
578
|
+
root.__link +
|
|
579
|
+
'/' +
|
|
580
|
+
field.fieldName +
|
|
581
|
+
'/' +
|
|
582
|
+
stableStringifyArgs(localVariables),
|
|
583
|
+
// Fetcher
|
|
584
|
+
() => {
|
|
585
|
+
const variables = includeReadOutData(filterVariables(Object.assign(Object.assign({}, args), localVariables), allowedVariables), refetchReaderParams.data);
|
|
586
|
+
const readerWithRefetchQueries = (0, PromiseWrapper_1.wrapResolvedValue)({
|
|
587
|
+
kind: 'ReaderWithRefetchQueries',
|
|
588
|
+
readerArtifact: {
|
|
589
|
+
kind: 'EagerReaderArtifact',
|
|
590
|
+
fieldName: field.fieldName,
|
|
591
|
+
readerAst: field.selections,
|
|
592
|
+
resolver: ({ data }) => data,
|
|
593
|
+
hasUpdatable: false,
|
|
594
|
+
},
|
|
595
|
+
nestedRefetchQueries,
|
|
596
|
+
});
|
|
597
|
+
const [networkRequest, disposeNetworkRequest] = (0, makeNetworkRequest_1.maybeMakeNetworkRequest)(environment, refetchQueryArtifact, variables, readerWithRefetchQueries, fetchOptions !== null && fetchOptions !== void 0 ? fetchOptions : null);
|
|
598
|
+
const fragmentReference = {
|
|
599
|
+
kind: 'FragmentReference',
|
|
600
|
+
readerWithRefetchQueries: readerWithRefetchQueries,
|
|
601
|
+
root,
|
|
602
|
+
variables,
|
|
603
|
+
networkRequest,
|
|
604
|
+
};
|
|
605
|
+
return [fragmentReference, disposeNetworkRequest];
|
|
606
|
+
},
|
|
607
|
+
];
|
|
608
|
+
},
|
|
609
|
+
};
|
|
610
|
+
}
|
|
581
611
|
function getNetworkRequestOptionsWithDefaults(networkRequestOptions) {
|
|
582
612
|
var _a, _b;
|
|
583
613
|
return {
|
package/dist/core/reader.d.ts
CHANGED
|
@@ -51,13 +51,16 @@ export type ReaderLinkedField = {
|
|
|
51
51
|
data: any;
|
|
52
52
|
parameters: any;
|
|
53
53
|
startUpdate?: StartUpdate<any>;
|
|
54
|
-
}, StoreLink | null> | null;
|
|
54
|
+
}, StoreLink | null | (StoreLink | null)[] | StoreLink[]> | null;
|
|
55
55
|
readonly isUpdatable: boolean;
|
|
56
56
|
/**
|
|
57
57
|
* If refetchQueryIndex != null, then the linked field is a client pointer.
|
|
58
58
|
*/
|
|
59
59
|
readonly refetchQueryIndex: number | null;
|
|
60
60
|
};
|
|
61
|
+
export interface ReaderClientPointer extends ReaderLinkedField {
|
|
62
|
+
readonly refetchQueryIndex: number;
|
|
63
|
+
}
|
|
61
64
|
export type ReaderNonLoadableResolverField = {
|
|
62
65
|
readonly kind: 'Resolver';
|
|
63
66
|
readonly alias: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../src/core/reader.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../src/core/reader.ts"],"names":[],"mappings":"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"}
|
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-5354e704",
|
|
4
4
|
"description": "Use Isograph with React",
|
|
5
5
|
"homepage": "https://isograph.dev",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
"iso": "cross-env ISO_PRINT_ABSOLUTE_FILEPATH=1 ../../target/debug/isograph_cli --config ./isograph.config.json"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@isograph/disposable-types": "0.0.0-main-
|
|
23
|
-
"@isograph/react-disposable-state": "0.0.0-main-
|
|
24
|
-
"@isograph/reference-counted-pointer": "0.0.0-main-
|
|
22
|
+
"@isograph/disposable-types": "0.0.0-main-5354e704",
|
|
23
|
+
"@isograph/react-disposable-state": "0.0.0-main-5354e704",
|
|
24
|
+
"@isograph/reference-counted-pointer": "0.0.0-main-5354e704"
|
|
25
25
|
},
|
|
26
26
|
"peerDependencies": {
|
|
27
27
|
"react": "^18.0.0 || ^19.0.0"
|
package/src/core/read.ts
CHANGED
|
@@ -39,6 +39,7 @@ import {
|
|
|
39
39
|
import {
|
|
40
40
|
ReaderAst,
|
|
41
41
|
type LoadablySelectedField,
|
|
42
|
+
type ReaderClientPointer,
|
|
42
43
|
type ReaderImperativelyLoadedField,
|
|
43
44
|
type ReaderLinkedField,
|
|
44
45
|
type ReaderNonLoadableResolverField,
|
|
@@ -659,51 +660,7 @@ export function readLinkedFieldData(
|
|
|
659
660
|
) => ReadDataResult<object>,
|
|
660
661
|
): ReadDataResult<unknown> {
|
|
661
662
|
const storeRecordName = getParentRecordKey(field, variables);
|
|
662
|
-
|
|
663
|
-
if (Array.isArray(value)) {
|
|
664
|
-
const results = [];
|
|
665
|
-
for (const item of value) {
|
|
666
|
-
const link = assertLink(item);
|
|
667
|
-
if (link === undefined) {
|
|
668
|
-
return {
|
|
669
|
-
kind: 'MissingData',
|
|
670
|
-
reason:
|
|
671
|
-
'No link for ' +
|
|
672
|
-
storeRecordName +
|
|
673
|
-
' on root ' +
|
|
674
|
-
root.__link +
|
|
675
|
-
'. Link is ' +
|
|
676
|
-
JSON.stringify(item),
|
|
677
|
-
recordLink: root,
|
|
678
|
-
};
|
|
679
|
-
} else if (link === null) {
|
|
680
|
-
results.push(null);
|
|
681
|
-
continue;
|
|
682
|
-
}
|
|
683
|
-
|
|
684
|
-
const result = readData(field.selections, link);
|
|
685
|
-
if (result.kind === 'MissingData') {
|
|
686
|
-
return {
|
|
687
|
-
kind: 'MissingData',
|
|
688
|
-
reason:
|
|
689
|
-
'Missing data for ' +
|
|
690
|
-
storeRecordName +
|
|
691
|
-
' on root ' +
|
|
692
|
-
root.__link +
|
|
693
|
-
'. Link is ' +
|
|
694
|
-
JSON.stringify(item),
|
|
695
|
-
nestedReason: result,
|
|
696
|
-
recordLink: result.recordLink,
|
|
697
|
-
};
|
|
698
|
-
}
|
|
699
|
-
results.push(result.data);
|
|
700
|
-
}
|
|
701
|
-
return {
|
|
702
|
-
kind: 'Success',
|
|
703
|
-
data: results,
|
|
704
|
-
};
|
|
705
|
-
}
|
|
706
|
-
let link = assertLink(value);
|
|
663
|
+
let value = storeRecord[storeRecordName];
|
|
707
664
|
|
|
708
665
|
if (field.condition) {
|
|
709
666
|
const data = readData(field.condition.readerAst, root);
|
|
@@ -754,9 +711,81 @@ export function readLinkedFieldData(
|
|
|
754
711
|
}
|
|
755
712
|
: undefined),
|
|
756
713
|
});
|
|
757
|
-
|
|
714
|
+
value = condition;
|
|
758
715
|
}
|
|
759
716
|
|
|
717
|
+
if (Array.isArray(value)) {
|
|
718
|
+
const results = [];
|
|
719
|
+
for (const item of value) {
|
|
720
|
+
const link = assertLink(item);
|
|
721
|
+
if (link === undefined) {
|
|
722
|
+
return {
|
|
723
|
+
kind: 'MissingData',
|
|
724
|
+
reason:
|
|
725
|
+
'No link for ' +
|
|
726
|
+
storeRecordName +
|
|
727
|
+
' on root ' +
|
|
728
|
+
root.__link +
|
|
729
|
+
'. Link is ' +
|
|
730
|
+
JSON.stringify(item),
|
|
731
|
+
recordLink: root,
|
|
732
|
+
};
|
|
733
|
+
} else if (link === null) {
|
|
734
|
+
results.push(null);
|
|
735
|
+
continue;
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
if (isClientPointer(field)) {
|
|
739
|
+
const result = readClientPointerData(
|
|
740
|
+
environment,
|
|
741
|
+
field,
|
|
742
|
+
link,
|
|
743
|
+
variables,
|
|
744
|
+
nestedRefetchQueries,
|
|
745
|
+
readData,
|
|
746
|
+
);
|
|
747
|
+
if (result.kind === 'MissingData') {
|
|
748
|
+
return {
|
|
749
|
+
kind: 'MissingData',
|
|
750
|
+
reason:
|
|
751
|
+
'Missing data for ' +
|
|
752
|
+
storeRecordName +
|
|
753
|
+
' on root ' +
|
|
754
|
+
root.__link +
|
|
755
|
+
'. Link is ' +
|
|
756
|
+
JSON.stringify(item),
|
|
757
|
+
nestedReason: result,
|
|
758
|
+
recordLink: result.recordLink,
|
|
759
|
+
};
|
|
760
|
+
}
|
|
761
|
+
results.push(result.data);
|
|
762
|
+
continue;
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
const result = readData(field.selections, link);
|
|
766
|
+
if (result.kind === 'MissingData') {
|
|
767
|
+
return {
|
|
768
|
+
kind: 'MissingData',
|
|
769
|
+
reason:
|
|
770
|
+
'Missing data for ' +
|
|
771
|
+
storeRecordName +
|
|
772
|
+
' on root ' +
|
|
773
|
+
root.__link +
|
|
774
|
+
'. Link is ' +
|
|
775
|
+
JSON.stringify(item),
|
|
776
|
+
nestedReason: result,
|
|
777
|
+
recordLink: result.recordLink,
|
|
778
|
+
};
|
|
779
|
+
}
|
|
780
|
+
results.push(result.data);
|
|
781
|
+
}
|
|
782
|
+
return {
|
|
783
|
+
kind: 'Success',
|
|
784
|
+
data: results,
|
|
785
|
+
};
|
|
786
|
+
}
|
|
787
|
+
let link = assertLink(value);
|
|
788
|
+
|
|
760
789
|
if (link === undefined) {
|
|
761
790
|
// TODO make this configurable, and also generated and derived from the schema
|
|
762
791
|
const missingFieldHandler = environment.missingFieldHandler;
|
|
@@ -798,111 +827,28 @@ export function readLinkedFieldData(
|
|
|
798
827
|
data: null,
|
|
799
828
|
};
|
|
800
829
|
}
|
|
801
|
-
const targetId = link;
|
|
802
|
-
const { refetchQueryIndex } = field;
|
|
803
|
-
if (refetchQueryIndex != null) {
|
|
804
|
-
// if field.refetchQueryIndex is not null, then the field is a client pointer, i.e.
|
|
805
|
-
// it is like a loadable field that returns the selections.
|
|
806
|
-
const refetchReaderParams = readData(
|
|
807
|
-
[
|
|
808
|
-
{
|
|
809
|
-
kind: 'Scalar',
|
|
810
|
-
fieldName: 'id',
|
|
811
|
-
alias: null,
|
|
812
|
-
arguments: null,
|
|
813
|
-
isUpdatable: false,
|
|
814
|
-
},
|
|
815
|
-
],
|
|
816
|
-
targetId,
|
|
817
|
-
);
|
|
818
830
|
|
|
819
|
-
|
|
831
|
+
if (isClientPointer(field)) {
|
|
832
|
+
const data = readClientPointerData(
|
|
833
|
+
environment,
|
|
834
|
+
field,
|
|
835
|
+
link,
|
|
836
|
+
variables,
|
|
837
|
+
nestedRefetchQueries,
|
|
838
|
+
readData,
|
|
839
|
+
);
|
|
840
|
+
if (data.kind === 'MissingData') {
|
|
820
841
|
return {
|
|
821
842
|
kind: 'MissingData',
|
|
822
843
|
reason:
|
|
823
|
-
'Missing data for ' +
|
|
824
|
-
nestedReason:
|
|
825
|
-
recordLink:
|
|
844
|
+
'Missing data for ' + storeRecordName + ' on root ' + root.__link,
|
|
845
|
+
nestedReason: data,
|
|
846
|
+
recordLink: data.recordLink,
|
|
826
847
|
};
|
|
827
848
|
}
|
|
828
|
-
|
|
829
|
-
const refetchQuery = nestedRefetchQueries[refetchQueryIndex];
|
|
830
|
-
if (refetchQuery == null) {
|
|
831
|
-
throw new Error(
|
|
832
|
-
'refetchQuery is null in RefetchField. This is indicative of a bug in Isograph.',
|
|
833
|
-
);
|
|
834
|
-
}
|
|
835
|
-
const refetchQueryArtifact = refetchQuery.artifact;
|
|
836
|
-
const allowedVariables = refetchQuery.allowedVariables;
|
|
837
|
-
|
|
838
|
-
return {
|
|
839
|
-
kind: 'Success',
|
|
840
|
-
data: (
|
|
841
|
-
args: any,
|
|
842
|
-
// TODO get the associated type for FetchOptions from the loadably selected field
|
|
843
|
-
fetchOptions?: FetchOptions<any>,
|
|
844
|
-
) => {
|
|
845
|
-
const includeReadOutData = (variables: any, readOutData: any) => {
|
|
846
|
-
variables.id = readOutData.id;
|
|
847
|
-
return variables;
|
|
848
|
-
};
|
|
849
|
-
const localVariables = includeReadOutData(
|
|
850
|
-
args ?? {},
|
|
851
|
-
refetchReaderParams.data,
|
|
852
|
-
);
|
|
853
|
-
writeQueryArgsToVariables(localVariables, field.arguments, variables);
|
|
854
|
-
|
|
855
|
-
return [
|
|
856
|
-
// Stable id
|
|
857
|
-
targetId.__typename +
|
|
858
|
-
':' +
|
|
859
|
-
targetId.__link +
|
|
860
|
-
'/' +
|
|
861
|
-
field.fieldName +
|
|
862
|
-
'/' +
|
|
863
|
-
stableStringifyArgs(localVariables),
|
|
864
|
-
// Fetcher
|
|
865
|
-
(): ItemCleanupPair<FragmentReference<any, any>> | undefined => {
|
|
866
|
-
const variables = includeReadOutData(
|
|
867
|
-
filterVariables({ ...args, ...localVariables }, allowedVariables),
|
|
868
|
-
refetchReaderParams.data,
|
|
869
|
-
);
|
|
870
|
-
|
|
871
|
-
const readerWithRefetchQueries = wrapResolvedValue({
|
|
872
|
-
kind: 'ReaderWithRefetchQueries',
|
|
873
|
-
readerArtifact: {
|
|
874
|
-
kind: 'EagerReaderArtifact',
|
|
875
|
-
fieldName: field.fieldName,
|
|
876
|
-
readerAst: field.selections,
|
|
877
|
-
resolver: ({ data }: { data: any }) => data,
|
|
878
|
-
hasUpdatable: false,
|
|
879
|
-
},
|
|
880
|
-
nestedRefetchQueries,
|
|
881
|
-
} as const);
|
|
882
|
-
|
|
883
|
-
const [networkRequest, disposeNetworkRequest] =
|
|
884
|
-
maybeMakeNetworkRequest(
|
|
885
|
-
environment,
|
|
886
|
-
refetchQueryArtifact,
|
|
887
|
-
variables,
|
|
888
|
-
readerWithRefetchQueries,
|
|
889
|
-
fetchOptions ?? null,
|
|
890
|
-
);
|
|
891
|
-
|
|
892
|
-
const fragmentReference: FragmentReference<any, any> = {
|
|
893
|
-
kind: 'FragmentReference',
|
|
894
|
-
readerWithRefetchQueries: readerWithRefetchQueries,
|
|
895
|
-
root: targetId,
|
|
896
|
-
variables,
|
|
897
|
-
networkRequest,
|
|
898
|
-
};
|
|
899
|
-
return [fragmentReference, disposeNetworkRequest];
|
|
900
|
-
},
|
|
901
|
-
];
|
|
902
|
-
},
|
|
903
|
-
};
|
|
849
|
+
return data;
|
|
904
850
|
}
|
|
905
|
-
const data = readData(field.selections,
|
|
851
|
+
const data = readData(field.selections, link);
|
|
906
852
|
if (data.kind === 'MissingData') {
|
|
907
853
|
return {
|
|
908
854
|
kind: 'MissingData',
|
|
@@ -914,6 +860,122 @@ export function readLinkedFieldData(
|
|
|
914
860
|
return data;
|
|
915
861
|
}
|
|
916
862
|
|
|
863
|
+
function isClientPointer(
|
|
864
|
+
field: ReaderLinkedField,
|
|
865
|
+
): field is ReaderClientPointer {
|
|
866
|
+
return field.refetchQueryIndex !== null;
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
export function readClientPointerData(
|
|
870
|
+
environment: IsographEnvironment,
|
|
871
|
+
field: ReaderClientPointer,
|
|
872
|
+
root: StoreLink,
|
|
873
|
+
variables: Variables,
|
|
874
|
+
nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],
|
|
875
|
+
readData: <TReadFromStore>(
|
|
876
|
+
ast: ReaderAst<TReadFromStore>,
|
|
877
|
+
root: StoreLink,
|
|
878
|
+
) => ReadDataResult<object>,
|
|
879
|
+
): ReadDataResult<unknown> {
|
|
880
|
+
const refetchReaderParams = readData(
|
|
881
|
+
[
|
|
882
|
+
{
|
|
883
|
+
kind: 'Scalar',
|
|
884
|
+
fieldName: 'id',
|
|
885
|
+
alias: null,
|
|
886
|
+
arguments: null,
|
|
887
|
+
isUpdatable: false,
|
|
888
|
+
},
|
|
889
|
+
],
|
|
890
|
+
root,
|
|
891
|
+
);
|
|
892
|
+
|
|
893
|
+
if (refetchReaderParams.kind === 'MissingData') {
|
|
894
|
+
return {
|
|
895
|
+
kind: 'MissingData',
|
|
896
|
+
reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,
|
|
897
|
+
nestedReason: refetchReaderParams,
|
|
898
|
+
recordLink: refetchReaderParams.recordLink,
|
|
899
|
+
};
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
const refetchQuery = nestedRefetchQueries[field.refetchQueryIndex];
|
|
903
|
+
if (refetchQuery == null) {
|
|
904
|
+
throw new Error(
|
|
905
|
+
'refetchQuery is null in RefetchField. This is indicative of a bug in Isograph.',
|
|
906
|
+
);
|
|
907
|
+
}
|
|
908
|
+
const refetchQueryArtifact = refetchQuery.artifact;
|
|
909
|
+
const allowedVariables = refetchQuery.allowedVariables;
|
|
910
|
+
|
|
911
|
+
return {
|
|
912
|
+
kind: 'Success',
|
|
913
|
+
data: (
|
|
914
|
+
args: any,
|
|
915
|
+
// TODO get the associated type for FetchOptions from the loadably selected field
|
|
916
|
+
fetchOptions?: FetchOptions<any>,
|
|
917
|
+
) => {
|
|
918
|
+
const includeReadOutData = (variables: any, readOutData: any) => {
|
|
919
|
+
variables.id = readOutData.id;
|
|
920
|
+
return variables;
|
|
921
|
+
};
|
|
922
|
+
const localVariables = includeReadOutData(
|
|
923
|
+
args ?? {},
|
|
924
|
+
refetchReaderParams.data,
|
|
925
|
+
);
|
|
926
|
+
writeQueryArgsToVariables(localVariables, field.arguments, variables);
|
|
927
|
+
|
|
928
|
+
return [
|
|
929
|
+
// Stable id
|
|
930
|
+
root.__typename +
|
|
931
|
+
':' +
|
|
932
|
+
root.__link +
|
|
933
|
+
'/' +
|
|
934
|
+
field.fieldName +
|
|
935
|
+
'/' +
|
|
936
|
+
stableStringifyArgs(localVariables),
|
|
937
|
+
// Fetcher
|
|
938
|
+
(): ItemCleanupPair<FragmentReference<any, any>> | undefined => {
|
|
939
|
+
const variables = includeReadOutData(
|
|
940
|
+
filterVariables({ ...args, ...localVariables }, allowedVariables),
|
|
941
|
+
refetchReaderParams.data,
|
|
942
|
+
);
|
|
943
|
+
|
|
944
|
+
const readerWithRefetchQueries = wrapResolvedValue({
|
|
945
|
+
kind: 'ReaderWithRefetchQueries',
|
|
946
|
+
readerArtifact: {
|
|
947
|
+
kind: 'EagerReaderArtifact',
|
|
948
|
+
fieldName: field.fieldName,
|
|
949
|
+
readerAst: field.selections,
|
|
950
|
+
resolver: ({ data }: { data: any }) => data,
|
|
951
|
+
hasUpdatable: false,
|
|
952
|
+
},
|
|
953
|
+
nestedRefetchQueries,
|
|
954
|
+
} as const);
|
|
955
|
+
|
|
956
|
+
const [networkRequest, disposeNetworkRequest] =
|
|
957
|
+
maybeMakeNetworkRequest(
|
|
958
|
+
environment,
|
|
959
|
+
refetchQueryArtifact,
|
|
960
|
+
variables,
|
|
961
|
+
readerWithRefetchQueries,
|
|
962
|
+
fetchOptions ?? null,
|
|
963
|
+
);
|
|
964
|
+
|
|
965
|
+
const fragmentReference: FragmentReference<any, any> = {
|
|
966
|
+
kind: 'FragmentReference',
|
|
967
|
+
readerWithRefetchQueries: readerWithRefetchQueries,
|
|
968
|
+
root,
|
|
969
|
+
variables,
|
|
970
|
+
networkRequest,
|
|
971
|
+
};
|
|
972
|
+
return [fragmentReference, disposeNetworkRequest];
|
|
973
|
+
},
|
|
974
|
+
];
|
|
975
|
+
},
|
|
976
|
+
};
|
|
977
|
+
}
|
|
978
|
+
|
|
917
979
|
export type NetworkRequestReaderOptions = {
|
|
918
980
|
suspendIfInFlight: boolean;
|
|
919
981
|
throwOnNetworkError: boolean;
|
package/src/core/reader.ts
CHANGED
|
@@ -110,7 +110,7 @@ export type ReaderLinkedField = {
|
|
|
110
110
|
readonly arguments: Arguments | null;
|
|
111
111
|
readonly condition: EagerReaderArtifact<
|
|
112
112
|
{ data: any; parameters: any; startUpdate?: StartUpdate<any> },
|
|
113
|
-
StoreLink | null
|
|
113
|
+
StoreLink | null | (StoreLink | null)[] | StoreLink[]
|
|
114
114
|
> | null;
|
|
115
115
|
readonly isUpdatable: boolean;
|
|
116
116
|
/**
|
|
@@ -119,6 +119,10 @@ export type ReaderLinkedField = {
|
|
|
119
119
|
readonly refetchQueryIndex: number | null;
|
|
120
120
|
};
|
|
121
121
|
|
|
122
|
+
export interface ReaderClientPointer extends ReaderLinkedField {
|
|
123
|
+
readonly refetchQueryIndex: number;
|
|
124
|
+
}
|
|
125
|
+
|
|
122
126
|
export type ReaderNonLoadableResolverField = {
|
|
123
127
|
readonly kind: 'Resolver';
|
|
124
128
|
readonly alias: string;
|