@isograph/react 0.0.0-main-c06bc99a → 0.0.0-main-7fb13e90

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.
@@ -7,7 +7,7 @@ export type Variables = {
7
7
  };
8
8
  export type FragmentReference<TReadFromStore extends Object, TClientFieldValue> = {
9
9
  readonly kind: 'FragmentReference';
10
- readonly readerWithRefetchQueries: ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>;
10
+ readonly readerWithRefetchQueries: PromiseWrapper<ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>>;
11
11
  readonly root: DataId;
12
12
  readonly variables: Variables | null;
13
13
  readonly networkRequest: PromiseWrapper<void, any>;
@@ -12,11 +12,12 @@ type Result<T, E> = {
12
12
  * Invariant:
13
13
  * Before the promise is resolved, value becomes non-null.
14
14
  */
15
- export type PromiseWrapper<T, E> = {
15
+ export type PromiseWrapper<T, E = any> = {
16
16
  readonly promise: Promise<T>;
17
17
  result: Result<Exclude<T, NotSet>, E> | NotSet;
18
18
  };
19
19
  export declare function wrapPromise<T>(promise: Promise<T>): PromiseWrapper<T, any>;
20
+ export declare function wrapResolvedValue<T>(value: T): PromiseWrapper<T, never>;
20
21
  export declare function readPromise<T, E>(p: PromiseWrapper<T, E>): T;
21
22
  export type PromiseState<T, E> = {
22
23
  kind: 'Pending';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getPromiseState = exports.readPromise = exports.wrapPromise = void 0;
3
+ exports.getPromiseState = exports.readPromise = exports.wrapResolvedValue = exports.wrapPromise = void 0;
4
4
  const NOT_SET = Symbol('NOT_SET');
5
5
  function wrapPromise(promise) {
6
6
  // TODO confirm suspense works if the promise is already resolved.
@@ -17,6 +17,17 @@ function wrapPromise(promise) {
17
17
  return wrapper;
18
18
  }
19
19
  exports.wrapPromise = wrapPromise;
20
+ function wrapResolvedValue(value) {
21
+ return {
22
+ promise: Promise.resolve(value),
23
+ result: {
24
+ kind: 'Ok',
25
+ // @ts-expect-error one should not call wrapResolvedValue with NOT_SET
26
+ value,
27
+ },
28
+ };
29
+ }
30
+ exports.wrapResolvedValue = wrapResolvedValue;
20
31
  function readPromise(p) {
21
32
  const { result } = p;
22
33
  if (result !== NOT_SET) {
@@ -6,6 +6,7 @@ const IsographEnvironment_1 = require("./IsographEnvironment");
6
6
  const read_1 = require("./read");
7
7
  const areEqualWithDeepComparison_1 = require("./areEqualWithDeepComparison");
8
8
  const makeNetworkRequest_1 = require("./makeNetworkRequest");
9
+ const PromiseWrapper_1 = require("./PromiseWrapper");
9
10
  const TYPENAME_FIELD_NAME = '__typename';
10
11
  function getOrCreateItemInSuspenseCache(environment, index, factory) {
11
12
  // @ts-expect-error
@@ -51,11 +52,11 @@ function getOrCreateCacheForArtifact(environment, entrypoint, variables) {
51
52
  const itemCleanupPair = [
52
53
  {
53
54
  kind: 'FragmentReference',
54
- readerWithRefetchQueries: {
55
+ readerWithRefetchQueries: (0, PromiseWrapper_1.wrapResolvedValue)({
55
56
  kind: 'ReaderWithRefetchQueries',
56
57
  readerArtifact: entrypoint.readerWithRefetchQueries.readerArtifact,
57
58
  nestedRefetchQueries: entrypoint.readerWithRefetchQueries.nestedRefetchQueries,
58
- },
59
+ }),
59
60
  root: IsographEnvironment_1.ROOT_ID,
60
61
  variables,
61
62
  networkRequest: networkRequest,
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getOrCreateCachedComponent = void 0;
4
4
  const cache_1 = require("./cache");
5
5
  const useReadAndSubscribe_1 = require("../react/useReadAndSubscribe");
6
+ const PromiseWrapper_1 = require("./PromiseWrapper");
6
7
  function getOrCreateCachedComponent(environment, componentName, fragmentReference, networkRequestOptions) {
7
8
  var _a, _b, _c;
8
9
  // cachedComponentsById is a three layer cache: id, then component name, then
@@ -26,7 +27,8 @@ function getOrCreateCachedComponent(environment, componentName, fragmentReferenc
26
27
  ' ' +
27
28
  fragmentReference.root);
28
29
  }
29
- return fragmentReference.readerWithRefetchQueries.readerArtifact.resolver(data, additionalRuntimeProps);
30
+ const readerWithRefetchQueries = (0, PromiseWrapper_1.readPromise)(fragmentReference.readerWithRefetchQueries);
31
+ return readerWithRefetchQueries.readerArtifact.resolver(data, additionalRuntimeProps);
30
32
  }
31
33
  Component.displayName = `${componentName} (id: ${fragmentReference.root}) @component`;
32
34
  return Component;
package/dist/core/read.js CHANGED
@@ -5,10 +5,12 @@ const cache_1 = require("./cache");
5
5
  const componentCache_1 = require("./componentCache");
6
6
  const IsographEnvironment_1 = require("./IsographEnvironment");
7
7
  const makeNetworkRequest_1 = require("./makeNetworkRequest");
8
+ const PromiseWrapper_1 = require("./PromiseWrapper");
8
9
  function readButDoNotEvaluate(environment, fragmentReference, networkRequestOptions) {
9
10
  var _a;
10
11
  const mutableEncounteredRecords = new Set();
11
- const response = readData(environment, fragmentReference.readerWithRefetchQueries.readerArtifact.readerAst, fragmentReference.root, (_a = fragmentReference.variables) !== null && _a !== void 0 ? _a : {}, fragmentReference.readerWithRefetchQueries.nestedRefetchQueries, fragmentReference.networkRequest, networkRequestOptions, mutableEncounteredRecords);
12
+ const readerWithRefetchQueries = (0, PromiseWrapper_1.readPromise)(fragmentReference.readerWithRefetchQueries);
13
+ const response = readData(environment, readerWithRefetchQueries.readerArtifact.readerAst, fragmentReference.root, (_a = fragmentReference.variables) !== null && _a !== void 0 ? _a : {}, readerWithRefetchQueries.nestedRefetchQueries, fragmentReference.networkRequest, networkRequestOptions, mutableEncounteredRecords);
12
14
  // @ts-expect-error
13
15
  if (typeof window !== 'undefined' && window.__LOG) {
14
16
  console.log('done reading', { response });
@@ -208,11 +210,11 @@ function readData(environment, ast, root, variables, nestedRefetchQueries, netwo
208
210
  else if (kind === 'ComponentReaderArtifact') {
209
211
  target[field.alias] = (0, componentCache_1.getOrCreateCachedComponent)(environment, field.readerArtifact.componentName, {
210
212
  kind: 'FragmentReference',
211
- readerWithRefetchQueries: {
213
+ readerWithRefetchQueries: (0, PromiseWrapper_1.wrapResolvedValue)({
212
214
  kind: 'ReaderWithRefetchQueries',
213
215
  readerArtifact: field.readerArtifact,
214
216
  nestedRefetchQueries: resolverRefetchQueries,
215
- },
217
+ }),
216
218
  root,
217
219
  variables: generateChildVariableMap(variables, field.arguments),
218
220
  networkRequest,
@@ -252,12 +254,12 @@ function readData(environment, ast, root, variables, nestedRefetchQueries, netwo
252
254
  const [networkRequest, disposeNetworkRequest] = (0, makeNetworkRequest_1.makeNetworkRequest)(environment, field.entrypoint, localVariables);
253
255
  const fragmentReference = {
254
256
  kind: 'FragmentReference',
255
- readerWithRefetchQueries: {
257
+ readerWithRefetchQueries: (0, PromiseWrapper_1.wrapResolvedValue)({
256
258
  kind: 'ReaderWithRefetchQueries',
257
259
  readerArtifact: field.entrypoint.readerWithRefetchQueries.readerArtifact,
258
260
  nestedRefetchQueries: field.entrypoint.readerWithRefetchQueries
259
261
  .nestedRefetchQueries,
260
- },
262
+ }),
261
263
  // TODO localVariables is not guaranteed to have an id field
262
264
  root: localVariables.id,
263
265
  variables: localVariables,
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { retainQuery, unretainQuery, type RetainedQuery, garbageCollectEnvironment, } from './core/garbageCollection';
2
- export { type PromiseWrapper, readPromise, getPromiseState, } from './core/PromiseWrapper';
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
5
  export { ROOT_ID, type DataId, type DataTypeValue, type IsographEnvironment, type IsographNetworkFunction, type IsographStore, type Link, type StoreRecord, createIsographEnvironment, createIsographStore, defaultMissingFieldHandler, } from './core/IsographEnvironment';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useSuspensefulSkipLimitPagination = 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.getPromiseState = exports.readPromise = exports.garbageCollectEnvironment = exports.unretainQuery = exports.retainQuery = void 0;
3
+ exports.useSuspensefulSkipLimitPagination = 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;
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; } });
@@ -8,6 +8,8 @@ Object.defineProperty(exports, "garbageCollectEnvironment", { enumerable: true,
8
8
  var PromiseWrapper_1 = require("./core/PromiseWrapper");
9
9
  Object.defineProperty(exports, "readPromise", { enumerable: true, get: function () { return PromiseWrapper_1.readPromise; } });
10
10
  Object.defineProperty(exports, "getPromiseState", { enumerable: true, get: function () { return PromiseWrapper_1.getPromiseState; } });
11
+ Object.defineProperty(exports, "wrapResolvedValue", { enumerable: true, get: function () { return PromiseWrapper_1.wrapResolvedValue; } });
12
+ Object.defineProperty(exports, "wrapPromise", { enumerable: true, get: function () { return PromiseWrapper_1.wrapPromise; } });
11
13
  var cache_1 = require("./core/cache");
12
14
  Object.defineProperty(exports, "subscribe", { enumerable: true, get: function () { return cache_1.subscribe; } });
13
15
  Object.defineProperty(exports, "normalizeData", { enumerable: true, get: function () { return cache_1.normalizeData; } });
@@ -6,6 +6,7 @@ const useResult_1 = require("../react/useResult");
6
6
  const read_1 = require("../core/read");
7
7
  const react_disposable_state_1 = require("@isograph/react-disposable-state");
8
8
  const reference_counted_pointer_1 = require("@isograph/reference-counted-pointer");
9
+ const PromiseWrapper_1 = require("../core/PromiseWrapper");
9
10
  function flatten(arr) {
10
11
  let outArray = [];
11
12
  for (const subarr of arr) {
@@ -42,7 +43,8 @@ function useSuspensefulSkipLimitPagination(loadableField) {
42
43
  }
43
44
  (0, useResult_1.maybeUnwrapNetworkRequest)(fragmentReference.networkRequest, networkRequestOptions);
44
45
  const data = (0, read_1.readButDoNotEvaluate)(environment, fragmentReference, networkRequestOptions);
45
- return fragmentReference.readerWithRefetchQueries.readerArtifact.resolver(data.item, undefined);
46
+ const readerWithRefetchQueries = (0, PromiseWrapper_1.readPromise)(fragmentReference.readerWithRefetchQueries);
47
+ return readerWithRefetchQueries.readerArtifact.resolver(data.item, undefined);
46
48
  });
47
49
  const items = flatten(results);
48
50
  const loadedSoFar = items.length;
@@ -5,6 +5,7 @@ const react_disposable_state_1 = require("@isograph/react-disposable-state");
5
5
  const IsographEnvironmentProvider_1 = require("./IsographEnvironmentProvider");
6
6
  const IsographEnvironment_1 = require("../core/IsographEnvironment");
7
7
  const makeNetworkRequest_1 = require("../core/makeNetworkRequest");
8
+ const PromiseWrapper_1 = require("../core/PromiseWrapper");
8
9
  function useImperativeReference(entrypoint) {
9
10
  const { state, setState } = (0, react_disposable_state_1.useUpdatableDisposableState)();
10
11
  const environment = (0, IsographEnvironmentProvider_1.useIsographEnvironment)();
@@ -15,11 +16,11 @@ function useImperativeReference(entrypoint) {
15
16
  setState([
16
17
  {
17
18
  kind: 'FragmentReference',
18
- readerWithRefetchQueries: {
19
+ readerWithRefetchQueries: (0, PromiseWrapper_1.wrapResolvedValue)({
19
20
  kind: 'ReaderWithRefetchQueries',
20
21
  readerArtifact: entrypoint.readerWithRefetchQueries.readerArtifact,
21
22
  nestedRefetchQueries: entrypoint.readerWithRefetchQueries.nestedRefetchQueries,
22
- },
23
+ }),
23
24
  root: IsographEnvironment_1.ROOT_ID,
24
25
  variables,
25
26
  networkRequest,
@@ -10,14 +10,15 @@ function useResult(fragmentReference, partialNetworkRequestOptions) {
10
10
  const environment = (0, IsographEnvironmentProvider_1.useIsographEnvironment)();
11
11
  const networkRequestOptions = (0, read_1.getNetworkRequestOptionsWithDefaults)(partialNetworkRequestOptions);
12
12
  maybeUnwrapNetworkRequest(fragmentReference.networkRequest, networkRequestOptions);
13
- switch (fragmentReference.readerWithRefetchQueries.readerArtifact.kind) {
13
+ const readerWithRefetchQueries = (0, PromiseWrapper_1.readPromise)(fragmentReference.readerWithRefetchQueries);
14
+ switch (readerWithRefetchQueries.readerArtifact.kind) {
14
15
  case 'ComponentReaderArtifact': {
15
16
  // @ts-expect-error
16
- return (0, componentCache_1.getOrCreateCachedComponent)(environment, fragmentReference.readerWithRefetchQueries.readerArtifact.componentName, fragmentReference, networkRequestOptions);
17
+ return (0, componentCache_1.getOrCreateCachedComponent)(environment, readerWithRefetchQueries.readerArtifact.componentName, fragmentReference, networkRequestOptions);
17
18
  }
18
19
  case 'EagerReaderArtifact': {
19
20
  const data = (0, useReadAndSubscribe_1.useReadAndSubscribe)(fragmentReference, networkRequestOptions);
20
- return fragmentReference.readerWithRefetchQueries.readerArtifact.resolver(data);
21
+ return readerWithRefetchQueries.readerArtifact.resolver(data);
21
22
  }
22
23
  }
23
24
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@isograph/react",
3
- "version": "0.0.0-main-c06bc99a",
3
+ "version": "0.0.0-main-7fb13e90",
4
4
  "description": "Use Isograph with React",
5
5
  "homepage": "https://isograph.dev",
6
6
  "main": "dist/index.js",
@@ -17,9 +17,9 @@
17
17
  "tsc": "tsc"
18
18
  },
19
19
  "dependencies": {
20
- "@isograph/disposable-types": "0.0.0-main-c06bc99a",
21
- "@isograph/react-disposable-state": "0.0.0-main-c06bc99a",
22
- "@isograph/reference-counted-pointer": "0.0.0-main-c06bc99a"
20
+ "@isograph/disposable-types": "0.0.0-main-7fb13e90",
21
+ "@isograph/react-disposable-state": "0.0.0-main-7fb13e90",
22
+ "@isograph/reference-counted-pointer": "0.0.0-main-7fb13e90"
23
23
  },
24
24
  "peerDependencies": {
25
25
  "react": "18.2.0"
@@ -12,9 +12,8 @@ export type FragmentReference<
12
12
  TClientFieldValue,
13
13
  > = {
14
14
  readonly kind: 'FragmentReference';
15
- readonly readerWithRefetchQueries: ReaderWithRefetchQueries<
16
- TReadFromStore,
17
- TClientFieldValue
15
+ readonly readerWithRefetchQueries: PromiseWrapper<
16
+ ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>
18
17
  >;
19
18
  readonly root: DataId;
20
19
  readonly variables: Variables | null;
@@ -17,7 +17,7 @@ type Result<T, E> =
17
17
  * Invariant:
18
18
  * Before the promise is resolved, value becomes non-null.
19
19
  */
20
- export type PromiseWrapper<T, E> = {
20
+ export type PromiseWrapper<T, E = any> = {
21
21
  readonly promise: Promise<T>;
22
22
  result: Result<Exclude<T, NotSet>, E> | NotSet;
23
23
  };
@@ -37,6 +37,17 @@ export function wrapPromise<T>(promise: Promise<T>): PromiseWrapper<T, any> {
37
37
  return wrapper;
38
38
  }
39
39
 
40
+ export function wrapResolvedValue<T>(value: T): PromiseWrapper<T, never> {
41
+ return {
42
+ promise: Promise.resolve(value),
43
+ result: {
44
+ kind: 'Ok',
45
+ // @ts-expect-error one should not call wrapResolvedValue with NOT_SET
46
+ value,
47
+ },
48
+ };
49
+ }
50
+
40
51
  export function readPromise<T, E>(p: PromiseWrapper<T, E>): T {
41
52
  const { result } = p;
42
53
  if (result !== NOT_SET) {
package/src/core/cache.ts CHANGED
@@ -27,6 +27,7 @@ import { WithEncounteredRecords, readButDoNotEvaluate } from './read';
27
27
  import { FragmentReference, Variables } from './FragmentReference';
28
28
  import { areEqualObjectsWithDeepComparison } from './areEqualWithDeepComparison';
29
29
  import { makeNetworkRequest } from './makeNetworkRequest';
30
+ import { wrapResolvedValue } from './PromiseWrapper';
30
31
 
31
32
  const TYPENAME_FIELD_NAME = '__typename';
32
33
 
@@ -95,12 +96,12 @@ export function getOrCreateCacheForArtifact<
95
96
  > = [
96
97
  {
97
98
  kind: 'FragmentReference',
98
- readerWithRefetchQueries: {
99
+ readerWithRefetchQueries: wrapResolvedValue({
99
100
  kind: 'ReaderWithRefetchQueries',
100
101
  readerArtifact: entrypoint.readerWithRefetchQueries.readerArtifact,
101
102
  nestedRefetchQueries:
102
103
  entrypoint.readerWithRefetchQueries.nestedRefetchQueries,
103
- },
104
+ }),
104
105
  root: ROOT_ID,
105
106
  variables,
106
107
  networkRequest: networkRequest,
@@ -3,6 +3,7 @@ import { IsographEnvironment } from './IsographEnvironment';
3
3
  import { FragmentReference } from './FragmentReference';
4
4
  import { useReadAndSubscribe } from '../react/useReadAndSubscribe';
5
5
  import { NetworkRequestReaderOptions } from './read';
6
+ import { readPromise } from './PromiseWrapper';
6
7
 
7
8
  export function getOrCreateCachedComponent(
8
9
  environment: IsographEnvironment,
@@ -44,7 +45,11 @@ export function getOrCreateCachedComponent(
44
45
  );
45
46
  }
46
47
 
47
- return fragmentReference.readerWithRefetchQueries.readerArtifact.resolver(
48
+ const readerWithRefetchQueries = readPromise(
49
+ fragmentReference.readerWithRefetchQueries,
50
+ );
51
+
52
+ return readerWithRefetchQueries.readerArtifact.resolver(
48
53
  data,
49
54
  additionalRuntimeProps,
50
55
  );
package/src/core/read.ts CHANGED
@@ -9,7 +9,11 @@ import {
9
9
  IsographEnvironment,
10
10
  } from './IsographEnvironment';
11
11
  import { makeNetworkRequest } from './makeNetworkRequest';
12
- import { PromiseWrapper } from './PromiseWrapper';
12
+ import {
13
+ PromiseWrapper,
14
+ readPromise,
15
+ wrapResolvedValue,
16
+ } from './PromiseWrapper';
13
17
  import { ReaderAst } from './reader';
14
18
  import { Arguments } from './util';
15
19
 
@@ -24,12 +28,17 @@ export function readButDoNotEvaluate<TReadFromStore extends Object>(
24
28
  networkRequestOptions: NetworkRequestReaderOptions,
25
29
  ): WithEncounteredRecords<TReadFromStore> {
26
30
  const mutableEncounteredRecords = new Set<DataId>();
31
+
32
+ const readerWithRefetchQueries = readPromise(
33
+ fragmentReference.readerWithRefetchQueries,
34
+ );
35
+
27
36
  const response = readData(
28
37
  environment,
29
- fragmentReference.readerWithRefetchQueries.readerArtifact.readerAst,
38
+ readerWithRefetchQueries.readerArtifact.readerAst,
30
39
  fragmentReference.root,
31
40
  fragmentReference.variables ?? {},
32
- fragmentReference.readerWithRefetchQueries.nestedRefetchQueries,
41
+ readerWithRefetchQueries.nestedRefetchQueries,
33
42
  fragmentReference.networkRequest,
34
43
  networkRequestOptions,
35
44
  mutableEncounteredRecords,
@@ -309,11 +318,11 @@ function readData<TReadFromStore>(
309
318
  field.readerArtifact.componentName,
310
319
  {
311
320
  kind: 'FragmentReference',
312
- readerWithRefetchQueries: {
321
+ readerWithRefetchQueries: wrapResolvedValue({
313
322
  kind: 'ReaderWithRefetchQueries',
314
323
  readerArtifact: field.readerArtifact,
315
324
  nestedRefetchQueries: resolverRefetchQueries,
316
- },
325
+ }),
317
326
  root,
318
327
  variables: generateChildVariableMap(variables, field.arguments),
319
328
  networkRequest,
@@ -373,16 +382,18 @@ function readData<TReadFromStore>(
373
382
  field.entrypoint,
374
383
  localVariables,
375
384
  );
385
+
376
386
  const fragmentReference: FragmentReference<any, any> = {
377
387
  kind: 'FragmentReference',
378
- readerWithRefetchQueries: {
388
+ readerWithRefetchQueries: wrapResolvedValue({
379
389
  kind: 'ReaderWithRefetchQueries',
380
390
  readerArtifact:
381
391
  field.entrypoint.readerWithRefetchQueries.readerArtifact,
382
392
  nestedRefetchQueries:
383
393
  field.entrypoint.readerWithRefetchQueries
384
394
  .nestedRefetchQueries,
385
- },
395
+ } as const),
396
+
386
397
  // TODO localVariables is not guaranteed to have an id field
387
398
  root: localVariables.id,
388
399
  variables: localVariables,
package/src/index.ts CHANGED
@@ -8,6 +8,8 @@ export {
8
8
  type PromiseWrapper,
9
9
  readPromise,
10
10
  getPromiseState,
11
+ wrapResolvedValue,
12
+ wrapPromise,
11
13
  } from './core/PromiseWrapper';
12
14
  export { subscribe, normalizeData } from './core/cache';
13
15
  export { makeNetworkRequest } from './core/makeNetworkRequest';
@@ -12,6 +12,7 @@ import {
12
12
  createReferenceCountedPointer,
13
13
  ReferenceCountedPointer,
14
14
  } from '@isograph/reference-counted-pointer';
15
+ import { readPromise } from '../core/PromiseWrapper';
15
16
 
16
17
  type SkipOrLimit = 'skip' | 'limit';
17
18
  type OmitSkipLimit<TArgs> = keyof Omit<TArgs, SkipOrLimit> extends never
@@ -91,7 +92,12 @@ export function useSuspensefulSkipLimitPagination<
91
92
  fragmentReference,
92
93
  networkRequestOptions,
93
94
  );
94
- return fragmentReference.readerWithRefetchQueries.readerArtifact.resolver(
95
+
96
+ const readerWithRefetchQueries = readPromise(
97
+ fragmentReference.readerWithRefetchQueries,
98
+ );
99
+
100
+ return readerWithRefetchQueries.readerArtifact.resolver(
95
101
  data.item,
96
102
  undefined,
97
103
  ) as ReadonlyArray<any>;
@@ -7,6 +7,7 @@ import { FragmentReference, Variables } from '../core/FragmentReference';
7
7
  import { useIsographEnvironment } from './IsographEnvironmentProvider';
8
8
  import { ROOT_ID } from '../core/IsographEnvironment';
9
9
  import { makeNetworkRequest } from '../core/makeNetworkRequest';
10
+ import { wrapResolvedValue } from '../core/PromiseWrapper';
10
11
 
11
12
  export function useImperativeReference<
12
13
  TReadFromStore extends Object,
@@ -35,12 +36,12 @@ export function useImperativeReference<
35
36
  setState([
36
37
  {
37
38
  kind: 'FragmentReference',
38
- readerWithRefetchQueries: {
39
+ readerWithRefetchQueries: wrapResolvedValue({
39
40
  kind: 'ReaderWithRefetchQueries',
40
41
  readerArtifact: entrypoint.readerWithRefetchQueries.readerArtifact,
41
42
  nestedRefetchQueries:
42
43
  entrypoint.readerWithRefetchQueries.nestedRefetchQueries,
43
- },
44
+ }),
44
45
  root: ROOT_ID,
45
46
  variables,
46
47
  networkRequest,
@@ -6,7 +6,11 @@ import {
6
6
  getNetworkRequestOptionsWithDefaults,
7
7
  NetworkRequestReaderOptions,
8
8
  } from '../core/read';
9
- import { getPromiseState, PromiseWrapper } from '../core/PromiseWrapper';
9
+ import {
10
+ getPromiseState,
11
+ PromiseWrapper,
12
+ readPromise,
13
+ } from '../core/PromiseWrapper';
10
14
 
11
15
  export function useResult<TReadFromStore extends Object, TClientFieldValue>(
12
16
  fragmentReference: FragmentReference<TReadFromStore, TClientFieldValue>,
@@ -21,13 +25,16 @@ export function useResult<TReadFromStore extends Object, TClientFieldValue>(
21
25
  fragmentReference.networkRequest,
22
26
  networkRequestOptions,
23
27
  );
28
+ const readerWithRefetchQueries = readPromise(
29
+ fragmentReference.readerWithRefetchQueries,
30
+ );
24
31
 
25
- switch (fragmentReference.readerWithRefetchQueries.readerArtifact.kind) {
32
+ switch (readerWithRefetchQueries.readerArtifact.kind) {
26
33
  case 'ComponentReaderArtifact': {
27
34
  // @ts-expect-error
28
35
  return getOrCreateCachedComponent(
29
36
  environment,
30
- fragmentReference.readerWithRefetchQueries.readerArtifact.componentName,
37
+ readerWithRefetchQueries.readerArtifact.componentName,
31
38
  fragmentReference,
32
39
  networkRequestOptions,
33
40
  );
@@ -37,9 +44,7 @@ export function useResult<TReadFromStore extends Object, TClientFieldValue>(
37
44
  fragmentReference,
38
45
  networkRequestOptions,
39
46
  );
40
- return fragmentReference.readerWithRefetchQueries.readerArtifact.resolver(
41
- data,
42
- );
47
+ return readerWithRefetchQueries.readerArtifact.resolver(data);
43
48
  }
44
49
  }
45
50
  }
@@ -42,6 +42,6 @@ const artifact: IsographEntrypoint<
42
42
  nestedRefetchQueries,
43
43
  readerArtifact: readerResolver,
44
44
  }
45
- };
45
+ };
46
46
 
47
47
  export default artifact;
@@ -78,6 +78,6 @@ const artifact: IsographEntrypoint<
78
78
  nestedRefetchQueries,
79
79
  readerArtifact: readerResolver,
80
80
  }
81
- };
81
+ };
82
82
 
83
83
  export default artifact;
@@ -41,6 +41,6 @@ const artifact: IsographEntrypoint<
41
41
  nestedRefetchQueries,
42
42
  readerArtifact: readerResolver,
43
43
  }
44
- };
44
+ };
45
45
 
46
46
  export default artifact;