@isograph/react 0.3.0 → 0.4.0
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/.turbo/turbo-compile-libs.log +5 -0
- package/dist/core/FragmentReference.d.ts +17 -8
- package/dist/core/FragmentReference.d.ts.map +1 -1
- package/dist/core/FragmentReference.js +3 -12
- package/dist/core/IsographEnvironment.d.ts +30 -35
- package/dist/core/IsographEnvironment.d.ts.map +1 -1
- package/dist/core/IsographEnvironment.js +4 -0
- package/dist/core/PromiseWrapper.d.ts +6 -7
- package/dist/core/PromiseWrapper.d.ts.map +1 -1
- package/dist/core/PromiseWrapper.js +6 -12
- package/dist/core/areEqualWithDeepComparison.d.ts +1 -3
- package/dist/core/areEqualWithDeepComparison.d.ts.map +1 -1
- package/dist/core/areEqualWithDeepComparison.js +16 -2
- package/dist/core/brand.d.ts +2 -0
- package/dist/core/brand.d.ts.map +1 -0
- package/dist/core/brand.js +2 -0
- package/dist/core/cache.d.ts +16 -24
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/cache.js +105 -72
- package/dist/core/check.d.ts +11 -7
- package/dist/core/check.d.ts.map +1 -1
- package/dist/core/check.js +2 -2
- package/dist/core/componentCache.d.ts +1 -1
- package/dist/core/componentCache.d.ts.map +1 -1
- package/dist/core/componentCache.js +27 -31
- package/dist/core/entrypoint.d.ts +43 -28
- package/dist/core/entrypoint.d.ts.map +1 -1
- package/dist/core/garbageCollection.d.ts +5 -6
- package/dist/core/garbageCollection.d.ts.map +1 -1
- package/dist/core/garbageCollection.js +1 -1
- package/dist/core/logging.d.ts +23 -15
- package/dist/core/logging.d.ts.map +1 -1
- package/dist/core/logging.js +8 -5
- package/dist/core/makeNetworkRequest.d.ts +5 -5
- package/dist/core/makeNetworkRequest.d.ts.map +1 -1
- package/dist/core/makeNetworkRequest.js +113 -28
- package/dist/core/read.d.ts +16 -11
- package/dist/core/read.d.ts.map +1 -1
- package/dist/core/read.js +468 -305
- package/dist/core/reader.d.ts +33 -37
- package/dist/core/reader.d.ts.map +1 -1
- package/dist/core/startUpdate.d.ts +8 -0
- package/dist/core/startUpdate.d.ts.map +1 -0
- package/dist/core/startUpdate.js +163 -0
- package/dist/core/util.d.ts +3 -0
- package/dist/core/util.d.ts.map +1 -1
- package/dist/index.d.ts +18 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/loadable-hooks/useClientSideDefer.d.ts +4 -10
- package/dist/loadable-hooks/useClientSideDefer.d.ts.map +1 -1
- package/dist/loadable-hooks/useClientSideDefer.js +2 -2
- package/dist/loadable-hooks/useConnectionSpecPagination.d.ts +8 -15
- package/dist/loadable-hooks/useConnectionSpecPagination.d.ts.map +1 -1
- package/dist/loadable-hooks/useConnectionSpecPagination.js +6 -4
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts +1 -2
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts.map +1 -1
- package/dist/loadable-hooks/useImperativeLoadableField.d.ts +4 -6
- package/dist/loadable-hooks/useImperativeLoadableField.d.ts.map +1 -1
- package/dist/loadable-hooks/useImperativeLoadableField.js +1 -1
- package/dist/loadable-hooks/useSkipLimitPagination.d.ts +6 -13
- package/dist/loadable-hooks/useSkipLimitPagination.d.ts.map +1 -1
- package/dist/loadable-hooks/useSkipLimitPagination.js +11 -9
- package/dist/react/FragmentReader.d.ts +7 -14
- package/dist/react/FragmentReader.d.ts.map +1 -1
- package/dist/react/FragmentReader.js +3 -30
- package/dist/react/FragmentRenderer.d.ts +15 -0
- package/dist/react/FragmentRenderer.d.ts.map +1 -0
- package/dist/react/FragmentRenderer.js +35 -0
- package/dist/react/IsographEnvironmentProvider.d.ts.map +1 -1
- package/dist/react/LoadableFieldReader.d.ts +12 -0
- package/dist/react/LoadableFieldReader.d.ts.map +1 -0
- package/dist/react/LoadableFieldReader.js +10 -0
- package/dist/react/LoadableFieldRenderer.d.ts +13 -0
- package/dist/react/LoadableFieldRenderer.d.ts.map +1 -0
- package/dist/react/LoadableFieldRenderer.js +37 -0
- package/dist/react/useImperativeReference.d.ts +7 -10
- package/dist/react/useImperativeReference.d.ts.map +1 -1
- package/dist/react/useImperativeReference.js +8 -9
- package/dist/react/useLazyReference.d.ts +4 -7
- package/dist/react/useLazyReference.d.ts.map +1 -1
- package/dist/react/useLazyReference.js +26 -5
- package/dist/react/useReadAndSubscribe.d.ts +3 -9
- package/dist/react/useReadAndSubscribe.d.ts.map +1 -1
- package/dist/react/useReadAndSubscribe.js +7 -3
- package/dist/react/useRerenderOnChange.d.ts +1 -1
- package/dist/react/useRerenderOnChange.d.ts.map +1 -1
- package/dist/react/useResult.d.ts +3 -6
- package/dist/react/useResult.d.ts.map +1 -1
- package/dist/react/useResult.js +10 -8
- package/isograph.config.json +1 -0
- package/package.json +6 -6
- package/src/core/FragmentReference.ts +40 -16
- package/src/core/IsographEnvironment.ts +57 -39
- package/src/core/PromiseWrapper.ts +15 -18
- package/src/core/areEqualWithDeepComparison.ts +22 -2
- package/src/core/brand.ts +18 -0
- package/src/core/cache.ts +153 -113
- package/src/core/check.ts +17 -12
- package/src/core/componentCache.ts +47 -50
- package/src/core/entrypoint.ts +66 -21
- package/src/core/garbageCollection.ts +9 -9
- package/src/core/logging.ts +39 -25
- package/src/core/makeNetworkRequest.ts +212 -34
- package/src/core/read.ts +728 -440
- package/src/core/reader.ts +46 -29
- package/src/core/startUpdate.ts +334 -0
- package/src/core/util.ts +4 -0
- package/src/index.ts +89 -8
- package/src/loadable-hooks/useClientSideDefer.ts +11 -10
- package/src/loadable-hooks/useConnectionSpecPagination.ts +27 -13
- package/src/loadable-hooks/useImperativeExposedMutationField.ts +1 -1
- package/src/loadable-hooks/useImperativeLoadableField.ts +10 -12
- package/src/loadable-hooks/useSkipLimitPagination.ts +38 -19
- package/src/react/FragmentReader.tsx +23 -39
- package/src/react/FragmentRenderer.tsx +46 -0
- package/src/react/IsographEnvironmentProvider.tsx +1 -1
- package/src/react/LoadableFieldReader.tsx +40 -0
- package/src/react/LoadableFieldRenderer.tsx +41 -0
- package/src/react/useImperativeReference.ts +49 -27
- package/src/react/useLazyReference.ts +62 -14
- package/src/react/useReadAndSubscribe.ts +17 -9
- package/src/react/useRerenderOnChange.ts +2 -2
- package/src/react/useResult.ts +22 -8
- package/src/tests/__isograph/Economist/link/output_type.ts +2 -0
- package/src/tests/__isograph/Node/asEconomist/resolver_reader.ts +28 -0
- package/src/tests/__isograph/Node/link/output_type.ts +3 -0
- package/src/tests/__isograph/Query/linkedUpdate/entrypoint.ts +31 -0
- package/src/tests/__isograph/Query/linkedUpdate/normalization_ast.ts +95 -0
- package/src/tests/__isograph/Query/linkedUpdate/output_type.ts +3 -0
- package/src/tests/__isograph/Query/linkedUpdate/param_type.ts +51 -0
- package/src/tests/__isograph/Query/linkedUpdate/query_text.ts +20 -0
- package/src/tests/__isograph/Query/linkedUpdate/resolver_reader.ts +93 -0
- package/src/tests/__isograph/Query/meName/entrypoint.ts +8 -29
- package/src/tests/__isograph/Query/meName/normalization_ast.ts +25 -0
- package/src/tests/__isograph/Query/meName/query_text.ts +6 -0
- package/src/tests/__isograph/Query/meName/resolver_reader.ts +5 -0
- package/src/tests/__isograph/Query/meNameSuccessor/entrypoint.ts +8 -67
- package/src/tests/__isograph/Query/meNameSuccessor/normalization_ast.ts +56 -0
- package/src/tests/__isograph/Query/meNameSuccessor/query_text.ts +13 -0
- package/src/tests/__isograph/Query/meNameSuccessor/resolver_reader.ts +10 -0
- package/src/tests/__isograph/Query/nodeField/entrypoint.ts +8 -34
- package/src/tests/__isograph/Query/nodeField/normalization_ast.ts +30 -0
- package/src/tests/__isograph/Query/nodeField/query_text.ts +6 -0
- package/src/tests/__isograph/Query/nodeField/resolver_reader.ts +5 -0
- package/src/tests/__isograph/Query/startUpdate/entrypoint.ts +31 -0
- package/src/tests/__isograph/Query/startUpdate/normalization_ast.ts +51 -0
- package/src/tests/__isograph/Query/startUpdate/output_type.ts +3 -0
- package/src/tests/__isograph/Query/startUpdate/param_type.ts +26 -0
- package/src/tests/__isograph/Query/startUpdate/parameters_type.ts +3 -0
- package/src/tests/__isograph/Query/startUpdate/query_text.ts +11 -0
- package/src/tests/__isograph/Query/startUpdate/resolver_reader.ts +55 -0
- package/src/tests/__isograph/Query/subquery/entrypoint.ts +8 -44
- package/src/tests/__isograph/Query/subquery/normalization_ast.ts +38 -0
- package/src/tests/__isograph/Query/subquery/query_text.ts +8 -0
- package/src/tests/__isograph/Query/subquery/resolver_reader.ts +7 -0
- package/src/tests/__isograph/iso.ts +24 -3
- package/src/tests/__isograph/tsconfig.json +8 -0
- package/src/tests/garbageCollection.test.ts +10 -8
- package/src/tests/meNameSuccessor.ts +1 -1
- package/src/tests/nodeQuery.ts +2 -1
- package/src/tests/normalizeData.test.ts +1 -2
- package/src/tests/startUpdate.test.ts +205 -0
- package/tsconfig.pkg.json +1 -2
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import { stableCopy } from './cache';
|
|
2
|
-
import { IsographEnvironment } from './IsographEnvironment';
|
|
3
|
-
import { FragmentReference } from './FragmentReference';
|
|
4
1
|
import { useReadAndSubscribe } from '../react/useReadAndSubscribe';
|
|
5
|
-
import {
|
|
6
|
-
|
|
2
|
+
import {
|
|
3
|
+
FragmentReference,
|
|
4
|
+
stableIdForFragmentReference,
|
|
5
|
+
} from './FragmentReference';
|
|
6
|
+
import { IsographEnvironment } from './IsographEnvironment';
|
|
7
7
|
import { logMessage } from './logging';
|
|
8
|
+
import { readPromise } from './PromiseWrapper';
|
|
9
|
+
import { NetworkRequestReaderOptions } from './read';
|
|
10
|
+
import { createStartUpdate } from './startUpdate';
|
|
8
11
|
|
|
9
12
|
export function getOrCreateCachedComponent(
|
|
10
13
|
environment: IsographEnvironment,
|
|
@@ -12,51 +15,45 @@ export function getOrCreateCachedComponent(
|
|
|
12
15
|
fragmentReference: FragmentReference<any, any>,
|
|
13
16
|
networkRequestOptions: NetworkRequestReaderOptions,
|
|
14
17
|
): React.FC<any> {
|
|
15
|
-
//
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const recordLink = fragmentReference.root.__link;
|
|
21
|
-
|
|
22
|
-
const componentsByName = (cachedComponentsById[recordLink] ??= {});
|
|
23
|
-
|
|
24
|
-
componentsByName[componentName] = componentsByName[componentName] ?? {};
|
|
25
|
-
const byArgs = componentsByName[componentName];
|
|
26
|
-
|
|
27
|
-
const stringifiedArgs = JSON.stringify(
|
|
28
|
-
stableCopy(fragmentReference.variables),
|
|
18
|
+
// We create startUpdate outside of component to make it stable
|
|
19
|
+
const startUpdate = createStartUpdate(
|
|
20
|
+
environment,
|
|
21
|
+
fragmentReference,
|
|
22
|
+
networkRequestOptions,
|
|
29
23
|
);
|
|
30
|
-
byArgs[stringifiedArgs] =
|
|
31
|
-
byArgs[stringifiedArgs] ??
|
|
32
|
-
(() => {
|
|
33
|
-
function Component(additionalRuntimeProps: { [key: string]: any }) {
|
|
34
|
-
const readerWithRefetchQueries = readPromise(
|
|
35
|
-
fragmentReference.readerWithRefetchQueries,
|
|
36
|
-
);
|
|
37
|
-
|
|
38
|
-
const data = useReadAndSubscribe(
|
|
39
|
-
fragmentReference,
|
|
40
|
-
networkRequestOptions,
|
|
41
|
-
readerWithRefetchQueries.readerArtifact.readerAst,
|
|
42
|
-
);
|
|
43
|
-
|
|
44
|
-
logMessage(environment, {
|
|
45
|
-
kind: 'ComponentRerendered',
|
|
46
|
-
componentName,
|
|
47
|
-
rootLink: fragmentReference.root,
|
|
48
|
-
});
|
|
49
24
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
25
|
+
return (environment.componentCache[
|
|
26
|
+
stableIdForFragmentReference(fragmentReference, componentName)
|
|
27
|
+
] ??= (() => {
|
|
28
|
+
function Component(additionalRuntimeProps: { [key: string]: any }) {
|
|
29
|
+
const readerWithRefetchQueries = readPromise(
|
|
30
|
+
fragmentReference.readerWithRefetchQueries,
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
const data = useReadAndSubscribe(
|
|
34
|
+
fragmentReference,
|
|
35
|
+
networkRequestOptions,
|
|
36
|
+
readerWithRefetchQueries.readerArtifact.readerAst,
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
logMessage(environment, () => ({
|
|
40
|
+
kind: 'ComponentRerendered',
|
|
41
|
+
componentName,
|
|
42
|
+
rootLink: fragmentReference.root,
|
|
43
|
+
}));
|
|
44
|
+
|
|
45
|
+
return readerWithRefetchQueries.readerArtifact.resolver(
|
|
46
|
+
{
|
|
47
|
+
data,
|
|
48
|
+
parameters: fragmentReference.variables,
|
|
49
|
+
startUpdate: readerWithRefetchQueries.readerArtifact.hasUpdatable
|
|
50
|
+
? startUpdate
|
|
51
|
+
: undefined,
|
|
52
|
+
},
|
|
53
|
+
additionalRuntimeProps,
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
Component.displayName = `${componentName} (id: ${fragmentReference.root}) @component`;
|
|
57
|
+
return Component;
|
|
58
|
+
})());
|
|
62
59
|
}
|
package/src/core/entrypoint.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import type { UnknownTReadFromStore } from './FragmentReference';
|
|
1
2
|
import type { TypeName } from './IsographEnvironment';
|
|
2
3
|
import { TopLevelReaderArtifact } from './reader';
|
|
3
4
|
import { Arguments } from './util';
|
|
4
5
|
|
|
5
6
|
export type ReaderWithRefetchQueries<
|
|
6
|
-
TReadFromStore extends
|
|
7
|
+
TReadFromStore extends UnknownTReadFromStore,
|
|
7
8
|
TClientFieldValue,
|
|
8
9
|
> = {
|
|
9
10
|
readonly kind: 'ReaderWithRefetchQueries';
|
|
@@ -16,33 +17,61 @@ export type ReaderWithRefetchQueries<
|
|
|
16
17
|
readonly nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[];
|
|
17
18
|
};
|
|
18
19
|
|
|
19
|
-
export type
|
|
20
|
+
export type ReaderWithRefetchQueriesLoader<
|
|
21
|
+
TReadFromStore extends UnknownTReadFromStore,
|
|
22
|
+
TClientFieldValue,
|
|
23
|
+
> = {
|
|
24
|
+
readonly kind: 'ReaderWithRefetchQueriesLoader';
|
|
25
|
+
readonly loader: () => Promise<
|
|
26
|
+
ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>
|
|
27
|
+
>;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export type NetworkRequestInfo<TNormalizationAst> = {
|
|
20
31
|
readonly kind: 'NetworkRequestInfo';
|
|
21
|
-
readonly
|
|
22
|
-
readonly normalizationAst:
|
|
32
|
+
readonly operation: IsographOperation | IsographPersistedOperation;
|
|
33
|
+
readonly normalizationAst: TNormalizationAst;
|
|
23
34
|
};
|
|
35
|
+
|
|
36
|
+
export type IsographOperation = {
|
|
37
|
+
readonly kind: 'Operation';
|
|
38
|
+
readonly text: string;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export type IsographPersistedOperation = {
|
|
42
|
+
readonly kind: 'PersistedOperation';
|
|
43
|
+
readonly operationId: string;
|
|
44
|
+
readonly extraInfo: IsographPersistedOperationExtraInfo | null;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export type IsographPersistedOperationExtraInfo = {
|
|
48
|
+
readonly kind: 'PersistedOperationExtraInfo';
|
|
49
|
+
readonly operationName: string | null;
|
|
50
|
+
readonly operationKind: 'Query' | 'Mutation' | 'Subscription';
|
|
51
|
+
};
|
|
52
|
+
|
|
24
53
|
// This type should be treated as an opaque type.
|
|
25
54
|
export type IsographEntrypoint<
|
|
26
|
-
TReadFromStore extends
|
|
55
|
+
TReadFromStore extends UnknownTReadFromStore,
|
|
27
56
|
TClientFieldValue,
|
|
57
|
+
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
|
28
58
|
> = {
|
|
29
59
|
readonly kind: 'Entrypoint';
|
|
30
|
-
readonly networkRequestInfo: NetworkRequestInfo
|
|
31
|
-
readonly readerWithRefetchQueries:
|
|
32
|
-
TReadFromStore,
|
|
33
|
-
TClientFieldValue
|
|
34
|
-
>;
|
|
60
|
+
readonly networkRequestInfo: NetworkRequestInfo<TNormalizationAst>;
|
|
61
|
+
readonly readerWithRefetchQueries:
|
|
62
|
+
| ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>
|
|
63
|
+
| ReaderWithRefetchQueriesLoader<TReadFromStore, TClientFieldValue>;
|
|
35
64
|
readonly concreteType: TypeName;
|
|
36
65
|
};
|
|
37
66
|
|
|
38
67
|
export type IsographEntrypointLoader<
|
|
39
|
-
TReadFromStore extends
|
|
68
|
+
TReadFromStore extends UnknownTReadFromStore,
|
|
40
69
|
TClientFieldValue,
|
|
41
70
|
> = {
|
|
42
71
|
readonly kind: 'EntrypointLoader';
|
|
43
72
|
readonly typeAndField: string;
|
|
44
73
|
readonly loader: () => Promise<
|
|
45
|
-
IsographEntrypoint<TReadFromStore, TClientFieldValue>
|
|
74
|
+
IsographEntrypoint<TReadFromStore, TClientFieldValue, NormalizationAst>
|
|
46
75
|
>;
|
|
47
76
|
};
|
|
48
77
|
|
|
@@ -50,7 +79,18 @@ export type NormalizationAstNode =
|
|
|
50
79
|
| NormalizationScalarField
|
|
51
80
|
| NormalizationLinkedField
|
|
52
81
|
| NormalizationInlineFragment;
|
|
53
|
-
|
|
82
|
+
|
|
83
|
+
export type NormalizationAstNodes = ReadonlyArray<NormalizationAstNode>;
|
|
84
|
+
|
|
85
|
+
export type NormalizationAst = {
|
|
86
|
+
readonly kind: 'NormalizationAst';
|
|
87
|
+
readonly selections: NormalizationAstNodes;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export type NormalizationAstLoader = {
|
|
91
|
+
readonly kind: 'NormalizationAstLoader';
|
|
92
|
+
readonly loader: () => Promise<NormalizationAst>;
|
|
93
|
+
};
|
|
54
94
|
|
|
55
95
|
export type NormalizationScalarField = {
|
|
56
96
|
readonly kind: 'Scalar';
|
|
@@ -62,20 +102,20 @@ export type NormalizationLinkedField = {
|
|
|
62
102
|
readonly kind: 'Linked';
|
|
63
103
|
readonly fieldName: string;
|
|
64
104
|
readonly arguments: Arguments | null;
|
|
65
|
-
readonly selections:
|
|
105
|
+
readonly selections: NormalizationAstNodes;
|
|
66
106
|
readonly concreteType: TypeName | null;
|
|
67
107
|
};
|
|
68
108
|
|
|
69
109
|
export type NormalizationInlineFragment = {
|
|
70
110
|
readonly kind: 'InlineFragment';
|
|
71
111
|
readonly type: string;
|
|
72
|
-
readonly selections:
|
|
112
|
+
readonly selections: NormalizationAstNodes;
|
|
73
113
|
};
|
|
74
114
|
|
|
75
115
|
// This is more like an entrypoint, but one specifically for a refetch query/mutation
|
|
76
116
|
export type RefetchQueryNormalizationArtifact = {
|
|
77
117
|
readonly kind: 'RefetchQuery';
|
|
78
|
-
readonly networkRequestInfo: NetworkRequestInfo
|
|
118
|
+
readonly networkRequestInfo: NetworkRequestInfo<NormalizationAst>;
|
|
79
119
|
readonly concreteType: TypeName;
|
|
80
120
|
};
|
|
81
121
|
|
|
@@ -86,21 +126,26 @@ export type RefetchQueryNormalizationArtifactWrapper = {
|
|
|
86
126
|
};
|
|
87
127
|
|
|
88
128
|
export function assertIsEntrypoint<
|
|
89
|
-
TReadFromStore extends
|
|
129
|
+
TReadFromStore extends UnknownTReadFromStore,
|
|
90
130
|
TClientFieldValue,
|
|
131
|
+
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
|
91
132
|
>(
|
|
92
133
|
value:
|
|
93
|
-
| IsographEntrypoint<TReadFromStore, TClientFieldValue>
|
|
134
|
+
| IsographEntrypoint<TReadFromStore, TClientFieldValue, TNormalizationAst>
|
|
94
135
|
| ((_: any) => any)
|
|
95
136
|
// Temporarily, allow any here. Once we automatically provide
|
|
96
137
|
// types to entrypoints, we probably don't need this.
|
|
97
138
|
| any,
|
|
98
|
-
): asserts value is IsographEntrypoint<
|
|
139
|
+
): asserts value is IsographEntrypoint<
|
|
140
|
+
TReadFromStore,
|
|
141
|
+
TClientFieldValue,
|
|
142
|
+
TNormalizationAst
|
|
143
|
+
> {
|
|
99
144
|
if (typeof value === 'function') throw new Error('Not a string');
|
|
100
145
|
}
|
|
101
146
|
|
|
102
147
|
export type ExtractReadFromStore<Type> =
|
|
103
|
-
Type extends IsographEntrypoint<infer X, any> ? X : never;
|
|
148
|
+
Type extends IsographEntrypoint<infer X, any, any> ? X : never;
|
|
104
149
|
export type ExtractResolverResult<Type> =
|
|
105
|
-
Type extends IsographEntrypoint<any, infer X> ? X : never;
|
|
150
|
+
Type extends IsographEntrypoint<any, infer X, any> ? X : never;
|
|
106
151
|
export type ExtractProps<Type> = Type extends React.FC<infer X> ? X : never;
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
+
import { getParentRecordKey } from './cache';
|
|
2
|
+
import { NormalizationAstNodes } from './entrypoint';
|
|
1
3
|
import { Variables } from './FragmentReference';
|
|
2
4
|
import {
|
|
5
|
+
assertLink,
|
|
3
6
|
DataId,
|
|
4
7
|
IsographEnvironment,
|
|
5
8
|
IsographStore,
|
|
6
9
|
StoreRecord,
|
|
7
|
-
|
|
8
|
-
type Link,
|
|
10
|
+
type StoreLink,
|
|
9
11
|
type TypeName,
|
|
10
12
|
} from './IsographEnvironment';
|
|
11
|
-
import { getParentRecordKey } from './cache';
|
|
12
|
-
import { NormalizationAst } from './entrypoint';
|
|
13
13
|
|
|
14
14
|
export type RetainedQuery = {
|
|
15
|
-
readonly normalizationAst:
|
|
15
|
+
readonly normalizationAst: NormalizationAstNodes;
|
|
16
16
|
readonly variables: {};
|
|
17
|
-
readonly root:
|
|
17
|
+
readonly root: StoreLink;
|
|
18
18
|
};
|
|
19
19
|
|
|
20
|
-
type DidUnretainSomeQuery = boolean;
|
|
20
|
+
export type DidUnretainSomeQuery = boolean;
|
|
21
21
|
export function unretainQuery(
|
|
22
22
|
environment: IsographEnvironment,
|
|
23
23
|
retainedQuery: RetainedQuery,
|
|
@@ -108,7 +108,7 @@ function recordReachableIdsFromRecord(
|
|
|
108
108
|
store: IsographStore,
|
|
109
109
|
currentRecord: StoreRecord,
|
|
110
110
|
mutableRetainedIds: RetainedIds,
|
|
111
|
-
selections:
|
|
111
|
+
selections: NormalizationAstNodes,
|
|
112
112
|
variables: Variables | null,
|
|
113
113
|
) {
|
|
114
114
|
for (const selection of selections) {
|
|
@@ -117,7 +117,7 @@ function recordReachableIdsFromRecord(
|
|
|
117
117
|
const linkKey = getParentRecordKey(selection, variables ?? {});
|
|
118
118
|
const linkedFieldOrFields = currentRecord[linkKey];
|
|
119
119
|
|
|
120
|
-
const links:
|
|
120
|
+
const links: StoreLink[] = [];
|
|
121
121
|
if (Array.isArray(linkedFieldOrFields)) {
|
|
122
122
|
for (const maybeLink of linkedFieldOrFields) {
|
|
123
123
|
const link = assertLink(maybeLink);
|
package/src/core/logging.ts
CHANGED
|
@@ -1,31 +1,25 @@
|
|
|
1
1
|
import { CleanupFn } from '@isograph/disposable-types';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
IsographStore,
|
|
5
|
-
StoreRecord,
|
|
6
|
-
type Link,
|
|
7
|
-
} from './IsographEnvironment';
|
|
2
|
+
import { NetworkResponseObject, type EncounteredIds } from './cache';
|
|
3
|
+
import { CheckResult } from './check';
|
|
8
4
|
import {
|
|
9
5
|
IsographEntrypoint,
|
|
10
|
-
NormalizationAst,
|
|
11
6
|
RefetchQueryNormalizationArtifact,
|
|
7
|
+
type NormalizationAstNodes,
|
|
12
8
|
} from './entrypoint';
|
|
13
9
|
import { FragmentReference, Variables } from './FragmentReference';
|
|
14
|
-
import {
|
|
15
|
-
|
|
10
|
+
import {
|
|
11
|
+
IsographEnvironment,
|
|
12
|
+
IsographStore,
|
|
13
|
+
StoreRecord,
|
|
14
|
+
type StoreLink,
|
|
15
|
+
} from './IsographEnvironment';
|
|
16
16
|
import { ReadDataResult } from './read';
|
|
17
|
-
import {
|
|
17
|
+
import { Arguments } from './util';
|
|
18
18
|
|
|
19
19
|
export type LogMessage =
|
|
20
|
-
| {
|
|
21
|
-
kind: 'GettingSuspenseCacheItem';
|
|
22
|
-
index: string;
|
|
23
|
-
availableCacheItems: ReadonlyArray<string>;
|
|
24
|
-
found: boolean;
|
|
25
|
-
}
|
|
26
20
|
| {
|
|
27
21
|
kind: 'AboutToNormalize';
|
|
28
|
-
normalizationAst:
|
|
22
|
+
normalizationAst: NormalizationAstNodes;
|
|
29
23
|
networkResponse: NetworkResponseObject;
|
|
30
24
|
variables: Variables;
|
|
31
25
|
}
|
|
@@ -44,13 +38,13 @@ export type LogMessage =
|
|
|
44
38
|
| {
|
|
45
39
|
kind: 'ComponentRerendered';
|
|
46
40
|
componentName: string;
|
|
47
|
-
rootLink:
|
|
41
|
+
rootLink: StoreLink;
|
|
48
42
|
}
|
|
49
43
|
| {
|
|
50
44
|
kind: 'MakeNetworkRequest';
|
|
51
45
|
artifact:
|
|
52
46
|
| RefetchQueryNormalizationArtifact
|
|
53
|
-
| IsographEntrypoint<any, any>;
|
|
47
|
+
| IsographEntrypoint<any, any, any>;
|
|
54
48
|
variables: Variables;
|
|
55
49
|
networkRequestId: string;
|
|
56
50
|
}
|
|
@@ -67,7 +61,7 @@ export type LogMessage =
|
|
|
67
61
|
}
|
|
68
62
|
| {
|
|
69
63
|
kind: 'MissingFieldHandlerCalled';
|
|
70
|
-
root:
|
|
64
|
+
root: StoreLink;
|
|
71
65
|
storeRecord: StoreRecord;
|
|
72
66
|
fieldName: string;
|
|
73
67
|
arguments: Arguments | null;
|
|
@@ -76,6 +70,8 @@ export type LogMessage =
|
|
|
76
70
|
| {
|
|
77
71
|
kind: 'DoneReading';
|
|
78
72
|
response: ReadDataResult<any>;
|
|
73
|
+
fieldName: string;
|
|
74
|
+
root: StoreLink;
|
|
79
75
|
}
|
|
80
76
|
| {
|
|
81
77
|
kind: 'NonEntrypointReceived';
|
|
@@ -84,6 +80,21 @@ export type LogMessage =
|
|
|
84
80
|
| {
|
|
85
81
|
kind: 'EnvironmentCheck';
|
|
86
82
|
result: CheckResult;
|
|
83
|
+
}
|
|
84
|
+
| {
|
|
85
|
+
kind: 'EnvironmentCreated';
|
|
86
|
+
}
|
|
87
|
+
| {
|
|
88
|
+
kind: 'StartUpdateError';
|
|
89
|
+
error: any;
|
|
90
|
+
}
|
|
91
|
+
| {
|
|
92
|
+
kind: 'StartUpdateComplete';
|
|
93
|
+
updatedIds: EncounteredIds;
|
|
94
|
+
}
|
|
95
|
+
| {
|
|
96
|
+
kind: 'ErrorEncounteredInWithErrorHandling';
|
|
97
|
+
error: any;
|
|
87
98
|
};
|
|
88
99
|
|
|
89
100
|
export type LogFunction = (logMessage: LogMessage) => void;
|
|
@@ -95,12 +106,15 @@ export type WrappedLogFunction = {
|
|
|
95
106
|
|
|
96
107
|
export function logMessage(
|
|
97
108
|
environment: IsographEnvironment,
|
|
98
|
-
|
|
109
|
+
getMessage: () => LogMessage,
|
|
99
110
|
) {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
111
|
+
if (environment.loggers.size > 0) {
|
|
112
|
+
const message = getMessage();
|
|
113
|
+
for (const logger of environment.loggers) {
|
|
114
|
+
try {
|
|
115
|
+
logger.log(message);
|
|
116
|
+
} catch {}
|
|
117
|
+
}
|
|
104
118
|
}
|
|
105
119
|
}
|
|
106
120
|
|