@isograph/react 0.0.0-main-0eb53a17 → 0.0.0-main-cddcd660
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/FragmentReference.d.ts +2 -2
- package/dist/core/FragmentReference.d.ts.map +1 -1
- package/dist/core/IsographEnvironment.d.ts +12 -7
- package/dist/core/IsographEnvironment.d.ts.map +1 -1
- package/dist/core/areEqualWithDeepComparison.d.ts +1 -3
- package/dist/core/areEqualWithDeepComparison.d.ts.map +1 -1
- package/dist/core/areEqualWithDeepComparison.js +0 -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 +4 -4
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/cache.js +8 -3
- package/dist/core/check.d.ts +3 -3
- package/dist/core/check.d.ts.map +1 -1
- package/dist/core/garbageCollection.d.ts +2 -2
- package/dist/core/garbageCollection.d.ts.map +1 -1
- package/dist/core/logging.d.ts +13 -4
- package/dist/core/logging.d.ts.map +1 -1
- package/dist/core/makeNetworkRequest.d.ts.map +1 -1
- package/dist/core/read.d.ts +7 -7
- package/dist/core/read.d.ts.map +1 -1
- package/dist/core/reader.d.ts +3 -3
- package/dist/core/reader.d.ts.map +1 -1
- package/dist/core/startUpdate.d.ts.map +1 -1
- package/dist/core/startUpdate.js +9 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/react/FragmentReader.d.ts +4 -10
- 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/LoadableFieldReader.d.ts.map +1 -1
- package/dist/react/LoadableFieldReader.js +0 -3
- 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/package.json +4 -4
- package/src/core/FragmentReference.ts +2 -2
- package/src/core/IsographEnvironment.ts +13 -7
- package/src/core/areEqualWithDeepComparison.ts +5 -5
- package/src/core/brand.ts +18 -0
- package/src/core/cache.ts +22 -14
- package/src/core/check.ts +4 -4
- package/src/core/garbageCollection.ts +3 -3
- package/src/core/logging.ts +16 -4
- package/src/core/makeNetworkRequest.ts +2 -2
- package/src/core/read.ts +12 -10
- package/src/core/reader.ts +3 -3
- package/src/core/startUpdate.ts +11 -2
- package/src/index.ts +5 -2
- package/src/react/FragmentReader.tsx +17 -36
- package/src/react/FragmentRenderer.tsx +46 -0
- package/src/react/LoadableFieldReader.tsx +0 -3
- package/src/react/LoadableFieldRenderer.tsx +41 -0
- package/src/tests/__isograph/Economist/link/output_type.ts +2 -0
- package/src/tests/__isograph/Node/asEconomist/resolver_reader.ts +1 -1
- package/src/tests/__isograph/Node/link/output_type.ts +3 -0
- package/src/tests/__isograph/Query/linkedUpdate/param_type.ts +4 -4
- package/src/tests/__isograph/iso.ts +1 -1
- package/src/tests/__isograph/tsconfig.json +8 -0
package/src/core/read.ts
CHANGED
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
getOrLoadIsographArtifact,
|
|
24
24
|
IsographEnvironment,
|
|
25
25
|
type DataTypeValue,
|
|
26
|
-
type
|
|
26
|
+
type StoreLink,
|
|
27
27
|
type StoreRecord,
|
|
28
28
|
} from './IsographEnvironment';
|
|
29
29
|
import { logMessage } from './logging';
|
|
@@ -134,13 +134,13 @@ export type ReadDataResult<Data> =
|
|
|
134
134
|
readonly kind: 'MissingData';
|
|
135
135
|
readonly reason: string;
|
|
136
136
|
readonly nestedReason?: ReadDataResult<unknown>;
|
|
137
|
-
readonly recordLink:
|
|
137
|
+
readonly recordLink: StoreLink;
|
|
138
138
|
};
|
|
139
139
|
|
|
140
140
|
function readData<TReadFromStore>(
|
|
141
141
|
environment: IsographEnvironment,
|
|
142
142
|
ast: ReaderAst<TReadFromStore>,
|
|
143
|
-
root:
|
|
143
|
+
root: StoreLink,
|
|
144
144
|
variables: Variables,
|
|
145
145
|
nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],
|
|
146
146
|
networkRequest: PromiseWrapper<void, any>,
|
|
@@ -281,7 +281,7 @@ function readData<TReadFromStore>(
|
|
|
281
281
|
export function readLoadablySelectedFieldData(
|
|
282
282
|
environment: IsographEnvironment,
|
|
283
283
|
field: LoadablySelectedField,
|
|
284
|
-
root:
|
|
284
|
+
root: StoreLink,
|
|
285
285
|
variables: Variables,
|
|
286
286
|
networkRequest: PromiseWrapper<void, any>,
|
|
287
287
|
networkRequestOptions: NetworkRequestReaderOptions,
|
|
@@ -534,7 +534,7 @@ function writeQueryArgsToVariables(
|
|
|
534
534
|
export function readResolverFieldData(
|
|
535
535
|
environment: IsographEnvironment,
|
|
536
536
|
field: ReaderNonLoadableResolverField,
|
|
537
|
-
root:
|
|
537
|
+
root: StoreLink,
|
|
538
538
|
variables: Variables,
|
|
539
539
|
nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],
|
|
540
540
|
networkRequest: PromiseWrapper<void, any>,
|
|
@@ -625,9 +625,11 @@ export function readResolverFieldData(
|
|
|
625
625
|
export function readScalarFieldData(
|
|
626
626
|
field: ReaderScalarField,
|
|
627
627
|
storeRecord: StoreRecord,
|
|
628
|
-
root:
|
|
628
|
+
root: StoreLink,
|
|
629
629
|
variables: Variables,
|
|
630
|
-
): ReadDataResult<
|
|
630
|
+
): ReadDataResult<
|
|
631
|
+
string | number | boolean | StoreLink | DataTypeValue[] | null
|
|
632
|
+
> {
|
|
631
633
|
const storeRecordName = getParentRecordKey(field, variables);
|
|
632
634
|
const value = storeRecord[storeRecordName];
|
|
633
635
|
// TODO consider making scalars into discriminated unions. This probably has
|
|
@@ -646,14 +648,14 @@ export function readLinkedFieldData(
|
|
|
646
648
|
environment: IsographEnvironment,
|
|
647
649
|
field: ReaderLinkedField,
|
|
648
650
|
storeRecord: StoreRecord,
|
|
649
|
-
root:
|
|
651
|
+
root: StoreLink,
|
|
650
652
|
variables: Variables,
|
|
651
653
|
nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],
|
|
652
654
|
networkRequest: PromiseWrapper<void, any>,
|
|
653
655
|
networkRequestOptions: NetworkRequestReaderOptions,
|
|
654
656
|
readData: <TReadFromStore>(
|
|
655
657
|
ast: ReaderAst<TReadFromStore>,
|
|
656
|
-
root:
|
|
658
|
+
root: StoreLink,
|
|
657
659
|
) => ReadDataResult<object>,
|
|
658
660
|
): ReadDataResult<unknown> {
|
|
659
661
|
const storeRecordName = getParentRecordKey(field, variables);
|
|
@@ -944,7 +946,7 @@ function stableStringifyArgs(args: object) {
|
|
|
944
946
|
export function readImperativelyLoadedField(
|
|
945
947
|
environment: IsographEnvironment,
|
|
946
948
|
field: ReaderImperativelyLoadedField,
|
|
947
|
-
root:
|
|
949
|
+
root: StoreLink,
|
|
948
950
|
variables: Variables,
|
|
949
951
|
nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],
|
|
950
952
|
networkRequest: PromiseWrapper<void, any>,
|
package/src/core/reader.ts
CHANGED
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
import {
|
|
15
15
|
ComponentOrFieldName,
|
|
16
16
|
IsographEnvironment,
|
|
17
|
-
type
|
|
17
|
+
type StoreLink,
|
|
18
18
|
} from './IsographEnvironment';
|
|
19
19
|
import { Arguments } from './util';
|
|
20
20
|
|
|
@@ -71,7 +71,7 @@ export type RefetchReaderArtifact = {
|
|
|
71
71
|
variables: any,
|
|
72
72
|
// TODO type this better
|
|
73
73
|
filteredVariables: any,
|
|
74
|
-
rootLink:
|
|
74
|
+
rootLink: StoreLink,
|
|
75
75
|
readerArtifact: TopLevelReaderArtifact<any, any, any> | null,
|
|
76
76
|
// TODO type this better
|
|
77
77
|
nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],
|
|
@@ -110,7 +110,7 @@ export type ReaderLinkedField = {
|
|
|
110
110
|
readonly arguments: Arguments | null;
|
|
111
111
|
readonly condition: EagerReaderArtifact<
|
|
112
112
|
{ data: any; parameters: any; startUpdate?: StartUpdate<any> },
|
|
113
|
-
|
|
113
|
+
StoreLink | null
|
|
114
114
|
> | null;
|
|
115
115
|
readonly isUpdatable: boolean;
|
|
116
116
|
/**
|
package/src/core/startUpdate.ts
CHANGED
|
@@ -16,8 +16,9 @@ import {
|
|
|
16
16
|
import {
|
|
17
17
|
assertLink,
|
|
18
18
|
type IsographEnvironment,
|
|
19
|
-
type
|
|
19
|
+
type StoreLink,
|
|
20
20
|
} from './IsographEnvironment';
|
|
21
|
+
import { logMessage } from './logging';
|
|
21
22
|
import { readPromise, type PromiseWrapper } from './PromiseWrapper';
|
|
22
23
|
import {
|
|
23
24
|
readImperativelyLoadedField,
|
|
@@ -65,8 +66,16 @@ export function createStartUpdate<TReadFromStore extends UnknownTReadFromStore>(
|
|
|
65
66
|
try {
|
|
66
67
|
updater(data);
|
|
67
68
|
} catch (e) {
|
|
69
|
+
logMessage(environment, () => ({
|
|
70
|
+
kind: 'StartUpdateError',
|
|
71
|
+
error: e,
|
|
72
|
+
}));
|
|
68
73
|
throw e;
|
|
69
74
|
} finally {
|
|
75
|
+
logMessage(environment, () => ({
|
|
76
|
+
kind: 'StartUpdateComplete',
|
|
77
|
+
updatedIds: mutableUpdatedIds,
|
|
78
|
+
}));
|
|
70
79
|
callSubscriptions(environment, mutableUpdatedIds);
|
|
71
80
|
}
|
|
72
81
|
};
|
|
@@ -146,7 +155,7 @@ function defineCachedProperty<T>(
|
|
|
146
155
|
function readUpdatableData<TReadFromStore extends UnknownTReadFromStore>(
|
|
147
156
|
environment: IsographEnvironment,
|
|
148
157
|
ast: ReaderAst<TReadFromStore>,
|
|
149
|
-
root:
|
|
158
|
+
root: StoreLink,
|
|
150
159
|
variables: ExtractParameters<TReadFromStore>,
|
|
151
160
|
nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[],
|
|
152
161
|
networkRequest: PromiseWrapper<void, any>,
|
package/src/index.ts
CHANGED
|
@@ -35,6 +35,7 @@ export {
|
|
|
35
35
|
type IsographNetworkFunction,
|
|
36
36
|
type IsographStore,
|
|
37
37
|
type MissingFieldHandler,
|
|
38
|
+
type StoreLink,
|
|
38
39
|
type Link,
|
|
39
40
|
type StoreRecord,
|
|
40
41
|
type CacheMap,
|
|
@@ -141,10 +142,12 @@ export {
|
|
|
141
142
|
type UseImperativeReferenceResult,
|
|
142
143
|
} from './react/useImperativeReference';
|
|
143
144
|
export {
|
|
144
|
-
|
|
145
|
+
FragmentRenderer,
|
|
145
146
|
type IsExactlyIntrinsicAttributes,
|
|
146
|
-
} from './react/
|
|
147
|
+
} from './react/FragmentRenderer';
|
|
148
|
+
export { FragmentReader } from './react/FragmentReader';
|
|
147
149
|
export { LoadableFieldReader } from './react/LoadableFieldReader';
|
|
150
|
+
export { LoadableFieldRenderer } from './react/LoadableFieldRenderer';
|
|
148
151
|
export { useResult } from './react/useResult';
|
|
149
152
|
export {
|
|
150
153
|
useReadAndSubscribe,
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
1
|
import {
|
|
3
2
|
type ExtractReadFromStore,
|
|
4
3
|
type IsographEntrypoint,
|
|
@@ -7,40 +6,22 @@ import { type FragmentReference } from '../core/FragmentReference';
|
|
|
7
6
|
import { type NetworkRequestReaderOptions } from '../core/read';
|
|
8
7
|
import { useResult } from './useResult';
|
|
9
8
|
|
|
10
|
-
export type IsExactlyIntrinsicAttributes<T> = T extends JSX.IntrinsicAttributes
|
|
11
|
-
? JSX.IntrinsicAttributes extends T
|
|
12
|
-
? true
|
|
13
|
-
: false
|
|
14
|
-
: false;
|
|
15
|
-
|
|
16
9
|
export function FragmentReader<
|
|
17
|
-
|
|
18
|
-
TEntrypoint extends IsographEntrypoint<any,
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
additionalProps: Omit<TProps, keyof JSX.IntrinsicAttributes>;
|
|
35
|
-
networkRequestOptions?: Partial<NetworkRequestReaderOptions>;
|
|
36
|
-
},
|
|
37
|
-
): React.ReactNode {
|
|
38
|
-
const Component = useResult(
|
|
39
|
-
props.fragmentReference,
|
|
40
|
-
props.networkRequestOptions,
|
|
41
|
-
);
|
|
42
|
-
// TypeScript is not understanding that if additionalProps is Record<PropertyKey, never>,
|
|
43
|
-
// it means that TProps === JSX.IntrinsicAttributes.
|
|
44
|
-
// @ts-expect-error
|
|
45
|
-
return <Component {...props.additionalProps} />;
|
|
10
|
+
TResult,
|
|
11
|
+
TEntrypoint extends IsographEntrypoint<any, TResult, any>,
|
|
12
|
+
TChildrenResult,
|
|
13
|
+
>({
|
|
14
|
+
fragmentReference,
|
|
15
|
+
networkRequestOptions,
|
|
16
|
+
children,
|
|
17
|
+
}: {
|
|
18
|
+
fragmentReference: FragmentReference<
|
|
19
|
+
ExtractReadFromStore<TEntrypoint>,
|
|
20
|
+
TResult
|
|
21
|
+
>;
|
|
22
|
+
networkRequestOptions?: Partial<NetworkRequestReaderOptions>;
|
|
23
|
+
children: (data: TResult) => TChildrenResult;
|
|
24
|
+
}): TChildrenResult {
|
|
25
|
+
const result = useResult(fragmentReference, networkRequestOptions);
|
|
26
|
+
return children(result);
|
|
46
27
|
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import {
|
|
3
|
+
type ExtractReadFromStore,
|
|
4
|
+
type IsographEntrypoint,
|
|
5
|
+
} from '../core/entrypoint';
|
|
6
|
+
import { type FragmentReference } from '../core/FragmentReference';
|
|
7
|
+
import { type NetworkRequestReaderOptions } from '../core/read';
|
|
8
|
+
import { useResult } from './useResult';
|
|
9
|
+
|
|
10
|
+
export type IsExactlyIntrinsicAttributes<T> = T extends JSX.IntrinsicAttributes
|
|
11
|
+
? JSX.IntrinsicAttributes extends T
|
|
12
|
+
? true
|
|
13
|
+
: false
|
|
14
|
+
: false;
|
|
15
|
+
|
|
16
|
+
export function FragmentRenderer<
|
|
17
|
+
TProps extends Record<any, any>,
|
|
18
|
+
TEntrypoint extends IsographEntrypoint<any, React.FC<TProps>, any>,
|
|
19
|
+
>(
|
|
20
|
+
props: IsExactlyIntrinsicAttributes<TProps> extends true
|
|
21
|
+
? {
|
|
22
|
+
fragmentReference: FragmentReference<
|
|
23
|
+
ExtractReadFromStore<TEntrypoint>,
|
|
24
|
+
React.FC<TProps>
|
|
25
|
+
>;
|
|
26
|
+
additionalProps?: Record<PropertyKey, never>;
|
|
27
|
+
networkRequestOptions?: Partial<NetworkRequestReaderOptions>;
|
|
28
|
+
}
|
|
29
|
+
: {
|
|
30
|
+
fragmentReference: FragmentReference<
|
|
31
|
+
ExtractReadFromStore<TEntrypoint>,
|
|
32
|
+
React.FC<TProps>
|
|
33
|
+
>;
|
|
34
|
+
additionalProps: Omit<TProps, keyof JSX.IntrinsicAttributes>;
|
|
35
|
+
networkRequestOptions?: Partial<NetworkRequestReaderOptions>;
|
|
36
|
+
},
|
|
37
|
+
): React.ReactNode {
|
|
38
|
+
const Component = useResult(
|
|
39
|
+
props.fragmentReference,
|
|
40
|
+
props.networkRequestOptions,
|
|
41
|
+
);
|
|
42
|
+
// TypeScript is not understanding that if additionalProps is Record<PropertyKey, never>,
|
|
43
|
+
// it means that TProps === JSX.IntrinsicAttributes.
|
|
44
|
+
// @ts-expect-error
|
|
45
|
+
return <Component {...props.additionalProps} />;
|
|
46
|
+
}
|
|
@@ -8,9 +8,6 @@ import { type LoadableField } from '../core/reader';
|
|
|
8
8
|
import { useClientSideDefer } from '../loadable-hooks/useClientSideDefer';
|
|
9
9
|
import { useResult } from './useResult';
|
|
10
10
|
|
|
11
|
-
// TODO
|
|
12
|
-
// - LoadableFieldRenderer, which works for @loadable fields that are components,
|
|
13
|
-
// i.e. just renders the resulting component
|
|
14
11
|
export function LoadableFieldReader<
|
|
15
12
|
TReadFromStore extends UnknownTReadFromStore,
|
|
16
13
|
TResult,
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type FetchOptions } from '../core/check';
|
|
3
|
+
import {
|
|
4
|
+
ExtractParameters,
|
|
5
|
+
type UnknownTReadFromStore,
|
|
6
|
+
} from '../core/FragmentReference';
|
|
7
|
+
import { type NetworkRequestReaderOptions } from '../core/read';
|
|
8
|
+
import { type LoadableField } from '../core/reader';
|
|
9
|
+
import { useClientSideDefer } from '../loadable-hooks/useClientSideDefer';
|
|
10
|
+
import { useResult } from './useResult';
|
|
11
|
+
|
|
12
|
+
export function LoadableFieldRenderer<
|
|
13
|
+
TReadFromStore extends UnknownTReadFromStore,
|
|
14
|
+
TProvidedArgs extends object,
|
|
15
|
+
TChildrenResult,
|
|
16
|
+
TProps,
|
|
17
|
+
>(props: {
|
|
18
|
+
loadableField: LoadableField<
|
|
19
|
+
TReadFromStore,
|
|
20
|
+
React.FC<TProps>,
|
|
21
|
+
Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>
|
|
22
|
+
>;
|
|
23
|
+
// TODO we can improve this to not require args if its an empty object
|
|
24
|
+
args: Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>;
|
|
25
|
+
fetchOptions?: FetchOptions<React.FC<TProps>>;
|
|
26
|
+
networkRequestOptions?: Partial<NetworkRequestReaderOptions>;
|
|
27
|
+
additionalProps: Omit<TProps, keyof JSX.IntrinsicAttributes>;
|
|
28
|
+
}): TChildrenResult {
|
|
29
|
+
const { fragmentReference } = useClientSideDefer(
|
|
30
|
+
props.loadableField,
|
|
31
|
+
props.args,
|
|
32
|
+
props.fetchOptions,
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
const Component = useResult(fragmentReference, props.networkRequestOptions);
|
|
36
|
+
|
|
37
|
+
// TODO we probably can figure out a way to convince TypeScript of
|
|
38
|
+
// the validity of this.
|
|
39
|
+
// @ts-expect-error
|
|
40
|
+
return <Component {...props.additionalProps} />;
|
|
41
|
+
}
|
|
@@ -16,7 +16,7 @@ const readerAst: ReaderAst<{ data: any, parameters: Record<PropertyKey, never> }
|
|
|
16
16
|
|
|
17
17
|
const artifact: EagerReaderArtifact<
|
|
18
18
|
{ data: any, parameters: Record<PropertyKey, never> },
|
|
19
|
-
Link | null
|
|
19
|
+
Link<"Economist"> | null
|
|
20
20
|
> = {
|
|
21
21
|
kind: "EagerReaderArtifact",
|
|
22
22
|
fieldName: "Node.asEconomist",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Node__link__output_type } from '../../Node/link/output_type';
|
|
2
2
|
import type { StartUpdate } from '@isograph/react';
|
|
3
3
|
|
|
4
4
|
export type Query__linkedUpdate__param = {
|
|
@@ -15,7 +15,7 @@ A client pointer for the Economist type.
|
|
|
15
15
|
/**
|
|
16
16
|
A store Link for the Node type.
|
|
17
17
|
*/
|
|
18
|
-
readonly link:
|
|
18
|
+
readonly link: Node__link__output_type,
|
|
19
19
|
/**
|
|
20
20
|
A client pointer for the Economist type.
|
|
21
21
|
*/
|
|
@@ -34,12 +34,12 @@ A client pointer for the Economist type.
|
|
|
34
34
|
name: string,
|
|
35
35
|
} | null),
|
|
36
36
|
} | null),
|
|
37
|
-
set node(value: ({ link:
|
|
37
|
+
set node(value: ({ link: Node__link__output_type } | null)),
|
|
38
38
|
readonly john_stuart_mill: ({
|
|
39
39
|
/**
|
|
40
40
|
A store Link for the Node type.
|
|
41
41
|
*/
|
|
42
|
-
readonly link:
|
|
42
|
+
readonly link: Node__link__output_type,
|
|
43
43
|
/**
|
|
44
44
|
A client pointer for the Economist type.
|
|
45
45
|
*/
|
|
@@ -16,7 +16,7 @@ import entrypoint_Query__subquery from '../__isograph/Query/subquery/entrypoint'
|
|
|
16
16
|
// This means that the type of the exported iso literal is exactly
|
|
17
17
|
// the type of the passed-in function, which takes one parameter
|
|
18
18
|
// of type TParam.
|
|
19
|
-
type IdentityWithParam<TParam extends object> = <TClientFieldReturn>(
|
|
19
|
+
type IdentityWithParam<TParam extends object, TReturnConstraint = unknown> = <TClientFieldReturn extends TReturnConstraint>(
|
|
20
20
|
clientField: (param: TParam) => TClientFieldReturn
|
|
21
21
|
) => (param: TParam) => TClientFieldReturn;
|
|
22
22
|
|