@isograph/react 0.3.0 → 0.4.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 (164) hide show
  1. package/.turbo/turbo-compile-libs.log +5 -0
  2. package/dist/core/FragmentReference.d.ts +17 -8
  3. package/dist/core/FragmentReference.d.ts.map +1 -1
  4. package/dist/core/FragmentReference.js +3 -12
  5. package/dist/core/IsographEnvironment.d.ts +30 -35
  6. package/dist/core/IsographEnvironment.d.ts.map +1 -1
  7. package/dist/core/IsographEnvironment.js +4 -0
  8. package/dist/core/PromiseWrapper.d.ts +6 -7
  9. package/dist/core/PromiseWrapper.d.ts.map +1 -1
  10. package/dist/core/PromiseWrapper.js +6 -12
  11. package/dist/core/areEqualWithDeepComparison.d.ts +1 -3
  12. package/dist/core/areEqualWithDeepComparison.d.ts.map +1 -1
  13. package/dist/core/areEqualWithDeepComparison.js +16 -2
  14. package/dist/core/brand.d.ts +2 -0
  15. package/dist/core/brand.d.ts.map +1 -0
  16. package/dist/core/brand.js +2 -0
  17. package/dist/core/cache.d.ts +16 -24
  18. package/dist/core/cache.d.ts.map +1 -1
  19. package/dist/core/cache.js +105 -72
  20. package/dist/core/check.d.ts +11 -7
  21. package/dist/core/check.d.ts.map +1 -1
  22. package/dist/core/check.js +2 -2
  23. package/dist/core/componentCache.d.ts +1 -1
  24. package/dist/core/componentCache.d.ts.map +1 -1
  25. package/dist/core/componentCache.js +27 -31
  26. package/dist/core/entrypoint.d.ts +43 -28
  27. package/dist/core/entrypoint.d.ts.map +1 -1
  28. package/dist/core/garbageCollection.d.ts +5 -6
  29. package/dist/core/garbageCollection.d.ts.map +1 -1
  30. package/dist/core/garbageCollection.js +1 -1
  31. package/dist/core/logging.d.ts +23 -15
  32. package/dist/core/logging.d.ts.map +1 -1
  33. package/dist/core/logging.js +8 -5
  34. package/dist/core/makeNetworkRequest.d.ts +5 -5
  35. package/dist/core/makeNetworkRequest.d.ts.map +1 -1
  36. package/dist/core/makeNetworkRequest.js +113 -28
  37. package/dist/core/read.d.ts +16 -11
  38. package/dist/core/read.d.ts.map +1 -1
  39. package/dist/core/read.js +468 -305
  40. package/dist/core/reader.d.ts +33 -37
  41. package/dist/core/reader.d.ts.map +1 -1
  42. package/dist/core/startUpdate.d.ts +8 -0
  43. package/dist/core/startUpdate.d.ts.map +1 -0
  44. package/dist/core/startUpdate.js +163 -0
  45. package/dist/core/util.d.ts +3 -0
  46. package/dist/core/util.d.ts.map +1 -1
  47. package/dist/index.d.ts +18 -15
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +9 -1
  50. package/dist/loadable-hooks/useClientSideDefer.d.ts +4 -10
  51. package/dist/loadable-hooks/useClientSideDefer.d.ts.map +1 -1
  52. package/dist/loadable-hooks/useClientSideDefer.js +2 -2
  53. package/dist/loadable-hooks/useConnectionSpecPagination.d.ts +8 -15
  54. package/dist/loadable-hooks/useConnectionSpecPagination.d.ts.map +1 -1
  55. package/dist/loadable-hooks/useConnectionSpecPagination.js +6 -4
  56. package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts +1 -2
  57. package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts.map +1 -1
  58. package/dist/loadable-hooks/useImperativeLoadableField.d.ts +4 -6
  59. package/dist/loadable-hooks/useImperativeLoadableField.d.ts.map +1 -1
  60. package/dist/loadable-hooks/useImperativeLoadableField.js +1 -1
  61. package/dist/loadable-hooks/useSkipLimitPagination.d.ts +6 -13
  62. package/dist/loadable-hooks/useSkipLimitPagination.d.ts.map +1 -1
  63. package/dist/loadable-hooks/useSkipLimitPagination.js +11 -9
  64. package/dist/react/FragmentReader.d.ts +7 -14
  65. package/dist/react/FragmentReader.d.ts.map +1 -1
  66. package/dist/react/FragmentReader.js +3 -30
  67. package/dist/react/FragmentRenderer.d.ts +15 -0
  68. package/dist/react/FragmentRenderer.d.ts.map +1 -0
  69. package/dist/react/FragmentRenderer.js +35 -0
  70. package/dist/react/IsographEnvironmentProvider.d.ts.map +1 -1
  71. package/dist/react/LoadableFieldReader.d.ts +12 -0
  72. package/dist/react/LoadableFieldReader.d.ts.map +1 -0
  73. package/dist/react/LoadableFieldReader.js +10 -0
  74. package/dist/react/LoadableFieldRenderer.d.ts +13 -0
  75. package/dist/react/LoadableFieldRenderer.d.ts.map +1 -0
  76. package/dist/react/LoadableFieldRenderer.js +37 -0
  77. package/dist/react/useImperativeReference.d.ts +7 -10
  78. package/dist/react/useImperativeReference.d.ts.map +1 -1
  79. package/dist/react/useImperativeReference.js +8 -9
  80. package/dist/react/useLazyReference.d.ts +4 -7
  81. package/dist/react/useLazyReference.d.ts.map +1 -1
  82. package/dist/react/useLazyReference.js +26 -5
  83. package/dist/react/useReadAndSubscribe.d.ts +3 -9
  84. package/dist/react/useReadAndSubscribe.d.ts.map +1 -1
  85. package/dist/react/useReadAndSubscribe.js +7 -3
  86. package/dist/react/useRerenderOnChange.d.ts +1 -1
  87. package/dist/react/useRerenderOnChange.d.ts.map +1 -1
  88. package/dist/react/useResult.d.ts +3 -6
  89. package/dist/react/useResult.d.ts.map +1 -1
  90. package/dist/react/useResult.js +10 -8
  91. package/isograph.config.json +1 -0
  92. package/package.json +6 -6
  93. package/src/core/FragmentReference.ts +40 -16
  94. package/src/core/IsographEnvironment.ts +57 -39
  95. package/src/core/PromiseWrapper.ts +15 -18
  96. package/src/core/areEqualWithDeepComparison.ts +22 -2
  97. package/src/core/brand.ts +18 -0
  98. package/src/core/cache.ts +153 -113
  99. package/src/core/check.ts +17 -12
  100. package/src/core/componentCache.ts +47 -50
  101. package/src/core/entrypoint.ts +66 -21
  102. package/src/core/garbageCollection.ts +9 -9
  103. package/src/core/logging.ts +39 -25
  104. package/src/core/makeNetworkRequest.ts +212 -34
  105. package/src/core/read.ts +728 -440
  106. package/src/core/reader.ts +46 -29
  107. package/src/core/startUpdate.ts +334 -0
  108. package/src/core/util.ts +4 -0
  109. package/src/index.ts +89 -8
  110. package/src/loadable-hooks/useClientSideDefer.ts +11 -10
  111. package/src/loadable-hooks/useConnectionSpecPagination.ts +27 -13
  112. package/src/loadable-hooks/useImperativeExposedMutationField.ts +1 -1
  113. package/src/loadable-hooks/useImperativeLoadableField.ts +10 -12
  114. package/src/loadable-hooks/useSkipLimitPagination.ts +38 -19
  115. package/src/react/FragmentReader.tsx +23 -39
  116. package/src/react/FragmentRenderer.tsx +46 -0
  117. package/src/react/IsographEnvironmentProvider.tsx +1 -1
  118. package/src/react/LoadableFieldReader.tsx +40 -0
  119. package/src/react/LoadableFieldRenderer.tsx +41 -0
  120. package/src/react/useImperativeReference.ts +49 -27
  121. package/src/react/useLazyReference.ts +62 -14
  122. package/src/react/useReadAndSubscribe.ts +17 -9
  123. package/src/react/useRerenderOnChange.ts +2 -2
  124. package/src/react/useResult.ts +22 -8
  125. package/src/tests/__isograph/Economist/link/output_type.ts +2 -0
  126. package/src/tests/__isograph/Node/asEconomist/resolver_reader.ts +28 -0
  127. package/src/tests/__isograph/Node/link/output_type.ts +3 -0
  128. package/src/tests/__isograph/Query/linkedUpdate/entrypoint.ts +31 -0
  129. package/src/tests/__isograph/Query/linkedUpdate/normalization_ast.ts +95 -0
  130. package/src/tests/__isograph/Query/linkedUpdate/output_type.ts +3 -0
  131. package/src/tests/__isograph/Query/linkedUpdate/param_type.ts +51 -0
  132. package/src/tests/__isograph/Query/linkedUpdate/query_text.ts +20 -0
  133. package/src/tests/__isograph/Query/linkedUpdate/resolver_reader.ts +93 -0
  134. package/src/tests/__isograph/Query/meName/entrypoint.ts +8 -29
  135. package/src/tests/__isograph/Query/meName/normalization_ast.ts +25 -0
  136. package/src/tests/__isograph/Query/meName/query_text.ts +6 -0
  137. package/src/tests/__isograph/Query/meName/resolver_reader.ts +5 -0
  138. package/src/tests/__isograph/Query/meNameSuccessor/entrypoint.ts +8 -67
  139. package/src/tests/__isograph/Query/meNameSuccessor/normalization_ast.ts +56 -0
  140. package/src/tests/__isograph/Query/meNameSuccessor/query_text.ts +13 -0
  141. package/src/tests/__isograph/Query/meNameSuccessor/resolver_reader.ts +10 -0
  142. package/src/tests/__isograph/Query/nodeField/entrypoint.ts +8 -34
  143. package/src/tests/__isograph/Query/nodeField/normalization_ast.ts +30 -0
  144. package/src/tests/__isograph/Query/nodeField/query_text.ts +6 -0
  145. package/src/tests/__isograph/Query/nodeField/resolver_reader.ts +5 -0
  146. package/src/tests/__isograph/Query/startUpdate/entrypoint.ts +31 -0
  147. package/src/tests/__isograph/Query/startUpdate/normalization_ast.ts +51 -0
  148. package/src/tests/__isograph/Query/startUpdate/output_type.ts +3 -0
  149. package/src/tests/__isograph/Query/startUpdate/param_type.ts +26 -0
  150. package/src/tests/__isograph/Query/startUpdate/parameters_type.ts +3 -0
  151. package/src/tests/__isograph/Query/startUpdate/query_text.ts +11 -0
  152. package/src/tests/__isograph/Query/startUpdate/resolver_reader.ts +55 -0
  153. package/src/tests/__isograph/Query/subquery/entrypoint.ts +8 -44
  154. package/src/tests/__isograph/Query/subquery/normalization_ast.ts +38 -0
  155. package/src/tests/__isograph/Query/subquery/query_text.ts +8 -0
  156. package/src/tests/__isograph/Query/subquery/resolver_reader.ts +7 -0
  157. package/src/tests/__isograph/iso.ts +24 -3
  158. package/src/tests/__isograph/tsconfig.json +8 -0
  159. package/src/tests/garbageCollection.test.ts +10 -8
  160. package/src/tests/meNameSuccessor.ts +1 -1
  161. package/src/tests/nodeQuery.ts +2 -1
  162. package/src/tests/normalizeData.test.ts +1 -2
  163. package/src/tests/startUpdate.test.ts +205 -0
  164. package/tsconfig.pkg.json +1 -2
