@isograph/react 0.0.0-main-4adb5045 → 0.0.0-main-82400fb8

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 (98) hide show
  1. package/.turbo/turbo-compile-libs.log +1 -1
  2. package/dist/core/FragmentReference.d.ts +1 -1
  3. package/dist/core/FragmentReference.d.ts.map +1 -1
  4. package/dist/core/FragmentReference.js +2 -2
  5. package/dist/core/IsographEnvironment.d.ts +7 -5
  6. package/dist/core/IsographEnvironment.d.ts.map +1 -1
  7. package/dist/core/IsographEnvironment.js +5 -4
  8. package/dist/core/cache.d.ts +5 -18
  9. package/dist/core/cache.d.ts.map +1 -1
  10. package/dist/core/cache.js +6 -218
  11. package/dist/core/componentCache.d.ts +2 -2
  12. package/dist/core/componentCache.d.ts.map +1 -1
  13. package/dist/core/componentCache.js +1 -26
  14. package/dist/core/entrypoint.d.ts +2 -2
  15. package/dist/core/entrypoint.d.ts.map +1 -1
  16. package/dist/core/garbageCollection.d.ts +2 -2
  17. package/dist/core/garbageCollection.d.ts.map +1 -1
  18. package/dist/core/getOrCreateCacheForArtifact.d.ts +8 -0
  19. package/dist/core/getOrCreateCacheForArtifact.d.ts.map +1 -0
  20. package/dist/core/getOrCreateCacheForArtifact.js +40 -0
  21. package/dist/core/logging.d.ts +8 -8
  22. package/dist/core/logging.d.ts.map +1 -1
  23. package/dist/core/makeNetworkRequest.d.ts +3 -3
  24. package/dist/core/makeNetworkRequest.d.ts.map +1 -1
  25. package/dist/core/makeNetworkRequest.js +3 -2
  26. package/dist/core/optimisticProxy.d.ts.map +1 -1
  27. package/dist/core/optimisticProxy.js +2 -1
  28. package/dist/core/read.d.ts +3 -3
  29. package/dist/core/read.d.ts.map +1 -1
  30. package/dist/core/startUpdate.d.ts.map +1 -1
  31. package/dist/core/startUpdate.js +2 -1
  32. package/dist/core/subscribe.d.ts +8 -0
  33. package/dist/core/subscribe.d.ts.map +1 -0
  34. package/dist/core/subscribe.js +127 -0
  35. package/dist/core/util.d.ts +7 -0
  36. package/dist/core/util.d.ts.map +1 -1
  37. package/dist/core/util.js +26 -0
  38. package/dist/core/writeData.d.ts +7 -0
  39. package/dist/core/writeData.d.ts.map +1 -0
  40. package/dist/core/writeData.js +36 -0
  41. package/dist/index.d.ts +5 -2
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +8 -5
  44. package/dist/loadable-hooks/useConnectionSpecPagination.d.ts +3 -3
  45. package/dist/loadable-hooks/useConnectionSpecPagination.d.ts.map +1 -1
  46. package/dist/loadable-hooks/useConnectionSpecPagination.js +2 -2
  47. package/dist/loadable-hooks/useSkipLimitPagination.d.ts +3 -3
  48. package/dist/loadable-hooks/useSkipLimitPagination.d.ts.map +1 -1
  49. package/dist/loadable-hooks/useSkipLimitPagination.js +2 -2
  50. package/dist/react/createIsographEnvironment.d.ts +4 -0
  51. package/dist/react/createIsographEnvironment.d.ts.map +1 -0
  52. package/dist/react/createIsographEnvironment.js +8 -0
  53. package/dist/react/maybeUnwrapNetworkRequest.d.ts +4 -0
  54. package/dist/react/maybeUnwrapNetworkRequest.d.ts.map +1 -0
  55. package/dist/react/maybeUnwrapNetworkRequest.js +14 -0
  56. package/dist/react/useLazyReference.d.ts.map +1 -1
  57. package/dist/react/useLazyReference.js +2 -2
  58. package/dist/react/useReadAndSubscribe.d.ts +4 -2
  59. package/dist/react/useReadAndSubscribe.d.ts.map +1 -1
  60. package/dist/react/useReadAndSubscribe.js +31 -2
  61. package/dist/react/useRerenderOnChange.d.ts +2 -2
  62. package/dist/react/useRerenderOnChange.d.ts.map +1 -1
  63. package/dist/react/useRerenderOnChange.js +2 -2
  64. package/dist/react/useResult.d.ts +2 -4
  65. package/dist/react/useResult.d.ts.map +1 -1
  66. package/dist/react/useResult.js +3 -13
  67. package/package.json +4 -4
  68. package/src/core/FragmentReference.ts +2 -2
  69. package/src/core/IsographEnvironment.ts +26 -10
  70. package/src/core/cache.ts +14 -360
  71. package/src/core/componentCache.ts +8 -43
  72. package/src/core/entrypoint.ts +2 -2
  73. package/src/core/garbageCollection.ts +5 -5
  74. package/src/core/getOrCreateCacheForArtifact.ts +86 -0
  75. package/src/core/logging.ts +10 -10
  76. package/src/core/makeNetworkRequest.ts +8 -8
  77. package/src/core/optimisticProxy.ts +2 -5
  78. package/src/core/read.ts +13 -13
  79. package/src/core/startUpdate.ts +1 -1
  80. package/src/core/subscribe.ts +195 -0
  81. package/src/core/util.ts +26 -0
  82. package/src/core/writeData.ts +79 -0
  83. package/src/index.ts +3 -4
  84. package/src/loadable-hooks/useConnectionSpecPagination.ts +5 -5
  85. package/src/loadable-hooks/useSkipLimitPagination.ts +5 -5
  86. package/src/react/createIsographEnvironment.ts +23 -0
  87. package/src/react/maybeUnwrapNetworkRequest.ts +17 -0
  88. package/src/react/useLazyReference.ts +2 -4
  89. package/src/react/useReadAndSubscribe.ts +53 -5
  90. package/src/react/useRerenderOnChange.ts +3 -3
  91. package/src/react/useResult.ts +6 -24
  92. package/src/tests/garbageCollection.test.ts +3 -6
  93. package/src/tests/meNameSuccessor.ts +1 -1
  94. package/src/tests/nodeQuery.ts +1 -1
  95. package/src/tests/normalizeData.test.ts +5 -3
  96. package/src/tests/optimisticProxy.test.ts +5 -3
  97. package/src/tests/startUpdate.test.ts +5 -7
  98. package/vitest.config.ts +5 -0
