@isograph/react 0.0.0-main-76ed27b2 → 0.0.0-main-edc5d14f
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 +1 -1
- package/dist/core/IsographEnvironment.d.ts +3 -3
- package/dist/core/IsographEnvironment.d.ts.map +1 -1
- package/dist/core/IsographEnvironment.js +2 -1
- package/dist/core/brand.d.ts +17 -0
- package/dist/core/brand.d.ts.map +1 -1
- package/dist/core/cache.d.ts +7 -5
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/cache.js +17 -1
- package/dist/core/entrypoint.d.ts +13 -6
- package/dist/core/entrypoint.d.ts.map +1 -1
- package/dist/core/logging.d.ts +1 -1
- package/dist/core/logging.d.ts.map +1 -1
- package/dist/core/makeNetworkRequest.d.ts +3 -2
- package/dist/core/makeNetworkRequest.d.ts.map +1 -1
- package/dist/core/read.d.ts +1 -1
- package/dist/core/read.d.ts.map +1 -1
- package/dist/core/reader.d.ts +1 -1
- package/dist/core/reader.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/react/FragmentReader.d.ts +2 -1
- package/dist/react/FragmentReader.d.ts.map +1 -1
- package/dist/react/FragmentRenderer.d.ts +2 -1
- package/dist/react/FragmentRenderer.d.ts.map +1 -1
- package/dist/react/useImperativeReference.d.ts +2 -1
- package/dist/react/useImperativeReference.d.ts.map +1 -1
- package/dist/react/useLazyReference.d.ts +2 -1
- package/dist/react/useLazyReference.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/core/IsographEnvironment.ts +6 -5
- package/src/core/brand.ts +18 -0
- package/src/core/cache.ts +54 -9
- package/src/core/entrypoint.ts +27 -5
- package/src/core/logging.ts +1 -1
- package/src/core/makeNetworkRequest.ts +39 -15
- package/src/core/read.ts +2 -2
- package/src/core/reader.ts +2 -2
- package/src/index.ts +1 -0
- package/src/react/FragmentReader.tsx +3 -1
- package/src/react/FragmentRenderer.tsx +8 -1
- package/src/react/useImperativeReference.ts +4 -1
- package/src/react/useLazyReference.ts +16 -5
- package/src/tests/__isograph/Query/linkedUpdate/entrypoint.ts +3 -1
- package/src/tests/__isograph/Query/meName/entrypoint.ts +3 -1
- package/src/tests/__isograph/Query/meNameSuccessor/entrypoint.ts +3 -1
- package/src/tests/__isograph/Query/nodeField/entrypoint.ts +3 -1
- package/src/tests/__isograph/Query/normalizeUndefinedField/entrypoint.ts +3 -1
- package/src/tests/__isograph/Query/startUpdate/entrypoint.ts +3 -1
- package/src/tests/__isograph/Query/subquery/entrypoint.ts +3 -1
- package/src/tests/__isograph/iso.ts +1 -1
package/src/core/brand.ts
CHANGED
|
@@ -16,3 +16,21 @@ export type Brand<
|
|
|
16
16
|
Brand extends symbol | string,
|
|
17
17
|
// @ts-ignore
|
|
18
18
|
> = infer _ extends Brand ? BaseType : never;
|
|
19
|
+
|
|
20
|
+
declare const PhantomDataBrand: unique symbol;
|
|
21
|
+
/**
|
|
22
|
+
* A phantom data type is one that shouldn't show up at runtime, but is checked statically (and only) at compile time.
|
|
23
|
+
* Data types can use extra properties to act as markers or to perform type checking at compile time. These extra properties should hold no storage values, and have no runtime behavior.
|
|
24
|
+
*
|
|
25
|
+
* ```tsx
|
|
26
|
+
* type MyType<T> = {
|
|
27
|
+
* readonly value: number;
|
|
28
|
+
* readonly '~T'?: PhantomData<T>;
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export type PhantomData<T> = Brand<T, typeof PhantomDataBrand>;
|
|
33
|
+
|
|
34
|
+
export type Invariant<T> = (_: T) => T;
|
|
35
|
+
export type Covariant<T> = (_: never) => T;
|
|
36
|
+
export type Contravariant<T> = (_: T) => void;
|
package/src/core/cache.ts
CHANGED
|
@@ -35,6 +35,7 @@ import {
|
|
|
35
35
|
import { logMessage } from './logging';
|
|
36
36
|
import { maybeMakeNetworkRequest } from './makeNetworkRequest';
|
|
37
37
|
import {
|
|
38
|
+
addNetworkResponseStoreLayer,
|
|
38
39
|
getMutableStoreRecordProxy,
|
|
39
40
|
type StoreLayerWithData,
|
|
40
41
|
} from './optimisticProxy';
|
|
@@ -86,12 +87,14 @@ export function getOrCreateCacheForArtifact<
|
|
|
86
87
|
TReadFromStore extends UnknownTReadFromStore,
|
|
87
88
|
TClientFieldValue,
|
|
88
89
|
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
|
90
|
+
TRawResponseType extends NetworkResponseObject,
|
|
89
91
|
>(
|
|
90
92
|
environment: IsographEnvironment,
|
|
91
93
|
entrypoint: IsographEntrypoint<
|
|
92
94
|
TReadFromStore,
|
|
93
95
|
TClientFieldValue,
|
|
94
|
-
TNormalizationAst
|
|
96
|
+
TNormalizationAst,
|
|
97
|
+
TRawResponseType
|
|
95
98
|
>,
|
|
96
99
|
variables: ExtractParameters<TReadFromStore>,
|
|
97
100
|
fetchOptions?: FetchOptions<TClientFieldValue>,
|
|
@@ -145,15 +148,15 @@ export type NetworkResponseValue =
|
|
|
145
148
|
| NetworkResponseScalarValue
|
|
146
149
|
| null
|
|
147
150
|
| NetworkResponseObject
|
|
148
|
-
| (NetworkResponseObject | null)[]
|
|
149
|
-
| (NetworkResponseScalarValue | null)[];
|
|
151
|
+
| readonly (NetworkResponseObject | null)[]
|
|
152
|
+
| readonly (NetworkResponseScalarValue | null)[];
|
|
150
153
|
|
|
151
154
|
export type NetworkResponseObject = {
|
|
152
155
|
// N.B. undefined is here to support optional id's, but
|
|
153
156
|
// undefined should not *actually* be present in the network response.
|
|
154
|
-
[index: string]: undefined | NetworkResponseValue;
|
|
155
|
-
id?: DataId;
|
|
156
|
-
__typename?: TypeName;
|
|
157
|
+
readonly [index: string]: undefined | NetworkResponseValue;
|
|
158
|
+
readonly id?: DataId;
|
|
159
|
+
readonly __typename?: TypeName;
|
|
157
160
|
};
|
|
158
161
|
|
|
159
162
|
export function normalizeData(
|
|
@@ -523,6 +526,10 @@ function normalizeScalarField(
|
|
|
523
526
|
}
|
|
524
527
|
}
|
|
525
528
|
|
|
529
|
+
export function isArray(value: unknown): value is readonly unknown[] {
|
|
530
|
+
return Array.isArray(value);
|
|
531
|
+
}
|
|
532
|
+
|
|
526
533
|
/**
|
|
527
534
|
* Mutate targetParentRecord with a given linked field ast node.
|
|
528
535
|
*/
|
|
@@ -555,7 +562,7 @@ function normalizeLinkedField(
|
|
|
555
562
|
);
|
|
556
563
|
}
|
|
557
564
|
|
|
558
|
-
if (
|
|
565
|
+
if (isArray(networkResponseData)) {
|
|
559
566
|
// TODO check astNode.plural or the like
|
|
560
567
|
const dataIds: (StoreLink | null)[] = [];
|
|
561
568
|
for (let i = 0; i < networkResponseData.length; i++) {
|
|
@@ -721,7 +728,9 @@ function normalizeNetworkResponseObject(
|
|
|
721
728
|
|
|
722
729
|
function isScalarOrEmptyArray(
|
|
723
730
|
data: NonNullable<NetworkResponseValue>,
|
|
724
|
-
): data is
|
|
731
|
+
): data is
|
|
732
|
+
| NetworkResponseScalarValue
|
|
733
|
+
| readonly (NetworkResponseScalarValue | null)[] {
|
|
725
734
|
// N.B. empty arrays count as empty arrays of scalar fields.
|
|
726
735
|
if (Array.isArray(data)) {
|
|
727
736
|
// This is maybe fixed in a new version of Typescript??
|
|
@@ -735,7 +744,9 @@ function isScalarOrEmptyArray(
|
|
|
735
744
|
return isScalarValue;
|
|
736
745
|
}
|
|
737
746
|
|
|
738
|
-
function isNullOrEmptyArray(
|
|
747
|
+
function isNullOrEmptyArray(
|
|
748
|
+
data: unknown,
|
|
749
|
+
): data is readonly never[] | null[] | null {
|
|
739
750
|
if (Array.isArray(data)) {
|
|
740
751
|
if (data.length === 0) {
|
|
741
752
|
return true;
|
|
@@ -911,3 +922,37 @@ function getDataIdOfNetworkResponse(
|
|
|
911
922
|
}
|
|
912
923
|
return storeKey;
|
|
913
924
|
}
|
|
925
|
+
|
|
926
|
+
export function writeData<
|
|
927
|
+
TReadFromStore extends UnknownTReadFromStore,
|
|
928
|
+
TRawResponseType extends NetworkResponseObject,
|
|
929
|
+
>(
|
|
930
|
+
environment: IsographEnvironment,
|
|
931
|
+
entrypoint: IsographEntrypoint<
|
|
932
|
+
TReadFromStore,
|
|
933
|
+
unknown,
|
|
934
|
+
NormalizationAst,
|
|
935
|
+
TRawResponseType
|
|
936
|
+
>,
|
|
937
|
+
data: TRawResponseType,
|
|
938
|
+
variables: ExtractParameters<TReadFromStore>,
|
|
939
|
+
) {
|
|
940
|
+
const encounteredIds: EncounteredIds = new Map();
|
|
941
|
+
environment.store = addNetworkResponseStoreLayer(environment.store);
|
|
942
|
+
normalizeData(
|
|
943
|
+
environment,
|
|
944
|
+
environment.store,
|
|
945
|
+
entrypoint.networkRequestInfo.normalizationAst.selections,
|
|
946
|
+
data,
|
|
947
|
+
variables,
|
|
948
|
+
{ __link: ROOT_ID, __typename: entrypoint.concreteType },
|
|
949
|
+
encounteredIds,
|
|
950
|
+
);
|
|
951
|
+
logMessage(environment, () => ({
|
|
952
|
+
kind: 'AfterNormalization',
|
|
953
|
+
store: environment.store,
|
|
954
|
+
encounteredIds,
|
|
955
|
+
}));
|
|
956
|
+
|
|
957
|
+
callSubscriptions(environment, encounteredIds);
|
|
958
|
+
}
|
package/src/core/entrypoint.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { Contravariant, PhantomData } from './brand';
|
|
2
|
+
import type { NetworkResponseObject } from './cache';
|
|
1
3
|
import type { UnknownTReadFromStore } from './FragmentReference';
|
|
2
4
|
import type { TypeName } from './IsographEnvironment';
|
|
3
5
|
import { TopLevelReaderArtifact } from './reader';
|
|
@@ -55,6 +57,7 @@ export type IsographEntrypoint<
|
|
|
55
57
|
TReadFromStore extends UnknownTReadFromStore,
|
|
56
58
|
TClientFieldValue,
|
|
57
59
|
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
|
60
|
+
TRawResponseType extends NetworkResponseObject,
|
|
58
61
|
> = {
|
|
59
62
|
readonly kind: 'Entrypoint';
|
|
60
63
|
readonly networkRequestInfo: NetworkRequestInfo<TNormalizationAst>;
|
|
@@ -62,16 +65,26 @@ export type IsographEntrypoint<
|
|
|
62
65
|
| ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>
|
|
63
66
|
| ReaderWithRefetchQueriesLoader<TReadFromStore, TClientFieldValue>;
|
|
64
67
|
readonly concreteType: TypeName;
|
|
68
|
+
/**
|
|
69
|
+
* This field exists solely for typechecking, and will not exist at runtime.
|
|
70
|
+
*/
|
|
71
|
+
readonly '~TRawResponseType'?: PhantomData<Contravariant<TRawResponseType>>;
|
|
65
72
|
};
|
|
66
73
|
|
|
67
74
|
export type IsographEntrypointLoader<
|
|
68
75
|
TReadFromStore extends UnknownTReadFromStore,
|
|
69
76
|
TClientFieldValue,
|
|
77
|
+
TRawResponseType extends NetworkResponseObject,
|
|
70
78
|
> = {
|
|
71
79
|
readonly kind: 'EntrypointLoader';
|
|
72
80
|
readonly typeAndField: string;
|
|
73
81
|
readonly loader: () => Promise<
|
|
74
|
-
IsographEntrypoint<
|
|
82
|
+
IsographEntrypoint<
|
|
83
|
+
TReadFromStore,
|
|
84
|
+
TClientFieldValue,
|
|
85
|
+
NormalizationAst,
|
|
86
|
+
TRawResponseType
|
|
87
|
+
>
|
|
75
88
|
>;
|
|
76
89
|
};
|
|
77
90
|
|
|
@@ -129,9 +142,15 @@ export function assertIsEntrypoint<
|
|
|
129
142
|
TReadFromStore extends UnknownTReadFromStore,
|
|
130
143
|
TClientFieldValue,
|
|
131
144
|
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
|
145
|
+
TRawResponseType extends NetworkResponseObject,
|
|
132
146
|
>(
|
|
133
147
|
value:
|
|
134
|
-
| IsographEntrypoint<
|
|
148
|
+
| IsographEntrypoint<
|
|
149
|
+
TReadFromStore,
|
|
150
|
+
TClientFieldValue,
|
|
151
|
+
TNormalizationAst,
|
|
152
|
+
TRawResponseType
|
|
153
|
+
>
|
|
135
154
|
| ((_: any) => any)
|
|
136
155
|
// Temporarily, allow any here. Once we automatically provide
|
|
137
156
|
// types to entrypoints, we probably don't need this.
|
|
@@ -139,13 +158,16 @@ export function assertIsEntrypoint<
|
|
|
139
158
|
): asserts value is IsographEntrypoint<
|
|
140
159
|
TReadFromStore,
|
|
141
160
|
TClientFieldValue,
|
|
142
|
-
TNormalizationAst
|
|
161
|
+
TNormalizationAst,
|
|
162
|
+
TRawResponseType
|
|
143
163
|
> {
|
|
144
164
|
if (typeof value === 'function') throw new Error('Not a string');
|
|
145
165
|
}
|
|
146
166
|
|
|
147
167
|
export type ExtractReadFromStore<Type> =
|
|
148
|
-
Type extends IsographEntrypoint<infer X, any, any> ? X : never;
|
|
168
|
+
Type extends IsographEntrypoint<infer X, any, any, any> ? X : never;
|
|
169
|
+
export type ExtractRawResponseType<Type> =
|
|
170
|
+
Type extends IsographEntrypoint<any, any, any, infer X> ? X : never;
|
|
149
171
|
export type ExtractResolverResult<Type> =
|
|
150
|
-
Type extends IsographEntrypoint<any, infer X, any> ? X : never;
|
|
172
|
+
Type extends IsographEntrypoint<any, infer X, any, any> ? X : never;
|
|
151
173
|
export type ExtractProps<Type> = Type extends React.FC<infer X> ? X : never;
|
package/src/core/logging.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { ItemCleanupPair } from '@isograph/disposable-types';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
callSubscriptions,
|
|
4
|
+
normalizeData,
|
|
5
|
+
type EncounteredIds,
|
|
6
|
+
type NetworkResponseObject,
|
|
7
|
+
} from './cache';
|
|
3
8
|
import { check, DEFAULT_SHOULD_FETCH_VALUE, FetchOptions } from './check';
|
|
4
9
|
import { getOrCreateCachedComponent } from './componentCache';
|
|
5
10
|
import {
|
|
@@ -37,13 +42,18 @@ let networkRequestId = 0;
|
|
|
37
42
|
export function maybeMakeNetworkRequest<
|
|
38
43
|
TReadFromStore extends UnknownTReadFromStore,
|
|
39
44
|
TClientFieldValue,
|
|
40
|
-
TArtifact extends
|
|
41
|
-
| RefetchQueryNormalizationArtifact
|
|
42
|
-
| IsographEntrypoint<TReadFromStore, TClientFieldValue, TNormalizationAst>,
|
|
43
45
|
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
|
46
|
+
TRawResponseType extends NetworkResponseObject,
|
|
44
47
|
>(
|
|
45
48
|
environment: IsographEnvironment,
|
|
46
|
-
artifact:
|
|
49
|
+
artifact:
|
|
50
|
+
| RefetchQueryNormalizationArtifact
|
|
51
|
+
| IsographEntrypoint<
|
|
52
|
+
TReadFromStore,
|
|
53
|
+
TClientFieldValue,
|
|
54
|
+
TNormalizationAst,
|
|
55
|
+
TRawResponseType
|
|
56
|
+
>,
|
|
47
57
|
variables: ExtractParameters<TReadFromStore>,
|
|
48
58
|
readerWithRefetchQueries: PromiseWrapper<
|
|
49
59
|
ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>
|
|
@@ -108,6 +118,7 @@ export function maybeMakeNetworkRequest<
|
|
|
108
118
|
function retainQueryWithoutMakingNetworkRequest<
|
|
109
119
|
TReadFromStore extends UnknownTReadFromStore,
|
|
110
120
|
TClientFieldValue,
|
|
121
|
+
TRawResponseType extends NetworkResponseObject,
|
|
111
122
|
>(
|
|
112
123
|
environment: IsographEnvironment,
|
|
113
124
|
artifact:
|
|
@@ -115,7 +126,8 @@ function retainQueryWithoutMakingNetworkRequest<
|
|
|
115
126
|
| IsographEntrypoint<
|
|
116
127
|
TReadFromStore,
|
|
117
128
|
TClientFieldValue,
|
|
118
|
-
NormalizationAst | NormalizationAstLoader
|
|
129
|
+
NormalizationAst | NormalizationAstLoader,
|
|
130
|
+
TRawResponseType
|
|
119
131
|
>,
|
|
120
132
|
variables: ExtractParameters<TReadFromStore>,
|
|
121
133
|
): ItemCleanupPair<PromiseWrapper<void, AnyError>> {
|
|
@@ -143,13 +155,18 @@ function retainQueryWithoutMakingNetworkRequest<
|
|
|
143
155
|
export function makeNetworkRequest<
|
|
144
156
|
TReadFromStore extends UnknownTReadFromStore,
|
|
145
157
|
TClientFieldValue,
|
|
146
|
-
TArtifact extends
|
|
147
|
-
| RefetchQueryNormalizationArtifact
|
|
148
|
-
| IsographEntrypoint<TReadFromStore, TClientFieldValue, TNormalizationAst>,
|
|
149
158
|
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
|
159
|
+
TRawResponseType extends NetworkResponseObject,
|
|
150
160
|
>(
|
|
151
161
|
environment: IsographEnvironment,
|
|
152
|
-
artifact:
|
|
162
|
+
artifact:
|
|
163
|
+
| RefetchQueryNormalizationArtifact
|
|
164
|
+
| IsographEntrypoint<
|
|
165
|
+
TReadFromStore,
|
|
166
|
+
TClientFieldValue,
|
|
167
|
+
TNormalizationAst,
|
|
168
|
+
TRawResponseType
|
|
169
|
+
>,
|
|
153
170
|
variables: ExtractParameters<TReadFromStore>,
|
|
154
171
|
readerWithRefetchQueries: PromiseWrapper<
|
|
155
172
|
ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>
|
|
@@ -284,12 +301,17 @@ type NetworkRequestStatus =
|
|
|
284
301
|
function readDataForOnComplete<
|
|
285
302
|
TReadFromStore extends UnknownTReadFromStore,
|
|
286
303
|
TClientFieldValue,
|
|
287
|
-
TArtifact extends
|
|
288
|
-
| RefetchQueryNormalizationArtifact
|
|
289
|
-
| IsographEntrypoint<TReadFromStore, TClientFieldValue, TNormalizationAst>,
|
|
290
304
|
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
|
305
|
+
TRawResponseType extends NetworkResponseObject,
|
|
291
306
|
>(
|
|
292
|
-
artifact:
|
|
307
|
+
artifact:
|
|
308
|
+
| RefetchQueryNormalizationArtifact
|
|
309
|
+
| IsographEntrypoint<
|
|
310
|
+
TReadFromStore,
|
|
311
|
+
TClientFieldValue,
|
|
312
|
+
TNormalizationAst,
|
|
313
|
+
TRawResponseType
|
|
314
|
+
>,
|
|
293
315
|
environment: IsographEnvironment,
|
|
294
316
|
root: StoreLink,
|
|
295
317
|
variables: ExtractParameters<TReadFromStore>,
|
|
@@ -386,6 +408,7 @@ function readDataForOnComplete<
|
|
|
386
408
|
function fetchNormalizationAstAndRetainArtifact<
|
|
387
409
|
TReadFromStore extends UnknownTReadFromStore,
|
|
388
410
|
TClientFieldValue,
|
|
411
|
+
TRawResponseType extends NetworkResponseObject,
|
|
389
412
|
>(
|
|
390
413
|
environment: IsographEnvironment,
|
|
391
414
|
artifact:
|
|
@@ -393,7 +416,8 @@ function fetchNormalizationAstAndRetainArtifact<
|
|
|
393
416
|
| IsographEntrypoint<
|
|
394
417
|
TReadFromStore,
|
|
395
418
|
TClientFieldValue,
|
|
396
|
-
NormalizationAst | NormalizationAstLoader
|
|
419
|
+
NormalizationAst | NormalizationAstLoader,
|
|
420
|
+
TRawResponseType
|
|
397
421
|
>,
|
|
398
422
|
variables: ExtractParameters<TReadFromStore>,
|
|
399
423
|
): RetainedQuery {
|
package/src/core/read.ts
CHANGED
|
@@ -344,7 +344,7 @@ export function readLoadablySelectedFieldData(
|
|
|
344
344
|
// Fetcher
|
|
345
345
|
() => {
|
|
346
346
|
const fragmentReferenceAndDisposeFromEntrypoint = (
|
|
347
|
-
entrypoint: IsographEntrypoint<any, any, any>,
|
|
347
|
+
entrypoint: IsographEntrypoint<any, any, any, {}>,
|
|
348
348
|
): [FragmentReference<any, any>, CleanupFn] => {
|
|
349
349
|
const readerWithRefetchQueries =
|
|
350
350
|
entrypoint.readerWithRefetchQueries.kind ===
|
|
@@ -630,7 +630,7 @@ export function readScalarFieldData(
|
|
|
630
630
|
root: StoreLink,
|
|
631
631
|
variables: Variables,
|
|
632
632
|
): ReadDataResult<
|
|
633
|
-
string | number | boolean | StoreLink | DataTypeValue[] | null
|
|
633
|
+
string | number | boolean | StoreLink | readonly DataTypeValue[] | null
|
|
634
634
|
> {
|
|
635
635
|
const storeRecordName = getParentRecordKey(field, variables);
|
|
636
636
|
const value = storeRecord[storeRecordName];
|
package/src/core/reader.ts
CHANGED
|
@@ -153,8 +153,8 @@ export type LoadablySelectedField = {
|
|
|
153
153
|
|
|
154
154
|
// TODO we should not type these as any
|
|
155
155
|
readonly entrypoint:
|
|
156
|
-
| IsographEntrypoint<any, any, any>
|
|
157
|
-
| IsographEntrypointLoader<any, any>;
|
|
156
|
+
| IsographEntrypoint<any, any, any, any>
|
|
157
|
+
| IsographEntrypointLoader<any, any, any>;
|
|
158
158
|
};
|
|
159
159
|
|
|
160
160
|
export type StableId = string;
|
package/src/index.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { NetworkResponseObject } from '../core/cache';
|
|
1
2
|
import {
|
|
2
3
|
type ExtractReadFromStore,
|
|
3
4
|
type IsographEntrypoint,
|
|
@@ -8,7 +9,8 @@ import { useResult } from './useResult';
|
|
|
8
9
|
|
|
9
10
|
export function FragmentReader<
|
|
10
11
|
TResult,
|
|
11
|
-
|
|
12
|
+
TRawResponseType extends NetworkResponseObject,
|
|
13
|
+
TEntrypoint extends IsographEntrypoint<any, TResult, any, TRawResponseType>,
|
|
12
14
|
TChildrenResult,
|
|
13
15
|
>({
|
|
14
16
|
fragmentReference,
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
import { type FragmentReference } from '../core/FragmentReference';
|
|
7
7
|
import { type NetworkRequestReaderOptions } from '../core/read';
|
|
8
8
|
import { useResult } from './useResult';
|
|
9
|
+
import type { NetworkResponseObject } from '../core/cache';
|
|
9
10
|
|
|
10
11
|
export type IsExactlyIntrinsicAttributes<T> = T extends JSX.IntrinsicAttributes
|
|
11
12
|
? JSX.IntrinsicAttributes extends T
|
|
@@ -15,7 +16,13 @@ export type IsExactlyIntrinsicAttributes<T> = T extends JSX.IntrinsicAttributes
|
|
|
15
16
|
|
|
16
17
|
export function FragmentRenderer<
|
|
17
18
|
TProps extends Record<any, any>,
|
|
18
|
-
|
|
19
|
+
TRawResponseType extends NetworkResponseObject,
|
|
20
|
+
TEntrypoint extends IsographEntrypoint<
|
|
21
|
+
any,
|
|
22
|
+
React.FC<TProps>,
|
|
23
|
+
any,
|
|
24
|
+
TRawResponseType
|
|
25
|
+
>,
|
|
19
26
|
>(
|
|
20
27
|
props: IsExactlyIntrinsicAttributes<TProps> extends true
|
|
21
28
|
? {
|
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
UNASSIGNED_STATE,
|
|
3
3
|
useUpdatableDisposableState,
|
|
4
4
|
} from '@isograph/react-disposable-state';
|
|
5
|
+
import type { NetworkResponseObject } from '../core/cache';
|
|
5
6
|
import { FetchOptions, type RequiredFetchOptions } from '../core/check';
|
|
6
7
|
import {
|
|
7
8
|
IsographEntrypoint,
|
|
@@ -39,11 +40,13 @@ export function useImperativeReference<
|
|
|
39
40
|
TReadFromStore extends UnknownTReadFromStore,
|
|
40
41
|
TClientFieldValue,
|
|
41
42
|
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
|
43
|
+
TRawResponseType extends NetworkResponseObject,
|
|
42
44
|
>(
|
|
43
45
|
entrypoint: IsographEntrypoint<
|
|
44
46
|
TReadFromStore,
|
|
45
47
|
TClientFieldValue,
|
|
46
|
-
TNormalizationAst
|
|
48
|
+
TNormalizationAst,
|
|
49
|
+
TRawResponseType
|
|
47
50
|
>,
|
|
48
51
|
): UseImperativeReferenceResult<
|
|
49
52
|
TReadFromStore,
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { useLazyDisposableState } from '@isograph/react-disposable-state';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
getOrCreateCacheForArtifact,
|
|
4
|
+
type NetworkResponseObject,
|
|
5
|
+
} from '../core/cache';
|
|
3
6
|
import { FetchOptions, type RequiredFetchOptions } from '../core/check';
|
|
4
7
|
import {
|
|
5
8
|
IsographEntrypoint,
|
|
@@ -18,11 +21,13 @@ export function useLazyReference<
|
|
|
18
21
|
TReadFromStore extends UnknownTReadFromStore,
|
|
19
22
|
TClientFieldValue,
|
|
20
23
|
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
|
24
|
+
TRawResponseType extends NetworkResponseObject,
|
|
21
25
|
>(
|
|
22
26
|
entrypoint: IsographEntrypoint<
|
|
23
27
|
TReadFromStore,
|
|
24
28
|
TClientFieldValue,
|
|
25
|
-
TNormalizationAst
|
|
29
|
+
TNormalizationAst,
|
|
30
|
+
TRawResponseType
|
|
26
31
|
>,
|
|
27
32
|
variables: ExtractParameters<TReadFromStore>,
|
|
28
33
|
...[fetchOptions]: TNormalizationAst extends NormalizationAstLoader
|
|
@@ -57,12 +62,18 @@ export function useLazyReference<
|
|
|
57
62
|
|
|
58
63
|
// @ts-ignore
|
|
59
64
|
function tsTests() {
|
|
60
|
-
let withAst!: IsographEntrypoint<any, unknown, NormalizationAst>;
|
|
61
|
-
let withAstLoader!: IsographEntrypoint<
|
|
65
|
+
let withAst!: IsographEntrypoint<any, unknown, NormalizationAst, any>;
|
|
66
|
+
let withAstLoader!: IsographEntrypoint<
|
|
67
|
+
any,
|
|
68
|
+
unknown,
|
|
69
|
+
NormalizationAstLoader,
|
|
70
|
+
{}
|
|
71
|
+
>;
|
|
62
72
|
let withAstOrLoader!: IsographEntrypoint<
|
|
63
73
|
any,
|
|
64
74
|
unknown,
|
|
65
|
-
NormalizationAst | NormalizationAstLoader
|
|
75
|
+
NormalizationAst | NormalizationAstLoader,
|
|
76
|
+
{}
|
|
66
77
|
>;
|
|
67
78
|
|
|
68
79
|
useLazyReference(withAst, {}) satisfies {};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type {IsographEntrypoint, NormalizationAst, RefetchQueryNormalizationArtifactWrapper} from '@isograph/react';
|
|
2
2
|
import {Query__linkedUpdate__param} from './param_type';
|
|
3
3
|
import {Query__linkedUpdate__output_type} from './output_type';
|
|
4
|
+
import type {Query__linkedUpdate__raw_response_type} from './raw_response_type';
|
|
4
5
|
import readerResolver from './resolver_reader';
|
|
5
6
|
import queryText from './query_text';
|
|
6
7
|
import normalizationAst from './normalization_ast';
|
|
@@ -9,7 +10,8 @@ const nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[] = [];
|
|
|
9
10
|
const artifact: IsographEntrypoint<
|
|
10
11
|
Query__linkedUpdate__param,
|
|
11
12
|
Query__linkedUpdate__output_type,
|
|
12
|
-
NormalizationAst
|
|
13
|
+
NormalizationAst,
|
|
14
|
+
Query__linkedUpdate__raw_response_type
|
|
13
15
|
> = {
|
|
14
16
|
kind: "Entrypoint",
|
|
15
17
|
networkRequestInfo: {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type {IsographEntrypoint, NormalizationAst, RefetchQueryNormalizationArtifactWrapper} from '@isograph/react';
|
|
2
2
|
import {Query__meName__param} from './param_type';
|
|
3
3
|
import {Query__meName__output_type} from './output_type';
|
|
4
|
+
import type {Query__meName__raw_response_type} from './raw_response_type';
|
|
4
5
|
import readerResolver from './resolver_reader';
|
|
5
6
|
import queryText from './query_text';
|
|
6
7
|
import normalizationAst from './normalization_ast';
|
|
@@ -9,7 +10,8 @@ const nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[] = [];
|
|
|
9
10
|
const artifact: IsographEntrypoint<
|
|
10
11
|
Query__meName__param,
|
|
11
12
|
Query__meName__output_type,
|
|
12
|
-
NormalizationAst
|
|
13
|
+
NormalizationAst,
|
|
14
|
+
Query__meName__raw_response_type
|
|
13
15
|
> = {
|
|
14
16
|
kind: "Entrypoint",
|
|
15
17
|
networkRequestInfo: {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type {IsographEntrypoint, NormalizationAst, RefetchQueryNormalizationArtifactWrapper} from '@isograph/react';
|
|
2
2
|
import {Query__meNameSuccessor__param} from './param_type';
|
|
3
3
|
import {Query__meNameSuccessor__output_type} from './output_type';
|
|
4
|
+
import type {Query__meNameSuccessor__raw_response_type} from './raw_response_type';
|
|
4
5
|
import readerResolver from './resolver_reader';
|
|
5
6
|
import queryText from './query_text';
|
|
6
7
|
import normalizationAst from './normalization_ast';
|
|
@@ -9,7 +10,8 @@ const nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[] = [];
|
|
|
9
10
|
const artifact: IsographEntrypoint<
|
|
10
11
|
Query__meNameSuccessor__param,
|
|
11
12
|
Query__meNameSuccessor__output_type,
|
|
12
|
-
NormalizationAst
|
|
13
|
+
NormalizationAst,
|
|
14
|
+
Query__meNameSuccessor__raw_response_type
|
|
13
15
|
> = {
|
|
14
16
|
kind: "Entrypoint",
|
|
15
17
|
networkRequestInfo: {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type {IsographEntrypoint, NormalizationAst, RefetchQueryNormalizationArtifactWrapper} from '@isograph/react';
|
|
2
2
|
import {Query__nodeField__param} from './param_type';
|
|
3
3
|
import {Query__nodeField__output_type} from './output_type';
|
|
4
|
+
import type {Query__nodeField__raw_response_type} from './raw_response_type';
|
|
4
5
|
import readerResolver from './resolver_reader';
|
|
5
6
|
import queryText from './query_text';
|
|
6
7
|
import normalizationAst from './normalization_ast';
|
|
@@ -9,7 +10,8 @@ const nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[] = [];
|
|
|
9
10
|
const artifact: IsographEntrypoint<
|
|
10
11
|
Query__nodeField__param,
|
|
11
12
|
Query__nodeField__output_type,
|
|
12
|
-
NormalizationAst
|
|
13
|
+
NormalizationAst,
|
|
14
|
+
Query__nodeField__raw_response_type
|
|
13
15
|
> = {
|
|
14
16
|
kind: "Entrypoint",
|
|
15
17
|
networkRequestInfo: {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type {IsographEntrypoint, NormalizationAst, RefetchQueryNormalizationArtifactWrapper} from '@isograph/react';
|
|
2
2
|
import {Query__normalizeUndefinedField__param} from './param_type';
|
|
3
3
|
import {Query__normalizeUndefinedField__output_type} from './output_type';
|
|
4
|
+
import type {Query__normalizeUndefinedField__raw_response_type} from './raw_response_type';
|
|
4
5
|
import readerResolver from './resolver_reader';
|
|
5
6
|
import queryText from './query_text';
|
|
6
7
|
import normalizationAst from './normalization_ast';
|
|
@@ -9,7 +10,8 @@ const nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[] = [];
|
|
|
9
10
|
const artifact: IsographEntrypoint<
|
|
10
11
|
Query__normalizeUndefinedField__param,
|
|
11
12
|
Query__normalizeUndefinedField__output_type,
|
|
12
|
-
NormalizationAst
|
|
13
|
+
NormalizationAst,
|
|
14
|
+
Query__normalizeUndefinedField__raw_response_type
|
|
13
15
|
> = {
|
|
14
16
|
kind: "Entrypoint",
|
|
15
17
|
networkRequestInfo: {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type {IsographEntrypoint, NormalizationAst, RefetchQueryNormalizationArtifactWrapper} from '@isograph/react';
|
|
2
2
|
import {Query__startUpdate__param} from './param_type';
|
|
3
3
|
import {Query__startUpdate__output_type} from './output_type';
|
|
4
|
+
import type {Query__startUpdate__raw_response_type} from './raw_response_type';
|
|
4
5
|
import readerResolver from './resolver_reader';
|
|
5
6
|
import queryText from './query_text';
|
|
6
7
|
import normalizationAst from './normalization_ast';
|
|
@@ -9,7 +10,8 @@ const nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[] = [];
|
|
|
9
10
|
const artifact: IsographEntrypoint<
|
|
10
11
|
Query__startUpdate__param,
|
|
11
12
|
Query__startUpdate__output_type,
|
|
12
|
-
NormalizationAst
|
|
13
|
+
NormalizationAst,
|
|
14
|
+
Query__startUpdate__raw_response_type
|
|
13
15
|
> = {
|
|
14
16
|
kind: "Entrypoint",
|
|
15
17
|
networkRequestInfo: {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type {IsographEntrypoint, NormalizationAst, RefetchQueryNormalizationArtifactWrapper} from '@isograph/react';
|
|
2
2
|
import {Query__subquery__param} from './param_type';
|
|
3
3
|
import {Query__subquery__output_type} from './output_type';
|
|
4
|
+
import type {Query__subquery__raw_response_type} from './raw_response_type';
|
|
4
5
|
import readerResolver from './resolver_reader';
|
|
5
6
|
import queryText from './query_text';
|
|
6
7
|
import normalizationAst from './normalization_ast';
|
|
@@ -9,7 +10,8 @@ const nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[] = [];
|
|
|
9
10
|
const artifact: IsographEntrypoint<
|
|
10
11
|
Query__subquery__param,
|
|
11
12
|
Query__subquery__output_type,
|
|
12
|
-
NormalizationAst
|
|
13
|
+
NormalizationAst,
|
|
14
|
+
Query__subquery__raw_response_type
|
|
13
15
|
> = {
|
|
14
16
|
kind: "Entrypoint",
|
|
15
17
|
networkRequestInfo: {
|
|
@@ -121,7 +121,7 @@ export function iso<T>(
|
|
|
121
121
|
export function iso(_isographLiteralText: string):
|
|
122
122
|
| IdentityWithParam<any>
|
|
123
123
|
| IdentityWithParamComponent<any>
|
|
124
|
-
| IsographEntrypoint<any, any, any>
|
|
124
|
+
| IsographEntrypoint<any, any, any, any>
|
|
125
125
|
{
|
|
126
126
|
throw new Error('iso: Unexpected invocation at runtime. Either the Babel transform ' +
|
|
127
127
|
'was not set up, or it failed to identify this call site. Make sure it ' +
|