@@ -1,32 +1,46 @@
1
+ import { useLazyDisposableState } from '@isograph/react-disposable-state';
2
+ import { getOrCreateCacheForArtifact } from '../core/cache';
3
+ import { FetchOptions, type RequiredFetchOptions } from '../core/check';
4
+ import {
5
+ IsographEntrypoint,
6
+ type NormalizationAst,
7
+ type NormalizationAstLoader,
8
+ } from '../core/entrypoint';
1
9
  import {
2
- FragmentReference,
3
10
  ExtractParameters,
11
+ FragmentReference,
12
+ type UnknownTReadFromStore,
4
13
  } from '../core/FragmentReference';
5
- import { useIsographEnvironment } from './IsographEnvironmentProvider';
6
- import { IsographEntrypoint } from '../core/entrypoint';
7
- import { getOrCreateCacheForArtifact } from '../core/cache';
8
- import { useLazyDisposableState } from '@isograph/react-disposable-state';
9
14
  import { logMessage } from '../core/logging';
10
- import { FetchOptions } from '../core/check';
15
+ import { useIsographEnvironment } from './IsographEnvironmentProvider';
11
16
 
12
17
  export function useLazyReference<
13
- TReadFromStore extends { parameters: object; data: object },
18
+ TReadFromStore extends UnknownTReadFromStore,
14
19
  TClientFieldValue,
