@isograph/react 0.0.0-main-90264a00 → 0.0.0-main-2fbc0faf
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 +2 -1
- package/dist/EntrypointReader.js +2 -2
- package/dist/FragmentReference.d.ts +13 -0
- package/dist/FragmentReference.js +2 -0
- package/dist/IsographEnvironment.d.ts +1 -0
- package/dist/IsographEnvironment.js +14 -1
- package/dist/cache.d.ts +2 -1
- package/dist/componentCache.d.ts +2 -1
- package/dist/componentCache.js +2 -2
- package/dist/entrypoint.d.ts +3 -1
- package/dist/garbageCollection.d.ts +1 -1
- package/dist/garbageCollection.js +2 -3
- package/dist/index.d.ts +5 -38
- package/dist/index.js +21 -294
- package/dist/read.d.ts +4 -0
- package/dist/read.js +233 -0
- package/dist/reader.d.ts +1 -1
- package/dist/useImperativeReference.d.ts +2 -1
- package/dist/useImperativeReference.js +6 -4
- package/dist/useLazyReference.d.ts +7 -0
- package/dist/useLazyReference.js +30 -0
- package/dist/useResult.d.ts +2 -0
- package/dist/useResult.js +18 -0
- package/dist/util.d.ts +11 -0
- package/dist/util.js +2 -0
- package/package.json +3 -3
- package/src/EntrypointReader.tsx +3 -6
- package/src/FragmentReference.ts +18 -0
- package/src/IsographEnvironment.tsx +13 -0
- package/src/cache.tsx +9 -11
- package/src/componentCache.ts +3 -5
- package/src/entrypoint.ts +6 -1
- package/src/garbageCollection.ts +2 -1
- package/src/index.tsx +11 -467
- package/src/read.ts +338 -0
- package/src/reader.ts +1 -1
- package/src/useImperativeReference.ts +6 -6
- package/src/useLazyReference.ts +58 -0
- package/src/useResult.ts +20 -0
- package/src/util.ts +15 -0
@@ -1,5 +1,6 @@
|
|
1
1
|
import * as React from 'react';
|
2
|
-
import { ExtractReadFromStore, IsographEntrypoint
|
2
|
+
import { ExtractReadFromStore, IsographEntrypoint } from './entrypoint';
|
3
|
+
import { FragmentReference } from './FragmentReference';
|
3
4
|
export declare function EntrypointReader<TProps extends Record<any, any>, TEntrypoint extends IsographEntrypoint<any, React.FC<TProps>>>(props: {
|
4
5
|
queryReference: FragmentReference<ExtractReadFromStore<TEntrypoint>, React.FC<TProps>>;
|
5
6
|
additionalProps: TProps;
|
package/dist/EntrypointReader.js
CHANGED
@@ -25,9 +25,9 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
26
26
|
exports.EntrypointReader = void 0;
|
27
27
|
const React = __importStar(require("react"));
|
28
|
-
const
|
28
|
+
const useResult_1 = require("./useResult");
|
29
29
|
function EntrypointReader(props) {
|
30
|
-
const Component = (0,
|
30
|
+
const Component = (0, useResult_1.useResult)(props.queryReference);
|
31
31
|
return React.createElement(Component, Object.assign({}, props.additionalProps));
|
32
32
|
}
|
33
33
|
exports.EntrypointReader = EntrypointReader;
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { DataId } from './IsographEnvironment';
|
2
|
+
import { RefetchQueryArtifactWrapper } from './entrypoint';
|
3
|
+
import { ReaderArtifact } from './reader';
|
4
|
+
export type Variable = any;
|
5
|
+
export type FragmentReference<TReadFromStore extends Object, TResolverResult> = {
|
6
|
+
kind: 'FragmentReference';
|
7
|
+
readerArtifact: ReaderArtifact<TReadFromStore, TResolverResult>;
|
8
|
+
root: DataId;
|
9
|
+
variables: {
|
10
|
+
[index: string]: Variable;
|
11
|
+
} | null;
|
12
|
+
nestedRefetchQueries: RefetchQueryArtifactWrapper[];
|
13
|
+
};
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.defaultMissingFieldHandler = exports.createIsographStore = exports.createIsographEnvironment = exports.ROOT_ID = void 0;
|
3
|
+
exports.assertLink = exports.defaultMissingFieldHandler = exports.createIsographStore = exports.createIsographEnvironment = exports.ROOT_ID = void 0;
|
4
4
|
exports.ROOT_ID = '__ROOT';
|
5
5
|
const DEFAULT_GC_BUFFER_SIZE = 10;
|
6
6
|
function createIsographEnvironment(store, networkFunction, missingFieldHandler) {
|
@@ -34,3 +34,16 @@ function defaultMissingFieldHandler(_storeRecord, _root, fieldName, arguments_,
|
|
34
34
|
}
|
35
35
|
}
|
36
36
|
exports.defaultMissingFieldHandler = defaultMissingFieldHandler;
|
37
|
+
function assertLink(link) {
|
38
|
+
if (Array.isArray(link)) {
|
39
|
+
throw new Error('Unexpected array');
|
40
|
+
}
|
41
|
+
if (link == null) {
|
42
|
+
return null;
|
43
|
+
}
|
44
|
+
if (typeof link === 'object') {
|
45
|
+
return link;
|
46
|
+
}
|
47
|
+
throw new Error('Invalid link');
|
48
|
+
}
|
49
|
+
exports.assertLink = assertLink;
|
package/dist/cache.d.ts
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
import { ItemCleanupPair, ParentCache } from '@isograph/react-disposable-state';
|
2
2
|
import { PromiseWrapper } from './PromiseWrapper';
|
3
|
-
import { IsographEntrypoint, NormalizationLinkedField, NormalizationScalarField, ReaderLinkedField, ReaderScalarField } from './index';
|
4
3
|
import { type IsographEnvironment } from './IsographEnvironment';
|
4
|
+
import { IsographEntrypoint, NormalizationLinkedField, NormalizationScalarField } from './entrypoint';
|
5
|
+
import { ReaderLinkedField, ReaderScalarField } from './reader';
|
5
6
|
declare global {
|
6
7
|
interface Window {
|
7
8
|
__LOG: boolean;
|
package/dist/componentCache.d.ts
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
/// <reference types="react" />
|
2
|
-
import {
|
2
|
+
import { RefetchQueryArtifactWrapper } from './entrypoint';
|
3
3
|
import { IsographEnvironment, DataId } from './IsographEnvironment';
|
4
|
+
import { ReaderArtifact } from './reader';
|
4
5
|
export declare function getOrCreateCachedComponent(environment: IsographEnvironment, root: DataId, componentName: string, readerArtifact: ReaderArtifact<any, any>, variables: {
|
5
6
|
[key: string]: string;
|
6
7
|
}, resolverRefetchQueries: RefetchQueryArtifactWrapper[]): import("react").FC<any>;
|
package/dist/componentCache.js
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.getOrCreateCachedComponent = void 0;
|
4
|
-
const index_1 = require("./index");
|
5
4
|
const cache_1 = require("./cache");
|
5
|
+
const read_1 = require("./read");
|
6
6
|
function getOrCreateCachedComponent(environment, root, componentName, readerArtifact, variables, resolverRefetchQueries) {
|
7
7
|
var _a, _b, _c;
|
8
8
|
const cachedComponentsById = environment.componentCache;
|
@@ -14,7 +14,7 @@ function getOrCreateCachedComponent(environment, root, componentName, readerArti
|
|
14
14
|
byArgs[stringifiedArgs] =
|
15
15
|
(_c = byArgs[stringifiedArgs]) !== null && _c !== void 0 ? _c : (() => {
|
16
16
|
function Component(additionalRuntimeProps) {
|
17
|
-
const data = (0,
|
17
|
+
const data = (0, read_1.readButDoNotEvaluate)(environment, {
|
18
18
|
kind: 'FragmentReference',
|
19
19
|
readerArtifact: readerArtifact,
|
20
20
|
root,
|
package/dist/entrypoint.d.ts
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
import { Arguments } from './index';
|
2
1
|
import { ReaderArtifact } from './reader';
|
2
|
+
import { Arguments } from './util';
|
3
3
|
export type IsographEntrypoint<TReadFromStore extends Object, TResolverResult> = {
|
4
4
|
kind: 'Entrypoint';
|
5
5
|
queryText: string;
|
@@ -30,3 +30,5 @@ export type RefetchQueryArtifactWrapper = {
|
|
30
30
|
allowedVariables: string[];
|
31
31
|
};
|
32
32
|
export declare function assertIsEntrypoint<TReadFromStore extends Object, TResolverResult>(value: IsographEntrypoint<TReadFromStore, TResolverResult> | ((_: any) => any) | any): asserts value is IsographEntrypoint<TReadFromStore, TResolverResult>;
|
33
|
+
export type ExtractReadFromStore<Type> = Type extends IsographEntrypoint<infer X, any> ? X : never;
|
34
|
+
export type ExtractResolverResult<Type> = Type extends IsographEntrypoint<any, infer X> ? X : never;
|
@@ -2,7 +2,6 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.garbageCollectEnvironment = exports.retainQuery = exports.unretainQuery = void 0;
|
4
4
|
const IsographEnvironment_1 = require("./IsographEnvironment");
|
5
|
-
const index_1 = require("./index");
|
6
5
|
const cache_1 = require("./cache");
|
7
6
|
function unretainQuery(environment, retainedQuery) {
|
8
7
|
environment.retainedQueries.delete(retainedQuery);
|
@@ -48,14 +47,14 @@ function recordReachableIdsFromRecord(store, currentRecord, mutableRetainedIds,
|
|
48
47
|
const ids = [];
|
49
48
|
if (Array.isArray(linkedFieldOrFields)) {
|
50
49
|
for (const maybeLink of linkedFieldOrFields) {
|
51
|
-
const link = (0,
|
50
|
+
const link = (0, IsographEnvironment_1.assertLink)(maybeLink);
|
52
51
|
if (link != null) {
|
53
52
|
ids.push(link.__link);
|
54
53
|
}
|
55
54
|
}
|
56
55
|
}
|
57
56
|
else {
|
58
|
-
const link = (0,
|
57
|
+
const link = (0, IsographEnvironment_1.assertLink)(linkedFieldOrFields);
|
59
58
|
if (link != null) {
|
60
59
|
ids.push(link.__link);
|
61
60
|
}
|
package/dist/index.d.ts
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
import { DataId, DataTypeValue, IsographEnvironment, Link } from './IsographEnvironment';
|
2
|
-
import { ReaderArtifact } from './reader';
|
3
|
-
import { IsographEntrypoint, RefetchQueryArtifactWrapper } from './entrypoint';
|
4
1
|
export { retainQuery, unretainQuery, type RetainedQuery, garbageCollectEnvironment, } from './garbageCollection';
|
5
2
|
export { type PromiseWrapper } from './PromiseWrapper';
|
6
3
|
export { makeNetworkRequest, subscribe } from './cache';
|
@@ -10,38 +7,8 @@ export { useImperativeReference } from './useImperativeReference';
|
|
10
7
|
export { EntrypointReader } from './EntrypointReader';
|
11
8
|
export { type ReaderArtifact, ReaderAst, ReaderAstNode, ReaderLinkedField, ReaderMutationField, ReaderRefetchField, ReaderResolverField, ReaderResolverVariant, ReaderScalarField, } from './reader';
|
12
9
|
export { NormalizationAst, NormalizationAstNode, NormalizationLinkedField, NormalizationScalarField, IsographEntrypoint, assertIsEntrypoint, RefetchQueryArtifact, RefetchQueryArtifactWrapper, } from './entrypoint';
|
13
|
-
export
|
14
|
-
export
|
15
|
-
export type
|
16
|
-
export
|
17
|
-
export
|
18
|
-
kind: 'Variable';
|
19
|
-
name: string;
|
20
|
-
} | {
|
21
|
-
kind: 'Literal';
|
22
|
-
value: any;
|
23
|
-
};
|
24
|
-
type Variable = any;
|
25
|
-
export type FragmentReference<TReadFromStore extends Object, TResolverResult> = {
|
26
|
-
kind: 'FragmentReference';
|
27
|
-
readerArtifact: ReaderArtifact<TReadFromStore, TResolverResult>;
|
28
|
-
root: DataId;
|
29
|
-
variables: {
|
30
|
-
[index: string]: Variable;
|
31
|
-
} | null;
|
32
|
-
nestedRefetchQueries: RefetchQueryArtifactWrapper[];
|
33
|
-
};
|
34
|
-
export type ExtractReadFromStore<Type> = Type extends IsographEntrypoint<infer X, any> ? X : never;
|
35
|
-
export type ExtractResolverResult<Type> = Type extends IsographEntrypoint<any, infer X> ? X : never;
|
36
|
-
export declare function useLazyReference<TEntrypoint>(entrypoint: TEntrypoint | ((_: any) => any), variables: {
|
37
|
-
[key: string]: Variable;
|
38
|
-
}): {
|
39
|
-
queryReference: FragmentReference<ExtractReadFromStore<TEntrypoint>, ExtractResolverResult<TEntrypoint>>;
|
40
|
-
};
|
41
|
-
export declare function useResult<TReadFromStore extends Object, TResolverResult>(fragmentReference: FragmentReference<TReadFromStore, TResolverResult>): TResolverResult;
|
42
|
-
export declare function read<TReadFromStore extends Object, TResolverResult>(environment: IsographEnvironment, fragmentReference: FragmentReference<TReadFromStore, TResolverResult>): TResolverResult;
|
43
|
-
export declare function readButDoNotEvaluate<TReadFromStore extends Object>(environment: IsographEnvironment, reference: FragmentReference<TReadFromStore, unknown>): TReadFromStore;
|
44
|
-
export declare function assertLink(link: DataTypeValue): Link | null;
|
45
|
-
export type IsographComponentProps<TDataType, TOtherProps = Object> = {
|
46
|
-
data: TDataType;
|
47
|
-
} & TOtherProps;
|
10
|
+
export { read, readButDoNotEvaluate } from './read';
|
11
|
+
export { useResult } from './useResult';
|
12
|
+
export { type FragmentReference } from './FragmentReference';
|
13
|
+
export { useLazyReference } from './useLazyReference';
|
14
|
+
export { ExtractSecondParam, Argument, ArgumentName, ArgumentValue, Arguments, } from './util';
|
package/dist/index.js
CHANGED
@@ -1,304 +1,31 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.
|
4
|
-
const cache_1 = require("./cache");
|
5
|
-
const react_disposable_state_1 = require("@isograph/react-disposable-state");
|
6
|
-
const componentCache_1 = require("./componentCache");
|
7
|
-
const IsographEnvironment_1 = require("./IsographEnvironment");
|
8
|
-
const react_1 = require("react");
|
9
|
-
const IsographEnvironmentProvider_1 = require("./IsographEnvironmentProvider");
|
10
|
-
const entrypoint_1 = require("./entrypoint");
|
3
|
+
exports.useLazyReference = exports.useResult = exports.readButDoNotEvaluate = exports.read = exports.assertIsEntrypoint = exports.EntrypointReader = exports.useImperativeReference = exports.useIsographEnvironment = exports.IsographEnvironmentProvider = exports.defaultMissingFieldHandler = exports.createIsographStore = exports.createIsographEnvironment = exports.ROOT_ID = exports.subscribe = exports.makeNetworkRequest = exports.garbageCollectEnvironment = exports.unretainQuery = exports.retainQuery = void 0;
|
11
4
|
var garbageCollection_1 = require("./garbageCollection");
|
12
5
|
Object.defineProperty(exports, "retainQuery", { enumerable: true, get: function () { return garbageCollection_1.retainQuery; } });
|
13
6
|
Object.defineProperty(exports, "unretainQuery", { enumerable: true, get: function () { return garbageCollection_1.unretainQuery; } });
|
14
7
|
Object.defineProperty(exports, "garbageCollectEnvironment", { enumerable: true, get: function () { return garbageCollection_1.garbageCollectEnvironment; } });
|
15
|
-
var
|
16
|
-
Object.defineProperty(exports, "makeNetworkRequest", { enumerable: true, get: function () { return
|
17
|
-
Object.defineProperty(exports, "subscribe", { enumerable: true, get: function () { return
|
18
|
-
var
|
19
|
-
Object.defineProperty(exports, "ROOT_ID", { enumerable: true, get: function () { return
|
20
|
-
Object.defineProperty(exports, "createIsographEnvironment", { enumerable: true, get: function () { return
|
21
|
-
Object.defineProperty(exports, "createIsographStore", { enumerable: true, get: function () { return
|
22
|
-
Object.defineProperty(exports, "defaultMissingFieldHandler", { enumerable: true, get: function () { return
|
23
|
-
var
|
24
|
-
Object.defineProperty(exports, "IsographEnvironmentProvider", { enumerable: true, get: function () { return
|
25
|
-
Object.defineProperty(exports, "useIsographEnvironment", { enumerable: true, get: function () { return
|
8
|
+
var cache_1 = require("./cache");
|
9
|
+
Object.defineProperty(exports, "makeNetworkRequest", { enumerable: true, get: function () { return cache_1.makeNetworkRequest; } });
|
10
|
+
Object.defineProperty(exports, "subscribe", { enumerable: true, get: function () { return cache_1.subscribe; } });
|
11
|
+
var IsographEnvironment_1 = require("./IsographEnvironment");
|
12
|
+
Object.defineProperty(exports, "ROOT_ID", { enumerable: true, get: function () { return IsographEnvironment_1.ROOT_ID; } });
|
13
|
+
Object.defineProperty(exports, "createIsographEnvironment", { enumerable: true, get: function () { return IsographEnvironment_1.createIsographEnvironment; } });
|
14
|
+
Object.defineProperty(exports, "createIsographStore", { enumerable: true, get: function () { return IsographEnvironment_1.createIsographStore; } });
|
15
|
+
Object.defineProperty(exports, "defaultMissingFieldHandler", { enumerable: true, get: function () { return IsographEnvironment_1.defaultMissingFieldHandler; } });
|
16
|
+
var IsographEnvironmentProvider_1 = require("./IsographEnvironmentProvider");
|
17
|
+
Object.defineProperty(exports, "IsographEnvironmentProvider", { enumerable: true, get: function () { return IsographEnvironmentProvider_1.IsographEnvironmentProvider; } });
|
18
|
+
Object.defineProperty(exports, "useIsographEnvironment", { enumerable: true, get: function () { return IsographEnvironmentProvider_1.useIsographEnvironment; } });
|
26
19
|
var useImperativeReference_1 = require("./useImperativeReference");
|
27
20
|
Object.defineProperty(exports, "useImperativeReference", { enumerable: true, get: function () { return useImperativeReference_1.useImperativeReference; } });
|
28
21
|
var EntrypointReader_1 = require("./EntrypointReader");
|
29
22
|
Object.defineProperty(exports, "EntrypointReader", { enumerable: true, get: function () { return EntrypointReader_1.EntrypointReader; } });
|
30
|
-
var
|
31
|
-
Object.defineProperty(exports, "assertIsEntrypoint", { enumerable: true, get: function () { return
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
function
|
37
|
-
|
38
|
-
|
39
|
-
const cache = (0, cache_1.getOrCreateCacheForArtifact)(environment, entrypoint, variables);
|
40
|
-
// TODO add comment explaining why we never use this value
|
41
|
-
// @ts-ignore
|
42
|
-
const data = (0, react_disposable_state_1.useLazyDisposableState)(cache).state;
|
43
|
-
return {
|
44
|
-
queryReference: {
|
45
|
-
kind: 'FragmentReference',
|
46
|
-
readerArtifact: entrypoint.readerArtifact,
|
47
|
-
root: IsographEnvironment_1.ROOT_ID,
|
48
|
-
variables,
|
49
|
-
nestedRefetchQueries: entrypoint.nestedRefetchQueries,
|
50
|
-
},
|
51
|
-
};
|
52
|
-
}
|
53
|
-
exports.useLazyReference = useLazyReference;
|
54
|
-
function useResult(fragmentReference) {
|
55
|
-
const environment = (0, IsographEnvironmentProvider_1.useIsographEnvironment)();
|
56
|
-
const [, setState] = (0, react_1.useState)();
|
57
|
-
(0, react_1.useEffect)(() => {
|
58
|
-
return (0, cache_1.subscribe)(environment, () => {
|
59
|
-
return setState({});
|
60
|
-
});
|
61
|
-
}, []);
|
62
|
-
return read(environment, fragmentReference);
|
63
|
-
}
|
64
|
-
exports.useResult = useResult;
|
65
|
-
function read(environment, fragmentReference) {
|
66
|
-
var _a, _b;
|
67
|
-
const variant = fragmentReference.readerArtifact.variant;
|
68
|
-
if (variant.kind === 'Eager') {
|
69
|
-
const data = readData(environment, fragmentReference.readerArtifact.readerAst, fragmentReference.root, (_a = fragmentReference.variables) !== null && _a !== void 0 ? _a : {}, fragmentReference.nestedRefetchQueries);
|
70
|
-
if (data.kind === 'MissingData') {
|
71
|
-
throw (0, cache_1.onNextChange)(environment);
|
72
|
-
}
|
73
|
-
else {
|
74
|
-
// @ts-expect-error This not properly typed yet
|
75
|
-
return fragmentReference.readerArtifact.resolver(data.data);
|
76
|
-
}
|
77
|
-
}
|
78
|
-
else if (variant.kind === 'Component') {
|
79
|
-
// @ts-ignore
|
80
|
-
return (0, componentCache_1.getOrCreateCachedComponent)(environment, fragmentReference.root, variant.componentName, fragmentReference.readerArtifact, (_b = fragmentReference.variables) !== null && _b !== void 0 ? _b : {}, fragmentReference.nestedRefetchQueries);
|
81
|
-
}
|
82
|
-
// Why can't Typescript realize that this is unreachable??
|
83
|
-
throw new Error('This is unreachable');
|
84
|
-
}
|
85
|
-
exports.read = read;
|
86
|
-
function readButDoNotEvaluate(environment, reference) {
|
87
|
-
var _a;
|
88
|
-
const response = readData(environment, reference.readerArtifact.readerAst, reference.root, (_a = reference.variables) !== null && _a !== void 0 ? _a : {}, reference.nestedRefetchQueries);
|
89
|
-
if (typeof window !== 'undefined' && window.__LOG) {
|
90
|
-
console.log('done reading', { response });
|
91
|
-
}
|
92
|
-
if (response.kind === 'MissingData') {
|
93
|
-
throw (0, cache_1.onNextChange)(environment);
|
94
|
-
}
|
95
|
-
else {
|
96
|
-
return response.data;
|
97
|
-
}
|
98
|
-
}
|
99
|
-
exports.readButDoNotEvaluate = readButDoNotEvaluate;
|
100
|
-
function readData(environment, ast, root, variables, nestedRefetchQueries) {
|
101
|
-
var _a, _b, _c, _d, _e;
|
102
|
-
let storeRecord = environment.store[root];
|
103
|
-
if (storeRecord === undefined) {
|
104
|
-
return { kind: 'MissingData', reason: 'No record for root ' + root };
|
105
|
-
}
|
106
|
-
if (storeRecord === null) {
|
107
|
-
return { kind: 'Success', data: null };
|
108
|
-
}
|
109
|
-
let target = {};
|
110
|
-
for (const field of ast) {
|
111
|
-
switch (field.kind) {
|
112
|
-
case 'Scalar': {
|
113
|
-
const storeRecordName = (0, cache_1.getParentRecordKey)(field, variables);
|
114
|
-
const value = storeRecord[storeRecordName];
|
115
|
-
// TODO consider making scalars into discriminated unions. This probably has
|
116
|
-
// to happen for when we handle errors.
|
117
|
-
if (value === undefined) {
|
118
|
-
return {
|
119
|
-
kind: 'MissingData',
|
120
|
-
reason: 'No value for ' + storeRecordName + ' on root ' + root,
|
121
|
-
};
|
122
|
-
}
|
123
|
-
target[(_a = field.alias) !== null && _a !== void 0 ? _a : field.fieldName] = value;
|
124
|
-
break;
|
125
|
-
}
|
126
|
-
case 'Linked': {
|
127
|
-
const storeRecordName = (0, cache_1.getParentRecordKey)(field, variables);
|
128
|
-
const value = storeRecord[storeRecordName];
|
129
|
-
if (Array.isArray(value)) {
|
130
|
-
const results = [];
|
131
|
-
for (const item of value) {
|
132
|
-
const link = assertLink(item);
|
133
|
-
if (link === undefined) {
|
134
|
-
return {
|
135
|
-
kind: 'MissingData',
|
136
|
-
reason: 'No link for ' +
|
137
|
-
storeRecordName +
|
138
|
-
' on root ' +
|
139
|
-
root +
|
140
|
-
'. Link is ' +
|
141
|
-
JSON.stringify(item),
|
142
|
-
};
|
143
|
-
}
|
144
|
-
else if (link === null) {
|
145
|
-
results.push(null);
|
146
|
-
continue;
|
147
|
-
}
|
148
|
-
const result = readData(environment, field.selections, link.__link, variables, nestedRefetchQueries);
|
149
|
-
if (result.kind === 'MissingData') {
|
150
|
-
return {
|
151
|
-
kind: 'MissingData',
|
152
|
-
reason: 'Missing data for ' +
|
153
|
-
storeRecordName +
|
154
|
-
' on root ' +
|
155
|
-
root +
|
156
|
-
'. Link is ' +
|
157
|
-
JSON.stringify(item),
|
158
|
-
nestedReason: result,
|
159
|
-
};
|
160
|
-
}
|
161
|
-
results.push(result.data);
|
162
|
-
}
|
163
|
-
target[(_b = field.alias) !== null && _b !== void 0 ? _b : field.fieldName] = results;
|
164
|
-
break;
|
165
|
-
}
|
166
|
-
let link = assertLink(value);
|
167
|
-
if (link === undefined) {
|
168
|
-
// TODO make this configurable, and also generated and derived from the schema
|
169
|
-
const missingFieldHandler = (_c = environment.missingFieldHandler) !== null && _c !== void 0 ? _c : IsographEnvironment_1.defaultMissingFieldHandler;
|
170
|
-
const altLink = missingFieldHandler(storeRecord, root, field.fieldName, field.arguments, variables);
|
171
|
-
if (altLink === undefined) {
|
172
|
-
return {
|
173
|
-
kind: 'MissingData',
|
174
|
-
reason: 'No link for ' +
|
175
|
-
storeRecordName +
|
176
|
-
' on root ' +
|
177
|
-
root +
|
178
|
-
'. Link is ' +
|
179
|
-
JSON.stringify(value),
|
180
|
-
};
|
181
|
-
}
|
182
|
-
else {
|
183
|
-
link = altLink;
|
184
|
-
}
|
185
|
-
}
|
186
|
-
else if (link === null) {
|
187
|
-
target[(_d = field.alias) !== null && _d !== void 0 ? _d : field.fieldName] = null;
|
188
|
-
break;
|
189
|
-
}
|
190
|
-
const targetId = link.__link;
|
191
|
-
const data = readData(environment, field.selections, targetId, variables, nestedRefetchQueries);
|
192
|
-
if (data.kind === 'MissingData') {
|
193
|
-
return {
|
194
|
-
kind: 'MissingData',
|
195
|
-
reason: 'Missing data for ' + storeRecordName + ' on root ' + root,
|
196
|
-
nestedReason: data,
|
197
|
-
};
|
198
|
-
}
|
199
|
-
target[(_e = field.alias) !== null && _e !== void 0 ? _e : field.fieldName] = data.data;
|
200
|
-
break;
|
201
|
-
}
|
202
|
-
case 'RefetchField': {
|
203
|
-
const data = readData(environment, field.readerArtifact.readerAst, root, variables,
|
204
|
-
// Refetch fields just read the id, and don't need refetch query artifacts
|
205
|
-
[]);
|
206
|
-
if (typeof window !== 'undefined' && window.__LOG) {
|
207
|
-
console.log('refetch field data', data, field);
|
208
|
-
}
|
209
|
-
if (data.kind === 'MissingData') {
|
210
|
-
return {
|
211
|
-
kind: 'MissingData',
|
212
|
-
reason: 'Missing data for ' + field.alias + ' on root ' + root,
|
213
|
-
nestedReason: data,
|
214
|
-
};
|
215
|
-
}
|
216
|
-
else {
|
217
|
-
const refetchQueryIndex = field.refetchQuery;
|
218
|
-
if (refetchQueryIndex == null) {
|
219
|
-
throw new Error('refetchQuery is null in RefetchField');
|
220
|
-
}
|
221
|
-
const refetchQuery = nestedRefetchQueries[refetchQueryIndex];
|
222
|
-
const refetchQueryArtifact = refetchQuery.artifact;
|
223
|
-
const allowedVariables = refetchQuery.allowedVariables;
|
224
|
-
target[field.alias] = field.readerArtifact.resolver(environment,
|
225
|
-
// resolvers for refetch fields take 3 args, and this is not reflected in types
|
226
|
-
refetchQueryArtifact, Object.assign(Object.assign({}, data.data), filterVariables(variables, allowedVariables)));
|
227
|
-
}
|
228
|
-
break;
|
229
|
-
}
|
230
|
-
case 'MutationField': {
|
231
|
-
const data = readData(environment, field.readerArtifact.readerAst, root, variables,
|
232
|
-
// Refetch fields just read the id, and don't need refetch query artifacts
|
233
|
-
[]);
|
234
|
-
if (typeof window !== 'undefined' && window.__LOG) {
|
235
|
-
console.log('refetch field data', data, field);
|
236
|
-
}
|
237
|
-
if (data.kind === 'MissingData') {
|
238
|
-
return {
|
239
|
-
kind: 'MissingData',
|
240
|
-
reason: 'Missing data for ' + field.alias + ' on root ' + root,
|
241
|
-
nestedReason: data,
|
242
|
-
};
|
243
|
-
}
|
244
|
-
else {
|
245
|
-
const refetchQueryIndex = field.refetchQuery;
|
246
|
-
if (refetchQueryIndex == null) {
|
247
|
-
throw new Error('refetchQuery is null in MutationField');
|
248
|
-
}
|
249
|
-
const refetchQuery = nestedRefetchQueries[refetchQueryIndex];
|
250
|
-
const refetchQueryArtifact = refetchQuery.artifact;
|
251
|
-
const allowedVariables = refetchQuery.allowedVariables;
|
252
|
-
target[field.alias] = field.readerArtifact.resolver(environment, refetchQueryArtifact,
|
253
|
-
// @ts-expect-error
|
254
|
-
data.data, filterVariables(variables, allowedVariables));
|
255
|
-
}
|
256
|
-
break;
|
257
|
-
}
|
258
|
-
case 'Resolver': {
|
259
|
-
const usedRefetchQueries = field.usedRefetchQueries;
|
260
|
-
const resolverRefetchQueries = usedRefetchQueries.map((index) => nestedRefetchQueries[index]);
|
261
|
-
const variant = field.readerArtifact.variant;
|
262
|
-
if (variant.kind === 'Eager') {
|
263
|
-
const data = readData(environment, field.readerArtifact.readerAst, root, variables, resolverRefetchQueries);
|
264
|
-
if (data.kind === 'MissingData') {
|
265
|
-
return {
|
266
|
-
kind: 'MissingData',
|
267
|
-
reason: 'Missing data for ' + field.alias + ' on root ' + root,
|
268
|
-
nestedReason: data,
|
269
|
-
};
|
270
|
-
}
|
271
|
-
else {
|
272
|
-
// @ts-expect-error
|
273
|
-
target[field.alias] = field.readerArtifact.resolver(data.data);
|
274
|
-
}
|
275
|
-
}
|
276
|
-
else if (variant.kind === 'Component') {
|
277
|
-
target[field.alias] = (0, componentCache_1.getOrCreateCachedComponent)(environment, root, variant.componentName, field.readerArtifact, variables, resolverRefetchQueries);
|
278
|
-
}
|
279
|
-
break;
|
280
|
-
}
|
281
|
-
}
|
282
|
-
}
|
283
|
-
return { kind: 'Success', data: target };
|
284
|
-
}
|
285
|
-
function assertLink(link) {
|
286
|
-
if (Array.isArray(link)) {
|
287
|
-
throw new Error('Unexpected array');
|
288
|
-
}
|
289
|
-
if (link == null) {
|
290
|
-
return null;
|
291
|
-
}
|
292
|
-
if (typeof link === 'object') {
|
293
|
-
return link;
|
294
|
-
}
|
295
|
-
throw new Error('Invalid link');
|
296
|
-
}
|
297
|
-
exports.assertLink = assertLink;
|
298
|
-
function filterVariables(variables, allowedVariables) {
|
299
|
-
const result = {};
|
300
|
-
for (const key of allowedVariables) {
|
301
|
-
result[key] = variables[key];
|
302
|
-
}
|
303
|
-
return result;
|
304
|
-
}
|
23
|
+
var entrypoint_1 = require("./entrypoint");
|
24
|
+
Object.defineProperty(exports, "assertIsEntrypoint", { enumerable: true, get: function () { return entrypoint_1.assertIsEntrypoint; } });
|
25
|
+
var read_1 = require("./read");
|
26
|
+
Object.defineProperty(exports, "read", { enumerable: true, get: function () { return read_1.read; } });
|
27
|
+
Object.defineProperty(exports, "readButDoNotEvaluate", { enumerable: true, get: function () { return read_1.readButDoNotEvaluate; } });
|
28
|
+
var useResult_1 = require("./useResult");
|
29
|
+
Object.defineProperty(exports, "useResult", { enumerable: true, get: function () { return useResult_1.useResult; } });
|
30
|
+
var useLazyReference_1 = require("./useLazyReference");
|
31
|
+
Object.defineProperty(exports, "useLazyReference", { enumerable: true, get: function () { return useLazyReference_1.useLazyReference; } });
|
package/dist/read.d.ts
ADDED
@@ -0,0 +1,4 @@
|
|
1
|
+
import { FragmentReference } from './FragmentReference';
|
2
|
+
import { IsographEnvironment } from './IsographEnvironment';
|
3
|
+
export declare function read<TReadFromStore extends Object, TResolverResult>(environment: IsographEnvironment, fragmentReference: FragmentReference<TReadFromStore, TResolverResult>): TResolverResult;
|
4
|
+
export declare function readButDoNotEvaluate<TReadFromStore extends Object>(environment: IsographEnvironment, reference: FragmentReference<TReadFromStore, unknown>): TReadFromStore;
|