@isograph/react 0.4.3 → 0.5.0

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.
Files changed (137) hide show
  1. package/.turbo/turbo-compile-libs.log +2 -2
  2. package/dist/core/FragmentReference.d.ts +4 -2
  3. package/dist/core/FragmentReference.d.ts.map +1 -1
  4. package/dist/core/FragmentReference.js +2 -2
  5. package/dist/core/IsographEnvironment.d.ts +19 -11
  6. package/dist/core/IsographEnvironment.d.ts.map +1 -1
  7. package/dist/core/IsographEnvironment.js +27 -2
  8. package/dist/core/PromiseWrapper.d.ts +13 -7
  9. package/dist/core/PromiseWrapper.d.ts.map +1 -1
  10. package/dist/core/brand.d.ts +17 -0
  11. package/dist/core/brand.d.ts.map +1 -1
  12. package/dist/core/cache.d.ts +10 -7
  13. package/dist/core/cache.d.ts.map +1 -1
  14. package/dist/core/cache.js +102 -74
  15. package/dist/core/check.d.ts +8 -4
  16. package/dist/core/check.d.ts.map +1 -1
  17. package/dist/core/check.js +10 -7
  18. package/dist/core/componentCache.d.ts +1 -1
  19. package/dist/core/componentCache.d.ts.map +1 -1
  20. package/dist/core/componentCache.js +6 -4
  21. package/dist/core/entrypoint.d.ts +17 -7
  22. package/dist/core/entrypoint.d.ts.map +1 -1
  23. package/dist/core/garbageCollection.d.ts +8 -2
  24. package/dist/core/garbageCollection.d.ts.map +1 -1
  25. package/dist/core/garbageCollection.js +36 -14
  26. package/dist/core/logging.d.ts +16 -3
  27. package/dist/core/logging.d.ts.map +1 -1
  28. package/dist/core/makeNetworkRequest.d.ts +4 -2
  29. package/dist/core/makeNetworkRequest.d.ts.map +1 -1
  30. package/dist/core/makeNetworkRequest.js +115 -38
  31. package/dist/core/optimisticProxy.d.ts +59 -0
  32. package/dist/core/optimisticProxy.d.ts.map +1 -0
  33. package/dist/core/optimisticProxy.js +399 -0
  34. package/dist/core/read.d.ts +3 -2
  35. package/dist/core/read.d.ts.map +1 -1
  36. package/dist/core/read.js +158 -123
  37. package/dist/core/reader.d.ts +7 -4
  38. package/dist/core/reader.d.ts.map +1 -1
  39. package/dist/core/startUpdate.d.ts +3 -2
  40. package/dist/core/startUpdate.d.ts.map +1 -1
  41. package/dist/core/startUpdate.js +33 -34
  42. package/dist/index.d.ts +2 -2
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +2 -1
  45. package/dist/loadable-hooks/useClientSideDefer.d.ts +9 -4
  46. package/dist/loadable-hooks/useClientSideDefer.d.ts.map +1 -1
  47. package/dist/loadable-hooks/useClientSideDefer.js +34 -1
  48. package/dist/loadable-hooks/useConnectionSpecPagination.d.ts +5 -3
  49. package/dist/loadable-hooks/useConnectionSpecPagination.d.ts.map +1 -1
  50. package/dist/loadable-hooks/useConnectionSpecPagination.js +27 -13
  51. package/dist/loadable-hooks/useImperativeLoadableField.d.ts +1 -1
  52. package/dist/loadable-hooks/useImperativeLoadableField.d.ts.map +1 -1
  53. package/dist/loadable-hooks/useSkipLimitPagination.d.ts +1 -1
  54. package/dist/loadable-hooks/useSkipLimitPagination.d.ts.map +1 -1
  55. package/dist/loadable-hooks/useSkipLimitPagination.js +1 -1
  56. package/dist/react/FragmentReader.d.ts +2 -1
  57. package/dist/react/FragmentReader.d.ts.map +1 -1
  58. package/dist/react/FragmentRenderer.d.ts +2 -1
  59. package/dist/react/FragmentRenderer.d.ts.map +1 -1
  60. package/dist/react/LoadableFieldReader.d.ts +9 -3
  61. package/dist/react/LoadableFieldReader.d.ts.map +1 -1
  62. package/dist/react/LoadableFieldReader.js +40 -1
  63. package/dist/react/LoadableFieldRenderer.d.ts +9 -3
  64. package/dist/react/LoadableFieldRenderer.d.ts.map +1 -1
  65. package/dist/react/LoadableFieldRenderer.js +36 -1
  66. package/dist/react/useImperativeReference.d.ts +4 -3
  67. package/dist/react/useImperativeReference.d.ts.map +1 -1
  68. package/dist/react/useImperativeReference.js +3 -5
  69. package/dist/react/useLazyReference.d.ts +2 -1
  70. package/dist/react/useLazyReference.d.ts.map +1 -1
  71. package/dist/react/useReadAndSubscribe.d.ts.map +1 -1
  72. package/dist/react/useReadAndSubscribe.js +1 -3
  73. package/dist/react/useResult.d.ts.map +1 -1
  74. package/dist/react/useResult.js +6 -5
  75. package/package.json +16 -17
  76. package/src/core/FragmentReference.ts +10 -4
  77. package/src/core/IsographEnvironment.ts +59 -13
  78. package/src/core/PromiseWrapper.ts +14 -7
  79. package/src/core/brand.ts +18 -0
  80. package/src/core/cache.ts +186 -91
  81. package/src/core/check.ts +21 -10
  82. package/src/core/componentCache.ts +8 -4
  83. package/src/core/entrypoint.ts +35 -6
  84. package/src/core/garbageCollection.ts +61 -19
  85. package/src/core/logging.ts +15 -3
  86. package/src/core/makeNetworkRequest.ts +307 -74
  87. package/src/core/optimisticProxy.ts +563 -0
  88. package/src/core/read.ts +233 -163
  89. package/src/core/reader.ts +10 -6
  90. package/src/core/startUpdate.ts +45 -30
  91. package/src/index.ts +2 -1
  92. package/src/loadable-hooks/useClientSideDefer.ts +76 -26
  93. package/src/loadable-hooks/useConnectionSpecPagination.ts +34 -17
  94. package/src/loadable-hooks/useImperativeLoadableField.ts +2 -2
  95. package/src/loadable-hooks/useSkipLimitPagination.ts +2 -3
  96. package/src/react/FragmentReader.tsx +3 -1
  97. package/src/react/FragmentRenderer.tsx +8 -1
  98. package/src/react/LoadableFieldReader.tsx +123 -12
  99. package/src/react/LoadableFieldRenderer.tsx +122 -12
  100. package/src/react/useImperativeReference.ts +20 -11
  101. package/src/react/useLazyReference.ts +17 -6
  102. package/src/react/useReadAndSubscribe.ts +1 -8
  103. package/src/react/useResult.ts +9 -11
  104. package/src/tests/__isograph/Node/asEconomist/resolver_reader.ts +1 -1
  105. package/src/tests/__isograph/Query/linkedUpdate/entrypoint.ts +3 -1
  106. package/src/tests/__isograph/Query/linkedUpdate/raw_response_type.ts +13 -0
  107. package/src/tests/__isograph/Query/linkedUpdate/resolver_reader.ts +1 -1
  108. package/src/tests/__isograph/Query/meName/entrypoint.ts +3 -1
  109. package/src/tests/__isograph/Query/meName/raw_response_type.ts +7 -0
  110. package/src/tests/__isograph/Query/meName/resolver_reader.ts +1 -1
  111. package/src/tests/__isograph/Query/meNameSuccessor/entrypoint.ts +3 -1
  112. package/src/tests/__isograph/Query/meNameSuccessor/raw_response_type.ts +14 -0
  113. package/src/tests/__isograph/Query/meNameSuccessor/resolver_reader.ts +1 -1
  114. package/src/tests/__isograph/Query/nodeField/entrypoint.ts +3 -1
  115. package/src/tests/__isograph/Query/nodeField/raw_response_type.ts +7 -0
  116. package/src/tests/__isograph/Query/nodeField/resolver_reader.ts +1 -1
  117. package/src/tests/__isograph/Query/normalizeUndefinedField/entrypoint.ts +33 -0
  118. package/src/tests/__isograph/Query/normalizeUndefinedField/normalization_ast.ts +25 -0
  119. package/src/tests/__isograph/Query/normalizeUndefinedField/output_type.ts +3 -0
  120. package/src/tests/__isograph/Query/normalizeUndefinedField/param_type.ts +9 -0
  121. package/src/tests/__isograph/Query/normalizeUndefinedField/query_text.ts +6 -0
  122. package/src/tests/__isograph/Query/normalizeUndefinedField/raw_response_type.ts +7 -0
  123. package/src/tests/__isograph/Query/normalizeUndefinedField/resolver_reader.ts +38 -0
  124. package/src/tests/__isograph/Query/startUpdate/entrypoint.ts +3 -1
  125. package/src/tests/__isograph/Query/startUpdate/raw_response_type.ts +8 -0
  126. package/src/tests/__isograph/Query/startUpdate/resolver_reader.ts +1 -1
  127. package/src/tests/__isograph/Query/subquery/entrypoint.ts +3 -1
  128. package/src/tests/__isograph/Query/subquery/raw_response_type.ts +9 -0
  129. package/src/tests/__isograph/Query/subquery/resolver_reader.ts +1 -1
  130. package/src/tests/__isograph/iso.ts +11 -1
  131. package/src/tests/garbageCollection.test.ts +8 -5
  132. package/src/tests/meNameSuccessor.ts +6 -3
  133. package/src/tests/nodeQuery.ts +4 -2
  134. package/src/tests/normalizeData.test.ts +89 -15
  135. package/src/tests/optimisticProxy.test.ts +860 -0
  136. package/src/tests/startUpdate.test.ts +7 -5
  137. package/src/tests/__isograph/Economist/__link/output_type.ts +0 -2
