@isograph/react 0.2.0 → 0.3.1
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-typescript.log +4 -0
- package/dist/core/FragmentReference.d.ts +25 -6
- package/dist/core/FragmentReference.d.ts.map +1 -0
- package/dist/core/FragmentReference.js +3 -13
- package/dist/core/IsographEnvironment.d.ts +34 -26
- package/dist/core/IsographEnvironment.d.ts.map +1 -0
- package/dist/core/IsographEnvironment.js +19 -22
- package/dist/core/PromiseWrapper.d.ts +4 -4
- package/dist/core/PromiseWrapper.d.ts.map +1 -0
- package/dist/core/PromiseWrapper.js +9 -9
- package/dist/core/areEqualWithDeepComparison.d.ts +5 -3
- package/dist/core/areEqualWithDeepComparison.d.ts.map +1 -0
- package/dist/core/areEqualWithDeepComparison.js +89 -39
- package/dist/core/cache.d.ts +20 -13
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +205 -128
- package/dist/core/check.d.ts +22 -0
- package/dist/core/check.d.ts.map +1 -0
- package/dist/core/check.js +127 -0
- package/dist/core/componentCache.d.ts +2 -2
- package/dist/core/componentCache.d.ts.map +1 -0
- package/dist/core/componentCache.js +28 -32
- package/dist/core/entrypoint.d.ts +31 -15
- package/dist/core/entrypoint.d.ts.map +1 -0
- package/dist/core/entrypoint.js +1 -2
- package/dist/core/garbageCollection.d.ts +6 -5
- package/dist/core/garbageCollection.d.ts.map +1 -0
- package/dist/core/garbageCollection.js +49 -16
- package/dist/core/logging.d.ts +68 -0
- package/dist/core/logging.d.ts.map +1 -0
- package/dist/core/logging.js +22 -0
- package/dist/core/makeNetworkRequest.d.ts +6 -3
- package/dist/core/makeNetworkRequest.d.ts.map +1 -0
- package/dist/core/makeNetworkRequest.js +160 -19
- package/dist/core/read.d.ts +25 -5
- package/dist/core/read.d.ts.map +1 -0
- package/dist/core/read.js +416 -259
- package/dist/core/reader.d.ts +31 -15
- package/dist/core/reader.d.ts.map +1 -0
- package/dist/core/startUpdate.d.ts +5 -0
- package/dist/core/startUpdate.d.ts.map +1 -0
- package/dist/core/startUpdate.js +15 -0
- package/dist/core/util.d.ts +5 -0
- package/dist/core/util.d.ts.map +1 -0
- package/dist/index.d.ts +19 -14
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -2
- package/dist/loadable-hooks/useClientSideDefer.d.ts +9 -3
- package/dist/loadable-hooks/useClientSideDefer.d.ts.map +1 -0
- package/dist/loadable-hooks/useClientSideDefer.js +6 -8
- package/dist/loadable-hooks/useConnectionSpecPagination.d.ts +27 -0
- package/dist/loadable-hooks/useConnectionSpecPagination.d.ts.map +1 -0
- package/dist/loadable-hooks/useConnectionSpecPagination.js +162 -0
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts +2 -2
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts.map +1 -0
- package/dist/loadable-hooks/useImperativeExposedMutationField.js +1 -2
- package/dist/loadable-hooks/useImperativeLoadableField.d.ts +13 -7
- package/dist/loadable-hooks/useImperativeLoadableField.d.ts.map +1 -0
- package/dist/loadable-hooks/useImperativeLoadableField.js +4 -5
- package/dist/loadable-hooks/useSkipLimitPagination.d.ts +13 -26
- package/dist/loadable-hooks/useSkipLimitPagination.d.ts.map +1 -0
- package/dist/loadable-hooks/useSkipLimitPagination.js +93 -47
- package/dist/react/FragmentReader.d.ts +6 -4
- package/dist/react/FragmentReader.d.ts.map +1 -0
- package/dist/react/FragmentReader.js +4 -2
- package/dist/react/IsographEnvironmentProvider.d.ts +1 -0
- package/dist/react/IsographEnvironmentProvider.d.ts.map +1 -0
- package/dist/react/IsographEnvironmentProvider.js +3 -3
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.ts +10 -0
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.ts.map +1 -0
- package/dist/react/RenderAfterCommit__DO_NOT_USE.js +15 -0
- package/dist/react/useImperativeReference.d.ts +8 -6
- package/dist/react/useImperativeReference.d.ts.map +1 -0
- package/dist/react/useImperativeReference.js +6 -8
- package/dist/react/useLazyReference.d.ts +5 -3
- package/dist/react/useLazyReference.d.ts.map +1 -0
- package/dist/react/useLazyReference.js +34 -6
- package/dist/react/useReadAndSubscribe.d.ts +6 -3
- package/dist/react/useReadAndSubscribe.d.ts.map +1 -0
- package/dist/react/useReadAndSubscribe.js +13 -10
- package/dist/react/useRerenderOnChange.d.ts +7 -2
- package/dist/react/useRerenderOnChange.d.ts.map +1 -0
- package/dist/react/useRerenderOnChange.js +3 -4
- package/dist/react/useResult.d.ts +4 -3
- package/dist/react/useResult.d.ts.map +1 -0
- package/dist/react/useResult.js +14 -9
- package/isograph.config.json +8 -0
- package/package.json +14 -9
- package/{src/tests/schema.graphql → schema.graphql} +1 -0
- package/src/core/FragmentReference.ts +44 -17
- package/src/core/IsographEnvironment.ts +67 -50
- package/src/core/PromiseWrapper.ts +3 -3
- package/src/core/areEqualWithDeepComparison.ts +95 -41
- package/src/core/cache.ts +316 -169
- package/src/core/check.ts +212 -0
- package/src/core/componentCache.ts +40 -46
- package/src/core/entrypoint.ts +41 -16
- package/src/core/garbageCollection.ts +77 -26
- package/src/core/logging.ts +118 -0
- package/src/core/makeNetworkRequest.ts +249 -20
- package/src/core/read.ts +658 -368
- package/src/core/reader.ts +61 -21
- package/src/core/startUpdate.ts +28 -0
- package/src/core/util.ts +8 -0
- package/src/index.ts +94 -8
- package/src/loadable-hooks/useClientSideDefer.ts +48 -17
- package/src/loadable-hooks/useConnectionSpecPagination.ts +344 -0
- package/src/loadable-hooks/useImperativeExposedMutationField.ts +1 -1
- package/src/loadable-hooks/useImperativeLoadableField.ts +36 -12
- package/src/loadable-hooks/useSkipLimitPagination.ts +253 -94
- package/src/react/FragmentReader.tsx +15 -6
- package/src/react/IsographEnvironmentProvider.tsx +1 -1
- package/src/react/RenderAfterCommit__DO_NOT_USE.tsx +17 -0
- package/src/react/useImperativeReference.ts +50 -18
- package/src/react/useLazyReference.ts +79 -11
- package/src/react/useReadAndSubscribe.ts +33 -10
- package/src/react/useRerenderOnChange.ts +7 -2
- package/src/react/useResult.ts +30 -9
- package/src/tests/__isograph/Query/meName/entrypoint.ts +10 -29
- package/src/tests/__isograph/Query/meName/normalization_ast.ts +25 -0
- package/src/tests/__isograph/Query/meName/param_type.ts +5 -2
- 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 +10 -65
- package/src/tests/__isograph/Query/meNameSuccessor/normalization_ast.ts +56 -0
- package/src/tests/__isograph/Query/meNameSuccessor/param_type.ts +9 -6
- 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 +10 -28
- package/src/tests/__isograph/Query/nodeField/normalization_ast.ts +30 -0
- package/src/tests/__isograph/Query/nodeField/param_type.ts +7 -3
- package/src/tests/__isograph/Query/nodeField/parameters_type.ts +3 -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/subquery/entrypoint.ts +28 -0
- package/src/tests/__isograph/Query/subquery/normalization_ast.ts +38 -0
- package/src/tests/__isograph/Query/subquery/output_type.ts +3 -0
- package/src/tests/__isograph/Query/subquery/param_type.ts +12 -0
- package/src/tests/__isograph/Query/subquery/parameters_type.ts +3 -0
- package/src/tests/__isograph/Query/subquery/query_text.ts +8 -0
- package/src/tests/__isograph/Query/subquery/resolver_reader.ts +52 -0
- package/src/tests/__isograph/iso.ts +24 -12
- package/src/tests/garbageCollection.test.ts +53 -45
- package/src/tests/meNameSuccessor.ts +8 -3
- package/src/tests/nodeQuery.ts +7 -4
- package/src/tests/normalizeData.test.ts +120 -0
- package/src/tests/tsconfig.json +3 -3
- package/tsconfig.json +2 -2
- package/tsconfig.pkg.json +7 -3
- package/vitest.config.ts +20 -0
- package/src/tests/isograph.config.json +0 -7
package/src/core/reader.ts
CHANGED
@@ -1,48 +1,66 @@
|
|
1
1
|
import { Factory } from '@isograph/disposable-types';
|
2
|
-
import {
|
3
|
-
import {
|
4
|
-
ComponentOrFieldName,
|
5
|
-
DataId,
|
6
|
-
IsographEnvironment,
|
7
|
-
} from './IsographEnvironment';
|
2
|
+
import { FetchOptions } from './check';
|
8
3
|
import {
|
9
4
|
IsographEntrypoint,
|
10
5
|
IsographEntrypointLoader,
|
11
6
|
RefetchQueryNormalizationArtifact,
|
12
7
|
RefetchQueryNormalizationArtifactWrapper,
|
13
8
|
} from './entrypoint';
|
9
|
+
import {
|
10
|
+
ExtractParameters,
|
11
|
+
FragmentReference,
|
12
|
+
type UnknownTReadFromStore,
|
13
|
+
} from './FragmentReference';
|
14
|
+
import {
|
15
|
+
ComponentOrFieldName,
|
16
|
+
IsographEnvironment,
|
17
|
+
type Link,
|
18
|
+
} from './IsographEnvironment';
|
14
19
|
import { Arguments } from './util';
|
15
20
|
|
16
21
|
export type TopLevelReaderArtifact<
|
17
|
-
TReadFromStore extends
|
22
|
+
TReadFromStore extends UnknownTReadFromStore,
|
18
23
|
TClientFieldValue,
|
19
|
-
TComponentProps extends Record<
|
24
|
+
TComponentProps extends Record<PropertyKey, never>,
|
20
25
|
> =
|
21
26
|
| EagerReaderArtifact<TReadFromStore, TClientFieldValue>
|
22
27
|
| ComponentReaderArtifact<TReadFromStore, TComponentProps>;
|
23
28
|
|
24
29
|
export type EagerReaderArtifact<
|
25
|
-
TReadFromStore extends
|
30
|
+
TReadFromStore extends UnknownTReadFromStore,
|
26
31
|
TClientFieldValue,
|
27
32
|
> = {
|
28
33
|
readonly kind: 'EagerReaderArtifact';
|
34
|
+
readonly fieldName: string;
|
29
35
|
readonly readerAst: ReaderAst<TReadFromStore>;
|
30
|
-
readonly resolver: (
|
36
|
+
readonly resolver: (
|
37
|
+
data: ResolverFirstParameter<TReadFromStore>,
|
38
|
+
) => TClientFieldValue;
|
39
|
+
readonly hasUpdatable: boolean;
|
31
40
|
};
|
32
41
|
|
33
42
|
export type ComponentReaderArtifact<
|
34
|
-
TReadFromStore extends
|
35
|
-
TComponentProps extends Record<string, unknown> = Record<
|
43
|
+
TReadFromStore extends UnknownTReadFromStore,
|
44
|
+
TComponentProps extends Record<string, unknown> = Record<PropertyKey, never>,
|
36
45
|
> = {
|
37
46
|
readonly kind: 'ComponentReaderArtifact';
|
38
|
-
readonly
|
47
|
+
readonly fieldName: ComponentOrFieldName;
|
39
48
|
readonly readerAst: ReaderAst<TReadFromStore>;
|
40
49
|
readonly resolver: (
|
41
|
-
data: TReadFromStore
|
50
|
+
data: ResolverFirstParameter<TReadFromStore>,
|
42
51
|
runtimeProps: TComponentProps,
|
43
52
|
) => React.ReactNode;
|
53
|
+
readonly hasUpdatable: boolean;
|
44
54
|
};
|
45
55
|
|
56
|
+
export type ResolverFirstParameter<
|
57
|
+
TReadFromStore extends UnknownTReadFromStore,
|
58
|
+
> = Pick<TReadFromStore, 'data' | 'parameters' | 'startUpdate'>;
|
59
|
+
|
60
|
+
export type StartUpdate<UpdatableData> = (
|
61
|
+
updater: (updatableData: UpdatableData) => void,
|
62
|
+
) => void;
|
63
|
+
|
46
64
|
export type RefetchReaderArtifact = {
|
47
65
|
readonly kind: 'RefetchReaderArtifact';
|
48
66
|
readonly readerAst: ReaderAst<unknown>;
|
@@ -53,7 +71,7 @@ export type RefetchReaderArtifact = {
|
|
53
71
|
variables: any,
|
54
72
|
// TODO type this better
|
55
73
|
filteredVariables: any,
|
56
|
-
|
74
|
+
rootLink: Link,
|
57
75
|
readerArtifact: TopLevelReaderArtifact<any, any, any> | null,
|
58
76
|
// TODO type this better
|
59
77
|
nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],
|
@@ -65,7 +83,8 @@ export type ReaderAstNode =
|
|
65
83
|
| ReaderLinkedField
|
66
84
|
| ReaderNonLoadableResolverField
|
67
85
|
| ReaderImperativelyLoadedField
|
68
|
-
| ReaderLoadableField
|
86
|
+
| ReaderLoadableField
|
87
|
+
| ReaderLinkField;
|
69
88
|
|
70
89
|
// @ts-ignore
|
71
90
|
export type ReaderAst<TReadFromStore> = ReadonlyArray<ReaderAstNode>;
|
@@ -75,13 +94,25 @@ export type ReaderScalarField = {
|
|
75
94
|
readonly fieldName: string;
|
76
95
|
readonly alias: string | null;
|
77
96
|
readonly arguments: Arguments | null;
|
97
|
+
readonly isUpdatable: boolean;
|
78
98
|
};
|
99
|
+
|
100
|
+
export type ReaderLinkField = {
|
101
|
+
readonly kind: 'Link';
|
102
|
+
readonly alias: string;
|
103
|
+
};
|
104
|
+
|
79
105
|
export type ReaderLinkedField = {
|
80
106
|
readonly kind: 'Linked';
|
81
107
|
readonly fieldName: string;
|
82
108
|
readonly alias: string | null;
|
83
109
|
readonly selections: ReaderAst<unknown>;
|
84
110
|
readonly arguments: Arguments | null;
|
111
|
+
readonly condition: EagerReaderArtifact<
|
112
|
+
{ data: object; parameters: any; startUpdate?: StartUpdate<object> },
|
113
|
+
boolean | Link | null
|
114
|
+
> | null;
|
115
|
+
readonly isUpdatable: boolean;
|
85
116
|
};
|
86
117
|
|
87
118
|
export type ReaderNonLoadableResolverField = {
|
@@ -114,11 +145,11 @@ export type ReaderLoadableField = {
|
|
114
145
|
|
115
146
|
// TODO we should not type these as any
|
116
147
|
readonly entrypoint:
|
117
|
-
| IsographEntrypoint<any, any>
|
148
|
+
| IsographEntrypoint<any, any, any>
|
118
149
|
| IsographEntrypointLoader<any, any>;
|
119
150
|
};
|
120
151
|
|
121
|
-
type StableId = string;
|
152
|
+
export type StableId = string;
|
122
153
|
/// Why is LoadableField the way it is? Let's work backwards.
|
123
154
|
///
|
124
155
|
/// We ultimately need a stable id (for deduplication) and a way to produce a
|
@@ -128,6 +159,15 @@ type StableId = string;
|
|
128
159
|
/// Passing TArgs to the LoadableField should be cheap and do no "actual" work,
|
129
160
|
/// except to stringify the args or whatnot. Calling the factory can be
|
130
161
|
/// expensive. For example, doing so will probably trigger a network request.
|
131
|
-
export type LoadableField<
|
132
|
-
|
133
|
-
|
162
|
+
export type LoadableField<
|
163
|
+
TReadFromStore extends UnknownTReadFromStore,
|
164
|
+
TResult,
|
165
|
+
TArgs = ExtractParameters<TReadFromStore>,
|
166
|
+
> = (
|
167
|
+
args: TArgs | void,
|
168
|
+
// Note: fetchOptions is not nullable here because a LoadableField is not a
|
169
|
+
// user-facing API. Users should only interact with LoadableFields via APIs
|
170
|
+
// like useClientSideDefer. These APIs should have a nullable fetchOptions
|
171
|
+
// parameter, and provide a default value ({}) to the LoadableField.
|
172
|
+
fetchOptions: FetchOptions<TResult>,
|
173
|
+
) => [StableId, Factory<FragmentReference<TReadFromStore, TResult>>];
|
@@ -0,0 +1,28 @@
|
|
1
|
+
import {
|
2
|
+
stableIdForFragmentReference,
|
3
|
+
type ExtractStartUpdate,
|
4
|
+
type FragmentReference,
|
5
|
+
type UnknownTReadFromStore,
|
6
|
+
} from './FragmentReference';
|
7
|
+
import type { IsographEnvironment } from './IsographEnvironment';
|
8
|
+
|
9
|
+
export function getOrCreateCachedStartUpdate<
|
10
|
+
TReadFromStore extends UnknownTReadFromStore,
|
11
|
+
>(
|
12
|
+
environment: IsographEnvironment,
|
13
|
+
fragmentReference: FragmentReference<TReadFromStore, any>,
|
14
|
+
eagerResolverName: string,
|
15
|
+
): ExtractStartUpdate<TReadFromStore> {
|
16
|
+
return (environment.eagerReaderCache[
|
17
|
+
stableIdForFragmentReference(fragmentReference, eagerResolverName)
|
18
|
+
] ??= createStartUpdate(environment, fragmentReference));
|
19
|
+
}
|
20
|
+
|
21
|
+
export function createStartUpdate<TReadFromStore extends UnknownTReadFromStore>(
|
22
|
+
_environment: IsographEnvironment,
|
23
|
+
_fragmentReference: FragmentReference<TReadFromStore, any>,
|
24
|
+
): ExtractStartUpdate<TReadFromStore> {
|
25
|
+
return (_updater) => {
|
26
|
+
// TODO start update
|
27
|
+
};
|
28
|
+
}
|
package/src/core/util.ts
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
export type ExtractSecondParam<T extends (arg1: any, arg2: any) => any> =
|
2
2
|
T extends (arg1: any, arg2: infer P) => any ? P : never;
|
3
|
+
export type CombineWithIntrinsicAttributes<T> =
|
4
|
+
T extends Record<PropertyKey, never>
|
5
|
+
? JSX.IntrinsicAttributes
|
6
|
+
: T & JSX.IntrinsicAttributes;
|
3
7
|
|
4
8
|
export type Arguments = Argument[];
|
5
9
|
export type Argument = [ArgumentName, ArgumentValue];
|
@@ -20,4 +24,8 @@ export type ArgumentValue =
|
|
20
24
|
| {
|
21
25
|
readonly kind: 'Enum';
|
22
26
|
readonly value: string;
|
27
|
+
}
|
28
|
+
| {
|
29
|
+
readonly kind: 'Object';
|
30
|
+
readonly value: Arguments;
|
23
31
|
};
|
package/src/index.ts
CHANGED
@@ -3,6 +3,7 @@ export {
|
|
3
3
|
unretainQuery,
|
4
4
|
type RetainedQuery,
|
5
5
|
garbageCollectEnvironment,
|
6
|
+
type DidUnretainSomeQuery,
|
6
7
|
} from './core/garbageCollection';
|
7
8
|
export {
|
8
9
|
type PromiseWrapper,
|
@@ -10,8 +11,20 @@ export {
|
|
10
11
|
getPromiseState,
|
11
12
|
wrapResolvedValue,
|
12
13
|
wrapPromise,
|
14
|
+
type PromiseState,
|
15
|
+
type Result,
|
16
|
+
type AnyError,
|
17
|
+
type NotSet,
|
18
|
+
NOT_SET,
|
13
19
|
} from './core/PromiseWrapper';
|
14
|
-
export {
|
20
|
+
export {
|
21
|
+
subscribe,
|
22
|
+
normalizeData,
|
23
|
+
type NetworkResponseObject,
|
24
|
+
type NetworkResponseValue,
|
25
|
+
type NetworkResponseScalarValue,
|
26
|
+
type EncounteredIds,
|
27
|
+
} from './core/cache';
|
15
28
|
export { makeNetworkRequest } from './core/makeNetworkRequest';
|
16
29
|
export {
|
17
30
|
ROOT_ID,
|
@@ -20,11 +33,21 @@ export {
|
|
20
33
|
type IsographEnvironment,
|
21
34
|
type IsographNetworkFunction,
|
22
35
|
type IsographStore,
|
36
|
+
type MissingFieldHandler,
|
23
37
|
type Link,
|
24
38
|
type StoreRecord,
|
39
|
+
type CacheMap,
|
25
40
|
createIsographEnvironment,
|
26
41
|
createIsographStore,
|
27
|
-
|
42
|
+
type FieldCache,
|
43
|
+
type Subscriptions,
|
44
|
+
type Subscription,
|
45
|
+
type TypeName,
|
46
|
+
type FragmentSubscription,
|
47
|
+
type AnyChangesToRecordSubscription,
|
48
|
+
type AnyRecordSubscription,
|
49
|
+
type ComponentOrFieldName,
|
50
|
+
type StringifiedArgs,
|
28
51
|
} from './core/IsographEnvironment';
|
29
52
|
export {
|
30
53
|
type EagerReaderArtifact,
|
@@ -37,10 +60,18 @@ export {
|
|
37
60
|
type ReaderScalarField,
|
38
61
|
type TopLevelReaderArtifact,
|
39
62
|
type LoadableField,
|
63
|
+
type StableId,
|
64
|
+
type ResolverFirstParameter,
|
65
|
+
type ReaderImperativelyLoadedField,
|
66
|
+
type ReaderLoadableField,
|
67
|
+
type ReaderLinkField,
|
68
|
+
type StartUpdate,
|
40
69
|
} from './core/reader';
|
41
70
|
export {
|
42
71
|
type NormalizationAst,
|
43
72
|
type NormalizationAstNode,
|
73
|
+
type NormalizationAstNodes,
|
74
|
+
type NormalizationAstLoader,
|
44
75
|
type NormalizationLinkedField,
|
45
76
|
type NormalizationScalarField,
|
46
77
|
type IsographEntrypoint,
|
@@ -50,10 +81,20 @@ export {
|
|
50
81
|
type ExtractProps,
|
51
82
|
type ExtractReadFromStore,
|
52
83
|
type ExtractResolverResult,
|
84
|
+
type NetworkRequestInfo,
|
85
|
+
type NormalizationInlineFragment,
|
86
|
+
type ReaderWithRefetchQueries,
|
87
|
+
type IsographEntrypointLoader,
|
53
88
|
} from './core/entrypoint';
|
54
|
-
export {
|
89
|
+
export {
|
90
|
+
readButDoNotEvaluate,
|
91
|
+
type WithEncounteredRecords,
|
92
|
+
type NetworkRequestReaderOptions,
|
93
|
+
type ReadDataResult,
|
94
|
+
} from './core/read';
|
55
95
|
export {
|
56
96
|
type ExtractSecondParam,
|
97
|
+
type CombineWithIntrinsicAttributes,
|
57
98
|
type Argument,
|
58
99
|
type ArgumentName,
|
59
100
|
type ArgumentValue,
|
@@ -62,16 +103,43 @@ export {
|
|
62
103
|
export {
|
63
104
|
type FragmentReference,
|
64
105
|
type Variables,
|
106
|
+
type ExtractParameters,
|
107
|
+
type ExtractData,
|
108
|
+
type UnknownTReadFromStore,
|
65
109
|
stableIdForFragmentReference,
|
110
|
+
type ExtractStartUpdate,
|
111
|
+
type VariableValue,
|
112
|
+
type StableIdForFragmentReference,
|
66
113
|
} from './core/FragmentReference';
|
114
|
+
export {
|
115
|
+
type LogMessage,
|
116
|
+
type LogFunction,
|
117
|
+
type WrappedLogFunction,
|
118
|
+
logMessage,
|
119
|
+
registerLogger,
|
120
|
+
} from './core/logging';
|
121
|
+
export {
|
122
|
+
check,
|
123
|
+
type CheckResult,
|
124
|
+
type FetchOptions,
|
125
|
+
type RequiredFetchOptions,
|
126
|
+
type ShouldFetch,
|
127
|
+
type RequiredShouldFetch,
|
128
|
+
} from './core/check';
|
67
129
|
|
68
130
|
export {
|
69
131
|
IsographEnvironmentProvider,
|
70
132
|
useIsographEnvironment,
|
71
133
|
type IsographEnvironmentProviderProps,
|
72
134
|
} from './react/IsographEnvironmentProvider';
|
73
|
-
export {
|
74
|
-
|
135
|
+
export {
|
136
|
+
useImperativeReference,
|
137
|
+
type UseImperativeReferenceResult,
|
138
|
+
} from './react/useImperativeReference';
|
139
|
+
export {
|
140
|
+
FragmentReader,
|
141
|
+
type IsExactlyIntrinsicAttributes,
|
142
|
+
} from './react/FragmentReader';
|
75
143
|
export { useResult } from './react/useResult';
|
76
144
|
export {
|
77
145
|
useReadAndSubscribe,
|
@@ -79,8 +147,26 @@ export {
|
|
79
147
|
} from './react/useReadAndSubscribe';
|
80
148
|
export { useLazyReference } from './react/useLazyReference';
|
81
149
|
export { useRerenderOnChange } from './react/useRerenderOnChange';
|
150
|
+
export { RenderAfterCommit__DO_NOT_USE } from './react/RenderAfterCommit__DO_NOT_USE';
|
82
151
|
|
83
152
|
export { useClientSideDefer } from './loadable-hooks/useClientSideDefer';
|
84
|
-
export {
|
85
|
-
|
86
|
-
|
153
|
+
export {
|
154
|
+
useImperativeExposedMutationField,
|
155
|
+
type UseImperativeLoadableFieldReturn as UseImperativeExposedMutationFieldReturn,
|
156
|
+
} from './loadable-hooks/useImperativeExposedMutationField';
|
157
|
+
export {
|
158
|
+
useSkipLimitPagination,
|
159
|
+
type UseSkipLimitPaginationArgs,
|
160
|
+
type UseSkipLimitReturnValue,
|
161
|
+
} from './loadable-hooks/useSkipLimitPagination';
|
162
|
+
export {
|
163
|
+
useConnectionSpecPagination,
|
164
|
+
type Connection,
|
165
|
+
type PageInfo,
|
166
|
+
type UseConnectionSpecPaginationArgs,
|
167
|
+
type UsePaginationReturnValue,
|
168
|
+
} from './loadable-hooks/useConnectionSpecPagination';
|
169
|
+
export {
|
170
|
+
useImperativeLoadableField,
|
171
|
+
type UseImperativeLoadableFieldReturn,
|
172
|
+
} from './loadable-hooks/useImperativeLoadableField';
|
@@ -1,28 +1,59 @@
|
|
1
|
-
import { FragmentReference } from '../core/FragmentReference';
|
2
|
-
import { useIsographEnvironment } from '../react/IsographEnvironmentProvider';
|
3
|
-
import { getOrCreateItemInSuspenseCache } from '../core/cache';
|
4
1
|
import { useLazyDisposableState } from '@isograph/react-disposable-state';
|
2
|
+
import { getOrCreateItemInSuspenseCache } from '../core/cache';
|
3
|
+
import { FetchOptions } from '../core/check';
|
4
|
+
import {
|
5
|
+
ExtractParameters,
|
6
|
+
FragmentReference,
|
7
|
+
type UnknownTReadFromStore,
|
8
|
+
} from '../core/FragmentReference';
|
5
9
|
import { LoadableField } from '../core/reader';
|
10
|
+
import { useIsographEnvironment } from '../react/IsographEnvironmentProvider';
|
6
11
|
|
7
|
-
export function useClientSideDefer<
|
8
|
-
|
9
|
-
|
12
|
+
export function useClientSideDefer<
|
13
|
+
TReadFromStore extends UnknownTReadFromStore,
|
14
|
+
TResult,
|
15
|
+
>(
|
16
|
+
loadableField: LoadableField<
|
17
|
+
TReadFromStore,
|
18
|
+
TResult,
|
19
|
+
ExtractParameters<TReadFromStore>
|
20
|
+
>,
|
21
|
+
args?: Record<PropertyKey, never>,
|
22
|
+
fetchOptions?: FetchOptions<TResult>,
|
23
|
+
): { fragmentReference: FragmentReference<TReadFromStore, TResult> };
|
10
24
|
|
11
|
-
export function useClientSideDefer<
|
12
|
-
|
13
|
-
|
14
|
-
|
25
|
+
export function useClientSideDefer<
|
26
|
+
TReadFromStore extends UnknownTReadFromStore,
|
27
|
+
TResult,
|
28
|
+
TProvidedArgs extends object,
|
29
|
+
>(
|
30
|
+
loadableField: LoadableField<
|
31
|
+
TReadFromStore,
|
32
|
+
TResult,
|
33
|
+
Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>
|
34
|
+
>,
|
35
|
+
args: Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>,
|
36
|
+
fetchOptions?: FetchOptions<TResult>,
|
37
|
+
): { fragmentReference: FragmentReference<TReadFromStore, TResult> };
|
15
38
|
|
16
|
-
export function useClientSideDefer<
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
39
|
+
export function useClientSideDefer<
|
40
|
+
TReadFromStore extends UnknownTReadFromStore,
|
41
|
+
TResult,
|
42
|
+
TProvidedArgs extends object,
|
43
|
+
>(
|
44
|
+
loadableField: LoadableField<
|
45
|
+
TReadFromStore,
|
46
|
+
TResult,
|
47
|
+
Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>
|
48
|
+
>,
|
49
|
+
args?: Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>,
|
50
|
+
fetchOptions?: FetchOptions<TResult>,
|
51
|
+
): { fragmentReference: FragmentReference<TReadFromStore, TResult> } {
|
52
|
+
const [id, loader] = loadableField(args, fetchOptions ?? {});
|
22
53
|
const environment = useIsographEnvironment();
|
23
54
|
const cache = getOrCreateItemInSuspenseCache(environment, id, loader);
|
24
55
|
|
25
56
|
const fragmentReference = useLazyDisposableState(cache).state;
|
26
57
|
|
27
|
-
return fragmentReference;
|
58
|
+
return { fragmentReference };
|
28
59
|
}
|