20
+ TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
15
21
  >(
16
- entrypoint: IsographEntrypoint<TReadFromStore, TClientFieldValue>,
22
+ entrypoint: IsographEntrypoint<
23
+ TReadFromStore,
24
+ TClientFieldValue,
25
+ TNormalizationAst
26
+ >,
17
27
  variables: ExtractParameters<TReadFromStore>,
18
- fetchOptions?: FetchOptions,
19
- ): {
20
- fragmentReference: FragmentReference<TReadFromStore, TClientFieldValue>;
21
- } {
28
+ ...[fetchOptions]: TNormalizationAst extends NormalizationAstLoader
29
+ ? [fetchOptions: RequiredFetchOptions<TClientFieldValue>]
30
+ : [fetchOptions?: FetchOptions<TClientFieldValue>]
31
+ ): NormalizationAst | NormalizationAstLoader extends TNormalizationAst
32
+ ? unknown
33
+ : {
34
+ fragmentReference: FragmentReference<TReadFromStore, TClientFieldValue>;
35
+ } {
22
36
  const environment = useIsographEnvironment();
23
37
 
24
38
  if (entrypoint?.kind !== 'Entrypoint') {
25
39
  // TODO have a separate error logger
26
- logMessage(environment, {
40
+ logMessage(environment, () => ({
27
41
  kind: 'NonEntrypointReceived',
28
42
  entrypoint,
29
- });
43
+ }));
30
44
  }
31
45
 
32
46
  const cache = getOrCreateCacheForArtifact(
@@ -40,3 +54,37 @@ export function useLazyReference<
40
54
  fragmentReference: useLazyDisposableState(cache).state,
41
55
  };
42
56
  }