@@ -9,25 +9,43 @@ import { type LoadableField } from '../core/reader';
9
9
  import { useClientSideDefer } from '../loadable-hooks/useClientSideDefer';
10
10
  import { useResult } from './useResult';
11
11
 
12
+ type ArgsWithoutProvidedArgs<
13
+ TReadFromStore extends UnknownTReadFromStore,
14
+ TProvidedArgs extends object,
15
+ > = Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>;
16
+
17
+ type MaybeRequiredArgs<
18
+ TReadFromStore extends UnknownTReadFromStore,
19
+ TProvidedArgs extends object,
20
+ > =
21
+ {} extends ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs>
22
+ ? {
23
+ args?: ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs>;
24
+ }
25
+ : {
26
+ args: ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs>;
27
+ };
28
+
12
29
  export function LoadableFieldRenderer<
13
30
  TReadFromStore extends UnknownTReadFromStore,
14
31
  TProvidedArgs extends object,
15
32
  TChildrenResult,
16
33
  TProps,
17
- >(props: {
18
- loadableField: LoadableField<
19
- TReadFromStore,
20
- React.FC<TProps>,
21
- Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>
22
- >;
23
- // TODO we can improve this to not require args if its an empty object
24
- args: Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>;
25
- fetchOptions?: FetchOptions<React.FC<TProps>>;
26
- networkRequestOptions?: Partial<NetworkRequestReaderOptions>;
27
- additionalProps: Omit<TProps, keyof JSX.IntrinsicAttributes>;
28
- }): TChildrenResult {
34
+ >(
35
+ props: {
36
+ loadableField: LoadableField<
37
+ TReadFromStore,
38
+ React.FC<TProps>,
39
+ Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>
40
+ >;
41
+ fetchOptions?: FetchOptions<React.FC<TProps>, never>;
42
+ networkRequestOptions?: Partial<NetworkRequestReaderOptions>;
43
+ additionalProps: Omit<TProps, keyof JSX.IntrinsicAttributes>;
44
+ } & MaybeRequiredArgs<TReadFromStore, TProvidedArgs>,
45
+ ): TChildrenResult {
29
46
  const { fragmentReference } = useClientSideDefer(
30
47
  props.loadableField,
48
+ // @ts-expect-error
31
49
  props.args,
32
50
  props.fetchOptions,
33
51
  );
@@ -39,3 +57,95 @@ export function LoadableFieldRenderer<
39
57
  // @ts-expect-error
40
58
  return <Component {...props.additionalProps} />;
41
59
  }
60
+
61
+ // @ts-ignore
62
+ function tsTests() {
63
+ let neverArgs!: LoadableField<
64
+ {
65
+ parameters: Record<string, never>;
66
+ data: {};
67
+ },
68
+ () => React.ReactNode
69
+ >;
70
+
71
+ let optionalArgs!: LoadableField<
72
+ {
73
+ parameters: {
74
+ foo?: string;
75
+ };
76
+ data: {};
77
+ },
78
+ () => React.ReactNode
79
+ >;
80
+
81
+ let requiredArgs!: LoadableField<
82
+ {
83
+ parameters: {
84
+ foo: string;
85
+ };
86
+ data: {};
87
+ },
88
+ () => React.ReactNode
89
+ >;
90
+
91
+ <LoadableFieldRenderer loadableField={neverArgs} additionalProps={{}} />;
92
+ <LoadableFieldRenderer
93
+ loadableField={neverArgs}
94
+ additionalProps={{}}
95
+ args={{}}
96
+ />;
97
+ <LoadableFieldRenderer
98
+ loadableField={neverArgs}
99
+ additionalProps={{}}
100
+ args={{
101
+ // @ts-expect-error
102
+ foo: 'bar',
103
+ }}
104
+ />;
105
+
106
+ <LoadableFieldRenderer loadableField={optionalArgs} additionalProps={{}} />;
107
+ <LoadableFieldRenderer
108
+ loadableField={optionalArgs}
109
+ additionalProps={{}}
110
+ args={{}}
111
+ />;
112
+ <LoadableFieldRenderer
113
+ loadableField={optionalArgs}
114
+ additionalProps={{}}
115
+ args={{
116
+ foo: 'bar',
117
+ }}
118
+ />;
119
+ <LoadableFieldRenderer
120
+ loadableField={optionalArgs}
121
+ additionalProps={{}}
122
+ args={{
123
+ // @ts-expect-error
124
+ foo: 12,
125
+ }}
126
+ />;
127
+
128
+ // @ts-expect-error
129
+ <LoadableFieldRenderer loadableField={requiredArgs} additionalProps={{}} />;
130
+ <LoadableFieldRenderer
131
+ loadableField={requiredArgs}
132
+ additionalProps={{}}
133
+ // @ts-expect-error
134
+ args={{}}
135
+ />;
136
+ <LoadableFieldRenderer
137
+ loadableField={requiredArgs}
138
+ additionalProps={{}}
139
+ args={{
140
+ foo: 'bar',
141
+ }}
142
+ />;
143
+ <LoadableFieldRenderer
144
+ loadableField={requiredArgs}
145
+ additionalProps={{}}
146
+ args={{
147
+ // @ts-expect-error
148
+ foo: 12,
149
+ }}
150
+ />;
151
+ }
@@ -2,6 +2,7 @@ import {
2
2
  UNASSIGNED_STATE,
3
3
  useUpdatableDisposableState,
4
4
  } from '@isograph/react-disposable-state';
5
+ import type { NetworkResponseObject } from '../core/cache';
5
6
  import { FetchOptions, type RequiredFetchOptions } from '../core/check';
6
7
  import {
7
8
  IsographEntrypoint,
@@ -13,15 +14,18 @@ import {
13
14
  FragmentReference,
14
15
  type UnknownTReadFromStore,
15
16
  } from '../core/FragmentReference';
16
- import { ROOT_ID } from '../core/IsographEnvironment';
17
+ import {
18
+ getOrLoadReaderWithRefetchQueries,
19
+ ROOT_ID,
20
+ } from '../core/IsographEnvironment';
17
21
  import { maybeMakeNetworkRequest } from '../core/makeNetworkRequest';
18
- import { wrapPromise, wrapResolvedValue } from '../core/PromiseWrapper';
19
22
  import { useIsographEnvironment } from './IsographEnvironmentProvider';
20
23
 
21
24
  export type UseImperativeReferenceResult<
22
25
  TReadFromStore extends UnknownTReadFromStore,
23
26
  TClientFieldValue,
24
27
  TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
28
+ TRawResponseType,
25
29
  > = {
26
30
  fragmentReference: FragmentReference<
27
31
  TReadFromStore,
@@ -31,7 +35,7 @@ export type UseImperativeReferenceResult<
31
35
  variables: ExtractParameters<TReadFromStore>,
32
36
  ...[fetchOptions]: NormalizationAstLoader extends TNormalizationAst
33
37
  ? [fetchOptions: RequiredFetchOptions<TClientFieldValue>]
34
- : [fetchOptions?: FetchOptions<TClientFieldValue>]
38
+ : [fetchOptions?: FetchOptions<TClientFieldValue, TRawResponseType>]
35
39
  ) => void;
36
40
  };
37
41
 
@@ -39,16 +43,19 @@ export function useImperativeReference<
39
43
  TReadFromStore extends UnknownTReadFromStore,
40
44
  TClientFieldValue,
41
45
  TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
46
+ TRawResponseType extends NetworkResponseObject,
42
47
  >(
43
48
  entrypoint: IsographEntrypoint<
44
49
  TReadFromStore,
45
50
  TClientFieldValue,
46
- TNormalizationAst
51
+ TNormalizationAst,
52
+ TRawResponseType
47
53
  >,
48
54
  ): UseImperativeReferenceResult<
49
55
  TReadFromStore,
50
56
  TClientFieldValue,
51
- TNormalizationAst
57
+ TNormalizationAst,
58
+ TRawResponseType
52
59
  > {
53
60
  const { state, setState } =
54
61
  useUpdatableDisposableState<
@@ -59,13 +66,13 @@ export function useImperativeReference<
59
66
  fragmentReference: state !== UNASSIGNED_STATE ? state : null,
60
67
  loadFragmentReference: (
61
68
  variables: ExtractParameters<TReadFromStore>,
62
- fetchOptions?: FetchOptions<TClientFieldValue>,
69
+ fetchOptions?: FetchOptions<TClientFieldValue, TRawResponseType>,
63
70
  ) => {
64
- const readerWithRefetchQueries =
65
- entrypoint.readerWithRefetchQueries.kind ===
66
- 'ReaderWithRefetchQueriesLoader'
67
- ? wrapPromise(entrypoint.readerWithRefetchQueries.loader())
68
- : wrapResolvedValue(entrypoint.readerWithRefetchQueries);
71
+ const { fieldName, readerArtifactKind, readerWithRefetchQueries } =
72
+ getOrLoadReaderWithRefetchQueries(
73
+ environment,
74
+ entrypoint.readerWithRefetchQueries,
75
+ );
69
76
  const [networkRequest, disposeNetworkRequest] = maybeMakeNetworkRequest(
70
77
  environment,
71
78
  entrypoint,
@@ -77,6 +84,8 @@ export function useImperativeReference<
77
84
  {
78
85
  kind: 'FragmentReference',
79
86
  readerWithRefetchQueries,
87
+ fieldName,
88
+ readerArtifactKind,
80
89
  root: { __link: ROOT_ID, __typename: entrypoint.concreteType },
81
90
  variables,
82
91
  networkRequest,
@@ -1,5 +1,8 @@
1
1
  import { useLazyDisposableState } from '@isograph/react-disposable-state';
2
- import { getOrCreateCacheForArtifact } from '../core/cache';
2
+ import {
3
+ getOrCreateCacheForArtifact,
4
+ type NetworkResponseObject,
5
+ } from '../core/cache';
3
6
  import { FetchOptions, type RequiredFetchOptions } from '../core/check';
4
7
  import {
5
8
  IsographEntrypoint,
@@ -18,16 +21,18 @@ export function useLazyReference<
18
21
  TReadFromStore extends UnknownTReadFromStore,
19
22
  TClientFieldValue,
20
23
  TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
24
+ TRawResponseType extends NetworkResponseObject,
21
25
  >(
22
26
  entrypoint: IsographEntrypoint<
23
27
  TReadFromStore,
24
28
  TClientFieldValue,
25
- TNormalizationAst
29
+ TNormalizationAst,
30
+ TRawResponseType
26
31
  >,
27
32
  variables: ExtractParameters<TReadFromStore>,
28
33
  ...[fetchOptions]: TNormalizationAst extends NormalizationAstLoader
29
34
  ? [fetchOptions: RequiredFetchOptions<TClientFieldValue>]
30
- : [fetchOptions?: FetchOptions<TClientFieldValue>]
35
+ : [fetchOptions?: FetchOptions<TClientFieldValue, TRawResponseType>]
31
36
  ): NormalizationAst | NormalizationAstLoader extends TNormalizationAst
32
37
  ? unknown
33
38
  : {
@@ -57,12 +62,18 @@ export function useLazyReference<
57
62
 
58
63
  // @ts-ignore
59
64
  function tsTests() {
60
- let withAst!: IsographEntrypoint<any, unknown, NormalizationAst>;
61
- let withAstLoader!: IsographEntrypoint<any, unknown, NormalizationAstLoader>;
65
+ let withAst!: IsographEntrypoint<any, unknown, NormalizationAst, any>;
66
+ let withAstLoader!: IsographEntrypoint<
67
+ any,
68
+ unknown,
69
+ NormalizationAstLoader,
70
+ {}
71
+ >;
62
72
  let withAstOrLoader!: IsographEntrypoint<
63
73
  any,
64
74
  unknown,
65
- NormalizationAst | NormalizationAstLoader
75
+ NormalizationAst | NormalizationAstLoader,
76
+ {}
66
77
  >;
67
78
 
68
79
  useLazyReference(withAst, {}) satisfies {};
@@ -6,7 +6,6 @@ import {
6
6
  stableIdForFragmentReference,
7
7
  type UnknownTReadFromStore,
8
8
  } from '../core/FragmentReference';
9
- import { readPromise } from '../core/PromiseWrapper';
10
9
  import {
11
10
  NetworkRequestReaderOptions,
12
11
  readButDoNotEvaluate,
@@ -75,13 +74,7 @@ export function useSubscribeToMultiple<
75
74
  [
76
75
  items
77
76
  .map(({ fragmentReference }) => {
78
- const readerWithRefetchQueries = readPromise(
79
- fragmentReference.readerWithRefetchQueries,
80
- );
81
- stableIdForFragmentReference(
82
- fragmentReference,
83
- readerWithRefetchQueries.readerArtifact.fieldName,
84
- );
77
+ stableIdForFragmentReference(fragmentReference);
85
78
  })
86
79
  .join('.'),
87
80
  ],
@@ -28,25 +28,23 @@ export function useResult<
28
28
  partialNetworkRequestOptions,
29
29
  );
30
30
 
31
- maybeUnwrapNetworkRequest(
32
- fragmentReference.networkRequest,
33
- networkRequestOptions,
34
- );
35
- const readerWithRefetchQueries = readPromise(
36
- fragmentReference.readerWithRefetchQueries,
37
- );
38
-
39
- switch (readerWithRefetchQueries.readerArtifact.kind) {
31
+ switch (fragmentReference.readerArtifactKind) {
40
32
  case 'ComponentReaderArtifact': {
41
33
  // @ts-expect-error
42
34
  return getOrCreateCachedComponent(
43
35
  environment,
44
- readerWithRefetchQueries.readerArtifact.fieldName,
45
36
  fragmentReference,
46
37
  networkRequestOptions,
47
38
  );
48
39
  }
49
40
  case 'EagerReaderArtifact': {
41
+ maybeUnwrapNetworkRequest(
42
+ fragmentReference.networkRequest,
43
+ networkRequestOptions,
44
+ );
45
+ const readerWithRefetchQueries = readPromise(
46
+ fragmentReference.readerWithRefetchQueries,
47
+ );
50
48
  const data = useReadAndSubscribe(
51
49
  fragmentReference,
52
50
  networkRequestOptions,
@@ -60,12 +58,12 @@ export function useResult<
60
58
  startUpdate: getOrCreateCachedStartUpdate(
61
59
  environment,
62
60
  fragmentReference,
63
- readerWithRefetchQueries.readerArtifact.fieldName,
64
61
  networkRequestOptions,
65
62
  ),
66
63
  }
67
64
  : undefined),
68
65
  };
66
+ // @ts-expect-error
69
67
  return readerWithRefetchQueries.readerArtifact.resolver(param);
70
68
  }
71
69
  }
@@ -19,7 +19,7 @@ const artifact: EagerReaderArtifact<
19
19
  Link<"Economist"> | null
20
20
  > = {
21
21
  kind: "EagerReaderArtifact",
22
- fieldName: "Node.asEconomist",
22
+ fieldName: "asEconomist",
23
23
  resolver: ({ data }) => data.__typename === "Economist" ? data.__link : null,
24
24
  readerAst,
25
25
  hasUpdatable: false,
@@ -1,6 +1,7 @@
1
1
  import type {IsographEntrypoint, NormalizationAst, RefetchQueryNormalizationArtifactWrapper} from '@isograph/react';
2
2
  import {Query__linkedUpdate__param} from './param_type';
3
3
  import {Query__linkedUpdate__output_type} from './output_type';
4
+ import type {Query__linkedUpdate__raw_response_type} from './raw_response_type';
4
5
  import readerResolver from './resolver_reader';
5
6
  import queryText from './query_text';
6
7
  import normalizationAst from './normalization_ast';
@@ -9,7 +10,8 @@ const nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[] = [];
9
10
  const artifact: IsographEntrypoint<
10
11
  Query__linkedUpdate__param,
11
12
  Query__linkedUpdate__output_type,
12
- NormalizationAst
13
+ NormalizationAst,
14
+ Query__linkedUpdate__raw_response_type
13
15
  > = {
14
16
  kind: "Entrypoint",
15
17
  networkRequestInfo: {
@@ -0,0 +1,13 @@
1
+ export type Query__linkedUpdate__raw_response_type = {
2
+ node____id___l_0?: ({
3
+ __typename: "Economist",
4
+ id: string,
5
+ name: string,
6
+ } | null),
7
+ node____id___l_1?: ({
8
+ __typename: "Economist",
9
+ id: string,
10
+ name: string,
11
+ } | null),
12
+ }
13
+
@@ -84,7 +84,7 @@ const artifact: EagerReaderArtifact<
84
84
  Query__linkedUpdate__output_type
85
85
  > = {
86
86
  kind: "EagerReaderArtifact",
87
- fieldName: "Query.linkedUpdate",
87
+ fieldName: "linkedUpdate",
88
88
  resolver,
89
89
  readerAst,
90
90
  hasUpdatable: true,
@@ -1,6 +1,7 @@
1
1
  import type {IsographEntrypoint, NormalizationAst, RefetchQueryNormalizationArtifactWrapper} from '@isograph/react';
2
2
  import {Query__meName__param} from './param_type';
3
3
  import {Query__meName__output_type} from './output_type';
4
+ import type {Query__meName__raw_response_type} from './raw_response_type';
4
5
  import readerResolver from './resolver_reader';
5
6
  import queryText from './query_text';
6
7
  import normalizationAst from './normalization_ast';
@@ -9,7 +10,8 @@ const nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[] = [];
9
10
  const artifact: IsographEntrypoint<
10
11
  Query__meName__param,
11
12
  Query__meName__output_type,
12
- NormalizationAst
13
+ NormalizationAst,
14
+ Query__meName__raw_response_type
13
15
  > = {
14
16
  kind: "Entrypoint",
15
17
  networkRequestInfo: {
@@ -0,0 +1,7 @@
1
+ export type Query__meName__raw_response_type = {
2
+ me: {
3
+ id: string,
4
+ name: string,
5
+ },
6
+ }
7
+
@@ -29,7 +29,7 @@ const artifact: EagerReaderArtifact<
29
29
  Query__meName__output_type
30
30
  > = {
31
31
  kind: "EagerReaderArtifact",
32
- fieldName: "Query.meName",
32
+ fieldName: "meName",
33
33
  resolver,
34
34
  readerAst,
35
35
  hasUpdatable: false,
@@ -1,6 +1,7 @@
1
1
  import type {IsographEntrypoint, NormalizationAst, RefetchQueryNormalizationArtifactWrapper} from '@isograph/react';
2
2
  import {Query__meNameSuccessor__param} from './param_type';
3
3
  import {Query__meNameSuccessor__output_type} from './output_type';
4
+ import type {Query__meNameSuccessor__raw_response_type} from './raw_response_type';
4
5
  import readerResolver from './resolver_reader';
5
6
  import queryText from './query_text';
6
7
  import normalizationAst from './normalization_ast';
@@ -9,7 +10,8 @@ const nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[] = [];
9
10
  const artifact: IsographEntrypoint<
10
11
  Query__meNameSuccessor__param,
11
12
  Query__meNameSuccessor__output_type,
12
- NormalizationAst
13
+ NormalizationAst,
14
+ Query__meNameSuccessor__raw_response_type
13
15
  > = {
14
16
  kind: "Entrypoint",
15
17
  networkRequestInfo: {
@@ -0,0 +1,14 @@
1
+ export type Query__meNameSuccessor__raw_response_type = {
2
+ me: {
3
+ id: string,
4
+ name: string,
5
+ successor?: ({
6
+ id: string,
7
+ successor?: ({
8
+ id: string,
9
+ name: string,
10
+ } | null),
11
+ } | null),
12
+ },
13
+ }
14
+
@@ -58,7 +58,7 @@ const artifact: EagerReaderArtifact<
58
58
  Query__meNameSuccessor__output_type
59
59
  > = {
60
60
  kind: "EagerReaderArtifact",
61
- fieldName: "Query.meNameSuccessor",
61
+ fieldName: "meNameSuccessor",
62
62
  resolver,
63
63
  readerAst,
64
64
  hasUpdatable: false,
@@ -1,6 +1,7 @@
1
1
  import type {IsographEntrypoint, NormalizationAst, RefetchQueryNormalizationArtifactWrapper} from '@isograph/react';
2
2
  import {Query__nodeField__param} from './param_type';
3
3
  import {Query__nodeField__output_type} from './output_type';
4
+ import type {Query__nodeField__raw_response_type} from './raw_response_type';
4
5
  import readerResolver from './resolver_reader';
5
6
  import queryText from './query_text';
6
7
  import normalizationAst from './normalization_ast';
@@ -9,7 +10,8 @@ const nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[] = [];
9
10
  const artifact: IsographEntrypoint<
10
11
  Query__nodeField__param,
11
12
  Query__nodeField__output_type,
12
- NormalizationAst
13
+ NormalizationAst,
14
+ Query__nodeField__raw_response_type
13
15
  > = {
14
16
  kind: "Entrypoint",
15
17
  networkRequestInfo: {
@@ -0,0 +1,7 @@
1
+ export type Query__nodeField__raw_response_type = {
2
+ node____id___v_id?: ({
3
+ __typename: string,
4
+ id: string,
5
+ } | null),
6
+ }
7
+
@@ -34,7 +34,7 @@ const artifact: EagerReaderArtifact<
34
34
  Query__nodeField__output_type
35
35
  > = {
36
36
  kind: "EagerReaderArtifact",
37
- fieldName: "Query.nodeField",
37
+ fieldName: "nodeField",
38
38
  resolver,
39
39
  readerAst,
40
40
  hasUpdatable: false,
@@ -0,0 +1,33 @@
1
+ import type {IsographEntrypoint, NormalizationAst, RefetchQueryNormalizationArtifactWrapper} from '@isograph/react';
2
+ import {Query__normalizeUndefinedField__param} from './param_type';
3
+ import {Query__normalizeUndefinedField__output_type} from './output_type';
4
+ import type {Query__normalizeUndefinedField__raw_response_type} from './raw_response_type';
5
+ import readerResolver from './resolver_reader';
6
+ import queryText from './query_text';
7
+ import normalizationAst from './normalization_ast';
8
+ const nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[] = [];
9
+
10
+ const artifact: IsographEntrypoint<
11
+ Query__normalizeUndefinedField__param,
12
+ Query__normalizeUndefinedField__output_type,
13
+ NormalizationAst,
14
+ Query__normalizeUndefinedField__raw_response_type
15
+ > = {
16
+ kind: "Entrypoint",
17
+ networkRequestInfo: {
18
+ kind: "NetworkRequestInfo",
19
+ operation: {
20
+ kind: "Operation",
21
+ text: queryText,
22
+ },
23
+ normalizationAst,
24
+ },
25
+ concreteType: "Query",
26
+ readerWithRefetchQueries: {
27
+ kind: "ReaderWithRefetchQueries",
28
+ nestedRefetchQueries,
29
+ readerArtifact: readerResolver,
30
+ },
31
+ };
32
+
33
+ export default artifact;
@@ -0,0 +1,25 @@
1
+ import type {NormalizationAst} from '@isograph/react';
2
+ const normalizationAst: NormalizationAst = {
3
+ kind: "NormalizationAst",
4
+ selections: [
5
+ {
6
+ kind: "Linked",
7
+ fieldName: "me",
8
+ arguments: null,
9
+ concreteType: "Economist",
10
+ selections: [
11
+ {
12
+ kind: "Scalar",
13
+ fieldName: "id",
14
+ arguments: null,
15
+ },
16
+ {
17
+ kind: "Scalar",
18
+ fieldName: "name",
19
+ arguments: null,
20
+ },
21
+ ],
22
+ },
23
+ ],
24
+ };
25
+ export default normalizationAst;
@@ -0,0 +1,3 @@
1
+ import type React from 'react';
2
+ import { normalizeUndefinedField as resolver } from '../../../normalizeData.test';
3
+ export type Query__normalizeUndefinedField__output_type = ReturnType<typeof resolver>;
@@ -0,0 +1,9 @@
1
+
2
+ export type Query__normalizeUndefinedField__param = {
3
+ readonly data: {
4
+ readonly me: {
5
+ readonly name: string,
6
+ },
7
+ },
8
+ readonly parameters: Record<PropertyKey, never>,
9
+ };
@@ -0,0 +1,6 @@
1
+ export default 'query normalizeUndefinedField {\
2
+ me {\
3
+ id,\
4
+ name,\
5
+ },\
6
+ }';
@@ -0,0 +1,7 @@
1
+ export type Query__normalizeUndefinedField__raw_response_type = {
2
+ me: {
3
+ id: string,
4
+ name: string,
5
+ },
6
+ }
7
+
@@ -0,0 +1,38 @@
1
+ import type { EagerReaderArtifact, ReaderAst } from '@isograph/react';
2
+ import { Query__normalizeUndefinedField__param } from './param_type';
3
+ import { Query__normalizeUndefinedField__output_type } from './output_type';
4
+ import { normalizeUndefinedField as resolver } from '../../../normalizeData.test';
5
+
6
+ const readerAst: ReaderAst<Query__normalizeUndefinedField__param> = [
7
+ {
8
+ kind: "Linked",
9
+ fieldName: "me",
10
+ alias: null,
11
+ arguments: null,
12
+ condition: null,
13
+ isUpdatable: false,
14
+ refetchQueryIndex: null,
15
+ selections: [
16
+ {
17
+ kind: "Scalar",
18
+ fieldName: "name",
19
+ alias: null,
20
+ arguments: null,
21
+ isUpdatable: false,
22
+ },
23
+ ],
24
+ },
25
+ ];
26
+
27
+ const artifact: EagerReaderArtifact<
28
+ Query__normalizeUndefinedField__param,
29
+ Query__normalizeUndefinedField__output_type
30
+ > = {
31
+ kind: "EagerReaderArtifact",
32
+ fieldName: "normalizeUndefinedField",
33
+ resolver,
34
+ readerAst,
35
+ hasUpdatable: false,
36
+ };
37
+
38
+ export default artifact;