@isograph/react 0.2.0 → 0.3.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 (134) hide show
  1. package/dist/core/FragmentReference.d.ts +14 -4
  2. package/dist/core/FragmentReference.d.ts.map +1 -0
  3. package/dist/core/FragmentReference.js +2 -3
  4. package/dist/core/IsographEnvironment.d.ts +28 -10
  5. package/dist/core/IsographEnvironment.d.ts.map +1 -0
  6. package/dist/core/IsographEnvironment.js +15 -22
  7. package/dist/core/PromiseWrapper.d.ts +1 -0
  8. package/dist/core/PromiseWrapper.d.ts.map +1 -0
  9. package/dist/core/PromiseWrapper.js +4 -5
  10. package/dist/core/areEqualWithDeepComparison.d.ts +5 -3
  11. package/dist/core/areEqualWithDeepComparison.d.ts.map +1 -0
  12. package/dist/core/areEqualWithDeepComparison.js +73 -39
  13. package/dist/core/cache.d.ts +26 -10
  14. package/dist/core/cache.d.ts.map +1 -0
  15. package/dist/core/cache.js +160 -98
  16. package/dist/core/check.d.ts +18 -0
  17. package/dist/core/check.d.ts.map +1 -0
  18. package/dist/core/check.js +127 -0
  19. package/dist/core/componentCache.d.ts +1 -1
  20. package/dist/core/componentCache.d.ts.map +1 -0
  21. package/dist/core/componentCache.js +14 -14
  22. package/dist/core/entrypoint.d.ts +27 -8
  23. package/dist/core/entrypoint.d.ts.map +1 -0
  24. package/dist/core/entrypoint.js +1 -2
  25. package/dist/core/garbageCollection.d.ts +3 -1
  26. package/dist/core/garbageCollection.d.ts.map +1 -0
  27. package/dist/core/garbageCollection.js +48 -15
  28. package/dist/core/logging.d.ts +69 -0
  29. package/dist/core/logging.d.ts.map +1 -0
  30. package/dist/core/logging.js +19 -0
  31. package/dist/core/makeNetworkRequest.d.ts +4 -1
  32. package/dist/core/makeNetworkRequest.d.ts.map +1 -0
  33. package/dist/core/makeNetworkRequest.js +71 -15
  34. package/dist/core/read.d.ts +20 -5
  35. package/dist/core/read.d.ts.map +1 -0
  36. package/dist/core/read.js +104 -41
  37. package/dist/core/reader.d.ts +34 -10
  38. package/dist/core/reader.d.ts.map +1 -0
  39. package/dist/core/util.d.ts +2 -0
  40. package/dist/core/util.d.ts.map +1 -0
  41. package/dist/index.d.ts +10 -5
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +10 -2
  44. package/dist/loadable-hooks/useClientSideDefer.d.ts +15 -3
  45. package/dist/loadable-hooks/useClientSideDefer.d.ts.map +1 -0
  46. package/dist/loadable-hooks/useClientSideDefer.js +4 -6
  47. package/dist/loadable-hooks/useConnectionSpecPagination.d.ts +34 -0
  48. package/dist/loadable-hooks/useConnectionSpecPagination.d.ts.map +1 -0
  49. package/dist/loadable-hooks/useConnectionSpecPagination.js +160 -0
  50. package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts +1 -0
  51. package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts.map +1 -0
  52. package/dist/loadable-hooks/useImperativeExposedMutationField.js +1 -2
  53. package/dist/loadable-hooks/useImperativeLoadableField.d.ts +13 -5
  54. package/dist/loadable-hooks/useImperativeLoadableField.d.ts.map +1 -0
  55. package/dist/loadable-hooks/useImperativeLoadableField.js +3 -4
  56. package/dist/loadable-hooks/useSkipLimitPagination.d.ts +18 -24
  57. package/dist/loadable-hooks/useSkipLimitPagination.d.ts.map +1 -0
  58. package/dist/loadable-hooks/useSkipLimitPagination.js +88 -44
  59. package/dist/react/FragmentReader.d.ts +7 -4
  60. package/dist/react/FragmentReader.d.ts.map +1 -0
  61. package/dist/react/FragmentReader.js +4 -2
  62. package/dist/react/IsographEnvironmentProvider.d.ts +1 -0
  63. package/dist/react/IsographEnvironmentProvider.d.ts.map +1 -0
  64. package/dist/react/IsographEnvironmentProvider.js +3 -3
  65. package/dist/react/RenderAfterCommit__DO_NOT_USE.d.ts +10 -0
  66. package/dist/react/RenderAfterCommit__DO_NOT_USE.d.ts.map +1 -0
  67. package/dist/react/RenderAfterCommit__DO_NOT_USE.js +15 -0
  68. package/dist/react/useImperativeReference.d.ts +8 -3
  69. package/dist/react/useImperativeReference.d.ts.map +1 -0
  70. package/dist/react/useImperativeReference.js +4 -5
  71. package/dist/react/useLazyReference.d.ts +7 -2
  72. package/dist/react/useLazyReference.d.ts.map +1 -0
  73. package/dist/react/useLazyReference.js +11 -4
  74. package/dist/react/useReadAndSubscribe.d.ts +12 -3
  75. package/dist/react/useReadAndSubscribe.d.ts.map +1 -0
  76. package/dist/react/useReadAndSubscribe.js +6 -7
  77. package/dist/react/useRerenderOnChange.d.ts +6 -1
  78. package/dist/react/useRerenderOnChange.d.ts.map +1 -0
  79. package/dist/react/useRerenderOnChange.js +3 -4
  80. package/dist/react/useResult.d.ts +5 -1
  81. package/dist/react/useResult.d.ts.map +1 -0
  82. package/dist/react/useResult.js +8 -5
  83. package/{src/tests/isograph.config.json → isograph.config.json} +1 -1
  84. package/package.json +12 -8
  85. package/{src/tests/schema.graphql → schema.graphql} +1 -0
  86. package/src/core/FragmentReference.ts +17 -5
  87. package/src/core/IsographEnvironment.ts +38 -29
  88. package/src/core/areEqualWithDeepComparison.ts +76 -42
  89. package/src/core/cache.ts +237 -123
  90. package/src/core/check.ts +207 -0
  91. package/src/core/componentCache.ts +18 -17
  92. package/src/core/entrypoint.ts +15 -8
  93. package/src/core/garbageCollection.ts +71 -20
  94. package/src/core/logging.ts +116 -0
  95. package/src/core/makeNetworkRequest.ts +89 -13
  96. package/src/core/read.ts +162 -55
  97. package/src/core/reader.ts +40 -13
  98. package/src/core/util.ts +4 -0
  99. package/src/index.ts +14 -1
  100. package/src/loadable-hooks/useClientSideDefer.ts +45 -15
  101. package/src/loadable-hooks/useConnectionSpecPagination.ts +331 -0
  102. package/src/loadable-hooks/useImperativeLoadableField.ts +36 -10
  103. package/src/loadable-hooks/useSkipLimitPagination.ts +231 -90
  104. package/src/react/FragmentReader.tsx +13 -4
  105. package/src/react/RenderAfterCommit__DO_NOT_USE.tsx +17 -0
  106. package/src/react/useImperativeReference.ts +18 -7
  107. package/src/react/useLazyReference.ts +24 -4
  108. package/src/react/useReadAndSubscribe.ts +20 -5
  109. package/src/react/useRerenderOnChange.ts +6 -1
  110. package/src/react/useResult.ts +10 -2
  111. package/src/tests/__isograph/Query/meName/entrypoint.ts +7 -2
  112. package/src/tests/__isograph/Query/meName/param_type.ts +5 -2
  113. package/src/tests/__isograph/Query/meName/resolver_reader.ts +1 -0
  114. package/src/tests/__isograph/Query/meNameSuccessor/entrypoint.ts +9 -2
  115. package/src/tests/__isograph/Query/meNameSuccessor/param_type.ts +9 -6
  116. package/src/tests/__isograph/Query/meNameSuccessor/resolver_reader.ts +3 -0
  117. package/src/tests/__isograph/Query/nodeField/entrypoint.ts +13 -2
  118. package/src/tests/__isograph/Query/nodeField/param_type.ts +7 -3
  119. package/src/tests/__isograph/Query/nodeField/parameters_type.ts +3 -0
  120. package/src/tests/__isograph/Query/nodeField/resolver_reader.ts +1 -0
  121. package/src/tests/__isograph/Query/subquery/entrypoint.ts +67 -0
  122. package/src/tests/__isograph/Query/subquery/output_type.ts +3 -0
  123. package/src/tests/__isograph/Query/subquery/param_type.ts +12 -0
  124. package/src/tests/__isograph/Query/subquery/parameters_type.ts +3 -0
  125. package/src/tests/__isograph/Query/subquery/resolver_reader.ts +47 -0
  126. package/src/tests/__isograph/iso.ts +22 -11
  127. package/src/tests/garbageCollection.test.ts +45 -39
  128. package/src/tests/meNameSuccessor.ts +8 -3
  129. package/src/tests/nodeQuery.ts +6 -4
  130. package/src/tests/normalizeData.test.ts +120 -0
  131. package/src/tests/tsconfig.json +3 -3
  132. package/tsconfig.json +2 -2
  133. package/tsconfig.pkg.json +6 -1
  134. package/vitest.config.ts +20 -0