57
+
58
+ // @ts-ignore
59
+ function tsTests() {
60
+ let withAst!: IsographEntrypoint<any, unknown, NormalizationAst>;
61
+ let withAstLoader!: IsographEntrypoint<any, unknown, NormalizationAstLoader>;
62
+ let withAstOrLoader!: IsographEntrypoint<
63
+ any,
64
+ unknown,
65
+ NormalizationAst | NormalizationAstLoader
66
+ >;
67
+
68
+ useLazyReference(withAst, {}) satisfies {};
69
+ useLazyReference(withAst, {}, { shouldFetch: 'Yes' }) satisfies {};
70
+ useLazyReference(withAst, {}, { shouldFetch: 'IfNecessary' }) satisfies {};
71
+
72
+ // @ts-expect-error if there's no ast, require `shouldFetch` to be specified
73
+ useLazyReference(withAstLoader, {});
74
+ useLazyReference(withAstLoader, {}, { shouldFetch: 'Yes' }) satisfies {};
75
+ // @ts-expect-error if there's no ast, `shouldFetch` can't be `IfNecessary`
76
+ useLazyReference(withAstLoader, {}, { shouldFetch: 'IfNecessary' });
77
+
78
+ // if the type is unknown there can be no ast so we should use the same rules
79
+ // but because of TS bugs with inference we just return unknown
80
+ // @ts-expect-error this returns unknown which doesn't satisfy the constraint
81
+ useLazyReference(withAstOrLoader, {}) satisfies {};
82
+ // @ts-expect-error this returns unknown which doesn't satisfy the constraint
83
+ useLazyReference(withAstOrLoader, {}, { shouldFetch: 'Yes' }) satisfies {};
84
+ useLazyReference(
85
+ withAstOrLoader,
86
+ {},
87
+ { shouldFetch: 'IfNecessary' },
88
+ // @ts-expect-error this returns unknown which doesn't satisfy the constraint
89
+ ) satisfies {};
90
+ }
@@ -1,24 +1,26 @@
1
1
  import { useEffect, useState } from 'react';
2
+ import { subscribe } from '../core/cache';
2
3
  import {
4
+ ExtractData,
3
5
  FragmentReference,
4
6
  stableIdForFragmentReference,
5
- ExtractData,
7
+ type UnknownTReadFromStore,
6
8
  } from '../core/FragmentReference';
9
+ import { readPromise } from '../core/PromiseWrapper';
7
10
  import {
8
11
  NetworkRequestReaderOptions,
9
12
  readButDoNotEvaluate,
10
13
  WithEncounteredRecords,
11
14
  } from '../core/read';
12
- import { useRerenderOnChange } from './useRerenderOnChange';
13
- import { useIsographEnvironment } from './IsographEnvironmentProvider';
14
- import { subscribe } from '../core/cache';
15
15
  import type { ReaderAst } from '../core/reader';
16
+ import { useIsographEnvironment } from './IsographEnvironmentProvider';
17
+ import { useRerenderOnChange } from './useRerenderOnChange';
16
18
 
17
19
  /**
18
20
  * Read the data from a fragment reference and subscribe to updates.
19
21
  */
