@@ -26,7 +26,7 @@ import {
26
26
type PayloadErrors ,
27
27
type StoreLink ,
28
28
type StoreRecord ,
29
- type WithErrors
29
+ type WithErrors ,
30
30
} from './IsographEnvironment' ;
31
31
import { logMessage } from './logging' ;
32
32
import { maybeMakeNetworkRequest } from './makeNetworkRequest' ;
@@ -344,9 +344,17 @@ export function readLoadablySelectedFieldData(
344
344
} ;
345
345
}
346
346
347
+ if ( refetchReaderParams . errors ) {
348
+ return {
349
+ kind : 'Success' ,
350
+ errors : refetchReaderParams . errors ,
351
+ data : null ,
352
+ } ;
353
+ }
354
+
347
355
return {
348
356
kind : 'Success' ,
349
- errors : refetchReaderParams . errors ,
357
+ errors : null ,
350
358
data : (
351
359
args : any ,
352
360
// TODO get the associated type for FetchOptions from the loadably selected field
@@ -623,6 +631,16 @@ export function readResolverFieldData(
623
631
recordLink : data . recordLink ,
624
632
} ;
625
633
}
634
+ if ( data . errors ) {
635
+ // We can't call the resolver when there are errors
636
+ // the resolvers are semanticly non null so we can
637
+ // return null when there's an error
638
+ return {
639
+ kind : 'Success' ,
640
+ data : null ,
641
+ errors : data . errors ,
642
+ } ;
643
+ }
626
644
const firstParameter = {
627
645
data : data . data ,
628
646
parameters : variables ,
@@ -637,7 +655,7 @@ export function readResolverFieldData(
637
655
} ;
638
656
return {
639
657
kind : 'Success' ,
640
- errors : data . errors ,
658
+ errors : null ,
641
659
data : field . readerArtifact . resolver ( firstParameter ) ,
642
660
} ;
643
661
}
@@ -713,9 +731,8 @@ export function readLinkedFieldData(
713
731
const storeRecordName = getParentRecordKey ( field , variables ) ;
714
732
const value = storeRecord . record [ storeRecordName ] ;
715
733
716
- let errors : PayloadErrors | null = null ;
717
-
718
734
if ( Array . isArray ( value ) ) {
735
+ let errors : PayloadErrors | null = null ;
719
736
const results = [ ] ;
720
737
for ( const item of value ) {
721
738
const link = assertLink ( item ) ;
@@ -779,55 +796,55 @@ export function readLinkedFieldData(
779
796
recordLink : data . recordLink ,
780
797
} ;
781
798
}
782
- if ( errors === null ) {
783
- errors = data . errors ;
784
- } else if ( data . errors ) {
785
- errors . push ( ...data . errors ) ;
786
- }
787
799
788
- if ( refetchQueryIndex === null || data . errors === null ) {
789
- // we can't call `condition.resolver` for client pointers when there are errors,
790
- // for inline fragment this is fine
800
+ if ( data . errors && refetchQueryIndex !== null ) {
801
+ // we can't call resolver for client pointers when there are errors,
802
+ // but for inline fragments this is fine
803
+ return {
804
+ kind : 'Success' ,
805
+ data : null ,
806
+ errors : data . errors ,
807
+ } ;
808
+ }
791
809
792
- const readerWithRefetchQueries = {
793
- kind : 'ReaderWithRefetchQueries' ,
794
- readerArtifact : field . condition ,
810
+ const readerWithRefetchQueries = {
811
+ kind : 'ReaderWithRefetchQueries' ,
812
+ readerArtifact : field . condition ,
813
+ // TODO this is wrong
814
+ // should map field.condition.usedRefetchQueries
815
+ // but it doesn't exist
816
+ nestedRefetchQueries : [ ] ,
817
+ } satisfies ReaderWithRefetchQueries < any , any > ;
818
+
819
+ const fragment = {
820
+ kind : 'FragmentReference' ,
821
+ readerWithRefetchQueries : wrapResolvedValue ( readerWithRefetchQueries ) ,
822
+ root,
823
+ variables : generateChildVariableMap (
824
+ variables ,
795
825
// TODO this is wrong
796
- // should map field.condition.usedRefetchQueries
826
+ // should use field.arguments
797
827
// but it doesn't exist
798
- nestedRefetchQueries : [ ] ,
799
- } satisfies ReaderWithRefetchQueries < any , any > ;
800
-
801
- const fragment = {
802
- kind : 'FragmentReference' ,
803
- readerWithRefetchQueries : wrapResolvedValue ( readerWithRefetchQueries ) ,
804
- root,
805
- variables : generateChildVariableMap (
806
- variables ,
807
- // TODO this is wrong
808
- // should use field.arguments
809
- // but it doesn't exist
810
- [ ] ,
811
- ) ,
812
- networkRequest,
813
- } satisfies FragmentReference < any , any > ;
814
-
815
- const condition = field . condition . resolver ( {
816
- data : data . data ,
817
- parameters : { } ,
818
- ...( field . condition . hasUpdatable
819
- ? {
820
- startUpdate : getOrCreateCachedStartUpdate (
821
- environment ,
822
- fragment ,
823
- readerWithRefetchQueries . readerArtifact . fieldName ,
824
- networkRequestOptions ,
825
- ) ,
826
- }
827
- : undefined ) ,
828
- } ) ;
829
- link = condition ;
830
- }
828
+ [ ] ,
829
+ ) ,
830
+ networkRequest,
831
+ } satisfies FragmentReference < any , any > ;
832
+
833
+ const condition = field . condition . resolver ( {
834
+ data : data . data ,
835
+ parameters : { } ,
836
+ ...( field . condition . hasUpdatable
837
+ ? {
838
+ startUpdate : getOrCreateCachedStartUpdate (
839
+ environment ,
840
+ fragment ,
841
+ readerWithRefetchQueries . readerArtifact . fieldName ,
842
+ networkRequestOptions ,
843
+ ) ,
844
+ }
845
+ : undefined ) ,
846
+ } ) ;
847
+ link = condition ;
831
848
}
832
849
833
850
if ( link === undefined ) {
@@ -866,6 +883,7 @@ export function readLinkedFieldData(
866
883
link = altLink ;
867
884
}
868
885
} else if ( link === null ) {
886
+ let errors : PayloadErrors | null = null ;
869
887
if ( storeRecord . errors [ storeRecordName ] ) {
870
888
errors = storeRecord . errors [ storeRecordName ] ;
871
889
}
@@ -902,10 +920,12 @@ export function readLinkedFieldData(
902
920
recordLink : refetchReaderParams . recordLink ,
903
921
} ;
904
922
}
905
- if ( errors === null ) {
906
- errors = refetchReaderParams . errors ;
907
- } else if ( refetchReaderParams . errors ) {
908
- errors . push ( ...refetchReaderParams . errors ) ;
923
+ if ( refetchReaderParams . errors ) {
924
+ return {
925
+ kind : 'Success' ,
926
+ data : null ,
927
+ errors : refetchReaderParams . errors ,
928
+ } ;
909
929
}
910
930
911
931
const refetchQuery = nestedRefetchQueries [ refetchQueryIndex ] ;
@@ -919,7 +939,7 @@ export function readLinkedFieldData(
919
939
920
940
return {
921
941
kind : 'Success' ,
922
- errors,
942
+ errors : null ,
923
943
data : (
924
944
args ,
925
945
// TODO get the associated type for FetchOptions from the loadably selected field
@@ -994,15 +1014,7 @@ export function readLinkedFieldData(
994
1014
recordLink : data . recordLink ,
995
1015
} ;
996
1016
}
997
- if ( errors === null ) {
998
- errors = data . errors ;
999
- } else if ( data . errors ) {
1000
- errors . push ( ...data . errors ) ;
1001
- }
1002
- return {
1003
- ...data ,
1004
- errors : errors ,
1005
- } ;
1017
+ return data ;
1006
1018
}
1007
1019
1008
1020
export type NetworkRequestReaderOptions = {
@@ -1068,6 +1080,14 @@ export function readImperativelyLoadedField(
1068
1080
} ;
1069
1081
}
1070
1082
1083
+ if ( data . errors ) {
1084
+ return {
1085
+ kind : 'Success' ,
1086
+ data : null ,
1087
+ errors : data . errors ,
1088
+ } ;
1089
+ }
1090
+
1071
1091
const { refetchQueryIndex } = field ;
1072
1092
const refetchQuery = nestedRefetchQueries [ refetchQueryIndex ] ;
1073
1093
if ( refetchQuery == null ) {
@@ -1082,7 +1102,7 @@ export function readImperativelyLoadedField(
1082
1102
// use the resolver reader AST to get the resolver parameters.
1083
1103
return {
1084
1104
kind : 'Success' ,
1085
- errors : data . errors ,
1105
+ errors : null ,
1086
1106
data : ( args : any ) => [
1087
1107
// Stable id
1088
1108
root . __typename + ':' + root . __link + '__' + field . name ,
0 commit comments