@isograph/react 0.0.0-main-d1233c41 → 0.0.0-main-3134ab29

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.
@@ -0,0 +1,5 @@
1
+ import * as React from 'react';
2
+ import { ExtractReadFromStore, ExtractResolverProps, ExtractResolverResult, IsographEntrypoint, type FragmentReference } from './index';
3
+ export declare function EntrypointReader<TEntrypoint extends IsographEntrypoint<any, any, any>>(props: {
4
+ queryReference: FragmentReference<ExtractReadFromStore<TEntrypoint>, ExtractResolverProps<TEntrypoint>, ExtractResolverResult<TEntrypoint>>;
5
+ }): ReturnType<React.FC<any>>;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.EntrypointReader = void 0;
27
+ const React = __importStar(require("react"));
28
+ const index_1 = require("./index");
29
+ function EntrypointReader(props) {
30
+ const Component = (0, index_1.useResult)(props.queryReference);
31
+ return React.createElement(Component, null);
32
+ }
33
+ exports.EntrypointReader = EntrypointReader;
package/dist/cache.js CHANGED
@@ -53,7 +53,7 @@ function makeNetworkRequest(environment, artifact, variables) {
53
53
  .networkFunction(artifact.queryText, variables)
54
54
  .then((networkResponse) => {
55
55
  if (typeof window !== 'undefined' && window.__LOG) {
56
- console.log('network response', artifact);
56
+ console.log('network response', artifact, artifact);
57
57
  }
58
58
  normalizeData(environment, artifact.normalizationAst, networkResponse.data, variables, artifact.nestedRefetchQueries);
59
59
  return networkResponse.data;
package/dist/index.d.ts CHANGED
@@ -1,6 +1,9 @@
1
1
  import { DataId, IsographEnvironment, Link, StoreRecord } from './IsographEnvironment';
2
+ export { type PromiseWrapper } from './PromiseWrapper';
2
3
  export { makeNetworkRequest, subscribe } from './cache';
3
4
  export { IsographEnvironmentContext, ROOT_ID, type DataId, type DataTypeValue, type IsographEnvironment, IsographEnvironmentProvider, type IsographEnvironmentProviderProps, type IsographNetworkFunction, type IsographStore, type Link, type StoreRecord, useIsographEnvironment, createIsographEnvironment, createIsographStore, } from './IsographEnvironment';
5
+ export { useImperativeReference } from './useImperativeReference';
6
+ export { EntrypointReader } from './EntrypointReader';
4
7
  export type IsographEntrypoint<TReadFromStore extends Object, TResolverProps, TResolverResult> = {
5
8
  kind: 'Entrypoint';
6
9
  queryText: string;
@@ -97,9 +100,9 @@ export type FragmentReference<TReadFromStore extends Object, TResolverProps, TRe
97
100
  } | null;
98
101
  nestedRefetchQueries: RefetchQueryArtifactWrapper[];
99
102
  };
100
- type ExtractReadFromStore<Type> = Type extends IsographEntrypoint<infer X, any, any> ? X : never;
101
- type ExtractResolverProps<Type> = Type extends IsographEntrypoint<any, infer X, any> ? X : never;
102
- type ExtractResolverResult<Type> = Type extends IsographEntrypoint<any, any, infer X> ? X : never;
103
+ export type ExtractReadFromStore<Type> = Type extends IsographEntrypoint<infer X, any, any> ? X : never;
104
+ export type ExtractResolverProps<Type> = Type extends IsographEntrypoint<any, infer X, any> ? X : never;
105
+ export type ExtractResolverResult<Type> = Type extends IsographEntrypoint<any, any, infer X> ? X : never;
103
106
  export declare function useLazyReference<TEntrypoint>(entrypoint: TEntrypoint | ((_: any) => any), variables: {
104
107
  [key: string]: Variable;
105
108
  }): {
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.defaultMissingFieldHandler = exports.readButDoNotEvaluate = exports.read = exports.useResult = exports.useLazyReference = exports.createIsographStore = exports.createIsographEnvironment = exports.useIsographEnvironment = exports.IsographEnvironmentProvider = exports.ROOT_ID = exports.IsographEnvironmentContext = exports.subscribe = exports.makeNetworkRequest = void 0;
3
+ exports.defaultMissingFieldHandler = exports.readButDoNotEvaluate = exports.read = exports.useResult = exports.useLazyReference = exports.EntrypointReader = exports.useImperativeReference = exports.createIsographStore = exports.createIsographEnvironment = exports.useIsographEnvironment = exports.IsographEnvironmentProvider = exports.ROOT_ID = exports.IsographEnvironmentContext = exports.subscribe = exports.makeNetworkRequest = void 0;
4
4
  const cache_1 = require("./cache");
5
5
  const react_disposable_state_1 = require("@isograph/react-disposable-state");
6
6
  const componentCache_1 = require("./componentCache");
@@ -16,6 +16,10 @@ Object.defineProperty(exports, "IsographEnvironmentProvider", { enumerable: true
16
16
  Object.defineProperty(exports, "useIsographEnvironment", { enumerable: true, get: function () { return IsographEnvironment_2.useIsographEnvironment; } });
17
17
  Object.defineProperty(exports, "createIsographEnvironment", { enumerable: true, get: function () { return IsographEnvironment_2.createIsographEnvironment; } });
18
18
  Object.defineProperty(exports, "createIsographStore", { enumerable: true, get: function () { return IsographEnvironment_2.createIsographStore; } });
19
+ var useImperativeReference_1 = require("./useImperativeReference");
20
+ Object.defineProperty(exports, "useImperativeReference", { enumerable: true, get: function () { return useImperativeReference_1.useImperativeReference; } });
21
+ var EntrypointReader_1 = require("./EntrypointReader");
22
+ Object.defineProperty(exports, "EntrypointReader", { enumerable: true, get: function () { return EntrypointReader_1.EntrypointReader; } });
19
23
  function assertIsEntrypoint(value) {
20
24
  if (typeof value === 'function')
21
25
  throw new Error('Not a string');
@@ -0,0 +1,8 @@
1
+ import { UnassignedState } from '@isograph/react-disposable-state';
2
+ import { type IsographEntrypoint, type FragmentReference, ExtractReadFromStore, ExtractResolverProps, ExtractResolverResult } from './index';
3
+ export declare function useImperativeReference<TEntrypoint extends IsographEntrypoint<any, any, any>>(entrypoint: TEntrypoint): {
4
+ queryReference: FragmentReference<ExtractReadFromStore<TEntrypoint>, ExtractResolverProps<TEntrypoint>, ExtractResolverResult<TEntrypoint>> | UnassignedState;
5
+ loadQueryReference: (variables: {
6
+ [index: string]: string;
7
+ }) => void;
8
+ };
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useImperativeReference = void 0;
4
+ const react_disposable_state_1 = require("@isograph/react-disposable-state");
5
+ const index_1 = require("./index");
6
+ function useImperativeReference(entrypoint) {
7
+ const { state, setState } = (0, react_disposable_state_1.useUpdatableDisposableState)();
8
+ const environment = (0, index_1.useIsographEnvironment)();
9
+ return {
10
+ queryReference: state,
11
+ loadQueryReference: (variables) => {
12
+ const [_networkRequest, disposeNetworkRequest] = (0, index_1.makeNetworkRequest)(environment, entrypoint, variables);
13
+ setState([
14
+ {
15
+ kind: 'FragmentReference',
16
+ readerArtifact: entrypoint.readerArtifact,
17
+ root: index_1.ROOT_ID,
18
+ variables,
19
+ nestedRefetchQueries: entrypoint.nestedRefetchQueries,
20
+ },
21
+ () => {
22
+ disposeNetworkRequest();
23
+ },
24
+ ]);
25
+ },
26
+ };
27
+ }
28
+ exports.useImperativeReference = useImperativeReference;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@isograph/react",
3
- "version": "0.0.0-main-d1233c41",
3
+ "version": "0.0.0-main-3134ab29",
4
4
  "description": "Use Isograph with React",
5
5
  "homepage": "https://isograph.dev",
6
6
  "main": "dist/index.js",
@@ -16,8 +16,8 @@
16
16
  "prepack": "yarn run test && yarn run compile"
17
17
  },
18
18
  "dependencies": {
19
- "@isograph/disposable-types": "0.0.0-main-d1233c41",
20
- "@isograph/react-disposable-state": "0.0.0-main-d1233c41",
19
+ "@isograph/disposable-types": "0.0.0-main-3134ab29",
20
+ "@isograph/react-disposable-state": "0.0.0-main-3134ab29",
21
21
  "react": "^18.2.0"
22
22
  },
23
23
  "devDependencies": {
@@ -0,0 +1,22 @@
1
+ import * as React from 'react';
2
+ import {
3
+ ExtractReadFromStore,
4
+ ExtractResolverProps,
5
+ ExtractResolverResult,
6
+ IsographEntrypoint,
7
+ type FragmentReference,
8
+ useResult,
9
+ } from './index';
10
+
11
+ export function EntrypointReader<
12
+ TEntrypoint extends IsographEntrypoint<any, any, any>,
13
+ >(props: {
14
+ queryReference: FragmentReference<
15
+ ExtractReadFromStore<TEntrypoint>,
16
+ ExtractResolverProps<TEntrypoint>,
17
+ ExtractResolverResult<TEntrypoint>
18
+ >;
19
+ }): ReturnType<React.FC<any>> {
20
+ const Component = useResult(props.queryReference);
21
+ return <Component />;
22
+ }
package/src/cache.tsx CHANGED
@@ -95,7 +95,7 @@ export function makeNetworkRequest<T>(
95
95
  .networkFunction(artifact.queryText, variables)
96
96
  .then((networkResponse) => {
97
97
  if (typeof window !== 'undefined' && window.__LOG) {
98
- console.log('network response', artifact);
98
+ console.log('network response', artifact, artifact);
99
99
  }
100
100
  normalizeData(
101
101
  environment,
package/src/index.tsx CHANGED
@@ -18,6 +18,7 @@ import {
18
18
  } from './IsographEnvironment';
19
19
  import { useEffect, useState } from 'react';
20
20
 
21
+ export { type PromiseWrapper } from './PromiseWrapper';
21
22
  export { makeNetworkRequest, subscribe } from './cache';
22
23
  export {
23
24
  IsographEnvironmentContext,
@@ -35,6 +36,8 @@ export {
35
36
  createIsographEnvironment,
36
37
  createIsographStore,
37
38
  } from './IsographEnvironment';
39
+ export { useImperativeReference } from './useImperativeReference';
40
+ export { EntrypointReader } from './EntrypointReader';
38
41
 
39
42
  // This type should be treated as an opaque type.
40
43
  export type IsographEntrypoint<
@@ -203,11 +206,11 @@ function assertIsEntrypoint<
203
206
  if (typeof value === 'function') throw new Error('Not a string');
204
207
  }
205
208
 
206
- type ExtractReadFromStore<Type> =
209
+ export type ExtractReadFromStore<Type> =
207
210
  Type extends IsographEntrypoint<infer X, any, any> ? X : never;
208
- type ExtractResolverProps<Type> =
211
+ export type ExtractResolverProps<Type> =
209
212
  Type extends IsographEntrypoint<any, infer X, any> ? X : never;
210
- type ExtractResolverResult<Type> =
213
+ export type ExtractResolverResult<Type> =
211
214
  Type extends IsographEntrypoint<any, any, infer X> ? X : never;
212
215
  // Note: we cannot write TEntrypoint extends IsographEntrypoint<any, any, any>, or else
213
216
  // if we do not explicitly pass a type, the read out type will be any.
@@ -217,7 +220,7 @@ export function useLazyReference<TEntrypoint>(
217
220
  entrypoint:
218
221
  | TEntrypoint
219
222
  // Temporarily, we need to allow useLazyReference to take the result of calling
220
- // iso`...`. At runtime, we confirm that the passed-in `iso` literal is actually
223
+ // iso(`...`). At runtime, we confirm that the passed-in `iso` literal is actually
221
224
  // an entrypoint.
222
225
  | ((_: any) => any),
223
226
  variables: { [key: string]: Variable },
@@ -0,0 +1,61 @@
1
+ import {
2
+ UnassignedState,
3
+ useUpdatableDisposableState,
4
+ } from '@isograph/react-disposable-state';
5
+ import {
6
+ type IsographEntrypoint,
7
+ type FragmentReference,
8
+ ExtractReadFromStore,
9
+ ExtractResolverProps,
10
+ ExtractResolverResult,
11
+ ROOT_ID,
12
+ useIsographEnvironment,
13
+ makeNetworkRequest,
14
+ } from './index';
15
+
16
+ export function useImperativeReference<
17
+ TEntrypoint extends IsographEntrypoint<any, any, any>,
18
+ >(
19
+ entrypoint: TEntrypoint,
20
+ ): {
21
+ queryReference:
22
+ | FragmentReference<
23
+ ExtractReadFromStore<TEntrypoint>,
24
+ ExtractResolverProps<TEntrypoint>,
25
+ ExtractResolverResult<TEntrypoint>
26
+ >
27
+ | UnassignedState;
28
+ loadQueryReference: (variables: { [index: string]: string }) => void;
29
+ } {
30
+ const { state, setState } =
31
+ useUpdatableDisposableState<
32
+ FragmentReference<
33
+ ExtractReadFromStore<TEntrypoint>,
34
+ ExtractResolverProps<TEntrypoint>,
35
+ ExtractResolverResult<TEntrypoint>
36
+ >
37
+ >();
38
+ const environment = useIsographEnvironment();
39
+ return {
40
+ queryReference: state,
41
+ loadQueryReference: (variables: { [index: string]: string }) => {
42
+ const [_networkRequest, disposeNetworkRequest] = makeNetworkRequest(
43
+ environment,
44
+ entrypoint,
45
+ variables,
46
+ );
47
+ setState([
48
+ {
49
+ kind: 'FragmentReference',
50
+ readerArtifact: entrypoint.readerArtifact,
51
+ root: ROOT_ID,
52
+ variables,
53
+ nestedRefetchQueries: entrypoint.nestedRefetchQueries,
54
+ },
55
+ () => {
56
+ disposeNetworkRequest();
57
+ },
58
+ ]);
59
+ },
60
+ };
61
+ }