20
22
  export function useReadAndSubscribe<
21
- TReadFromStore extends { parameters: object; data: object },
23
+ TReadFromStore extends UnknownTReadFromStore,
22
24
  >(
23
25
  fragmentReference: FragmentReference<TReadFromStore, any>,
24
26
  networkRequestOptions: NetworkRequestReaderOptions,
@@ -38,7 +40,7 @@ export function useReadAndSubscribe<
38
40
  }
39
41
 
40
42
  export function useSubscribeToMultiple<
41
- TReadFromStore extends { parameters: object; data: object },
43
+ TReadFromStore extends UnknownTReadFromStore,
42
44
  >(
43
45
  items: ReadonlyArray<{
44
46
  records: WithEncounteredRecords<TReadFromStore>;
@@ -72,9 +74,15 @@ export function useSubscribeToMultiple<
72
74
  // TODO find out
73
75
  [
74
76
  items
75
- .map(({ fragmentReference }) =>
76
- stableIdForFragmentReference(fragmentReference),
77
- )
77
+ .map(({ fragmentReference }) => {
78
+ const readerWithRefetchQueries = readPromise(
79
+ fragmentReference.readerWithRefetchQueries,
80
+ );
81
+ stableIdForFragmentReference(
82
+ fragmentReference,
83
+ readerWithRefetchQueries.readerArtifact.fieldName,
84
+ );
85
+ })
78
86
  .join('.'),
79
87
  ],
80
88
  );
@@ -1,9 +1,9 @@
1
1
  import { useEffect } from 'react';
2
2
  import { subscribe } from '../core/cache';
3
- import { WithEncounteredRecords } from '../core/read';
4
3
  import { FragmentReference } from '../core/FragmentReference';
5
- import { useIsographEnvironment } from './IsographEnvironmentProvider';
4
+ import { WithEncounteredRecords } from '../core/read';
6
5
  import type { ReaderAst } from '../core/reader';
6
+ import { useIsographEnvironment } from './IsographEnvironmentProvider';
7
7
 
8
8
  // TODO add unit tests for this. Add integration tests that test
9
9
  // behavior when the encounteredRecords underneath a fragment change.
@@ -1,19 +1,23 @@
1
- import { useIsographEnvironment } from '../react/IsographEnvironmentProvider';
2
- import { FragmentReference } from '../core/FragmentReference';
3
1
  import { getOrCreateCachedComponent } from '../core/componentCache';
4
- import { useReadAndSubscribe } from './useReadAndSubscribe';
5
2
  import {
6
- getNetworkRequestOptionsWithDefaults,
7
- NetworkRequestReaderOptions,
8
- } from '../core/read';
3
+ FragmentReference,
4
+ type UnknownTReadFromStore,
5
+ } from '../core/FragmentReference';
9
6
  import {
10
7
  getPromiseState,
11
8
  PromiseWrapper,
12
9
  readPromise,
13
10
  } from '../core/PromiseWrapper';
11
+ import {
12
+ getNetworkRequestOptionsWithDefaults,
13
+ NetworkRequestReaderOptions,
14
+ } from '../core/read';
15
+ import { getOrCreateCachedStartUpdate } from '../core/startUpdate';
16
+ import { useIsographEnvironment } from '../react/IsographEnvironmentProvider';
17
+ import { useReadAndSubscribe } from './useReadAndSubscribe';
14
18
 
15
19
  export function useResult<
16
- TReadFromStore extends { parameters: object; data: object },
20
+ TReadFromStore extends UnknownTReadFromStore,
17
21
  TClientFieldValue,
18
22
  >(
19
23
  fragmentReference: FragmentReference<TReadFromStore, TClientFieldValue>,
@@ -37,7 +41,7 @@ export function useResult<
37
41
  // @ts-expect-error
38
42
  return getOrCreateCachedComponent(
39
43
  environment,
40
- readerWithRefetchQueries.readerArtifact.componentName,
44
+ readerWithRefetchQueries.readerArtifact.fieldName,
41
45
  fragmentReference,
42
46
  networkRequestOptions,
43
47
  );
@@ -51,6 +55,16 @@ export function useResult<
51
55
  const param = {
52
56
  data: data,
53
57
  parameters: fragmentReference.variables,
58
+ ...(readerWithRefetchQueries.readerArtifact.hasUpdatable
59
+ ? {
60
+ startUpdate: getOrCreateCachedStartUpdate(
61
+ environment,
62
+ fragmentReference,
63
+ readerWithRefetchQueries.readerArtifact.fieldName,
64
+ networkRequestOptions,
65
+ ),
66
+ }
67
+ : undefined),
54
68
  };
55
69
  return readerWithRefetchQueries.readerArtifact.resolver(param);
56
70
  }
