@isograph/react 0.0.0-main-df52a61c → 0.0.0-main-2f4311e8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/FragmentReference.d.ts +4 -1
- package/dist/core/IsographEnvironment.d.ts +8 -2
- package/dist/core/cache.d.ts +12 -3
- package/dist/core/entrypoint.d.ts +16 -4
- package/dist/core/read.d.ts +4 -1
- package/dist/core/reader.d.ts +13 -4
- package/dist/loadable-hooks/useClientSideDefer.d.ts +3 -3
- package/dist/loadable-hooks/useSkipLimitPagination.d.ts +4 -1
- package/dist/react/useImperativeReference.d.ts +4 -1
- package/dist/react/useLazyReference.d.ts +4 -1
- package/dist/react/useReadAndSubscribe.d.ts +8 -2
- package/dist/react/useRerenderOnChange.d.ts +4 -1
- package/dist/react/useResult.d.ts +4 -1
- package/package.json +4 -4
- package/src/core/FragmentReference.ts +1 -1
- package/src/core/IsographEnvironment.ts +6 -2
- package/src/core/cache.ts +5 -3
- package/src/core/entrypoint.ts +4 -4
- package/src/core/read.ts +3 -1
- package/src/core/reader.ts +4 -4
- package/src/loadable-hooks/useClientSideDefer.ts +5 -5
- package/src/loadable-hooks/useSkipLimitPagination.ts +4 -4
- package/src/react/useImperativeReference.ts +1 -1
- package/src/react/useLazyReference.ts +1 -1
- package/src/react/useReadAndSubscribe.ts +6 -2
- package/src/react/useRerenderOnChange.ts +3 -1
- package/src/react/useResult.ts +4 -1
- package/src/tests/__isograph/iso.ts +2 -2
@@ -5,7 +5,10 @@ export type VariableValue = string | number | boolean | null | object;
|
|
5
5
|
export type Variables = {
|
6
6
|
readonly [index: string]: VariableValue;
|
7
7
|
};
|
8
|
-
export type FragmentReference<TReadFromStore extends
|
8
|
+
export type FragmentReference<TReadFromStore extends {
|
9
|
+
parameters: object;
|
10
|
+
data: object;
|
11
|
+
}, TClientFieldValue> = {
|
9
12
|
readonly kind: 'FragmentReference';
|
10
13
|
readonly readerWithRefetchQueries: PromiseWrapper<ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>>;
|
11
14
|
readonly root: DataId;
|
@@ -15,7 +15,10 @@ type ComponentCache = {
|
|
15
15
|
};
|
16
16
|
};
|
17
17
|
};
|
18
|
-
export type FragmentSubscription<TReadFromStore extends
|
18
|
+
export type FragmentSubscription<TReadFromStore extends {
|
19
|
+
parameters: object;
|
20
|
+
data: object;
|
21
|
+
}> = {
|
19
22
|
readonly kind: 'FragmentSubscription';
|
20
23
|
readonly callback: (newEncounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>) => void;
|
21
24
|
/** The value read out from the previous call to readButDoNotEvaluate */
|
@@ -27,7 +30,10 @@ type AnyRecordSubscription = {
|
|
27
30
|
readonly kind: 'AnyRecords';
|
28
31
|
readonly callback: () => void;
|
29
32
|
};
|
30
|
-
type Subscription = FragmentSubscription<
|
33
|
+
type Subscription = FragmentSubscription<{
|
34
|
+
parameters: object;
|
35
|
+
data: object;
|
36
|
+
}> | AnyRecordSubscription;
|
31
37
|
type Subscriptions = Set<Subscription>;
|
32
38
|
type CacheMap<T> = {
|
33
39
|
[index: string]: ParentCache<T>;
|
package/dist/core/cache.d.ts
CHANGED
@@ -4,14 +4,20 @@ import { IsographEntrypoint, NormalizationAst, NormalizationLinkedField, Normali
|
|
4
4
|
import { ReaderLinkedField, ReaderScalarField, type ReaderAst } from './reader';
|
5
5
|
import { WithEncounteredRecords } from './read';
|
6
6
|
import { FragmentReference, Variables } from './FragmentReference';
|
7
|
-
export declare function getOrCreateItemInSuspenseCache<TReadFromStore extends
|
7
|
+
export declare function getOrCreateItemInSuspenseCache<TReadFromStore extends {
|
8
|
+
parameters: object;
|
9
|
+
data: object;
|
10
|
+
}, TClientFieldValue>(environment: IsographEnvironment, index: string, factory: Factory<FragmentReference<TReadFromStore, TClientFieldValue>>): ParentCache<FragmentReference<TReadFromStore, TClientFieldValue>>;
|
8
11
|
/**
|
9
12
|
* Creates a copy of the provided value, ensuring any nested objects have their
|
10
13
|
* keys sorted such that equivalent values would have identical JSON.stringify
|
11
14
|
* results.
|
12
15
|
*/
|
13
16
|
export declare function stableCopy<T>(value: T): T;
|
14
|
-
export declare function getOrCreateCacheForArtifact<TReadFromStore extends
|
17
|
+
export declare function getOrCreateCacheForArtifact<TReadFromStore extends {
|
18
|
+
parameters: object;
|
19
|
+
data: object;
|
20
|
+
}, TClientFieldValue>(environment: IsographEnvironment, entrypoint: IsographEntrypoint<TReadFromStore, TClientFieldValue>, variables: Variables): ParentCache<FragmentReference<TReadFromStore, TClientFieldValue>>;
|
15
21
|
type NetworkResponseScalarValue = string | number | boolean;
|
16
22
|
type NetworkResponseValue = NetworkResponseScalarValue | null | NetworkResponseObject | NetworkResponseObject[] | NetworkResponseScalarValue[];
|
17
23
|
type NetworkResponseObject = {
|
@@ -20,7 +26,10 @@ type NetworkResponseObject = {
|
|
20
26
|
};
|
21
27
|
export declare function normalizeData(environment: IsographEnvironment, normalizationAst: NormalizationAst, networkResponse: NetworkResponseObject, variables: Variables, nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[]): Set<DataId>;
|
22
28
|
export declare function subscribeToAnyChange(environment: IsographEnvironment, callback: () => void): () => void;
|
23
|
-
export declare function subscribe<TReadFromStore extends
|
29
|
+
export declare function subscribe<TReadFromStore extends {
|
30
|
+
parameters: object;
|
31
|
+
data: object;
|
32
|
+
}>(environment: IsographEnvironment, encounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>, fragmentReference: FragmentReference<TReadFromStore, any>, callback: (newEncounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>) => void, readerAst: ReaderAst<TReadFromStore>): () => void;
|
24
33
|
export declare function onNextChange(environment: IsographEnvironment): Promise<void>;
|
25
34
|
export declare function getParentRecordKey(astNode: NormalizationLinkedField | NormalizationScalarField | ReaderLinkedField | ReaderScalarField, variables: Variables): string;
|
26
35
|
export declare const FIRST_SPLIT_KEY = "____";
|
@@ -1,18 +1,27 @@
|
|
1
1
|
/// <reference types="react" />
|
2
2
|
import { TopLevelReaderArtifact } from './reader';
|
3
3
|
import { Arguments } from './util';
|
4
|
-
export type ReaderWithRefetchQueries<TReadFromStore extends
|
4
|
+
export type ReaderWithRefetchQueries<TReadFromStore extends {
|
5
|
+
parameters: object;
|
6
|
+
data: object;
|
7
|
+
}, TClientFieldValue> = {
|
5
8
|
readonly kind: 'ReaderWithRefetchQueries';
|
6
9
|
readonly readerArtifact: TopLevelReaderArtifact<TReadFromStore, TClientFieldValue, any>;
|
7
10
|
readonly nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[];
|
8
11
|
};
|
9
|
-
export type IsographEntrypoint<TReadFromStore extends
|
12
|
+
export type IsographEntrypoint<TReadFromStore extends {
|
13
|
+
parameters: object;
|
14
|
+
data: object;
|
15
|
+
}, TClientFieldValue> = {
|
10
16
|
readonly kind: 'Entrypoint';
|
11
17
|
readonly queryText: string;
|
12
18
|
readonly normalizationAst: NormalizationAst;
|
13
19
|
readonly readerWithRefetchQueries: ReaderWithRefetchQueries<TReadFromStore, TClientFieldValue>;
|
14
20
|
};
|
15
|
-
export type IsographEntrypointLoader<TReadFromStore extends
|
21
|
+
export type IsographEntrypointLoader<TReadFromStore extends {
|
22
|
+
parameters: object;
|
23
|
+
data: object;
|
24
|
+
}, TClientFieldValue> = {
|
16
25
|
readonly kind: 'EntrypointLoader';
|
17
26
|
readonly typeAndField: string;
|
18
27
|
readonly loader: () => Promise<IsographEntrypoint<TReadFromStore, TClientFieldValue>>;
|
@@ -44,7 +53,10 @@ export type RefetchQueryNormalizationArtifactWrapper = {
|
|
44
53
|
readonly artifact: RefetchQueryNormalizationArtifact;
|
45
54
|
readonly allowedVariables: string[];
|
46
55
|
};
|
47
|
-
export declare function assertIsEntrypoint<TReadFromStore extends
|
56
|
+
export declare function assertIsEntrypoint<TReadFromStore extends {
|
57
|
+
parameters: object;
|
58
|
+
data: object;
|
59
|
+
}, TClientFieldValue>(value: IsographEntrypoint<TReadFromStore, TClientFieldValue> | ((_: any) => any) | any): asserts value is IsographEntrypoint<TReadFromStore, TClientFieldValue>;
|
48
60
|
export type ExtractReadFromStore<Type> = Type extends IsographEntrypoint<infer X, any> ? X : never;
|
49
61
|
export type ExtractResolverResult<Type> = Type extends IsographEntrypoint<any, infer X> ? X : never;
|
50
62
|
export type ExtractProps<Type> = Type extends React.FC<infer X> ? X : never;
|
package/dist/core/read.d.ts
CHANGED
@@ -4,7 +4,10 @@ export type WithEncounteredRecords<T> = {
|
|
4
4
|
readonly encounteredRecords: Set<DataId>;
|
5
5
|
readonly item: T;
|
6
6
|
};
|
7
|
-
export declare function readButDoNotEvaluate<TReadFromStore extends
|
7
|
+
export declare function readButDoNotEvaluate<TReadFromStore extends {
|
8
|
+
parameters: object;
|
9
|
+
data: object;
|
10
|
+
}>(environment: IsographEnvironment, fragmentReference: FragmentReference<TReadFromStore, unknown>, networkRequestOptions: NetworkRequestReaderOptions): WithEncounteredRecords<TReadFromStore>;
|
8
11
|
export type NetworkRequestReaderOptions = {
|
9
12
|
suspendIfInFlight: boolean;
|
10
13
|
throwOnNetworkError: boolean;
|
package/dist/core/reader.d.ts
CHANGED
@@ -4,19 +4,28 @@ import { FragmentReference, Variables } from './FragmentReference';
|
|
4
4
|
import { ComponentOrFieldName, DataId, IsographEnvironment } from './IsographEnvironment';
|
5
5
|
import { IsographEntrypoint, IsographEntrypointLoader, RefetchQueryNormalizationArtifact, RefetchQueryNormalizationArtifactWrapper } from './entrypoint';
|
6
6
|
import { Arguments } from './util';
|
7
|
-
export type TopLevelReaderArtifact<TReadFromStore extends
|
8
|
-
|
7
|
+
export type TopLevelReaderArtifact<TReadFromStore extends {
|
8
|
+
parameters: object;
|
9
|
+
data: object;
|
10
|
+
}, TClientFieldValue, TComponentProps extends Record<string, never>, TVariables = Variables> = EagerReaderArtifact<TReadFromStore, TClientFieldValue, TVariables> | ComponentReaderArtifact<TReadFromStore, TComponentProps, TVariables>;
|
11
|
+
export type EagerReaderArtifact<TReadFromStore extends {
|
12
|
+
parameters: object;
|
13
|
+
data: object;
|
14
|
+
}, TClientFieldValue, TVariables = Variables> = {
|
9
15
|
readonly kind: 'EagerReaderArtifact';
|
10
16
|
readonly readerAst: ReaderAst<TReadFromStore>;
|
11
17
|
readonly resolver: (data: ResolverFirstParameter<TReadFromStore, TVariables>) => TClientFieldValue;
|
12
18
|
};
|
13
|
-
export type ComponentReaderArtifact<TReadFromStore extends
|
19
|
+
export type ComponentReaderArtifact<TReadFromStore extends {
|
20
|
+
parameters: object;
|
21
|
+
data: object;
|
22
|
+
}, TComponentProps extends Record<string, unknown> = Record<string, never>, TVariables = Variables> = {
|
14
23
|
readonly kind: 'ComponentReaderArtifact';
|
15
24
|
readonly componentName: ComponentOrFieldName;
|
16
25
|
readonly readerAst: ReaderAst<TReadFromStore>;
|
17
26
|
readonly resolver: (data: ResolverFirstParameter<TReadFromStore, TVariables>, runtimeProps: TComponentProps) => React.ReactNode;
|
18
27
|
};
|
19
|
-
export type ResolverFirstParameter<TReadFromStore extends
|
28
|
+
export type ResolverFirstParameter<TReadFromStore extends object, TVariables = Variables> = {
|
20
29
|
readonly data: TReadFromStore;
|
21
30
|
readonly parameters: TVariables;
|
22
31
|
};
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import { FragmentReference } from '../core/FragmentReference';
|
2
2
|
import { LoadableField } from '../core/reader';
|
3
3
|
export declare function useClientSideDefer<TResult>(loadableField: LoadableField<void, TResult>): {
|
4
|
-
fragmentReference: FragmentReference<
|
4
|
+
fragmentReference: FragmentReference<any, TResult>;
|
5
5
|
};
|
6
|
-
export declare function useClientSideDefer<TArgs extends
|
7
|
-
fragmentReference: FragmentReference<
|
6
|
+
export declare function useClientSideDefer<TArgs extends object, TResult>(loadableField: LoadableField<TArgs, TResult>, args: TArgs): {
|
7
|
+
fragmentReference: FragmentReference<any, TResult>;
|
8
8
|
};
|
@@ -14,5 +14,8 @@ type UseSkipLimitReturnValue<TArgs, TItem> = {
|
|
14
14
|
export declare function useSkipLimitPagination<TArgs extends {
|
15
15
|
skip: number | void | null;
|
16
16
|
limit: number | void | null;
|
17
|
-
}, TItem, TReadFromStore extends
|
17
|
+
}, TItem, TReadFromStore extends {
|
18
|
+
parameters: object;
|
19
|
+
data: object;
|
20
|
+
}>(loadableField: LoadableField<TArgs, ReadonlyArray<TItem>>): UseSkipLimitReturnValue<TArgs, TItem>;
|
18
21
|
export {};
|
@@ -1,7 +1,10 @@
|
|
1
1
|
import { UnassignedState } from '@isograph/react-disposable-state';
|
2
2
|
import { IsographEntrypoint } from '../core/entrypoint';
|
3
3
|
import { FragmentReference, Variables } from '../core/FragmentReference';
|
4
|
-
export declare function useImperativeReference<TReadFromStore extends
|
4
|
+
export declare function useImperativeReference<TReadFromStore extends {
|
5
|
+
parameters: object;
|
6
|
+
data: object;
|
7
|
+
}, TClientFieldValue>(entrypoint: IsographEntrypoint<TReadFromStore, TClientFieldValue>): {
|
5
8
|
fragmentReference: FragmentReference<TReadFromStore, TClientFieldValue> | UnassignedState;
|
6
9
|
loadFragmentReference: (variables: Variables) => void;
|
7
10
|
};
|
@@ -1,5 +1,8 @@
|
|
1
1
|
import { FragmentReference, Variables } from '../core/FragmentReference';
|
2
2
|
import { IsographEntrypoint } from '../core/entrypoint';
|
3
|
-
export declare function useLazyReference<TReadFromStore extends
|
3
|
+
export declare function useLazyReference<TReadFromStore extends {
|
4
|
+
parameters: object;
|
5
|
+
data: object;
|
6
|
+
}, TClientFieldValue>(entrypoint: IsographEntrypoint<TReadFromStore, TClientFieldValue>, variables: Variables): {
|
4
7
|
fragmentReference: FragmentReference<TReadFromStore, TClientFieldValue>;
|
5
8
|
};
|
@@ -4,8 +4,14 @@ import type { ReaderAst } from '../core/reader';
|
|
4
4
|
/**
|
5
5
|
* Read the data from a fragment reference and subscribe to updates.
|
6
6
|
*/
|
7
|
-
export declare function useReadAndSubscribe<TReadFromStore extends
|
8
|
-
|
7
|
+
export declare function useReadAndSubscribe<TReadFromStore extends {
|
8
|
+
parameters: object;
|
9
|
+
data: object;
|
10
|
+
}>(fragmentReference: FragmentReference<TReadFromStore, any>, networkRequestOptions: NetworkRequestReaderOptions, readerAst: ReaderAst<TReadFromStore>): TReadFromStore;
|
11
|
+
export declare function useSubscribeToMultiple<TReadFromStore extends {
|
12
|
+
parameters: object;
|
13
|
+
data: object;
|
14
|
+
}>(items: ReadonlyArray<{
|
9
15
|
records: WithEncounteredRecords<TReadFromStore>;
|
10
16
|
callback: (updatedRecords: WithEncounteredRecords<TReadFromStore>) => void;
|
11
17
|
fragmentReference: FragmentReference<TReadFromStore, any>;
|
@@ -1,4 +1,7 @@
|
|
1
1
|
import { WithEncounteredRecords } from '../core/read';
|
2
2
|
import { FragmentReference } from '../core/FragmentReference';
|
3
3
|
import type { ReaderAst } from '../core/reader';
|
4
|
-
export declare function useRerenderOnChange<TReadFromStore extends
|
4
|
+
export declare function useRerenderOnChange<TReadFromStore extends {
|
5
|
+
parameters: object;
|
6
|
+
data: object;
|
7
|
+
}>(encounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>, fragmentReference: FragmentReference<any, any>, setEncounteredDataAndRecords: (data: WithEncounteredRecords<TReadFromStore>) => void, readerAst: ReaderAst<TReadFromStore>): void;
|
@@ -1,5 +1,8 @@
|
|
1
1
|
import { FragmentReference } from '../core/FragmentReference';
|
2
2
|
import { NetworkRequestReaderOptions } from '../core/read';
|
3
3
|
import { PromiseWrapper } from '../core/PromiseWrapper';
|
4
|
-
export declare function useResult<TReadFromStore extends
|
4
|
+
export declare function useResult<TReadFromStore extends {
|
5
|
+
parameters: object;
|
6
|
+
data: object;
|
7
|
+
}, TClientFieldValue>(fragmentReference: FragmentReference<TReadFromStore, TClientFieldValue>, partialNetworkRequestOptions?: Partial<NetworkRequestReaderOptions> | void): TClientFieldValue;
|
5
8
|
export declare function maybeUnwrapNetworkRequest(networkRequest: PromiseWrapper<void, any>, networkRequestOptions: NetworkRequestReaderOptions): void;
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@isograph/react",
|
3
|
-
"version": "0.0.0-main-
|
3
|
+
"version": "0.0.0-main-2f4311e8",
|
4
4
|
"description": "Use Isograph with React",
|
5
5
|
"homepage": "https://isograph.dev",
|
6
6
|
"main": "dist/index.js",
|
@@ -17,9 +17,9 @@
|
|
17
17
|
"tsc": "tsc"
|
18
18
|
},
|
19
19
|
"dependencies": {
|
20
|
-
"@isograph/disposable-types": "0.0.0-main-
|
21
|
-
"@isograph/react-disposable-state": "0.0.0-main-
|
22
|
-
"@isograph/reference-counted-pointer": "0.0.0-main-
|
20
|
+
"@isograph/disposable-types": "0.0.0-main-2f4311e8",
|
21
|
+
"@isograph/react-disposable-state": "0.0.0-main-2f4311e8",
|
22
|
+
"@isograph/reference-counted-pointer": "0.0.0-main-2f4311e8"
|
23
23
|
},
|
24
24
|
"peerDependencies": {
|
25
25
|
"react": "18.2.0"
|
@@ -8,7 +8,7 @@ export type VariableValue = string | number | boolean | null | object;
|
|
8
8
|
export type Variables = { readonly [index: string]: VariableValue };
|
9
9
|
|
10
10
|
export type FragmentReference<
|
11
|
-
TReadFromStore extends
|
11
|
+
TReadFromStore extends { parameters: object; data: object },
|
12
12
|
TClientFieldValue,
|
13
13
|
> = {
|
14
14
|
readonly kind: 'FragmentReference';
|
@@ -14,7 +14,9 @@ type ComponentCache = {
|
|
14
14
|
};
|
15
15
|
};
|
16
16
|
|
17
|
-
export type FragmentSubscription<
|
17
|
+
export type FragmentSubscription<
|
18
|
+
TReadFromStore extends { parameters: object; data: object },
|
19
|
+
> = {
|
18
20
|
readonly kind: 'FragmentSubscription';
|
19
21
|
readonly callback: (
|
20
22
|
newEncounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>,
|
@@ -29,7 +31,9 @@ type AnyRecordSubscription = {
|
|
29
31
|
readonly callback: () => void;
|
30
32
|
};
|
31
33
|
|
32
|
-
type Subscription =
|
34
|
+
type Subscription =
|
35
|
+
| FragmentSubscription<{ parameters: object; data: object }>
|
36
|
+
| AnyRecordSubscription;
|
33
37
|
type Subscriptions = Set<Subscription>;
|
34
38
|
// Should this be a map?
|
35
39
|
type CacheMap<T> = { [index: string]: ParentCache<T> };
|
package/src/core/cache.ts
CHANGED
@@ -32,7 +32,7 @@ import { wrapResolvedValue } from './PromiseWrapper';
|
|
32
32
|
const TYPENAME_FIELD_NAME = '__typename';
|
33
33
|
|
34
34
|
export function getOrCreateItemInSuspenseCache<
|
35
|
-
TReadFromStore extends
|
35
|
+
TReadFromStore extends { parameters: object; data: object },
|
36
36
|
TClientFieldValue,
|
37
37
|
>(
|
38
38
|
environment: IsographEnvironment,
|
@@ -77,7 +77,7 @@ export function stableCopy<T>(value: T): T {
|
|
77
77
|
}
|
78
78
|
|
79
79
|
export function getOrCreateCacheForArtifact<
|
80
|
-
TReadFromStore extends
|
80
|
+
TReadFromStore extends { parameters: object; data: object },
|
81
81
|
TClientFieldValue,
|
82
82
|
>(
|
83
83
|
environment: IsographEnvironment,
|
@@ -180,7 +180,9 @@ export function subscribeToAnyChange(
|
|
180
180
|
}
|
181
181
|
|
182
182
|
// TODO we should re-read and call callback if the value has changed
|
183
|
-
export function subscribe<
|
183
|
+
export function subscribe<
|
184
|
+
TReadFromStore extends { parameters: object; data: object },
|
185
|
+
>(
|
184
186
|
environment: IsographEnvironment,
|
185
187
|
encounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>,
|
186
188
|
fragmentReference: FragmentReference<TReadFromStore, any>,
|
package/src/core/entrypoint.ts
CHANGED
@@ -2,7 +2,7 @@ import { TopLevelReaderArtifact } from './reader';
|
|
2
2
|
import { Arguments } from './util';
|
3
3
|
|
4
4
|
export type ReaderWithRefetchQueries<
|
5
|
-
TReadFromStore extends
|
5
|
+
TReadFromStore extends { parameters: object; data: object },
|
6
6
|
TClientFieldValue,
|
7
7
|
> = {
|
8
8
|
readonly kind: 'ReaderWithRefetchQueries';
|
@@ -17,7 +17,7 @@ export type ReaderWithRefetchQueries<
|
|
17
17
|
|
18
18
|
// This type should be treated as an opaque type.
|
19
19
|
export type IsographEntrypoint<
|
20
|
-
TReadFromStore extends
|
20
|
+
TReadFromStore extends { parameters: object; data: object },
|
21
21
|
TClientFieldValue,
|
22
22
|
> = {
|
23
23
|
readonly kind: 'Entrypoint';
|
@@ -30,7 +30,7 @@ export type IsographEntrypoint<
|
|
30
30
|
};
|
31
31
|
|
32
32
|
export type IsographEntrypointLoader<
|
33
|
-
TReadFromStore extends
|
33
|
+
TReadFromStore extends { parameters: object; data: object },
|
34
34
|
TClientFieldValue,
|
35
35
|
> = {
|
36
36
|
readonly kind: 'EntrypointLoader';
|
@@ -79,7 +79,7 @@ export type RefetchQueryNormalizationArtifactWrapper = {
|
|
79
79
|
};
|
80
80
|
|
81
81
|
export function assertIsEntrypoint<
|
82
|
-
TReadFromStore extends
|
82
|
+
TReadFromStore extends { parameters: object; data: object },
|
83
83
|
TClientFieldValue,
|
84
84
|
>(
|
85
85
|
value:
|
package/src/core/read.ts
CHANGED
@@ -29,7 +29,9 @@ export type WithEncounteredRecords<T> = {
|
|
29
29
|
readonly item: T;
|
30
30
|
};
|
31
31
|
|
32
|
-
export function readButDoNotEvaluate<
|
32
|
+
export function readButDoNotEvaluate<
|
33
|
+
TReadFromStore extends { parameters: object; data: object },
|
34
|
+
>(
|
33
35
|
environment: IsographEnvironment,
|
34
36
|
fragmentReference: FragmentReference<TReadFromStore, unknown>,
|
35
37
|
networkRequestOptions: NetworkRequestReaderOptions,
|
package/src/core/reader.ts
CHANGED
@@ -14,7 +14,7 @@ import {
|
|
14
14
|
import { Arguments } from './util';
|
15
15
|
|
16
16
|
export type TopLevelReaderArtifact<
|
17
|
-
TReadFromStore extends
|
17
|
+
TReadFromStore extends { parameters: object; data: object },
|
18
18
|
TClientFieldValue,
|
19
19
|
TComponentProps extends Record<string, never>,
|
20
20
|
TVariables = Variables,
|
@@ -23,7 +23,7 @@ export type TopLevelReaderArtifact<
|
|
23
23
|
| ComponentReaderArtifact<TReadFromStore, TComponentProps, TVariables>;
|
24
24
|
|
25
25
|
export type EagerReaderArtifact<
|
26
|
-
TReadFromStore extends
|
26
|
+
TReadFromStore extends { parameters: object; data: object },
|
27
27
|
TClientFieldValue,
|
28
28
|
TVariables = Variables,
|
29
29
|
> = {
|
@@ -35,7 +35,7 @@ export type EagerReaderArtifact<
|
|
35
35
|
};
|
36
36
|
|
37
37
|
export type ComponentReaderArtifact<
|
38
|
-
TReadFromStore extends
|
38
|
+
TReadFromStore extends { parameters: object; data: object },
|
39
39
|
TComponentProps extends Record<string, unknown> = Record<string, never>,
|
40
40
|
TVariables = Variables,
|
41
41
|
> = {
|
@@ -49,7 +49,7 @@ export type ComponentReaderArtifact<
|
|
49
49
|
};
|
50
50
|
|
51
51
|
export type ResolverFirstParameter<
|
52
|
-
TReadFromStore extends
|
52
|
+
TReadFromStore extends object,
|
53
53
|
TVariables = Variables,
|
54
54
|
> = {
|
55
55
|
readonly data: TReadFromStore;
|
@@ -6,17 +6,17 @@ import { LoadableField } from '../core/reader';
|
|
6
6
|
|
7
7
|
export function useClientSideDefer<TResult>(
|
8
8
|
loadableField: LoadableField<void, TResult>,
|
9
|
-
): { fragmentReference: FragmentReference<
|
9
|
+
): { fragmentReference: FragmentReference<any, TResult> };
|
10
10
|
|
11
|
-
export function useClientSideDefer<TArgs extends
|
11
|
+
export function useClientSideDefer<TArgs extends object, TResult>(
|
12
12
|
loadableField: LoadableField<TArgs, TResult>,
|
13
13
|
args: TArgs,
|
14
|
-
): { fragmentReference: FragmentReference<
|
14
|
+
): { fragmentReference: FragmentReference<any, TResult> };
|
15
15
|
|
16
|
-
export function useClientSideDefer<TArgs extends
|
16
|
+
export function useClientSideDefer<TArgs extends object, TResult>(
|
17
17
|
loadableField: LoadableField<TArgs, TResult>,
|
18
18
|
args?: TArgs,
|
19
|
-
): { fragmentReference: FragmentReference<
|
19
|
+
): { fragmentReference: FragmentReference<any, TResult> } {
|
20
20
|
// @ts-expect-error args is missing iff it has the type void
|
21
21
|
const [id, loader] = loadableField(args);
|
22
22
|
const environment = useIsographEnvironment();
|
@@ -36,17 +36,17 @@ type UseSkipLimitReturnValue<TArgs, TItem> =
|
|
36
36
|
};
|
37
37
|
|
38
38
|
type ArrayFragmentReference<
|
39
|
-
TReadFromStore extends
|
39
|
+
TReadFromStore extends { parameters: object; data: object },
|
40
40
|
TItem,
|
41
41
|
> = FragmentReference<TReadFromStore, ReadonlyArray<TItem>>;
|
42
42
|
|
43
43
|
type LoadedFragmentReferences<
|
44
|
-
TReadFromStore extends
|
44
|
+
TReadFromStore extends { parameters: object; data: object },
|
45
45
|
TItem,
|
46
46
|
> = ReadonlyArray<LoadedFragmentReference<TReadFromStore, TItem>>;
|
47
47
|
|
48
48
|
type LoadedFragmentReference<
|
49
|
-
TReadFromStore extends
|
49
|
+
TReadFromStore extends { parameters: object; data: object },
|
50
50
|
TItem,
|
51
51
|
> = ItemCleanupPair<
|
52
52
|
ReferenceCountedPointer<ArrayFragmentReference<TReadFromStore, TItem>>
|
@@ -68,7 +68,7 @@ export function useSkipLimitPagination<
|
|
68
68
|
limit: number | void | null;
|
69
69
|
},
|
70
70
|
TItem,
|
71
|
-
TReadFromStore extends
|
71
|
+
TReadFromStore extends { parameters: object; data: object },
|
72
72
|
>(
|
73
73
|
loadableField: LoadableField<TArgs, ReadonlyArray<TItem>>,
|
74
74
|
): UseSkipLimitReturnValue<TArgs, TItem> {
|
@@ -12,7 +12,7 @@ import { wrapResolvedValue } from '../core/PromiseWrapper';
|
|
12
12
|
// TODO rename this to useImperativelyLoadedEntrypoint
|
13
13
|
|
14
14
|
export function useImperativeReference<
|
15
|
-
TReadFromStore extends
|
15
|
+
TReadFromStore extends { parameters: object; data: object },
|
16
16
|
TClientFieldValue,
|
17
17
|
>(
|
18
18
|
entrypoint: IsographEntrypoint<TReadFromStore, TClientFieldValue>,
|
@@ -5,7 +5,7 @@ import { getOrCreateCacheForArtifact } from '../core/cache';
|
|
5
5
|
import { useLazyDisposableState } from '@isograph/react-disposable-state';
|
6
6
|
|
7
7
|
export function useLazyReference<
|
8
|
-
TReadFromStore extends
|
8
|
+
TReadFromStore extends { parameters: object; data: object },
|
9
9
|
TClientFieldValue,
|
10
10
|
>(
|
11
11
|
entrypoint: IsographEntrypoint<TReadFromStore, TClientFieldValue>,
|
@@ -16,7 +16,9 @@ import type { ReaderAst } from '../core/reader';
|
|
16
16
|
/**
|
17
17
|
* Read the data from a fragment reference and subscribe to updates.
|
18
18
|
*/
|
19
|
-
export function useReadAndSubscribe<
|
19
|
+
export function useReadAndSubscribe<
|
20
|
+
TReadFromStore extends { parameters: object; data: object },
|
21
|
+
>(
|
20
22
|
fragmentReference: FragmentReference<TReadFromStore, any>,
|
21
23
|
networkRequestOptions: NetworkRequestReaderOptions,
|
22
24
|
readerAst: ReaderAst<TReadFromStore>,
|
@@ -34,7 +36,9 @@ export function useReadAndSubscribe<TReadFromStore extends Object>(
|
|
34
36
|
return readOutDataAndRecords.item;
|
35
37
|
}
|
36
38
|
|
37
|
-
export function useSubscribeToMultiple<
|
39
|
+
export function useSubscribeToMultiple<
|
40
|
+
TReadFromStore extends { parameters: object; data: object },
|
41
|
+
>(
|
38
42
|
items: ReadonlyArray<{
|
39
43
|
records: WithEncounteredRecords<TReadFromStore>;
|
40
44
|
callback: (updatedRecords: WithEncounteredRecords<TReadFromStore>) => void;
|
@@ -7,7 +7,9 @@ import type { ReaderAst } from '../core/reader';
|
|
7
7
|
|
8
8
|
// TODO add unit tests for this. Add integration tests that test
|
9
9
|
// behavior when the encounteredRecords underneath a fragment change.
|
10
|
-
export function useRerenderOnChange<
|
10
|
+
export function useRerenderOnChange<
|
11
|
+
TReadFromStore extends { parameters: object; data: object },
|
12
|
+
>(
|
11
13
|
encounteredDataAndRecords: WithEncounteredRecords<TReadFromStore>,
|
12
14
|
fragmentReference: FragmentReference<any, any>,
|
13
15
|
setEncounteredDataAndRecords: (
|
package/src/react/useResult.ts
CHANGED
@@ -12,7 +12,10 @@ import {
|
|
12
12
|
readPromise,
|
13
13
|
} from '../core/PromiseWrapper';
|
14
14
|
|
15
|
-
export function useResult<
|
15
|
+
export function useResult<
|
16
|
+
TReadFromStore extends { parameters: object; data: object },
|
17
|
+
TClientFieldValue,
|
18
|
+
>(
|
16
19
|
fragmentReference: FragmentReference<TReadFromStore, TClientFieldValue>,
|
17
20
|
partialNetworkRequestOptions?: Partial<NetworkRequestReaderOptions> | void,
|
18
21
|
): TClientFieldValue {
|
@@ -10,7 +10,7 @@ import entrypoint_Query__nodeField from '../__isograph/Query/nodeField/entrypoin
|
|
10
10
|
// This means that the type of the exported iso literal is exactly
|
11
11
|
// the type of the passed-in function, which takes one parameter
|
12
12
|
// of type TParam.
|
13
|
-
type IdentityWithParam<TParam extends
|
13
|
+
type IdentityWithParam<TParam extends object> = <TClientFieldReturn, TVariables = Variables>(
|
14
14
|
clientField: (param: TParam) => TClientFieldReturn
|
15
15
|
) => (param: ResolverFirstParameter<TParam, TVariables>) => TClientFieldReturn;
|
16
16
|
|
@@ -21,7 +21,7 @@ type IdentityWithParam<TParam extends Object> = <TClientFieldReturn, TVariables
|
|
21
21
|
//
|
22
22
|
// TComponentProps becomes the types of the props you must pass
|
23
23
|
// whenever the @component field is rendered.
|
24
|
-
type IdentityWithParamComponent<TParam extends
|
24
|
+
type IdentityWithParamComponent<TParam extends object> = <
|
25
25
|
TClientFieldReturn,
|
26
26
|
TComponentProps = Record<string, never>,
|
27
27
|
TVariables = Variables
|