@@ -1 +1 @@
1
- {"version":3,"file":"useSkipLimitPagination.d.ts","sourceRoot":"","sources":["../../src/loadable-hooks/useSkipLimitPagination.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,KAAK,qBAAqB,EAC3B,MAAM,2BAA2B,CAAC;AAMnC,OAAO,EAAE,aAAa,EAAkB,MAAM,gBAAgB,CAAC;AAM/D,MAAM,MAAM,uBAAuB,CACjC,cAAc,SAAS,qBAAqB,EAC5C,KAAK,IAEH;IACE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,CAClB,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,KACrD,IAAI,CAAC;IACV,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;CACxC,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IACvC,QAAQ,CAAC,eAAe,EAAE,iBAAiB,CACzC,cAAc,EACd,aAAa,CAAC,KAAK,CAAC,CACrB,CAAC;CACH,CAAC;AA6BN,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,sBAAsB,CACpC,KAAK,EACL,cAAc,SAAS,qBAAqB,EAE5C,aAAa,EAAE,aAAa,CAC1B,cAAc,EACd,aAAa,CAAC,KAAK,CAAC,EACpB,0BAA0B,CAC3B,EACD,YAAY,CAAC,EAAE;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;CAC7B,GACA,uBAAuB,CAAC,cAAc,EAAE,KAAK,CAAC,CA+OhD"}
1
+ {"version":3,"file":"useSkipLimitPagination.d.ts","sourceRoot":"","sources":["../../src/loadable-hooks/useSkipLimitPagination.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,2BAA2B,CAAC;AAMnC,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,gBAAgB,CAAC;AAM/D,MAAM,MAAM,uBAAuB,CACjC,cAAc,SAAS,qBAAqB,EAC5C,KAAK,IAEH;IACE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,CAClB,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,KACrD,IAAI,CAAC;IACV,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;CACxC,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IACvC,QAAQ,CAAC,eAAe,EAAE,iBAAiB,CACzC,cAAc,EACd,aAAa,CAAC,KAAK,CAAC,CACrB,CAAC;CACH,CAAC;AA6BN,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,sBAAsB,CACpC,KAAK,EACL,cAAc,SAAS,qBAAqB,EAE5C,aAAa,EAAE,aAAa,CAC1B,cAAc,EACd,aAAa,CAAC,KAAK,CAAC,EACpB,0BAA0B,CAC3B,EACD,YAAY,CAAC,EAAE;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;CAC7B,GACA,uBAAuB,CAAC,cAAc,EAAE,KAAK,CAAC,CA+OhD"}
@@ -9,8 +9,8 @@ const PromiseWrapper_1 = require("../core/PromiseWrapper");
9
9
  const read_1 = require("../core/read");
10
10
  const startUpdate_1 = require("../core/startUpdate");
11
11
  const IsographEnvironmentProvider_1 = require("../react/IsographEnvironmentProvider");
12
+ const maybeUnwrapNetworkRequest_1 = require("../react/maybeUnwrapNetworkRequest");
12
13
  const useReadAndSubscribe_1 = require("../react/useReadAndSubscribe");
13
- const useResult_1 = require("../react/useResult");
14
14
  function flatten(arr) {
15
15
  let outArray = [];
16
16
  for (const subarr of arr) {
@@ -54,7 +54,7 @@ function useSkipLimitPagination(loadableField, initialState) {
54
54
  }
55
55
  function subscribeCompletedFragmentReferences(completedReferences) {
56
56
  return completedReferences.map((fragmentReference, i) => {
57
- (0, useResult_1.maybeUnwrapNetworkRequest)(fragmentReference.networkRequest, networkRequestOptions);
57
+ (0, maybeUnwrapNetworkRequest_1.maybeUnwrapNetworkRequest)(fragmentReference.networkRequest, networkRequestOptions);
58
58
  const readerWithRefetchQueries = (0, PromiseWrapper_1.readPromise)(fragmentReference.readerWithRefetchQueries);
59
59
  const records = readOutDataAndRecords[i];
60
60
  if (records == null) {
@@ -0,0 +1,4 @@
1
+ import { type BaseStoreLayerData, type IsographNetworkFunction, type MissingFieldHandler } from '../core/IsographEnvironment';
2
+ import type { LogFunction } from '../core/logging';
3
+ export declare function createIsographEnvironment(baseStoreLayerData: BaseStoreLayerData, networkFunction: IsographNetworkFunction, missingFieldHandler?: MissingFieldHandler | null, logFunction?: LogFunction | null): import("../core/IsographEnvironment").IsographEnvironment;
4
+ //# sourceMappingURL=createIsographEnvironment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createIsographEnvironment.d.ts","sourceRoot":"","sources":["../../src/react/createIsographEnvironment.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGnD,wBAAgB,yBAAyB,CACvC,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,uBAAuB,EACxC,mBAAmB,CAAC,EAAE,mBAAmB,GAAG,IAAI,EAChD,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,6DASjC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createIsographEnvironment = createIsographEnvironment;
4
+ const IsographEnvironment_1 = require("../core/IsographEnvironment");
5
+ const useReadAndSubscribe_1 = require("./useReadAndSubscribe");
6
+ function createIsographEnvironment(baseStoreLayerData, networkFunction, missingFieldHandler, logFunction) {
7
+ return (0, IsographEnvironment_1.createIsographEnvironmentCore)(baseStoreLayerData, networkFunction, useReadAndSubscribe_1.componentFunction, missingFieldHandler, logFunction);
8
+ }
@@ -0,0 +1,4 @@
1
+ import { type PromiseWrapper } from '../core/PromiseWrapper';
2
+ import type { NetworkRequestReaderOptions } from '../core/read';
3
+ export declare function maybeUnwrapNetworkRequest(networkRequest: PromiseWrapper<void, any>, networkRequestOptions: NetworkRequestReaderOptions): void;
4
+ //# sourceMappingURL=maybeUnwrapNetworkRequest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maybeUnwrapNetworkRequest.d.ts","sourceRoot":"","sources":["../../src/react/maybeUnwrapNetworkRequest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAmB,MAAM,wBAAwB,CAAC;AAC9E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAEhE,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,EACzC,qBAAqB,EAAE,2BAA2B,QAWnD"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.maybeUnwrapNetworkRequest = maybeUnwrapNetworkRequest;
4
+ const PromiseWrapper_1 = require("../core/PromiseWrapper");
5
+ function maybeUnwrapNetworkRequest(networkRequest, networkRequestOptions) {
6
+ const state = (0, PromiseWrapper_1.getPromiseState)(networkRequest);
7
+ if (state.kind === 'Err' && networkRequestOptions.throwOnNetworkError) {
8
+ throw state.error;
9
+ }
10
+ else if (state.kind === 'Pending' &&
11
+ networkRequestOptions.suspendIfInFlight) {
12
+ throw state.promise;
13
+ }
14
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"useLazyReference.d.ts","sourceRoot":"","sources":["../../src/react/useLazyReference.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EACL,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,qBAAqB,EAC3B,MAAM,2BAA2B,CAAC;AAInC,wBAAgB,gBAAgB,CAC9B,cAAc,SAAS,qBAAqB,EAC5C,iBAAiB,EACjB,iBAAiB,SAAS,gBAAgB,GAAG,sBAAsB,EACnE,gBAAgB,SAAS,qBAAqB,EAE9C,UAAU,EAAE,kBAAkB,CAC5B,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,CACjB,EACD,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC5C,GAAG,CAAC,YAAY,CAAC,EAAE,iBAAiB,SAAS,sBAAsB,GAC/D,CAAC,YAAY,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,GACvD,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,GACrE,gBAAgB,GAAG,sBAAsB,SAAS,iBAAiB,GAClE,OAAO,GACP;IACE,iBAAiB,EAAE,iBAAiB,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;CACzE,CAqBJ"}
1
+ {"version":3,"file":"useLazyReference.d.ts","sourceRoot":"","sources":["../../src/react/useLazyReference.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EACL,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,qBAAqB,EAC3B,MAAM,2BAA2B,CAAC;AAKnC,wBAAgB,gBAAgB,CAC9B,cAAc,SAAS,qBAAqB,EAC5C,iBAAiB,EACjB,iBAAiB,SAAS,gBAAgB,GAAG,sBAAsB,EACnE,gBAAgB,SAAS,qBAAqB,EAE9C,UAAU,EAAE,kBAAkB,CAC5B,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,CACjB,EACD,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC5C,GAAG,CAAC,YAAY,CAAC,EAAE,iBAAiB,SAAS,sBAAsB,GAC/D,CAAC,YAAY,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,GACvD,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,GACrE,gBAAgB,GAAG,sBAAsB,SAAS,iBAAiB,GAClE,OAAO,GACP;IACE,iBAAiB,EAAE,iBAAiB,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;CACzE,CAqBJ"}
@@ -2,9 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useLazyReference = useLazyReference;
4
4
  const react_disposable_state_1 = require("@isograph/react-disposable-state");
5
- const cache_1 = require("../core/cache");
6
5
  const logging_1 = require("../core/logging");
7
6
  const IsographEnvironmentProvider_1 = require("./IsographEnvironmentProvider");
7
+ const getOrCreateCacheForArtifact_1 = require("../core/getOrCreateCacheForArtifact");
8
8
  function useLazyReference(entrypoint, variables, ...[fetchOptions]) {
9
9
  const environment = (0, IsographEnvironmentProvider_1.useIsographEnvironment)();
10
10
  if ((entrypoint === null || entrypoint === void 0 ? void 0 : entrypoint.kind) !== 'Entrypoint') {
@@ -14,7 +14,7 @@ function useLazyReference(entrypoint, variables, ...[fetchOptions]) {
14
14
  entrypoint,
15
15
  }));
16
16
  }
17
- const cache = (0, cache_1.getOrCreateCacheForArtifact)(environment, entrypoint, variables, fetchOptions);
17
+ const cache = (0, getOrCreateCacheForArtifact_1.getOrCreateCacheForArtifact)(environment, entrypoint, variables, fetchOptions);
18
18
  return {
19
19
  fragmentReference: (0, react_disposable_state_1.useLazyDisposableState)(cache).state,
20
20
  };
@@ -1,5 +1,6 @@
1
- import { ExtractData, FragmentReference, type UnknownTReadFromStore } from '../core/FragmentReference';
2
- import { NetworkRequestReaderOptions, WithEncounteredRecords } from '../core/read';
1
+ import { type ExtractData, type FragmentReference, type UnknownTReadFromStore } from '../core/FragmentReference';
2
+ import type { IsographComponentFunction } from '../core/IsographEnvironment';
3
+ import { type NetworkRequestReaderOptions, type WithEncounteredRecords } from '../core/read';
3
4
  import type { ReaderAst } from '../core/reader';
4
5
  /**
5
6
  * Read the data from a fragment reference and subscribe to updates.
@@ -11,4 +12,5 @@ export declare function useSubscribeToMultiple<TReadFromStore extends UnknownTRe
11
12
  fragmentReference: FragmentReference<TReadFromStore, any>;
12
13
  readerAst: ReaderAst<TReadFromStore>;
13
14
  }>): void;
15
+ export declare const componentFunction: IsographComponentFunction;
14
16
  //# sourceMappingURL=useReadAndSubscribe.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useReadAndSubscribe.d.ts","sourceRoot":"","sources":["../../src/react/useReadAndSubscribe.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,WAAW,EACX,iBAAiB,EAEjB,KAAK,qBAAqB,EAC3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,2BAA2B,EAE3B,sBAAsB,EACvB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIhD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,cAAc,SAAS,qBAAqB,EAE5C,iBAAiB,EAAE,iBAAiB,CAAC,cAAc,EAAE,GAAG,CAAC,EACzD,qBAAqB,EAAE,2BAA2B,EAClD,SAAS,EAAE,SAAS,CAAC,cAAc,CAAC,GACnC,WAAW,CAAC,cAAc,CAAC,CAY7B;AAED,wBAAgB,sBAAsB,CACpC,cAAc,SAAS,qBAAqB,EAE5C,KAAK,EAAE,aAAa,CAAC;IACnB,OAAO,EAAE,sBAAsB,CAAC,cAAc,CAAC,CAAC;IAChD,QAAQ,EAAE,CAAC,cAAc,EAAE,sBAAsB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAC3E,iBAAiB,EAAE,iBAAiB,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IAC1D,SAAS,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;CACtC,CAAC,QAiCH"}
1
+ {"version":3,"file":"useReadAndSubscribe.d.ts","sourceRoot":"","sources":["../../src/react/useReadAndSubscribe.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,iBAAiB,EAEtB,KAAK,qBAAqB,EAC3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAG7E,OAAO,EACL,KAAK,2BAA2B,EAEhC,KAAK,sBAAsB,EAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAMhD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,cAAc,SAAS,qBAAqB,EAE5C,iBAAiB,EAAE,iBAAiB,CAAC,cAAc,EAAE,GAAG,CAAC,EACzD,qBAAqB,EAAE,2BAA2B,EAClD,SAAS,EAAE,SAAS,CAAC,cAAc,CAAC,GACnC,WAAW,CAAC,cAAc,CAAC,CAY7B;AAED,wBAAgB,sBAAsB,CACpC,cAAc,SAAS,qBAAqB,EAE5C,KAAK,EAAE,aAAa,CAAC;IACnB,OAAO,EAAE,sBAAsB,CAAC,cAAc,CAAC,CAAC;IAChD,QAAQ,EAAE,CAAC,cAAc,EAAE,sBAAsB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAC3E,iBAAiB,EAAE,iBAAiB,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IAC1D,SAAS,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;CACtC,CAAC,QAiCH;AAED,eAAO,MAAM,iBAAiB,EAAE,yBA0C/B,CAAC"}
@@ -1,12 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.componentFunction = void 0;
3
4
  exports.useReadAndSubscribe = useReadAndSubscribe;
4
5
  exports.useSubscribeToMultiple = useSubscribeToMultiple;
5
6
  const react_1 = require("react");
6
- const cache_1 = require("../core/cache");
7
7
  const FragmentReference_1 = require("../core/FragmentReference");
8
+ const logging_1 = require("../core/logging");
9
+ const PromiseWrapper_1 = require("../core/PromiseWrapper");
8
10
  const read_1 = require("../core/read");
11
+ const subscribe_1 = require("../core/subscribe");
9
12
  const IsographEnvironmentProvider_1 = require("./IsographEnvironmentProvider");
13
+ const maybeUnwrapNetworkRequest_1 = require("./maybeUnwrapNetworkRequest");
10
14
  const useRerenderOnChange_1 = require("./useRerenderOnChange");
11
15
  /**
12
16
  * Read the data from a fragment reference and subscribe to updates.
@@ -21,7 +25,7 @@ function useSubscribeToMultiple(items) {
21
25
  const environment = (0, IsographEnvironmentProvider_1.useIsographEnvironment)();
22
26
  (0, react_1.useEffect)(() => {
23
27
  const cleanupFns = items.map(({ records, callback, fragmentReference, readerAst }) => {
24
- return (0, cache_1.subscribe)(environment, records, fragmentReference, callback, readerAst);
28
+ return (0, subscribe_1.subscribe)(environment, records, fragmentReference, callback, readerAst);
25
29
  });
26
30
  return () => {
27
31
  cleanupFns.forEach((loader) => {
@@ -40,3 +44,28 @@ function useSubscribeToMultiple(items) {
40
44
  .join('.'),
41
45
  ]);
42
46
  }
47
+ const componentFunction = (environment, fragmentReference, networkRequestOptions, startUpdate) => {
48
+ function Component(additionalRuntimeProps) {
49
+ (0, maybeUnwrapNetworkRequest_1.maybeUnwrapNetworkRequest)(fragmentReference.networkRequest, networkRequestOptions);
50
+ const readerWithRefetchQueries = (0, PromiseWrapper_1.readPromise)(fragmentReference.readerWithRefetchQueries);
51
+ const data = useReadAndSubscribe(fragmentReference, networkRequestOptions, readerWithRefetchQueries.readerArtifact.readerAst);
52
+ (0, logging_1.logMessage)(environment, () => ({
53
+ kind: 'ComponentRerendered',
54
+ componentName: fragmentReference.fieldName,
55
+ rootLink: fragmentReference.root,
56
+ }));
57
+ return readerWithRefetchQueries.readerArtifact.resolver(
58
+ // @ts-expect-error
59
+ {
60
+ data,
61
+ parameters: fragmentReference.variables,
62
+ startUpdate: readerWithRefetchQueries.readerArtifact.hasUpdatable
63
+ ? startUpdate
64
+ : undefined,
65
+ }, additionalRuntimeProps);
66
+ }
67
+ const idString = `(type: ${fragmentReference.root.__typename}, id: ${fragmentReference.root.__link})`;
68
+ Component.displayName = `${fragmentReference.fieldName} ${idString} @component`;
69
+ return Component;
70
+ };
71
+ exports.componentFunction = componentFunction;
@@ -1,5 +1,5 @@
1
- import { FragmentReference } from '../core/FragmentReference';
2
- import { WithEncounteredRecords } from '../core/read';
1
+ import type { FragmentReference } from '../core/FragmentReference';
2
+ import type { WithEncounteredRecords } from '../core/read';
3
3
  import type { ReaderAst } from '../core/reader';
4
4
  export declare function useRerenderOnChange<TReadFromStore extends {
5
5
  parameters: object;
@@ -1 +1 @@
1
- {"version":3,"file":"useRerenderOnChange.d.ts","sourceRoot":"","sources":["../../src/react/useRerenderOnChange.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAKhD,wBAAgB,mBAAmB,CACjC,cAAc,SAAS;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAE3D,yBAAyB,EAAE,sBAAsB,CAAC,cAAc,CAAC,EACjE,iBAAiB,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,EAC9C,4BAA4B,EAAE,CAC5B,IAAI,EAAE,sBAAsB,CAAC,cAAc,CAAC,KACzC,IAAI,EACT,SAAS,EAAE,SAAS,CAAC,cAAc,CAAC,QAoBrC"}
1
+ {"version":3,"file":"useRerenderOnChange.d.ts","sourceRoot":"","sources":["../../src/react/useRerenderOnChange.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAMhD,wBAAgB,mBAAmB,CACjC,cAAc,SAAS;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAE3D,yBAAyB,EAAE,sBAAsB,CAAC,cAAc,CAAC,EACjE,iBAAiB,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,EAC9C,4BAA4B,EAAE,CAC5B,IAAI,EAAE,sBAAsB,CAAC,cAAc,CAAC,KACzC,IAAI,EACT,SAAS,EAAE,SAAS,CAAC,cAAc,CAAC,QAoBrC"}
@@ -2,14 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useRerenderOnChange = useRerenderOnChange;
4
4
  const react_1 = require("react");
5
- const cache_1 = require("../core/cache");
5
+ const subscribe_1 = require("../core/subscribe");
6
6
  const IsographEnvironmentProvider_1 = require("./IsographEnvironmentProvider");
7
7
  // TODO add unit tests for this. Add integration tests that test
8
8
  // behavior when the encounteredRecords underneath a fragment change.
9
9
  function useRerenderOnChange(encounteredDataAndRecords, fragmentReference, setEncounteredDataAndRecords, readerAst) {
10
10
  const environment = (0, IsographEnvironmentProvider_1.useIsographEnvironment)();
11
11
  (0, react_1.useEffect)(() => {
12
- return (0, cache_1.subscribe)(environment, encounteredDataAndRecords, fragmentReference, (newEncounteredDataAndRecords) => {
12
+ return (0, subscribe_1.subscribe)(environment, encounteredDataAndRecords, fragmentReference, (newEncounteredDataAndRecords) => {
13
13
  setEncounteredDataAndRecords(newEncounteredDataAndRecords);
14
14
  }, readerAst);
15
15
  // Note: this is an empty array on purpose:
@@ -1,6 +1,4 @@
1
- import { FragmentReference, type UnknownTReadFromStore } from '../core/FragmentReference';
2
- import { PromiseWrapper } from '../core/PromiseWrapper';
3
- import { NetworkRequestReaderOptions } from '../core/read';
1
+ import type { FragmentReference, UnknownTReadFromStore } from '../core/FragmentReference';
2
+ import { type NetworkRequestReaderOptions } from '../core/read';
4
3
  export declare function useResult<TReadFromStore extends UnknownTReadFromStore, TClientFieldValue>(fragmentReference: FragmentReference<TReadFromStore, TClientFieldValue>, partialNetworkRequestOptions?: Partial<NetworkRequestReaderOptions> | void): TClientFieldValue;
5
- export declare function maybeUnwrapNetworkRequest(networkRequest: PromiseWrapper<void, any>, networkRequestOptions: NetworkRequestReaderOptions): void;
6
4
  //# sourceMappingURL=useResult.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useResult.d.ts","sourceRoot":"","sources":["../../src/react/useResult.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,KAAK,qBAAqB,EAC3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEL,cAAc,EAEf,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,2BAA2B,EAC5B,MAAM,cAAc,CAAC;AAKtB,wBAAgB,SAAS,CACvB,cAAc,SAAS,qBAAqB,EAC5C,iBAAiB,EAEjB,iBAAiB,EAAE,iBAAiB,CAAC,cAAc,EAAE,iBAAiB,CAAC,EACvE,4BAA4B,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,GAAG,IAAI,GACzE,iBAAiB,CA6CnB;AAED,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,EACzC,qBAAqB,EAAE,2BAA2B,QAWnD"}
1
+ {"version":3,"file":"useResult.d.ts","sourceRoot":"","sources":["../../src/react/useResult.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,KAAK,2BAA2B,EAEjC,MAAM,cAAc,CAAC;AAMtB,wBAAgB,SAAS,CACvB,cAAc,SAAS,qBAAqB,EAC5C,iBAAiB,EAEjB,iBAAiB,EAAE,iBAAiB,CAAC,cAAc,EAAE,iBAAiB,CAAC,EACvE,4BAA4B,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,GAAG,IAAI,GACzE,iBAAiB,CA6CnB"}
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useResult = useResult;
4
- exports.maybeUnwrapNetworkRequest = maybeUnwrapNetworkRequest;
5
4
  const componentCache_1 = require("../core/componentCache");
6
5
  const PromiseWrapper_1 = require("../core/PromiseWrapper");
7
6
  const read_1 = require("../core/read");
8
7
  const startUpdate_1 = require("../core/startUpdate");
9
- const IsographEnvironmentProvider_1 = require("../react/IsographEnvironmentProvider");
8
+ const IsographEnvironmentProvider_1 = require("./IsographEnvironmentProvider");
9
+ const maybeUnwrapNetworkRequest_1 = require("./maybeUnwrapNetworkRequest");
10
10
  const useReadAndSubscribe_1 = require("./useReadAndSubscribe");
11
11
  function useResult(fragmentReference, partialNetworkRequestOptions) {
12
12
  const environment = (0, IsographEnvironmentProvider_1.useIsographEnvironment)();
@@ -17,7 +17,7 @@ function useResult(fragmentReference, partialNetworkRequestOptions) {
17
17
  return (0, componentCache_1.getOrCreateCachedComponent)(environment, fragmentReference, networkRequestOptions);
18
18
  }
19
19
  case 'EagerReaderArtifact': {
20
- maybeUnwrapNetworkRequest(fragmentReference.networkRequest, networkRequestOptions);
20
+ (0, maybeUnwrapNetworkRequest_1.maybeUnwrapNetworkRequest)(fragmentReference.networkRequest, networkRequestOptions);
21
21
  const readerWithRefetchQueries = (0, PromiseWrapper_1.readPromise)(fragmentReference.readerWithRefetchQueries);
22
22
  const data = (0, useReadAndSubscribe_1.useReadAndSubscribe)(fragmentReference, networkRequestOptions, readerWithRefetchQueries.readerArtifact.readerAst);
23
23
  const param = Object.assign({ data: data, parameters: fragmentReference.variables }, (readerWithRefetchQueries.readerArtifact.hasUpdatable
@@ -30,13 +30,3 @@ function useResult(fragmentReference, partialNetworkRequestOptions) {
30
30
  }
31
31
  }
32
32
  }
33
- function maybeUnwrapNetworkRequest(networkRequest, networkRequestOptions) {
34
- const state = (0, PromiseWrapper_1.getPromiseState)(networkRequest);
35
- if (state.kind === 'Err' && networkRequestOptions.throwOnNetworkError) {
36
- throw state.error;
37
- }
38
- else if (state.kind === 'Pending' &&
39
- networkRequestOptions.suspendIfInFlight) {
40
- throw state.promise;
41
- }
42
- }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@isograph/react",
3
- "version": "0.0.0-main-4adb5045",
3
+ "version": "0.0.0-main-82400fb8",
4
4
  "description": "Use Isograph with React",
5
5
  "homepage": "https://isograph.dev",
6
6
  "main": "dist/index.js",
@@ -8,9 +8,9 @@
8
8
  "author": "Isograph Labs",
9
9
  "license": "MIT",
10
10
  "dependencies": {
11
- "@isograph/disposable-types": "0.0.0-main-4adb5045",
12
- "@isograph/reference-counted-pointer": "0.0.0-main-4adb5045",
13
- "@isograph/react-disposable-state": "0.0.0-main-4adb5045"
11
+ "@isograph/disposable-types": "0.0.0-main-82400fb8",
12
+ "@isograph/react-disposable-state": "0.0.0-main-82400fb8",
13
+ "@isograph/reference-counted-pointer": "0.0.0-main-82400fb8"
14
14
  },
15
15
  "peerDependencies": {
16
16
  "react": "^18.0.0 || ^19.0.0"
@@ -1,11 +1,11 @@
1
- import { ReaderWithRefetchQueries } from '../core/entrypoint';
2
- import { stableCopy } from './cache';
1
+ import { ReaderWithRefetchQueries } from './entrypoint';
3
2
  import {
4
3
  type ComponentOrFieldName,
5
4
  type StoreLink,
6
5
  } from './IsographEnvironment';
7
6
  import { PromiseWrapper } from './PromiseWrapper';
8
7
  import type { StartUpdate } from './reader';
8
+ import { stableCopy } from './util';
9
9
 
10
10
  // TODO type this better
11
11
  export type VariableValue =
@@ -1,29 +1,33 @@
1
1
  import { ParentCache } from '@isograph/react-disposable-state';
2
2
  import type { Brand } from './brand';
3
- import { isArray } from './cache';
4
- import {
3
+ import type {
5
4
  IsographEntrypoint,
6
5
  IsographOperation,
7
6
  IsographPersistedOperation,
8
- type ReaderWithRefetchQueries,
9
- type ReaderWithRefetchQueriesLoader,
7
+ ReaderWithRefetchQueries,
8
+ ReaderWithRefetchQueriesLoader,
10
9
  } from './entrypoint';
11
- import {
10
+ import type {
11
+ ExtractStartUpdate,
12
12
  FragmentReference,
13
+ StableIdForFragmentReference,
14
+ UnknownTReadFromStore,
13
15
  Variables,
14
- type StableIdForFragmentReference,
15
- type UnknownTReadFromStore,
16
16
  } from './FragmentReference';
17
17
  import type { RetainedQuery } from './garbageCollection';
18
- import { LogFunction, WrappedLogFunction } from './logging';
18
+ import type { LogFunction, WrappedLogFunction } from './logging';
19
19
  import { type StoreLayer } from './optimisticProxy';
20
20
  import {
21
21
  PromiseWrapper,
22
22
  wrapPromise,
23
23
  wrapResolvedValue,
24
24
  } from './PromiseWrapper';
25
- import { WithEncounteredRecords } from './read';
25
+ import type {
26
+ NetworkRequestReaderOptions,
27
+ WithEncounteredRecords,
28
+ } from './read';
26
29
  import type { ReaderAst, StartUpdate } from './reader';
30
+ import { isArray } from './util';
27
31
 
28
32
  export type ComponentOrFieldName = string;
29
33
  export type StringifiedArgs = string;
@@ -66,6 +70,7 @@ export type CacheMap<T> = { [index: string]: ParentCache<T> };
66
70
  export type IsographEnvironment = {
67
71
  store: StoreLayer;
68
72
  readonly networkFunction: IsographNetworkFunction;
73
+ readonly componentFunction: IsographComponentFunction;
69
74
  readonly missingFieldHandler: MissingFieldHandler | null;
70
75
  readonly componentCache: FieldCache<React.FC<any>>;
71
76
  readonly eagerReaderCache: FieldCache<StartUpdate<any> | undefined>;
@@ -97,6 +102,15 @@ export type IsographNetworkFunction = (
97
102
  variables: Variables,
98
103
  ) => Promise<any>;
99
104
 
105
+ export type IsographComponentFunction = <
106
+ TReadFromStore extends UnknownTReadFromStore = any,
107
+ >(
108
+ environment: IsographEnvironment,
109
+ fragmentReference: FragmentReference<TReadFromStore, any>,
110
+ networkRequestOptions: NetworkRequestReaderOptions,
111
+ startUpdate: ExtractStartUpdate<TReadFromStore>,
112
+ ) => React.FC<any>;
113
+
100
114
  export interface Link<T extends TypeName> extends StoreLink {
101
115
  readonly __link: Brand<DataId, T>;
102
116
  readonly __typename: T;
@@ -146,9 +160,10 @@ export interface BaseStoreLayerData extends StoreLayerData {
146
160
  }
147
161
 
148
162
  const DEFAULT_GC_BUFFER_SIZE = 10;
149
- export function createIsographEnvironment(
163
+ export function createIsographEnvironmentCore(
150
164
  baseStoreLayerData: BaseStoreLayerData,
151
165
  networkFunction: IsographNetworkFunction,
166
+ componentFunction: IsographComponentFunction,
152
167
  missingFieldHandler?: MissingFieldHandler | null,
153
168
  logFunction?: LogFunction | null,
154
169
  ): IsographEnvironment {
@@ -164,6 +179,7 @@ export function createIsographEnvironment(
164
179
  return {
165
180
  store,
166
181
  networkFunction,
182
+ componentFunction,
167
183
  missingFieldHandler: missingFieldHandler ?? null,
168
184
  componentCache: {},
169
185
  eagerReaderCache: {},