@@ -0,0 +1,2 @@
1
+ import type { Link } from '@isograph/react';
2
+ export type Economist__link__output_type = Link<"Economist">;
@@ -0,0 +1,28 @@
1
+ import type { EagerReaderArtifact, ReaderAst, Link } from '@isograph/react';
2
+
3
+ const readerAst: ReaderAst<{ data: any, parameters: Record<PropertyKey, never> }> = [
4
+ {
5
+ kind: "Scalar",
6
+ fieldName: "__typename",
7
+ alias: null,
8
+ arguments: null,
9
+ isUpdatable: false,
10
+ },
11
+ {
12
+ kind: "Link",
13
+ alias: "link",
14
+ },
15
+ ];
16
+
17
+ const artifact: EagerReaderArtifact<
18
+ { data: any, parameters: Record<PropertyKey, never> },
19
+ Link<"Economist"> | null
20
+ > = {
21
+ kind: "EagerReaderArtifact",
22
+ fieldName: "Node.asEconomist",
23
+ resolver: ({ data }) => data.__typename === "Economist" ? data.link : null,
24
+ readerAst,
25
+ hasUpdatable: false,
26
+ };
27
+
28
+ export default artifact;
@@ -0,0 +1,3 @@
1
+ import type { Link } from '@isograph/react';
2
+ export type Node__link__output_type =
3
+ | Link<"Economist">;
@@ -0,0 +1,31 @@
1
+ import type {IsographEntrypoint, NormalizationAst, RefetchQueryNormalizationArtifactWrapper} from '@isograph/react';
2
+ import {Query__linkedUpdate__param} from './param_type';
3
+ import {Query__linkedUpdate__output_type} from './output_type';
4
+ import readerResolver from './resolver_reader';
5
+ import queryText from './query_text';
6
+ import normalizationAst from './normalization_ast';
7
+ const nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[] = [];
8
+
9
+ const artifact: IsographEntrypoint<
10
+ Query__linkedUpdate__param,
11
+ Query__linkedUpdate__output_type,
12
+ NormalizationAst
13
+ > = {
14
+ kind: "Entrypoint",
15
+ networkRequestInfo: {
16
+ kind: "NetworkRequestInfo",
17
+ operation: {
18
+ kind: "Operation",
19
+ text: queryText,
20
+ },
21
+ normalizationAst,
22
+ },
23
+ concreteType: "Query",
24
+ readerWithRefetchQueries: {
25
+ kind: "ReaderWithRefetchQueries",
26
+ nestedRefetchQueries,
27
+ readerArtifact: readerResolver,
28
+ },
29
+ };
30
+
31
+ export default artifact;
@@ -0,0 +1,95 @@
1
+ import type {NormalizationAst} from '@isograph/react';
2
+ const normalizationAst: NormalizationAst = {
3
+ kind: "NormalizationAst",
4
+ selections: [
5
+ {
6
+ kind: "Linked",
7
+ fieldName: "node",
8
+ arguments: [
9
+ [
10
+ "id",
11
+ { kind: "Literal", value: 0 },
12
+ ],
13
+ ],
14
+ concreteType: null,
15
+ selections: [
16
+ {
17
+ kind: "Scalar",
18
+ fieldName: "__typename",
19
+ arguments: null,
20
+ },
21
+ {
22
+ kind: "Scalar",
23
+ fieldName: "id",
24
+ arguments: null,
25
+ },
26
+ {
27
+ kind: "InlineFragment",
28
+ type: "Economist",
29
+ selections: [
30
+ {
31
+ kind: "Scalar",
32
+ fieldName: "__typename",
33
+ arguments: null,
34
+ },
35
+ {
36
+ kind: "Scalar",
37
+ fieldName: "id",
38
+ arguments: null,
39
+ },
40
+ {
41
+ kind: "Scalar",
42
+ fieldName: "name",
43
+ arguments: null,
44
+ },
45
+ ],
46
+ },
47
+ ],
48
+ },
49
+ {
50
+ kind: "Linked",
51
+ fieldName: "node",
52
+ arguments: [
53
+ [
54
+ "id",
55
+ { kind: "Literal", value: 1 },
56
+ ],
57
+ ],
58
+ concreteType: null,
59
+ selections: [
60
+ {
61
+ kind: "Scalar",
62
+ fieldName: "__typename",
63
+ arguments: null,
64
+ },
65
+ {
66
+ kind: "Scalar",
67
+ fieldName: "id",
68
+ arguments: null,
69
+ },
70
+ {
71
+ kind: "InlineFragment",
72
+ type: "Economist",
73
+ selections: [
74
+ {
75
+ kind: "Scalar",
76
+ fieldName: "__typename",
77
+ arguments: null,
78
+ },
79
+ {
80
+ kind: "Scalar",
81
+ fieldName: "id",
82
+ arguments: null,
83
+ },
84
+ {
85
+ kind: "Scalar",
86
+ fieldName: "name",
87
+ arguments: null,
88
+ },
89
+ ],
90
+ },
91
+ ],
92
+ },
93
+ ],
94
+ };
95
+ export default normalizationAst;
@@ -0,0 +1,3 @@
1
+ import type React from 'react';
2
+ import { linkedUpdate as resolver } from '../../../startUpdate.test';
3
+ export type Query__linkedUpdate__output_type = ReturnType<typeof resolver>;
@@ -0,0 +1,51 @@
1
+ import { type Node__link__output_type } from '../../Node/link/output_type';
2
+ import type { StartUpdate } from '@isograph/react';
3
+
4
+ export type Query__linkedUpdate__param = {
5
+ readonly data: {
6
+ readonly node: ({
7
+ /**
8
+ A client pointer for the Economist type.
9
+ */
10
+ readonly asEconomist: ({
11
+ readonly name: string,
12
+ } | null),
13
+ } | null),
14
+ readonly john_stuart_mill: ({
15
+ /**
16
+ A store Link for the Node type.
17
+ */
18
+ readonly link: Node__link__output_type,
19
+ /**
20
+ A client pointer for the Economist type.
21
+ */
22
+ readonly asEconomist: ({
23
+ readonly name: string,
24
+ } | null),
25
+ } | null),
26
+ },
27
+ readonly parameters: Record<PropertyKey, never>,
28
+ readonly startUpdate: StartUpdate<{
29
+ get node(): ({
30
+ /**
31
+ A client pointer for the Economist type.
32
+ */
33
+ readonly asEconomist: ({
34
+ name: string,
35
+ } | null),
36
+ } | null),
37
+ set node(value: ({ link: Node__link__output_type } | null)),
38
+ readonly john_stuart_mill: ({
39
+ /**
40
+ A store Link for the Node type.
41
+ */
42
+ readonly link: Node__link__output_type,
43
+ /**
44
+ A client pointer for the Economist type.
45
+ */
46
+ readonly asEconomist: ({
47
+ readonly name: string,
48
+ } | null),
49
+ } | null),
50
+ }>,
51
+ };
@@ -0,0 +1,20 @@
1
+ export default 'query linkedUpdate {\
2
+ node____id___l_0: node(id: 0) {\
3
+ __typename,\
4
+ id,\
5
+ ... on Economist {\
6
+ __typename,\
7
+ id,\
8
+ name,\
9
+ },\
10
+ },\
11
+ node____id___l_1: node(id: 1) {\
12
+ __typename,\
13
+ id,\
14
+ ... on Economist {\
15
+ __typename,\
16
+ id,\
17
+ name,\
18
+ },\
19
+ },\
20
+ }';
@@ -0,0 +1,93 @@
1
+ import type { EagerReaderArtifact, ReaderAst } from '@isograph/react';
2
+ import { Query__linkedUpdate__param } from './param_type';
3
+ import { Query__linkedUpdate__output_type } from './output_type';
4
+ import { linkedUpdate as resolver } from '../../../startUpdate.test';
5
+ import Node__asEconomist__resolver_reader from '../../Node/asEconomist/resolver_reader';
6
+
7
+ const readerAst: ReaderAst<Query__linkedUpdate__param> = [
8
+ {
9
+ kind: "Linked",
10
+ fieldName: "node",
11
+ alias: null,
12
+ arguments: [
13
+ [
14
+ "id",
15
+ { kind: "Literal", value: 0 },
16
+ ],
17
+ ],
18
+ condition: null,
19
+ isUpdatable: true,
20
+ selections: [
21
+ {
22
+ kind: "Linked",
23
+ fieldName: "asEconomist",
24
+ alias: null,
25
+ arguments: null,
26
+ condition: Node__asEconomist__resolver_reader,
27
+ isUpdatable: false,
28
+ selections: [
29
+ {
30
+ kind: "Scalar",
31
+ fieldName: "name",
32
+ alias: null,
33
+ arguments: null,
34
+ isUpdatable: true,
35
+ },
36
+ ],
37
+ refetchQueryIndex: null,
38
+ },
39
+ ],
40
+ refetchQueryIndex: null,
41
+ },
42
+ {
43
+ kind: "Linked",
44
+ fieldName: "node",
45
+ alias: "john_stuart_mill",
46
+ arguments: [
47
+ [
48
+ "id",
49
+ { kind: "Literal", value: 1 },
50
+ ],
51
+ ],
52
+ condition: null,
53
+ isUpdatable: false,
54
+ selections: [
55
+ {
56
+ kind: "Link",
57
+ alias: "link",
58
+ },
59
+ {
60
+ kind: "Linked",
61
+ fieldName: "asEconomist",
62
+ alias: null,
63
+ arguments: null,
64
+ condition: Node__asEconomist__resolver_reader,
65
+ isUpdatable: false,
66
+ selections: [
67
+ {
68
+ kind: "Scalar",
69
+ fieldName: "name",
70
+ alias: null,
71
+ arguments: null,
72
+ isUpdatable: false,
73
+ },
74
+ ],
75
+ refetchQueryIndex: null,
76
+ },
77
+ ],
78
+ refetchQueryIndex: null,
79
+ },
80
+ ];
81
+
82
+ const artifact: EagerReaderArtifact<
83
+ Query__linkedUpdate__param,
84
+ Query__linkedUpdate__output_type
85
+ > = {
86
+ kind: "EagerReaderArtifact",
87
+ fieldName: "Query.linkedUpdate",
88
+ resolver,
89
+ readerAst,
90
+ hasUpdatable: true,
91
+ };
92
+
93
+ export default artifact;
@@ -2,43 +2,22 @@ import type {IsographEntrypoint, NormalizationAst, RefetchQueryNormalizationArti
2
2
  import {Query__meName__param} from './param_type';
3
3
  import {Query__meName__output_type} from './output_type';
4
4
  import readerResolver from './resolver_reader';
5
+ import queryText from './query_text';
6
+ import normalizationAst from './normalization_ast';
5
7
  const nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[] = [];
6
8
 
7
- const queryText = 'query meName {\
8
- me {\
9
- id,\
10
- name,\
11
- },\
12
- }';
13
-
14
- const normalizationAst: NormalizationAst = [
15
- {
16
- kind: "Linked",
17
- fieldName: "me",
18
- arguments: null,
19
- concreteType: "Economist",
20
- selections: [
21
- {
22
- kind: "Scalar",
23
- fieldName: "id",
24
- arguments: null,
25
- },
26
- {
27
- kind: "Scalar",
28
- fieldName: "name",
29
- arguments: null,
30
- },
31
- ],
32
- },
33
- ];
34
9
  const artifact: IsographEntrypoint<