package/dist/core/read.js CHANGED
@@ -1,20 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getNetworkRequestOptionsWithDefaults = exports.readButDoNotEvaluate = void 0;
3
+ exports.readButDoNotEvaluate = readButDoNotEvaluate;
4
+ exports.getNetworkRequestOptionsWithDefaults = getNetworkRequestOptionsWithDefaults;
4
5
  const cache_1 = require("./cache");
5
6
  const componentCache_1 = require("./componentCache");
6
7
  const IsographEnvironment_1 = require("./IsographEnvironment");
7
8
  const makeNetworkRequest_1 = require("./makeNetworkRequest");
8
9
  const PromiseWrapper_1 = require("./PromiseWrapper");
10
+ const logging_1 = require("./logging");
9
11
  function readButDoNotEvaluate(environment, fragmentReference, networkRequestOptions) {
10
12
  var _a;
11
- const mutableEncounteredRecords = new Set();
13
+ const mutableEncounteredRecords = new Map();
12
14
  const readerWithRefetchQueries = (0, PromiseWrapper_1.readPromise)(fragmentReference.readerWithRefetchQueries);
13
15
  const response = readData(environment, readerWithRefetchQueries.readerArtifact.readerAst, fragmentReference.root, (_a = fragmentReference.variables) !== null && _a !== void 0 ? _a : {}, readerWithRefetchQueries.nestedRefetchQueries, fragmentReference.networkRequest, networkRequestOptions, mutableEncounteredRecords);
14
- // @ts-expect-error
15
- if (typeof window !== 'undefined' && window.__LOG) {
16
- console.log('done reading', { response });
17
- }
16
+ (0, logging_1.logMessage)(environment, {
17
+ kind: 'DoneReading',
18
+ response,
19
+ });
18
20
  if (response.kind === 'MissingData') {
19
21
  // There are two cases here that we care about:
20
22
  // 1. the network request is in flight, we haven't suspend on it, and we want
@@ -29,11 +31,11 @@ function readButDoNotEvaluate(environment, fragmentReference, networkRequestOpti
29
31
  networkRequestOptions.throwOnNetworkError) {
30
32
  // TODO assert that the network request state is not Err
31
33
  throw new Promise((resolve, reject) => {
32
- (0, cache_1.onNextChange)(environment).then(resolve);
34
+ (0, cache_1.onNextChangeToRecord)(environment, response.recordLink).then(resolve);
33
35
  fragmentReference.networkRequest.promise.catch(reject);
34
36
  });
35
37
  }
36
- throw (0, cache_1.onNextChange)(environment);
38
+ throw (0, cache_1.onNextChangeToRecord)(environment, response.recordLink);
37
39
  }
38
40
  else {
39
41
  return {
@@ -42,15 +44,16 @@ function readButDoNotEvaluate(environment, fragmentReference, networkRequestOpti
42
44
  };
43
45
  }
44
46
  }
45
- exports.readButDoNotEvaluate = readButDoNotEvaluate;
46
47
  function readData(environment, ast, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords) {
47
48
  var _a, _b, _c, _d, _e;
48
- mutableEncounteredRecords.add(root);
49
- let storeRecord = environment.store[root];
49
+ const encounteredIds = (0, cache_1.insertIfNotExists)(mutableEncounteredRecords, root.__typename);
50
+ encounteredIds.add(root.__link);
51
+ let storeRecord = (_a = environment.store[root.__typename]) === null || _a === void 0 ? void 0 : _a[root.__link];
50
52
  if (storeRecord === undefined) {
51
53
  return {
52
54
  kind: 'MissingData',
53
- reason: 'No record for root ' + root,
55
+ reason: 'No record for root ' + root.__link,
56
+ recordLink: root,
54
57
  };
55
58
  }
56
59
  if (storeRecord === null) {
@@ -71,10 +74,11 @@ function readData(environment, ast, root, variables, nestedRefetchQueries, netwo
71
74
  if (value === undefined) {
72
75
  return {
73
76
  kind: 'MissingData',
74
- reason: 'No value for ' + storeRecordName + ' on root ' + root,
77
+ reason: 'No value for ' + storeRecordName + ' on root ' + root.__link,
78
+ recordLink: root,
75
79
  };
76
80
  }
77
- target[(_a = field.alias) !== null && _a !== void 0 ? _a : field.fieldName] = value;
81
+ target[(_b = field.alias) !== null && _b !== void 0 ? _b : field.fieldName] = value;
78
82
  break;
79
83
  }
80
84
  case 'Linked': {
@@ -90,47 +94,85 @@ function readData(environment, ast, root, variables, nestedRefetchQueries, netwo
90
94
  reason: 'No link for ' +
91
95
  storeRecordName +
92
96
  ' on root ' +
93
- root +
97
+ root.__link +
94
98
  '. Link is ' +
95
99
  JSON.stringify(item),
100
+ recordLink: root,
96
101
  };
97
102
  }
98
103
  else if (link === null) {
99
104
  results.push(null);
100
105
  continue;
101
106
  }
102
- const result = readData(environment, field.selections, link.__link, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords);
107
+ const result = readData(environment, field.selections, link, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords);
103
108
  if (result.kind === 'MissingData') {
104
109
  return {
105
110
  kind: 'MissingData',
106
111
  reason: 'Missing data for ' +
107
112
  storeRecordName +
108
113
  ' on root ' +
109
- root +
114
+ root.__link +
110
115
  '. Link is ' +
111
116
  JSON.stringify(item),
112
117
  nestedReason: result,
118
+ recordLink: result.recordLink,
113
119
  };
114
120
  }
115
121
  results.push(result.data);
116
122
  }
117
- target[(_b = field.alias) !== null && _b !== void 0 ? _b : field.fieldName] = results;
123
+ target[(_c = field.alias) !== null && _c !== void 0 ? _c : field.fieldName] = results;
118
124
  break;
119
125
  }
120
126
  let link = (0, IsographEnvironment_1.assertLink)(value);
127
+ if (field.condition) {
128
+ const data = readData(environment, field.condition.readerAst, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords);
129
+ if (data.kind === 'MissingData') {
130
+ return {
131
+ kind: 'MissingData',
132
+ reason: 'Missing data for ' +
133
+ storeRecordName +
134
+ ' on root ' +
135
+ root.__link,
136
+ nestedReason: data,
137
+ recordLink: data.recordLink,
138
+ };
139
+ }
140
+ const condition = field.condition.resolver({
141
+ data: data.data,
142
+ parameters: {},
143
+ });
144
+ if (condition === true) {
145
+ link = root;
146
+ }
147
+ else if (condition === false) {
148
+ link = null;
149
+ }
150
+ else {
151
+ link = condition;
152
+ }
153
+ }
121
154
  if (link === undefined) {
122
155
  // TODO make this configurable, and also generated and derived from the schema
123
- const missingFieldHandler = (_c = environment.missingFieldHandler) !== null && _c !== void 0 ? _c : IsographEnvironment_1.defaultMissingFieldHandler;
124
- const altLink = missingFieldHandler(storeRecord, root, field.fieldName, field.arguments, variables);
156
+ const missingFieldHandler = environment.missingFieldHandler;
157
+ const altLink = missingFieldHandler === null || missingFieldHandler === void 0 ? void 0 : missingFieldHandler(storeRecord, root, field.fieldName, field.arguments, variables);
158
+ (0, logging_1.logMessage)(environment, {
159
+ kind: 'MissingFieldHandlerCalled',
160
+ root,
161
+ storeRecord,
162
+ fieldName: field.fieldName,
163
+ arguments: field.arguments,
164
+ variables,
165
+ });
125
166
  if (altLink === undefined) {
126
167
  return {
127
168
  kind: 'MissingData',
128
169
  reason: 'No link for ' +
129
170
  storeRecordName +
130
171
  ' on root ' +
131
- root +
172
+ root.__link +
132
173
  '. Link is ' +
133
174
  JSON.stringify(value),
175
+ recordLink: root,
134
176
  };
135
177
  }
136
178
  else {
@@ -141,13 +183,14 @@ function readData(environment, ast, root, variables, nestedRefetchQueries, netwo
141
183
  target[(_d = field.alias) !== null && _d !== void 0 ? _d : field.fieldName] = null;
142
184
  break;
143
185
  }
144
- const targetId = link.__link;
186
+ const targetId = link;
145
187
  const data = readData(environment, field.selections, targetId, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords);
146
188
  if (data.kind === 'MissingData') {
147
189
  return {
148
190
  kind: 'MissingData',
149
- reason: 'Missing data for ' + storeRecordName + ' on root ' + root,
191
+ reason: 'Missing data for ' + storeRecordName + ' on root ' + root.__link,
150
192
  nestedReason: data,
193
+ recordLink: data.recordLink,
151
194
  };
152
195
  }
153
196
  target[(_e = field.alias) !== null && _e !== void 0 ? _e : field.fieldName] = data.data;
@@ -165,23 +208,24 @@ function readData(environment, ast, root, variables, nestedRefetchQueries, netwo
165
208
  if (data.kind === 'MissingData') {
166
209
  return {
167
210
  kind: 'MissingData',
168
- reason: 'Missing data for ' + field.alias + ' on root ' + root,
211
+ reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,
169
212
  nestedReason: data,
213
+ recordLink: data.recordLink,
170
214
  };
171
215
  }
172
216
  else {
173
217
  const refetchQueryIndex = field.refetchQuery;
174
- if (refetchQueryIndex == null) {
175
- throw new Error('refetchQuery is null in RefetchField');
176
- }
177
218
  const refetchQuery = nestedRefetchQueries[refetchQueryIndex];
219
+ if (refetchQuery == null) {
220
+ throw new Error('refetchQuery is null in RefetchField. This is indicative of a bug in Isograph.');
221
+ }
178
222
  const refetchQueryArtifact = refetchQuery.artifact;
179
223
  const allowedVariables = refetchQuery.allowedVariables;
180
224
  // Second, we allow the user to call the resolver, which will ultimately
181
225
  // use the resolver reader AST to get the resolver parameters.
182
226
  target[field.alias] = (args) => [
183
227
  // Stable id
184
- root + '__' + field.name,
228
+ root.__link + '__' + field.name,
185
229
  // Fetcher
186
230
  field.refetchReaderArtifact.resolver(environment, refetchQueryArtifact, data.data, filterVariables(Object.assign(Object.assign({}, args), variables), allowedVariables), root,
187
231
  // TODO these params should be removed
@@ -192,19 +236,31 @@ function readData(environment, ast, root, variables, nestedRefetchQueries, netwo
192
236
  }
193
237
  case 'Resolver': {
194
238
  const usedRefetchQueries = field.usedRefetchQueries;
195
- const resolverRefetchQueries = usedRefetchQueries.map((index) => nestedRefetchQueries[index]);
239
+ const resolverRefetchQueries = usedRefetchQueries.map((index) => {
240
+ const resolverRefetchQuery = nestedRefetchQueries[index];
241
+ if (resolverRefetchQuery == null) {
242
+ throw new Error('resolverRefetchQuery is null in Resolver. This is indicative of a bug in Isograph.');
243
+ }
244
+ return resolverRefetchQuery;
245
+ });
196
246
  switch (field.readerArtifact.kind) {
197
247
  case 'EagerReaderArtifact': {
198
- const data = readData(environment, field.readerArtifact.readerAst, root, variables, resolverRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords);
248
+ const data = readData(environment, field.readerArtifact.readerAst, root, generateChildVariableMap(variables, field.arguments), resolverRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords);
199
249
  if (data.kind === 'MissingData') {
200
250
  return {
201
251
  kind: 'MissingData',
202
- reason: 'Missing data for ' + field.alias + ' on root ' + root,
252
+ reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,
203
253
  nestedReason: data,
254
+ recordLink: data.recordLink,
204
255
  };
205
256
  }
206
257
  else {
207
- target[field.alias] = field.readerArtifact.resolver(data.data);
258
+ const firstParameter = {
259
+ data: data.data,
260
+ parameters: variables,
261
+ };
262
+ target[field.alias] =
263
+ field.readerArtifact.resolver(firstParameter);
208
264
  }
209
265
  break;
210
266
  }
@@ -237,12 +293,13 @@ function readData(environment, ast, root, variables, nestedRefetchQueries, netwo
237
293
  if (refetchReaderParams.kind === 'MissingData') {
238
294
  return {
239
295
  kind: 'MissingData',
240
- reason: 'Missing data for ' + field.alias + ' on root ' + root,
296
+ reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,
241
297
  nestedReason: refetchReaderParams,
298
+ recordLink: refetchReaderParams.recordLink,
242
299
  };
243
300
  }
244
301
  else {
245
- target[field.alias] = (args) => {
302
+ target[field.alias] = (args, fetchOptions) => {
246
303
  // TODO we should use the reader AST for this
247
304
  const includeReadOutData = (variables, readOutData) => {
248
305
  variables.id = readOutData.id;
@@ -252,7 +309,9 @@ function readData(environment, ast, root, variables, nestedRefetchQueries, netwo
252
309
  writeQueryArgsToVariables(localVariables, field.queryArguments, variables);
253
310
  return [
254
311
  // Stable id
255
- root +
312
+ root.__typename +
313
+ ':' +
314
+ root.__link +
256
315
  '/' +
257
316
  field.name +
258
317
  '/' +
@@ -260,7 +319,7 @@ function readData(environment, ast, root, variables, nestedRefetchQueries, netwo
260
319
  // Fetcher
261
320
  () => {
262
321
  const fragmentReferenceAndDisposeFromEntrypoint = (entrypoint) => {
263
- const [networkRequest, disposeNetworkRequest] = (0, makeNetworkRequest_1.makeNetworkRequest)(environment, entrypoint, localVariables);
322
+ const [networkRequest, disposeNetworkRequest] = (0, makeNetworkRequest_1.maybeMakeNetworkRequest)(environment, entrypoint, localVariables, fetchOptions);
264
323
  const fragmentReference = {
265
324
  kind: 'FragmentReference',
266
325
  readerWithRefetchQueries: (0, PromiseWrapper_1.wrapResolvedValue)({
@@ -270,7 +329,7 @@ function readData(environment, ast, root, variables, nestedRefetchQueries, netwo
270
329
  .nestedRefetchQueries,
271
330
  }),
272
331
  // TODO localVariables is not guaranteed to have an id field
273
- root: localVariables.id,
332
+ root,
274
333
  variables: localVariables,
275
334
  networkRequest,
276
335
  };
@@ -290,7 +349,7 @@ function readData(environment, ast, root, variables, nestedRefetchQueries, netwo
290
349
  let entrypointLoaderState = { kind: 'EntrypointNotLoaded' };
291
350
  const networkRequest = (0, PromiseWrapper_1.wrapPromise)(isographArtifactPromiseWrapper.promise.then((entrypoint) => {
292
351
  if (entrypointLoaderState.kind === 'EntrypointNotLoaded') {
293
- const [networkRequest, disposeNetworkRequest] = (0, makeNetworkRequest_1.makeNetworkRequest)(environment, entrypoint, localVariables);
352
+ const [networkRequest, disposeNetworkRequest] = (0, makeNetworkRequest_1.maybeMakeNetworkRequest)(environment, entrypoint, localVariables, fetchOptions);
294
353
  entrypointLoaderState = {
295
354
  kind: 'NetworkRequestStarted',
296
355
  disposeNetworkRequest,
@@ -303,7 +362,7 @@ function readData(environment, ast, root, variables, nestedRefetchQueries, netwo
303
362
  kind: 'FragmentReference',
304
363
  readerWithRefetchQueries: (0, PromiseWrapper_1.wrapPromise)(readerWithRefetchPromise),
305
364
  // TODO localVariables is not guaranteed to have an id field
306
- root: localVariables.id,
365
+ root,
307
366
  variables: localVariables,
308
367
  networkRequest,
309
368
  };
@@ -353,7 +412,12 @@ function generateChildVariableMap(variables, fieldArguments) {
353
412
  const childVars = {};
354
413
  for (const [name, value] of fieldArguments) {
355
414
  if (value.kind === 'Variable') {
356
- childVars[name] = variables[value.name];
415
+ const variable = variables[value.name];
416
+ // Variable could be null if it was not provided but has a default case,
417
+ // so we allow the loop to continue rather than throwing an error.
418
+ if (variable != null) {
419
+ childVars[name] = variable;
420
+ }
357
421
  }
358
422
  else {
359
423
  childVars[name] = value.value;
@@ -398,7 +462,6 @@ function getNetworkRequestOptionsWithDefaults(networkRequestOptions) {
398
462
  throwOnNetworkError: (_b = networkRequestOptions === null || networkRequestOptions === void 0 ? void 0 : networkRequestOptions.throwOnNetworkError) !== null && _b !== void 0 ? _b : true,
399
463
  };
400
464
  }
401
- exports.getNetworkRequestOptionsWithDefaults = getNetworkRequestOptionsWithDefaults;
402
465
  // TODO use a description of the params for this?
403
466
  // TODO call stableStringifyArgs on the variable values, as well.
404
467
  // This doesn't matter for now, since we are just using primitive values
@@ -1,25 +1,41 @@
1
- /// <reference types="react" />
2
1
  import { Factory } from '@isograph/disposable-types';
3
- import { FragmentReference } from './FragmentReference';
4
- import { ComponentOrFieldName, DataId, IsographEnvironment } from './IsographEnvironment';
2
+ import { FragmentReference, ExtractParameters, ExtractData } from './FragmentReference';
3
+ import { ComponentOrFieldName, IsographEnvironment, type Link } from './IsographEnvironment';
5
4
  import { IsographEntrypoint, IsographEntrypointLoader, RefetchQueryNormalizationArtifact, RefetchQueryNormalizationArtifactWrapper } from './entrypoint';
6
5
  import { Arguments } from './util';
7
- export type TopLevelReaderArtifact<TReadFromStore extends Object, TClientFieldValue, TComponentProps extends Record<string, never>> = EagerReaderArtifact<TReadFromStore, TClientFieldValue> | ComponentReaderArtifact<TReadFromStore, TComponentProps>;
8
- export type EagerReaderArtifact<TReadFromStore extends Object, TClientFieldValue> = {
6
+ import { FetchOptions } from './check';
7
+ export type TopLevelReaderArtifact<TReadFromStore extends {
8
+ parameters: object;
9
+ data: object;
10
+ }, TClientFieldValue, TComponentProps extends Record<PropertyKey, never>> = EagerReaderArtifact<TReadFromStore, TClientFieldValue> | ComponentReaderArtifact<TReadFromStore, TComponentProps>;
11
+ export type EagerReaderArtifact<TReadFromStore extends {
12
+ parameters: object;
13
+ data: object;
14
+ }, TClientFieldValue> = {
9
15
  readonly kind: 'EagerReaderArtifact';
10
16
  readonly readerAst: ReaderAst<TReadFromStore>;
11
- readonly resolver: (data: TReadFromStore) => TClientFieldValue;
17
+ readonly resolver: (data: ResolverFirstParameter<TReadFromStore>) => TClientFieldValue;
12
18
  };
13
- export type ComponentReaderArtifact<TReadFromStore extends Object, TComponentProps extends Record<string, unknown> = Record<string, never>> = {
19
+ export type ComponentReaderArtifact<TReadFromStore extends {
20
+ parameters: object;
21
+ data: object;
22
+ }, TComponentProps extends Record<string, unknown> = Record<PropertyKey, never>> = {
14
23
  readonly kind: 'ComponentReaderArtifact';
15
24
  readonly componentName: ComponentOrFieldName;
16
25
  readonly readerAst: ReaderAst<TReadFromStore>;
17
- readonly resolver: (data: TReadFromStore, runtimeProps: TComponentProps) => React.ReactNode;
26
+ readonly resolver: (data: ResolverFirstParameter<TReadFromStore>, runtimeProps: TComponentProps) => React.ReactNode;
27
+ };
28
+ export type ResolverFirstParameter<TReadFromStore extends {
29
+ data: object;
30
+ parameters: object;
31
+ }> = {
32
+ data: ExtractData<TReadFromStore>;
33
+ parameters: ExtractParameters<TReadFromStore>;
18
34
  };
19
35
  export type RefetchReaderArtifact = {
20
36
  readonly kind: 'RefetchReaderArtifact';
21
37
  readonly readerAst: ReaderAst<unknown>;
22
- readonly resolver: (environment: IsographEnvironment, artifact: RefetchQueryNormalizationArtifact, variables: any, filteredVariables: any, rootId: DataId, readerArtifact: TopLevelReaderArtifact<any, any, any> | null, nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[]) => () => void;
38
+ readonly resolver: (environment: IsographEnvironment, artifact: RefetchQueryNormalizationArtifact, variables: any, filteredVariables: any, rootLink: Link, readerArtifact: TopLevelReaderArtifact<any, any, any> | null, nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[]) => () => void;
23
39
  };
24
40
  export type ReaderAstNode = ReaderScalarField | ReaderLinkedField | ReaderNonLoadableResolverField | ReaderImperativelyLoadedField | ReaderLoadableField;
25
41
  export type ReaderAst<TReadFromStore> = ReadonlyArray<ReaderAstNode>;
@@ -35,6 +51,10 @@ export type ReaderLinkedField = {
35
51
  readonly alias: string | null;
36
52
  readonly selections: ReaderAst<unknown>;
37
53
  readonly arguments: Arguments | null;
54
+ readonly condition: EagerReaderArtifact<{
55
+ data: object;
56
+ parameters: object;
57
+ }, boolean | Link | null> | null;
38
58
  };
39
59
  export type ReaderNonLoadableResolverField = {
40
60
  readonly kind: 'Resolver';
@@ -59,5 +79,9 @@ export type ReaderLoadableField = {
59
79
  readonly entrypoint: IsographEntrypoint<any, any> | IsographEntrypointLoader<any, any>;
60
80
  };
61
81
  type StableId = string;
62
- export type LoadableField<TArgs, TResult> = (args: TArgs) => [StableId, Factory<FragmentReference<any, TResult>>];
82
+ export type LoadableField<TReadFromStore extends {
83
+ data: object;
84
+ parameters: object;
85
+ }, TResult, TArgs = ExtractParameters<TReadFromStore>> = (args: TArgs | void, fetchOptions: FetchOptions) => [StableId, Factory<FragmentReference<TReadFromStore, TResult>>];
63
86
  export {};
87
+ //# sourceMappingURL=reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../src/core/reader.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export type ExtractSecondParam<T extends (arg1: any, arg2: any) => any> = T extends (arg1: any, arg2: infer P) => any ? P : never;
2
+ export type CombineWithIntrinsicAttributes<T> = T extends Record<PropertyKey, never> ? JSX.IntrinsicAttributes : T & JSX.IntrinsicAttributes;
2
3
  export type Arguments = Argument[];
3
4
  export type Argument = [ArgumentName, ArgumentValue];
4
5
  export type ArgumentName = string;
@@ -15,3 +16,4 @@ export type ArgumentValue = {
15
16
  readonly kind: 'Enum';
16
17
  readonly value: string;
17
18
  };
19
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/core/util.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK,GAAG,IACpE,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;AAC1D,MAAM,MAAM,8BAA8B,CAAC,CAAC,IAC1C,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,GAChC,GAAG,CAAC,mBAAmB,GACvB,CAAC,GAAG,GAAG,CAAC,mBAAmB,CAAC;AAElC,MAAM,MAAM,SAAS,GAAG,QAAQ,EAAE,CAAC;AACnC,MAAM,MAAM,QAAQ,GAAG,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AACrD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAClC,MAAM,MAAM,aAAa,GACrB;IACE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;CACrB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -2,12 +2,14 @@ export { retainQuery, unretainQuery, type RetainedQuery, garbageCollectEnvironme
2
2
  export { type PromiseWrapper, readPromise, getPromiseState, wrapResolvedValue, wrapPromise, } from './core/PromiseWrapper';
3
3
  export { subscribe, normalizeData } from './core/cache';
4
4
  export { makeNetworkRequest } from './core/makeNetworkRequest';
5
- export { ROOT_ID, type DataId, type DataTypeValue, type IsographEnvironment, type IsographNetworkFunction, type IsographStore, type Link, type StoreRecord, createIsographEnvironment, createIsographStore, defaultMissingFieldHandler, } from './core/IsographEnvironment';
6
- export { type EagerReaderArtifact, type ComponentReaderArtifact, type RefetchReaderArtifact, type ReaderAst, type ReaderAstNode, type ReaderLinkedField, type ReaderNonLoadableResolverField, type ReaderScalarField, type TopLevelReaderArtifact, type LoadableField, } from './core/reader';
7
- export { type NormalizationAst, type NormalizationAstNode, type NormalizationLinkedField, type NormalizationScalarField, type IsographEntrypoint, assertIsEntrypoint, type RefetchQueryNormalizationArtifact, type RefetchQueryNormalizationArtifactWrapper, type ExtractProps, type ExtractReadFromStore, type ExtractResolverResult, } from './core/entrypoint';
5
+ export { ROOT_ID, type DataId, type DataTypeValue, type IsographEnvironment, type IsographNetworkFunction, type IsographStore, type Link, type StoreRecord, createIsographEnvironment, createIsographStore, } from './core/IsographEnvironment';
6
+ export { type EagerReaderArtifact, type ComponentReaderArtifact, type RefetchReaderArtifact, type ReaderAst, type ReaderAstNode, type ReaderLinkedField, type ReaderNonLoadableResolverField, type ReaderScalarField, type TopLevelReaderArtifact, type LoadableField, type ResolverFirstParameter, } from './core/reader';
7
+ export { type NormalizationAst, type NormalizationAstNode, type NormalizationLinkedField, type NormalizationScalarField, type IsographEntrypoint, assertIsEntrypoint, type RefetchQueryNormalizationArtifact, type RefetchQueryNormalizationArtifactWrapper, type ExtractProps, type ExtractReadFromStore, type ExtractResolverResult, type NetworkRequestInfo, } from './core/entrypoint';
8
8
  export { readButDoNotEvaluate } from './core/read';
9
- export { type ExtractSecondParam, type Argument, type ArgumentName, type ArgumentValue, type Arguments, } from './core/util';
10
- export { type FragmentReference, type Variables, stableIdForFragmentReference, } from './core/FragmentReference';
9
+ export { type ExtractSecondParam, type CombineWithIntrinsicAttributes, type Argument, type ArgumentName, type ArgumentValue, type Arguments, } from './core/util';
10
+ export { type FragmentReference, type Variables, type ExtractParameters, type ExtractData, stableIdForFragmentReference, } from './core/FragmentReference';
11
+ export { type LogMessage, type LogFunction, logMessage, registerLogger, } from './core/logging';
12
+ export { check, CheckResult, FetchOptions, ShouldFetch } from './core/check';
11
13
  export { IsographEnvironmentProvider, useIsographEnvironment, type IsographEnvironmentProviderProps, } from './react/IsographEnvironmentProvider';
12
14
  export { useImperativeReference } from './react/useImperativeReference';
13
15
  export { FragmentReader } from './react/FragmentReader';
@@ -15,7 +17,10 @@ export { useResult } from './react/useResult';
15
17
  export { useReadAndSubscribe, useSubscribeToMultiple, } from './react/useReadAndSubscribe';
16
18
  export { useLazyReference } from './react/useLazyReference';
17
19
  export { useRerenderOnChange } from './react/useRerenderOnChange';
20
+ export { RenderAfterCommit__DO_NOT_USE } from './react/RenderAfterCommit__DO_NOT_USE';
18
21
  export { useClientSideDefer } from './loadable-hooks/useClientSideDefer';
19
22
  export { useImperativeExposedMutationField } from './loadable-hooks/useImperativeExposedMutationField';
20
23
  export { useSkipLimitPagination } from './loadable-hooks/useSkipLimitPagination';
24
+ export { useConnectionSpecPagination } from './loadable-hooks/useConnectionSpecPagination';
21
25
  export { useImperativeLoadableField } from './loadable-hooks/useImperativeLoadableField';
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,aAAa,EACb,KAAK,aAAa,EAClB,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,KAAK,cAAc,EACnB,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,WAAW,GACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EACL,OAAO,EACP,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EAClB,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,8BAA8B,EACnC,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,sBAAsB,GAC5B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACvB,kBAAkB,EAClB,KAAK,iCAAiC,EACtC,KAAK,wCAAwC,EAC7C,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,8BAA8B,EACnC,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,SAAS,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,4BAA4B,GAC7B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,UAAU,EACV,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE7E,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,EACtB,KAAK,gCAAgC,GACtC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EACL,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AAEtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,iCAAiC,EAAE,MAAM,oDAAoD,CAAC;AACvG,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAC3F,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useImperativeLoadableField = exports.useSkipLimitPagination = exports.useImperativeExposedMutationField = exports.useClientSideDefer = exports.useRerenderOnChange = exports.useLazyReference = exports.useSubscribeToMultiple = exports.useReadAndSubscribe = exports.useResult = exports.FragmentReader = exports.useImperativeReference = exports.useIsographEnvironment = exports.IsographEnvironmentProvider = exports.stableIdForFragmentReference = exports.readButDoNotEvaluate = exports.assertIsEntrypoint = exports.defaultMissingFieldHandler = exports.createIsographStore = exports.createIsographEnvironment = exports.ROOT_ID = exports.makeNetworkRequest = exports.normalizeData = exports.subscribe = exports.wrapPromise = exports.wrapResolvedValue = exports.getPromiseState = exports.readPromise = exports.garbageCollectEnvironment = exports.unretainQuery = exports.retainQuery = void 0;
3
+ exports.useImperativeLoadableField = exports.useConnectionSpecPagination = exports.useSkipLimitPagination = exports.useImperativeExposedMutationField = exports.useClientSideDefer = exports.RenderAfterCommit__DO_NOT_USE = exports.useRerenderOnChange = exports.useLazyReference = exports.useSubscribeToMultiple = exports.useReadAndSubscribe = exports.useResult = exports.FragmentReader = exports.useImperativeReference = exports.useIsographEnvironment = exports.IsographEnvironmentProvider = exports.check = exports.registerLogger = exports.logMessage = exports.stableIdForFragmentReference = exports.readButDoNotEvaluate = exports.assertIsEntrypoint = exports.createIsographStore = exports.createIsographEnvironment = exports.ROOT_ID = exports.makeNetworkRequest = exports.normalizeData = exports.subscribe = exports.wrapPromise = exports.wrapResolvedValue = exports.getPromiseState = exports.readPromise = exports.garbageCollectEnvironment = exports.unretainQuery = exports.retainQuery = void 0;
4
4
  var garbageCollection_1 = require("./core/garbageCollection");
5
5
  Object.defineProperty(exports, "retainQuery", { enumerable: true, get: function () { return garbageCollection_1.retainQuery; } });
6
6
  Object.defineProperty(exports, "unretainQuery", { enumerable: true, get: function () { return garbageCollection_1.unretainQuery; } });
@@ -19,13 +19,17 @@ var IsographEnvironment_1 = require("./core/IsographEnvironment");
19
19
  Object.defineProperty(exports, "ROOT_ID", { enumerable: true, get: function () { return IsographEnvironment_1.ROOT_ID; } });
20
20
  Object.defineProperty(exports, "createIsographEnvironment", { enumerable: true, get: function () { return IsographEnvironment_1.createIsographEnvironment; } });
21
21
  Object.defineProperty(exports, "createIsographStore", { enumerable: true, get: function () { return IsographEnvironment_1.createIsographStore; } });
22
- Object.defineProperty(exports, "defaultMissingFieldHandler", { enumerable: true, get: function () { return IsographEnvironment_1.defaultMissingFieldHandler; } });
23
22
  var entrypoint_1 = require("./core/entrypoint");
24
23
  Object.defineProperty(exports, "assertIsEntrypoint", { enumerable: true, get: function () { return entrypoint_1.assertIsEntrypoint; } });
25
24
  var read_1 = require("./core/read");
26
25
  Object.defineProperty(exports, "readButDoNotEvaluate", { enumerable: true, get: function () { return read_1.readButDoNotEvaluate; } });
27
26
  var FragmentReference_1 = require("./core/FragmentReference");
28
27
  Object.defineProperty(exports, "stableIdForFragmentReference", { enumerable: true, get: function () { return FragmentReference_1.stableIdForFragmentReference; } });
28
+ var logging_1 = require("./core/logging");
29
+ Object.defineProperty(exports, "logMessage", { enumerable: true, get: function () { return logging_1.logMessage; } });
30
+ Object.defineProperty(exports, "registerLogger", { enumerable: true, get: function () { return logging_1.registerLogger; } });
31
+ var check_1 = require("./core/check");
32
+ Object.defineProperty(exports, "check", { enumerable: true, get: function () { return check_1.check; } });
29
33
  var IsographEnvironmentProvider_1 = require("./react/IsographEnvironmentProvider");
30
34
  Object.defineProperty(exports, "IsographEnvironmentProvider", { enumerable: true, get: function () { return IsographEnvironmentProvider_1.IsographEnvironmentProvider; } });
31
35
  Object.defineProperty(exports, "useIsographEnvironment", { enumerable: true, get: function () { return IsographEnvironmentProvider_1.useIsographEnvironment; } });
@@ -42,11 +46,15 @@ var useLazyReference_1 = require("./react/useLazyReference");
42
46
  Object.defineProperty(exports, "useLazyReference", { enumerable: true, get: function () { return useLazyReference_1.useLazyReference; } });
43
47
  var useRerenderOnChange_1 = require("./react/useRerenderOnChange");
44
48
  Object.defineProperty(exports, "useRerenderOnChange", { enumerable: true, get: function () { return useRerenderOnChange_1.useRerenderOnChange; } });
49
+ var RenderAfterCommit__DO_NOT_USE_1 = require("./react/RenderAfterCommit__DO_NOT_USE");
50
+ Object.defineProperty(exports, "RenderAfterCommit__DO_NOT_USE", { enumerable: true, get: function () { return RenderAfterCommit__DO_NOT_USE_1.RenderAfterCommit__DO_NOT_USE; } });
45
51
  var useClientSideDefer_1 = require("./loadable-hooks/useClientSideDefer");
46
52
  Object.defineProperty(exports, "useClientSideDefer", { enumerable: true, get: function () { return useClientSideDefer_1.useClientSideDefer; } });
47
53
  var useImperativeExposedMutationField_1 = require("./loadable-hooks/useImperativeExposedMutationField");
48
54
  Object.defineProperty(exports, "useImperativeExposedMutationField", { enumerable: true, get: function () { return useImperativeExposedMutationField_1.useImperativeExposedMutationField; } });
49
55
  var useSkipLimitPagination_1 = require("./loadable-hooks/useSkipLimitPagination");
50
56
  Object.defineProperty(exports, "useSkipLimitPagination", { enumerable: true, get: function () { return useSkipLimitPagination_1.useSkipLimitPagination; } });
57
+ var useConnectionSpecPagination_1 = require("./loadable-hooks/useConnectionSpecPagination");
58
+ Object.defineProperty(exports, "useConnectionSpecPagination", { enumerable: true, get: function () { return useConnectionSpecPagination_1.useConnectionSpecPagination; } });
51
59
  var useImperativeLoadableField_1 = require("./loadable-hooks/useImperativeLoadableField");
52
60
  Object.defineProperty(exports, "useImperativeLoadableField", { enumerable: true, get: function () { return useImperativeLoadableField_1.useImperativeLoadableField; } });
@@ -1,4 +1,16 @@
1
- import { FragmentReference } from '../core/FragmentReference';
1
+ import { ExtractParameters, FragmentReference } from '../core/FragmentReference';
2
2
  import { LoadableField } from '../core/reader';
3
- export declare function useClientSideDefer<TResult>(loadableField: LoadableField<void, TResult>): FragmentReference<Record<string, never>, TResult>;
4
- export declare function useClientSideDefer<TArgs extends Object, TResult>(loadableField: LoadableField<TArgs, TResult>, args: TArgs): FragmentReference<TArgs, TResult>;
3
+ import { FetchOptions } from '../core/check';
4
+ export declare function useClientSideDefer<TReadFromStore extends {
5
+ data: object;
6
+ parameters: object;
7
+ }, TResult>(loadableField: LoadableField<TReadFromStore, TResult, ExtractParameters<TReadFromStore>>, args?: Record<PropertyKey, never>, fetchOptions?: FetchOptions): {
8
+ fragmentReference: FragmentReference<TReadFromStore, TResult>;
9
+ };
10
+ export declare function useClientSideDefer<TReadFromStore extends {
11
+ data: object;
12
+ parameters: object;
13
+ }, TResult, TProvidedArgs extends object>(loadableField: LoadableField<TReadFromStore, TResult, Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>>, args: Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>, fetchOptions?: FetchOptions): {
14
+ fragmentReference: FragmentReference<TReadFromStore, TResult>;
15
+ };
16
+ //# sourceMappingURL=useClientSideDefer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useClientSideDefer.d.ts","sourceRoot":"","sources":["../../src/loadable-hooks/useClientSideDefer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,2BAA2B,CAAC;AAInC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,wBAAgB,kBAAkB,CAChC,cAAc,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,EAC3D,OAAO,EAEP,aAAa,EAAE,aAAa,CAC1B,cAAc,EACd,OAAO,EACP,iBAAiB,CAAC,cAAc,CAAC,CAClC,EACD,IAAI,CAAC,EAAE,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,EACjC,YAAY,CAAC,EAAE,YAAY,GAC1B;IAAE,iBAAiB,EAAE,iBAAiB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAErE,wBAAgB,kBAAkB,CAChC,cAAc,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,EAC3D,OAAO,EACP,aAAa,SAAS,MAAM,EAE5B,aAAa,EAAE,aAAa,CAC1B,cAAc,EACd,OAAO,EACP,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,MAAM,aAAa,CAAC,CAC7D,EACD,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,MAAM,aAAa,CAAC,EAClE,YAAY,CAAC,EAAE,YAAY,GAC1B;IAAE,iBAAiB,EAAE,iBAAiB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC"}
@@ -1,15 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useClientSideDefer = void 0;
3
+ exports.useClientSideDefer = useClientSideDefer;
4
4
  const IsographEnvironmentProvider_1 = require("../react/IsographEnvironmentProvider");
5
5
  const cache_1 = require("../core/cache");
6
6
  const react_disposable_state_1 = require("@isograph/react-disposable-state");
7
- function useClientSideDefer(loadableField, args) {
8
- // @ts-expect-error args is missing iff it has the type void
9
- const [id, loader] = loadableField(args);
7
+ function useClientSideDefer(loadableField, args, fetchOptions) {
8
+ const [id, loader] = loadableField(args, fetchOptions !== null && fetchOptions !== void 0 ? fetchOptions : {});
10
9
  const environment = (0, IsographEnvironmentProvider_1.useIsographEnvironment)();
11
10
  const cache = (0, cache_1.getOrCreateItemInSuspenseCache)(environment, id, loader);
12
11
  const fragmentReference = (0, react_disposable_state_1.useLazyDisposableState)(cache).state;
13
- return fragmentReference;
12
+ return { fragmentReference };
14
13
  }
15
- exports.useClientSideDefer = useClientSideDefer;
@@ -0,0 +1,34 @@
1
+ import { FragmentReference } from '../core/FragmentReference';
2
+ import { LoadableField } from '../core/reader';
3
+ import { FetchOptions } from '../core/check';
4
+ type UsePaginationReturnValue<TReadFromStore extends {
5
+ parameters: object;
6
+ data: object;
7
+ }, TItem> = {
8
+ kind: 'Pending';
9
+ pendingFragment: FragmentReference<TReadFromStore, Connection<TItem>>;
10
+ results: ReadonlyArray<TItem>;
11
+ } | {
12
+ kind: 'Complete';
13
+ fetchMore: (count: number, fetchOptions?: FetchOptions) => void;
14
+ results: ReadonlyArray<TItem>;
15
+ hasNextPage: boolean;
16
+ };
17
+ type PageInfo = {
18
+ readonly hasNextPage: boolean;
19
+ readonly endCursor: string | null;
20
+ };
21
+ type Connection<T> = {
22
+ readonly edges: ReadonlyArray<T> | null;
23
+ readonly pageInfo: PageInfo;
24
+ };
25
+ type UseConnectionSpecPaginationArgs = {
26
+ first: number;
27
+ after: string | null;
28
+ };
29
+ export declare function useConnectionSpecPagination<TReadFromStore extends {
30
+ parameters: object;
31
+ data: object;
32
+ }, TItem>(loadableField: LoadableField<TReadFromStore, Connection<TItem>, UseConnectionSpecPaginationArgs>, initialState?: PageInfo): UsePaginationReturnValue<TReadFromStore, TItem>;
33
+ export {};
34
+ //# sourceMappingURL=useConnectionSpecPagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useConnectionSpecPagination.d.ts","sourceRoot":"","sources":["../../src/loadable-hooks/useConnectionSpecPagination.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAM9D,OAAO,EAAE,aAAa,EAAkB,MAAM,gBAAgB,CAAC;AAI/D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,KAAK,wBAAwB,CAC3B,cAAc,SAAS;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC3D,KAAK,IAEH;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,eAAe,EAAE,iBAAiB,CAAC,cAAc,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;CAC/B,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;IAChE,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9B,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAwBN,KAAK,QAAQ,GAAG;IACd,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC,CAAC;AAEF,KAAK,UAAU,CAAC,CAAC,IAAI;IACnB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B,CAAC;AAOF,KAAK,+BAA+B,GAAG;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF,wBAAgB,2BAA2B,CACzC,cAAc,SAAS;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd,EACD,KAAK,EAEL,aAAa,EAAE,aAAa,CAC1B,cAAc,EACd,UAAU,CAAC,KAAK,CAAC,EACjB,+BAA+B,CAChC,EACD,YAAY,CAAC,EAAE,QAAQ,GACtB,wBAAwB,CAAC,cAAc,EAAE,KAAK,CAAC,CA4OjD"}