@isograph/react 0.0.0-main-7faadacd → 0.0.0-main-aa925b7c

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.
@@ -1,4 +1,4 @@
1
1
 
2
- > @isograph/react@0.0.0-main-7faadacd compile-typescript /Users/runner/work/isograph/isograph/libs/isograph-react
2
+ > @isograph/react@0.0.0-main-aa925b7c compile-typescript /Users/runner/work/isograph/isograph/libs/isograph-react
3
3
  > rm -rf dist/* && tsc -p tsconfig.pkg.json
4
4
 
@@ -3,7 +3,7 @@ import { RefetchQueryNormalizationArtifactWrapper } from './entrypoint';
3
3
  import { ExtractData, FragmentReference, Variables, type UnknownTReadFromStore } from './FragmentReference';
4
4
  import { IsographEnvironment, type DataTypeValue, type Link, type StoreRecord } from './IsographEnvironment';
5
5
  import { PromiseWrapper } from './PromiseWrapper';
6
- import { ReaderAst, type ReaderImperativelyLoadedField, type ReaderLinkedField, type ReaderScalarField } from './reader';
6
+ import { ReaderAst, type ReaderImperativelyLoadedField, type ReaderLinkedField, type ReaderNonLoadableResolverField, type ReaderScalarField } from './reader';
7
7
  export type WithEncounteredRecords<T> = {
8
8
  readonly encounteredRecords: EncounteredIds;
9
9
  readonly item: ExtractData<T>;
@@ -19,6 +19,7 @@ export type ReadDataResult<Data> = ReadDataResultSuccess<Data> | {
19
19
  readonly nestedReason?: ReadDataResult<unknown>;
20
20
  readonly recordLink: Link;
21
21
  };
22
+ export declare function readResolverFieldData(environment: IsographEnvironment, field: ReaderNonLoadableResolverField, root: Link, variables: Variables, nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[], networkRequest: PromiseWrapper<void, any>, networkRequestOptions: NetworkRequestReaderOptions, mutableEncounteredRecords: EncounteredIds): ReadDataResult<unknown>;
22
23
  export declare function readScalarFieldData(field: ReaderScalarField, storeRecord: StoreRecord, root: Link, variables: Variables): ReadDataResult<string | number | boolean | Link | DataTypeValue[] | null>;
23
24
  export declare function readLinkedFieldData(environment: IsographEnvironment, field: ReaderLinkedField, storeRecord: StoreRecord, root: Link, variables: Variables, networkRequest: PromiseWrapper<void, any>, readData: <TReadFromStore>(ast: ReaderAst<TReadFromStore>, root: Link) => ReadDataResult<object>): ReadDataResult<unknown>;
24
25
  export type NetworkRequestReaderOptions = {
@@ -1 +1 @@
1
- {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/core/read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/core/read.ts"],"names":[],"mappings":"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"}
package/dist/core/read.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.readButDoNotEvaluate = readButDoNotEvaluate;
4
+ exports.readResolverFieldData = readResolverFieldData;
4
5
  exports.readScalarFieldData = readScalarFieldData;
5
6
  exports.readLinkedFieldData = readLinkedFieldData;
6
7
  exports.getNetworkRequestOptionsWithDefaults = getNetworkRequestOptionsWithDefaults;
@@ -108,60 +109,11 @@ function readData(environment, ast, root, variables, nestedRefetchQueries, netwo
108
109
  break;
109
110
  }
110
111
  case 'Resolver': {
111
- const usedRefetchQueries = field.usedRefetchQueries;
112
- const resolverRefetchQueries = usedRefetchQueries.map((index) => {
113
- const resolverRefetchQuery = nestedRefetchQueries[index];
114
- if (resolverRefetchQuery == null) {
115
- throw new Error('resolverRefetchQuery is null in Resolver. This is indicative of a bug in Isograph.');
116
- }
117
- return resolverRefetchQuery;
118
- });
119
- const readerWithRefetchQueries = {
120
- kind: 'ReaderWithRefetchQueries',
121
- readerArtifact: field.readerArtifact,
122
- nestedRefetchQueries: resolverRefetchQueries,
123
- };
124
- const fragment = {
125
- kind: 'FragmentReference',
126
- readerWithRefetchQueries: (0, PromiseWrapper_1.wrapResolvedValue)(readerWithRefetchQueries),
127
- root,
128
- variables: generateChildVariableMap(variables, field.arguments),
129
- networkRequest,
130
- };
131
- switch (field.readerArtifact.kind) {
132
- case 'EagerReaderArtifact': {
133
- const data = readData(environment, field.readerArtifact.readerAst, root, generateChildVariableMap(variables, field.arguments), resolverRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords);
134
- if (data.kind === 'MissingData') {
135
- return {
136
- kind: 'MissingData',
137
- reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,
138
- nestedReason: data,
139
- recordLink: data.recordLink,
140
- };
141
- }
142
- else {
143
- const firstParameter = {
144
- data: data.data,
145
- parameters: variables,
146
- startUpdate: field.readerArtifact.hasUpdatable
147
- ? (0, startUpdate_1.getOrCreateCachedStartUpdate)(environment, fragment, readerWithRefetchQueries.readerArtifact.fieldName)
148
- : undefined,
149
- };
150
- target[field.alias] =
151
- field.readerArtifact.resolver(firstParameter);
152
- }
153
- break;
154
- }
155
- case 'ComponentReaderArtifact': {
156
- target[field.alias] = (0, componentCache_1.getOrCreateCachedComponent)(environment, field.readerArtifact.fieldName, fragment, networkRequestOptions);
157
- break;
158
- }
159
- default: {
160
- let _ = field.readerArtifact;
161
- _;
162
- throw new Error('Unexpected kind');
163
- }
112
+ const data = readResolverFieldData(environment, field, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords);
113
+ if (data.kind === 'MissingData') {
114
+ return data;
164
115
  }
116
+ target[field.alias] = data.data;
165
117
  break;
166
118
  }
167
119
  case 'LoadablySelectedField': {
@@ -341,6 +293,63 @@ function writeQueryArgsToVariables(targetVariables, queryArgs, variables) {
341
293
  }
342
294
  }
343
295
  }
296
+ function readResolverFieldData(environment, field, root, variables, nestedRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords) {
297
+ const usedRefetchQueries = field.usedRefetchQueries;
298
+ const resolverRefetchQueries = usedRefetchQueries.map((index) => {
299
+ const resolverRefetchQuery = nestedRefetchQueries[index];
300
+ if (resolverRefetchQuery == null) {
301
+ throw new Error('resolverRefetchQuery is null in Resolver. This is indicative of a bug in Isograph.');
302
+ }
303
+ return resolverRefetchQuery;
304
+ });
305
+ const readerWithRefetchQueries = {
306
+ kind: 'ReaderWithRefetchQueries',
307
+ readerArtifact: field.readerArtifact,
308
+ nestedRefetchQueries: resolverRefetchQueries,
309
+ };
310
+ const fragment = {
311
+ kind: 'FragmentReference',
312
+ readerWithRefetchQueries: (0, PromiseWrapper_1.wrapResolvedValue)(readerWithRefetchQueries),
313
+ root,
314
+ variables: generateChildVariableMap(variables, field.arguments),
315
+ networkRequest,
316
+ };
317
+ switch (field.readerArtifact.kind) {
318
+ case 'EagerReaderArtifact': {
319
+ const data = readData(environment, field.readerArtifact.readerAst, root, generateChildVariableMap(variables, field.arguments), resolverRefetchQueries, networkRequest, networkRequestOptions, mutableEncounteredRecords);
320
+ if (data.kind === 'MissingData') {
321
+ return {
322
+ kind: 'MissingData',
323
+ reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,
324
+ nestedReason: data,
325
+ recordLink: data.recordLink,
326
+ };
327
+ }
328
+ const firstParameter = {
329
+ data: data.data,
330
+ parameters: variables,
331
+ startUpdate: field.readerArtifact.hasUpdatable
332
+ ? (0, startUpdate_1.getOrCreateCachedStartUpdate)(environment, fragment, readerWithRefetchQueries.readerArtifact.fieldName)
333
+ : undefined,
334
+ };
335
+ return {
336
+ kind: 'Success',
337
+ data: field.readerArtifact.resolver(firstParameter),
338
+ };
339
+ }
340
+ case 'ComponentReaderArtifact': {
341
+ return {
342
+ kind: 'Success',
343
+ data: (0, componentCache_1.getOrCreateCachedComponent)(environment, field.readerArtifact.fieldName, fragment, networkRequestOptions),
344
+ };
345
+ }
346
+ default: {
347
+ let _ = field.readerArtifact;
348
+ _;
349
+ throw new Error('Unexpected kind');
350
+ }
351
+ }
352
+ }
344
353
  function readScalarFieldData(field, storeRecord, root, variables) {
345
354
  const storeRecordName = (0, cache_1.getParentRecordKey)(field, variables);
346
355
  const value = storeRecord[storeRecordName];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@isograph/react",
3
- "version": "0.0.0-main-7faadacd",
3
+ "version": "0.0.0-main-aa925b7c",
4
4
  "description": "Use Isograph with React",
5
5
  "homepage": "https://isograph.dev",
6
6
  "main": "dist/index.js",
@@ -20,9 +20,9 @@
20
20
  "iso-watch": "cross-env ../../target/debug/isograph_cli --config ./isograph.config.json --watch"
21
21
  },
22
22
  "dependencies": {
23
- "@isograph/disposable-types": "0.0.0-main-7faadacd",
24
- "@isograph/react-disposable-state": "0.0.0-main-7faadacd",
25
- "@isograph/reference-counted-pointer": "0.0.0-main-7faadacd"
23
+ "@isograph/disposable-types": "0.0.0-main-aa925b7c",
24
+ "@isograph/react-disposable-state": "0.0.0-main-aa925b7c",
25
+ "@isograph/reference-counted-pointer": "0.0.0-main-aa925b7c"
26
26
  },
27
27
  "peerDependencies": {
28
28
  "react": "^18.0.0 || ^19.0.0"
package/src/core/read.ts CHANGED
@@ -40,6 +40,7 @@ import {
40
40
  ReaderAst,
41
41
  type ReaderImperativelyLoadedField,
42
42
  type ReaderLinkedField,
43
+ type ReaderNonLoadableResolverField,
43
44
  type ReaderScalarField,
44
45
  } from './reader';
45
46
  import { getOrCreateCachedStartUpdate } from './startUpdate';
@@ -229,83 +230,20 @@ function readData<TReadFromStore>(
229
230
  break;
230
231
  }
231
232
  case 'Resolver': {
232
- const usedRefetchQueries = field.usedRefetchQueries;
233
- const resolverRefetchQueries = usedRefetchQueries.map((index) => {
234
- const resolverRefetchQuery = nestedRefetchQueries[index];
235
- if (resolverRefetchQuery == null) {
236
- throw new Error(
237
- 'resolverRefetchQuery is null in Resolver. This is indicative of a bug in Isograph.',
238
- );
239
- }
240
- return resolverRefetchQuery;
241
- });
242
-
243
- const readerWithRefetchQueries = {
244
- kind: 'ReaderWithRefetchQueries',
245
- readerArtifact: field.readerArtifact,
246
- nestedRefetchQueries: resolverRefetchQueries,
247
- } satisfies ReaderWithRefetchQueries<any, any>;
248
-
249
- const fragment = {
250
- kind: 'FragmentReference',
251
- readerWithRefetchQueries: wrapResolvedValue(readerWithRefetchQueries),
233
+ const data = readResolverFieldData(
234
+ environment,
235
+ field,
252
236
  root,
253
- variables: generateChildVariableMap(variables, field.arguments),
237
+ variables,
238
+ nestedRefetchQueries,
254
239
  networkRequest,
255
- } satisfies FragmentReference<any, any>;
256
-
257
- switch (field.readerArtifact.kind) {
258
- case 'EagerReaderArtifact': {
259
- const data = readData(
260
- environment,
261
- field.readerArtifact.readerAst,
262
- root,
263
- generateChildVariableMap(variables, field.arguments),
264
- resolverRefetchQueries,
265
- networkRequest,
266
- networkRequestOptions,
267
- mutableEncounteredRecords,
268
- );
269
- if (data.kind === 'MissingData') {
270
- return {
271
- kind: 'MissingData',
272
- reason:
273
- 'Missing data for ' + field.alias + ' on root ' + root.__link,
274
- nestedReason: data,
275
- recordLink: data.recordLink,
276
- };
277
- } else {
278
- const firstParameter = {
279
- data: data.data,
280
- parameters: variables,
281
- startUpdate: field.readerArtifact.hasUpdatable
282
- ? getOrCreateCachedStartUpdate(
283
- environment,
284
- fragment,
285
- readerWithRefetchQueries.readerArtifact.fieldName,
286
- )
287
- : undefined,
288
- };
289
- target[field.alias] =
290
- field.readerArtifact.resolver(firstParameter);
291
- }
292
- break;
293
- }
294
- case 'ComponentReaderArtifact': {
295
- target[field.alias] = getOrCreateCachedComponent(
296
- environment,
297
- field.readerArtifact.fieldName,
298
- fragment,
299
- networkRequestOptions,
300
- );
301
- break;
302
- }
303
- default: {
304
- let _: never = field.readerArtifact;
305
- _;
306
- throw new Error('Unexpected kind');
307
- }
240
+ networkRequestOptions,
241
+ mutableEncounteredRecords,
242
+ );
243
+ if (data.kind === 'MissingData') {
244
+ return data;
308
245
  }
246
+ target[field.alias] = data.data;
309
247
  break;
310
248
  }
311
249
  case 'LoadablySelectedField': {
@@ -574,6 +512,96 @@ function writeQueryArgsToVariables(
574
512
  }
575
513
  }
576
514
 
515
+ export function readResolverFieldData(
516
+ environment: IsographEnvironment,
517
+ field: ReaderNonLoadableResolverField,
518
+ root: Link,
519
+ variables: Variables,
520
+ nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],
521
+ networkRequest: PromiseWrapper<void, any>,
522
+ networkRequestOptions: NetworkRequestReaderOptions,
523
+ mutableEncounteredRecords: EncounteredIds,
524
+ ): ReadDataResult<unknown> {
525
+ const usedRefetchQueries = field.usedRefetchQueries;
526
+ const resolverRefetchQueries = usedRefetchQueries.map((index) => {
527
+ const resolverRefetchQuery = nestedRefetchQueries[index];
528
+ if (resolverRefetchQuery == null) {
529
+ throw new Error(
530
+ 'resolverRefetchQuery is null in Resolver. This is indicative of a bug in Isograph.',
531
+ );
532
+ }
533
+ return resolverRefetchQuery;
534
+ });
535
+
536
+ const readerWithRefetchQueries = {
537
+ kind: 'ReaderWithRefetchQueries',
538
+ readerArtifact: field.readerArtifact,
539
+ nestedRefetchQueries: resolverRefetchQueries,
540
+ } satisfies ReaderWithRefetchQueries<any, any>;
541
+
542
+ const fragment = {
543
+ kind: 'FragmentReference',
544
+ readerWithRefetchQueries: wrapResolvedValue(readerWithRefetchQueries),
545
+ root,
546
+ variables: generateChildVariableMap(variables, field.arguments),
547
+ networkRequest,
548
+ } satisfies FragmentReference<any, any>;
549
+
550
+ switch (field.readerArtifact.kind) {
551
+ case 'EagerReaderArtifact': {
552
+ const data = readData(
553
+ environment,
554
+ field.readerArtifact.readerAst,
555
+ root,
556
+ generateChildVariableMap(variables, field.arguments),
557
+ resolverRefetchQueries,
558
+ networkRequest,
559
+ networkRequestOptions,
560
+ mutableEncounteredRecords,
561
+ );
562
+ if (data.kind === 'MissingData') {
563
+ return {
564
+ kind: 'MissingData',
565
+ reason: 'Missing data for ' + field.alias + ' on root ' + root.__link,
566
+ nestedReason: data,
567
+ recordLink: data.recordLink,
568
+ };
569
+ }
570
+ const firstParameter = {
571
+ data: data.data,
572
+ parameters: variables,
573
+ startUpdate: field.readerArtifact.hasUpdatable
574
+ ? getOrCreateCachedStartUpdate(
575
+ environment,
576
+ fragment,
577
+ readerWithRefetchQueries.readerArtifact.fieldName,
578
+ )
579
+ : undefined,
580
+ };
581
+ return {
582
+ kind: 'Success',
583
+ data: field.readerArtifact.resolver(firstParameter),
584
+ };
585
+ }
586
+ case 'ComponentReaderArtifact': {
587
+ return {
588
+ kind: 'Success',
589
+ data: getOrCreateCachedComponent(
590
+ environment,
591
+ field.readerArtifact.fieldName,
592
+ fragment,
593
+ networkRequestOptions,
594
+ ),
595
+ };
596
+ }
597
+ default: {
598
+ let _: never = field.readerArtifact;
599
+ _;
600
+ throw new Error('Unexpected kind');
601
+ }
602
+ }
603
+ }
604
+
577
605
  export function readScalarFieldData(
578
606
  field: ReaderScalarField,
579
607
  storeRecord: StoreRecord,