35
10
  Query__meName__param,
36
- Query__meName__output_type
11
+ Query__meName__output_type,
12
+ NormalizationAst
37
13
  > = {
38
14
  kind: "Entrypoint",
39
15
  networkRequestInfo: {
40
16
  kind: "NetworkRequestInfo",
41
- queryText,
17
+ operation: {
18
+ kind: "Operation",
19
+ text: queryText,
20
+ },
42
21
  normalizationAst,
43
22
  },
44
23
  concreteType: "Query",
@@ -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,6 @@
1
+ export default 'query meName {\
2
+ me {\
3
+ id,\
4
+ name,\
5
+ },\
6
+ }';
@@ -10,14 +10,17 @@ const readerAst: ReaderAst<Query__meName__param> = [
10
10
  alias: null,
11
11
  arguments: null,
12
12
  condition: null,
13
+ isUpdatable: false,
13
14
  selections: [
14
15
  {
15
16
  kind: "Scalar",
16
17
  fieldName: "name",
17
18
  alias: null,
18
19
  arguments: null,
20
+ isUpdatable: false,
19
21
  },
20
22
  ],
23
+ refetchQueryIndex: null,
21
24
  },
22
25
  ];
23
26
 
@@ -26,8 +29,10 @@ const artifact: EagerReaderArtifact<
26
29
  Query__meName__output_type
27
30
  > = {
28
31
  kind: "EagerReaderArtifact",
32
+ fieldName: "Query.meName",
29
33
  resolver,
30
34
  readerAst,
35
+ hasUpdatable: false,
31
36
  };
32
37
 
33
38
  export default artifact;