@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.
- package/dist/EntrypointReader.d.ts +5 -0
- package/dist/EntrypointReader.js +33 -0
- package/dist/cache.js +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.js +5 -1
- package/dist/useImperativeReference.d.ts +8 -0
- package/dist/useImperativeReference.js +28 -0
- package/package.json +3 -3
- package/src/EntrypointReader.tsx +22 -0
- package/src/cache.tsx +1 -1
- package/src/index.tsx +7 -4
- package/src/useImperativeReference.ts +61 -0
@@ -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-
|
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-
|
20
|
-
"@isograph/react-disposable-state": "0.0.0-main-
|
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
|
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
|
+
}
|