@isograph/react 0.3.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 +16 -7
- package/dist/core/FragmentReference.d.ts.map +1 -1
- package/dist/core/FragmentReference.js +3 -12
- package/dist/core/IsographEnvironment.d.ts +17 -27
- package/dist/core/IsographEnvironment.d.ts.map +1 -1
- package/dist/core/IsographEnvironment.js +4 -0
- package/dist/core/PromiseWrapper.d.ts +3 -4
- package/dist/core/PromiseWrapper.d.ts.map +1 -1
- package/dist/core/PromiseWrapper.js +5 -4
- package/dist/core/areEqualWithDeepComparison.d.ts.map +1 -1
- package/dist/core/areEqualWithDeepComparison.js +16 -0
- package/dist/core/cache.d.ts +11 -20
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/cache.js +60 -45
- package/dist/core/check.d.ts +9 -5
- package/dist/core/check.d.ts.map +1 -1
- package/dist/core/check.js +2 -2
- package/dist/core/componentCache.d.ts +1 -1
- package/dist/core/componentCache.d.ts.map +1 -1
- package/dist/core/componentCache.js +27 -31
- package/dist/core/entrypoint.d.ts +23 -26
- package/dist/core/entrypoint.d.ts.map +1 -1
- package/dist/core/garbageCollection.d.ts +3 -4
- package/dist/core/garbageCollection.d.ts.map +1 -1
- package/dist/core/garbageCollection.js +1 -1
- package/dist/core/logging.d.ts +12 -13
- package/dist/core/logging.d.ts.map +1 -1
- package/dist/core/logging.js +8 -5
- package/dist/core/makeNetworkRequest.d.ts +5 -5
- package/dist/core/makeNetworkRequest.d.ts.map +1 -1
- package/dist/core/makeNetworkRequest.js +107 -22
- package/dist/core/read.d.ts +15 -10
- package/dist/core/read.d.ts.map +1 -1
- package/dist/core/read.js +398 -304
- package/dist/core/reader.d.ts +24 -32
- package/dist/core/reader.d.ts.map +1 -1
- 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 +3 -0
- package/dist/core/util.d.ts.map +1 -1
- package/dist/index.d.ts +16 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/loadable-hooks/useClientSideDefer.d.ts +4 -10
- package/dist/loadable-hooks/useClientSideDefer.d.ts.map +1 -1
- package/dist/loadable-hooks/useClientSideDefer.js +2 -2
- package/dist/loadable-hooks/useConnectionSpecPagination.d.ts +8 -15
- package/dist/loadable-hooks/useConnectionSpecPagination.d.ts.map +1 -1
- package/dist/loadable-hooks/useConnectionSpecPagination.js +6 -4
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts +1 -2
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts.map +1 -1
- package/dist/loadable-hooks/useImperativeLoadableField.d.ts +4 -6
- package/dist/loadable-hooks/useImperativeLoadableField.d.ts.map +1 -1
- package/dist/loadable-hooks/useImperativeLoadableField.js +1 -1
- package/dist/loadable-hooks/useSkipLimitPagination.d.ts +6 -13
- package/dist/loadable-hooks/useSkipLimitPagination.d.ts.map +1 -1
- package/dist/loadable-hooks/useSkipLimitPagination.js +11 -9
- package/dist/react/FragmentReader.d.ts +2 -3
- package/dist/react/FragmentReader.d.ts.map +1 -1
- package/dist/react/IsographEnvironmentProvider.d.ts.map +1 -1
- package/dist/react/useImperativeReference.d.ts +7 -10
- package/dist/react/useImperativeReference.d.ts.map +1 -1
- package/dist/react/useImperativeReference.js +2 -3
- package/dist/react/useLazyReference.d.ts +4 -7
- package/dist/react/useLazyReference.d.ts.map +1 -1
- package/dist/react/useLazyReference.js +26 -5
- package/dist/react/useReadAndSubscribe.d.ts +3 -9
- package/dist/react/useReadAndSubscribe.d.ts.map +1 -1
- package/dist/react/useReadAndSubscribe.js +7 -3
- package/dist/react/useRerenderOnChange.d.ts +1 -1
- package/dist/react/useRerenderOnChange.d.ts.map +1 -1
- package/dist/react/useResult.d.ts +3 -6
- package/dist/react/useResult.d.ts.map +1 -1
- package/dist/react/useResult.js +10 -8
- package/isograph.config.json +1 -0
- package/package.json +7 -6
- package/src/core/FragmentReference.ts +30 -15
- package/src/core/IsographEnvironment.ts +39 -31
- package/src/core/PromiseWrapper.ts +3 -3
- package/src/core/areEqualWithDeepComparison.ts +20 -0
- package/src/core/cache.ts +105 -72
- package/src/core/check.ts +13 -8
- package/src/core/componentCache.ts +45 -52
- package/src/core/entrypoint.ts +34 -16
- package/src/core/garbageCollection.ts +6 -6
- package/src/core/logging.ts +24 -22
- package/src/core/makeNetworkRequest.ts +183 -30
- package/src/core/read.ts +618 -435
- package/src/core/reader.ts +37 -24
- package/src/core/startUpdate.ts +28 -0
- package/src/core/util.ts +4 -0
- package/src/index.ts +82 -9
- package/src/loadable-hooks/useClientSideDefer.ts +11 -10
- package/src/loadable-hooks/useConnectionSpecPagination.ts +26 -13
- package/src/loadable-hooks/useImperativeExposedMutationField.ts +1 -1
- package/src/loadable-hooks/useImperativeLoadableField.ts +10 -12
- package/src/loadable-hooks/useSkipLimitPagination.ts +37 -19
- package/src/react/FragmentReader.tsx +3 -3
- package/src/react/IsographEnvironmentProvider.tsx +1 -1
- package/src/react/useImperativeReference.ts +40 -19
- package/src/react/useLazyReference.ts +62 -14
- package/src/react/useReadAndSubscribe.ts +17 -9
- package/src/react/useRerenderOnChange.ts +2 -2
- package/src/react/useResult.ts +21 -8
- package/src/tests/__isograph/Query/meName/entrypoint.ts +4 -28
- package/src/tests/__isograph/Query/meName/normalization_ast.ts +25 -0
- package/src/tests/__isograph/Query/meName/query_text.ts +6 -0
- package/src/tests/__isograph/Query/meName/resolver_reader.ts +4 -0
- package/src/tests/__isograph/Query/meNameSuccessor/entrypoint.ts +4 -66
- package/src/tests/__isograph/Query/meNameSuccessor/normalization_ast.ts +56 -0
- package/src/tests/__isograph/Query/meNameSuccessor/query_text.ts +13 -0
- package/src/tests/__isograph/Query/meNameSuccessor/resolver_reader.ts +7 -0
- package/src/tests/__isograph/Query/nodeField/entrypoint.ts +4 -33
- package/src/tests/__isograph/Query/nodeField/normalization_ast.ts +30 -0
- package/src/tests/__isograph/Query/nodeField/query_text.ts +6 -0
- package/src/tests/__isograph/Query/nodeField/resolver_reader.ts +4 -0
- package/src/tests/__isograph/Query/subquery/entrypoint.ts +4 -43
- package/src/tests/__isograph/Query/subquery/normalization_ast.ts +38 -0
- package/src/tests/__isograph/Query/subquery/query_text.ts +8 -0
- package/src/tests/__isograph/Query/subquery/resolver_reader.ts +5 -0
- package/src/tests/__isograph/iso.ts +3 -2
- package/src/tests/garbageCollection.test.ts +10 -8
- package/src/tests/meNameSuccessor.ts +1 -1
- package/src/tests/nodeQuery.ts +2 -1
- package/src/tests/normalizeData.test.ts +1 -1
- package/tsconfig.pkg.json +1 -2
@@ -1,10 +1,10 @@
|
|
1
1
|
import * as React from 'react';
|
2
2
|
import { ExtractReadFromStore, IsographEntrypoint } from '../core/entrypoint';
|
3
3
|
import { FragmentReference } from '../core/FragmentReference';
|
4
|
-
import { useResult } from './useResult';
|
5
4
|
import { NetworkRequestReaderOptions } from '../core/read';
|
5
|
+
import { useResult } from './useResult';
|
6
6
|
|
7
|
-
type IsExactlyIntrinsicAttributes<T> = T extends JSX.IntrinsicAttributes
|
7
|
+
export type IsExactlyIntrinsicAttributes<T> = T extends JSX.IntrinsicAttributes
|
8
8
|
? JSX.IntrinsicAttributes extends T
|
9
9
|
? true
|
10
10
|
: false
|
@@ -12,7 +12,7 @@ type IsExactlyIntrinsicAttributes<T> = T extends JSX.IntrinsicAttributes
|
|
12
12
|
|
13
13
|
export function FragmentReader<
|
14
14
|
TProps extends Record<any, any>,
|
15
|
-
TEntrypoint extends IsographEntrypoint<any, React.FC<TProps
|
15
|
+
TEntrypoint extends IsographEntrypoint<any, React.FC<TProps>, any>,
|
16
16
|
>(
|
17
17
|
props: IsExactlyIntrinsicAttributes<TProps> extends true
|
18
18
|
? {
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import * as React from 'react';
|
2
|
-
import {
|
2
|
+
import { createContext, ReactNode, useContext } from 'react';
|
3
3
|
import { type IsographEnvironment } from '../core/IsographEnvironment';
|
4
4
|
|
5
5
|
export const IsographEnvironmentContext =
|
@@ -1,44 +1,65 @@
|
|
1
1
|
import {
|
2
|
-
|
2
|
+
UNASSIGNED_STATE,
|
3
3
|
useUpdatableDisposableState,
|
4
4
|
} from '@isograph/react-disposable-state';
|
5
|
-
import {
|
5
|
+
import { FetchOptions, type RequiredFetchOptions } from '../core/check';
|
6
|
+
import {
|
7
|
+
IsographEntrypoint,
|
8
|
+
type NormalizationAst,
|
9
|
+
type NormalizationAstLoader,
|
10
|
+
} from '../core/entrypoint';
|
6
11
|
import {
|
7
|
-
FragmentReference,
|
8
12
|
ExtractParameters,
|
13
|
+
FragmentReference,
|
14
|
+
type UnknownTReadFromStore,
|
9
15
|
} from '../core/FragmentReference';
|
10
|
-
import { useIsographEnvironment } from './IsographEnvironmentProvider';
|
11
16
|
import { ROOT_ID } from '../core/IsographEnvironment';
|
12
17
|
import { maybeMakeNetworkRequest } from '../core/makeNetworkRequest';
|
13
18
|
import { wrapResolvedValue } from '../core/PromiseWrapper';
|
14
|
-
import {
|
15
|
-
|
16
|
-
// TODO rename this to useImperativelyLoadedEntrypoint
|
19
|
+
import { useIsographEnvironment } from './IsographEnvironmentProvider';
|
17
20
|
|
18
|
-
export
|
19
|
-
TReadFromStore extends
|
21
|
+
export type UseImperativeReferenceResult<
|
22
|
+
TReadFromStore extends UnknownTReadFromStore,
|
20
23
|
TClientFieldValue,
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
25
|
+
> = {
|
26
|
+
fragmentReference: FragmentReference<
|
27
|
+
TReadFromStore,
|
28
|
+
TClientFieldValue
|
29
|
+
> | null;
|
27
30
|
loadFragmentReference: (
|
28
31
|
variables: ExtractParameters<TReadFromStore>,
|
29
|
-
fetchOptions
|
32
|
+
...[fetchOptions]: NormalizationAstLoader extends TNormalizationAst
|
33
|
+
? [fetchOptions: RequiredFetchOptions<TClientFieldValue>]
|
34
|
+
: [fetchOptions?: FetchOptions<TClientFieldValue>]
|
30
35
|
) => void;
|
31
|
-
}
|
36
|
+
};
|
37
|
+
|
38
|
+
export function useImperativeReference<
|
39
|
+
TReadFromStore extends UnknownTReadFromStore,
|
40
|
+
TClientFieldValue,
|
41
|
+
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
42
|
+
>(
|
43
|
+
entrypoint: IsographEntrypoint<
|
44
|
+
TReadFromStore,
|
45
|
+
TClientFieldValue,
|
46
|
+
TNormalizationAst
|
47
|
+
>,
|
48
|
+
): UseImperativeReferenceResult<
|
49
|
+
TReadFromStore,
|
50
|
+
TClientFieldValue,
|
51
|
+
TNormalizationAst
|
52
|
+
> {
|
32
53
|
const { state, setState } =
|
33
54
|
useUpdatableDisposableState<
|
34
55
|
FragmentReference<TReadFromStore, TClientFieldValue>
|
35
56
|
>();
|
36
57
|
const environment = useIsographEnvironment();
|
37
58
|
return {
|
38
|
-
fragmentReference: state,
|
59
|
+
fragmentReference: state !== UNASSIGNED_STATE ? state : null,
|
39
60
|
loadFragmentReference: (
|
40
61
|
variables: ExtractParameters<TReadFromStore>,
|
41
|
-
fetchOptions?: FetchOptions
|
62
|
+
fetchOptions?: FetchOptions<TClientFieldValue>,
|
42
63
|
) => {
|
43
64
|
const [networkRequest, disposeNetworkRequest] = maybeMakeNetworkRequest(
|
44
65
|
environment,
|
@@ -1,32 +1,46 @@
|
|
1
|
+
import { useLazyDisposableState } from '@isograph/react-disposable-state';
|
2
|
+
import { getOrCreateCacheForArtifact } from '../core/cache';
|
3
|
+
import { FetchOptions, type RequiredFetchOptions } from '../core/check';
|
4
|
+
import {
|
5
|
+
IsographEntrypoint,
|
6
|
+
type NormalizationAst,
|
7
|
+
type NormalizationAstLoader,
|
8
|
+
} from '../core/entrypoint';
|
1
9
|
import {
|
2
|
-
FragmentReference,
|
3
10
|
ExtractParameters,
|
11
|
+
FragmentReference,
|
12
|
+
type UnknownTReadFromStore,
|
4
13
|
} from '../core/FragmentReference';
|
5
|
-
import { useIsographEnvironment } from './IsographEnvironmentProvider';
|
6
|
-
import { IsographEntrypoint } from '../core/entrypoint';
|
7
|
-
import { getOrCreateCacheForArtifact } from '../core/cache';
|
8
|
-
import { useLazyDisposableState } from '@isograph/react-disposable-state';
|
9
14
|
import { logMessage } from '../core/logging';
|
10
|
-
import {
|
15
|
+
import { useIsographEnvironment } from './IsographEnvironmentProvider';
|
11
16
|
|
12
17
|
export function useLazyReference<
|
13
|
-
TReadFromStore extends
|
18
|
+
TReadFromStore extends UnknownTReadFromStore,
|
14
19
|
TClientFieldValue,
|
20
|
+
TNormalizationAst extends NormalizationAst | NormalizationAstLoader,
|
15
21
|
>(
|
16
|
-
entrypoint: IsographEntrypoint<
|
22
|
+
entrypoint: IsographEntrypoint<
|
23
|
+
TReadFromStore,
|
24
|
+
TClientFieldValue,
|
25
|
+
TNormalizationAst
|
26
|
+
>,
|
17
27
|
variables: ExtractParameters<TReadFromStore>,
|
18
|
-
fetchOptions
|
19
|
-
|
20
|
-
|
21
|
-
|
28
|
+
...[fetchOptions]: TNormalizationAst extends NormalizationAstLoader
|
29
|
+
? [fetchOptions: RequiredFetchOptions<TClientFieldValue>]
|
30
|
+
: [fetchOptions?: FetchOptions<TClientFieldValue>]
|
31
|
+
): NormalizationAst | NormalizationAstLoader extends TNormalizationAst
|
32
|
+
? unknown
|
33
|
+
: {
|
34
|
+
fragmentReference: FragmentReference<TReadFromStore, TClientFieldValue>;
|
35
|
+
} {
|
22
36
|
const environment = useIsographEnvironment();
|
23
37
|
|
24
38
|
if (entrypoint?.kind !== 'Entrypoint') {
|
25
39
|
// TODO have a separate error logger
|
26
|
-
logMessage(environment, {
|
40
|
+
logMessage(environment, () => ({
|
27
41
|
kind: 'NonEntrypointReceived',
|
28
42
|
entrypoint,
|
29
|
-
});
|
43
|
+
}));
|
30
44
|
}
|
31
45
|
|
32
46
|
const cache = getOrCreateCacheForArtifact(
|
@@ -40,3 +54,37 @@ export function useLazyReference<
|
|
40
54
|
fragmentReference: useLazyDisposableState(cache).state,
|
41
55
|
};
|
42
56
|
}
|
57
|
+
|
58
|
+
// @ts-ignore
|
59
|
+
function tsTests() {
|
60
|
+
let withAst!: IsographEntrypoint<any, unknown, NormalizationAst>;
|
61
|
+
let withAstLoader!: IsographEntrypoint<any, unknown, NormalizationAstLoader>;
|
62
|
+
let withAstOrLoader!: IsographEntrypoint<
|
63
|
+
any,
|
64
|
+
unknown,
|
65
|
+
NormalizationAst | NormalizationAstLoader
|
66
|
+
>;
|
67
|
+
|
68
|
+
useLazyReference(withAst, {}) satisfies {};
|
69
|
+
useLazyReference(withAst, {}, { shouldFetch: 'Yes' }) satisfies {};
|
70
|
+
useLazyReference(withAst, {}, { shouldFetch: 'IfNecessary' }) satisfies {};
|
71
|
+
|
72
|
+
// @ts-expect-error if there's no ast, require `shouldFetch` to be specified
|
73
|
+
useLazyReference(withAstLoader, {});
|
74
|
+
useLazyReference(withAstLoader, {}, { shouldFetch: 'Yes' }) satisfies {};
|
75
|
+
// @ts-expect-error if there's no ast, `shouldFetch` can't be `IfNecessary`
|
76
|
+
useLazyReference(withAstLoader, {}, { shouldFetch: 'IfNecessary' });
|
77
|
+
|
78
|
+
// if the type is unknown there can be no ast so we should use the same rules
|
79
|
+
// but because of TS bugs with inference we just return unknown
|
80
|
+
// @ts-expect-error this returns unknown which doesn't satisfy the constraint
|
81
|
+
useLazyReference(withAstOrLoader, {}) satisfies {};
|
82
|
+
// @ts-expect-error this returns unknown which doesn't satisfy the constraint
|
83
|
+
useLazyReference(withAstOrLoader, {}, { shouldFetch: 'Yes' }) satisfies {};
|
84
|
+
useLazyReference(
|
85
|
+
withAstOrLoader,
|
86
|
+
{},
|
87
|
+
{ shouldFetch: 'IfNecessary' },
|
88
|
+
// @ts-expect-error this returns unknown which doesn't satisfy the constraint
|
89
|
+
) satisfies {};
|
90
|
+
}
|
@@ -1,24 +1,26 @@
|
|
1
1
|
import { useEffect, useState } from 'react';
|
2
|
+
import { subscribe } from '../core/cache';
|
2
3
|
import {
|
4
|
+
ExtractData,
|
3
5
|
FragmentReference,
|
4
6
|
stableIdForFragmentReference,
|
5
|
-
|
7
|
+
type UnknownTReadFromStore,
|
6
8
|
} from '../core/FragmentReference';
|
9
|
+
import { readPromise } from '../core/PromiseWrapper';
|
7
10
|
import {
|
8
11
|
NetworkRequestReaderOptions,
|
9
12
|
readButDoNotEvaluate,
|
10
13
|
WithEncounteredRecords,
|
11
14
|
} from '../core/read';
|
12
|
-
import { useRerenderOnChange } from './useRerenderOnChange';
|
13
|
-
import { useIsographEnvironment } from './IsographEnvironmentProvider';
|
14
|
-
import { subscribe } from '../core/cache';
|
15
15
|
import type { ReaderAst } from '../core/reader';
|
16
|
+
import { useIsographEnvironment } from './IsographEnvironmentProvider';
|
17
|
+
import { useRerenderOnChange } from './useRerenderOnChange';
|
16
18
|
|
17
19
|
/**
|
18
20
|
* Read the data from a fragment reference and subscribe to updates.
|
19
21
|
*/
|
20
22
|
export function useReadAndSubscribe<
|
21
|
-
TReadFromStore extends
|
23
|
+
TReadFromStore extends UnknownTReadFromStore,
|
22
24
|
>(
|
23
25
|
fragmentReference: FragmentReference<TReadFromStore, any>,
|
24
26
|
networkRequestOptions: NetworkRequestReaderOptions,
|
@@ -38,7 +40,7 @@ export function useReadAndSubscribe<
|
|
38
40
|
}
|
39
41
|
|
40
42
|
export function useSubscribeToMultiple<
|
41
|
-
TReadFromStore extends
|
43
|
+
TReadFromStore extends UnknownTReadFromStore,
|
42
44
|
>(
|
43
45
|
items: ReadonlyArray<{
|
44
46
|
records: WithEncounteredRecords<TReadFromStore>;
|
@@ -72,9 +74,15 @@ export function useSubscribeToMultiple<
|
|
72
74
|
// TODO find out
|
73
75
|
[
|
74
76
|
items
|
75
|
-
.map(({ fragmentReference }) =>
|
76
|
-
|
77
|
-
|
77
|
+
.map(({ fragmentReference }) => {
|
78
|
+
const readerWithRefetchQueries = readPromise(
|
79
|
+
fragmentReference.readerWithRefetchQueries,
|
80
|
+
);
|
81
|
+
stableIdForFragmentReference(
|
82
|
+
fragmentReference,
|
83
|
+
readerWithRefetchQueries.readerArtifact.fieldName,
|
84
|
+
);
|
85
|
+
})
|
78
86
|
.join('.'),
|
79
87
|
],
|
80
88
|
);
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import { useEffect } from 'react';
|
2
2
|
import { subscribe } from '../core/cache';
|
3
|
-
import { WithEncounteredRecords } from '../core/read';
|
4
3
|
import { FragmentReference } from '../core/FragmentReference';
|
5
|
-
import {
|
4
|
+
import { WithEncounteredRecords } from '../core/read';
|
6
5
|
import type { ReaderAst } from '../core/reader';
|
6
|
+
import { useIsographEnvironment } from './IsographEnvironmentProvider';
|
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.
|
package/src/react/useResult.ts
CHANGED
@@ -1,19 +1,23 @@
|
|
1
|
-
import { useIsographEnvironment } from '../react/IsographEnvironmentProvider';
|
2
|
-
import { FragmentReference } from '../core/FragmentReference';
|
3
1
|
import { getOrCreateCachedComponent } from '../core/componentCache';
|
4
|
-
import { useReadAndSubscribe } from './useReadAndSubscribe';
|
5
2
|
import {
|
6
|
-
|
7
|
-
|
8
|
-
} from '../core/
|
3
|
+
FragmentReference,
|
4
|
+
type UnknownTReadFromStore,
|
5
|
+
} from '../core/FragmentReference';
|
9
6
|
import {
|
10
7
|
getPromiseState,
|
11
8
|
PromiseWrapper,
|
12
9
|
readPromise,
|
13
10
|
} from '../core/PromiseWrapper';
|
11
|
+
import {
|
12
|
+
getNetworkRequestOptionsWithDefaults,
|
13
|
+
NetworkRequestReaderOptions,
|
14
|
+
} from '../core/read';
|
15
|
+
import { getOrCreateCachedStartUpdate } from '../core/startUpdate';
|
16
|
+
import { useIsographEnvironment } from '../react/IsographEnvironmentProvider';
|
17
|
+
import { useReadAndSubscribe } from './useReadAndSubscribe';
|
14
18
|
|
15
19
|
export function useResult<
|
16
|
-
TReadFromStore extends
|
20
|
+
TReadFromStore extends UnknownTReadFromStore,
|
17
21
|
TClientFieldValue,
|
18
22
|
>(
|
19
23
|
fragmentReference: FragmentReference<TReadFromStore, TClientFieldValue>,
|
@@ -37,7 +41,7 @@ export function useResult<
|
|
37
41
|
// @ts-expect-error
|
38
42
|
return getOrCreateCachedComponent(
|
39
43
|
environment,
|
40
|
-
readerWithRefetchQueries.readerArtifact.
|
44
|
+
readerWithRefetchQueries.readerArtifact.fieldName,
|
41
45
|
fragmentReference,
|
42
46
|
networkRequestOptions,
|
43
47
|
);
|
@@ -51,6 +55,15 @@ export function useResult<
|
|
51
55
|
const param = {
|
52
56
|
data: data,
|
53
57
|
parameters: fragmentReference.variables,
|
58
|
+
...(readerWithRefetchQueries.readerArtifact.hasUpdatable
|
59
|
+
? {
|
60
|
+
startUpdate: getOrCreateCachedStartUpdate(
|
61
|
+
environment,
|
62
|
+
fragmentReference,
|
63
|
+
readerWithRefetchQueries.readerArtifact.fieldName,
|
64
|
+
),
|
65
|
+
}
|
66
|
+
: undefined),
|
54
67
|
};
|
55
68
|
return readerWithRefetchQueries.readerArtifact.resolver(param);
|
56
69
|
}
|
@@ -2,38 +2,14 @@ import type {IsographEntrypoint, NormalizationAst, RefetchQueryNormalizationArti
|
|
2
2
|
import {Query__meName__param} from './param_type';
|
3
3
|
import {Query__meName__output_type} from './output_type';
|
4
4
|
import readerResolver from './resolver_reader';
|
5
|
+
import queryText from './query_text';
|
6
|
+
import normalizationAst from './normalization_ast';
|
5
7
|
const nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[] = [];
|
6
8
|
|
7
|
-
const queryText = 'query meName {\
|
8
|
-
me {\
|
9
|
-
id,\
|
10
|
-
name,\
|
11
|
-
},\
|
12
|
-
}';
|
13
|
-
|
14
|
-
const normalizationAst: NormalizationAst = [
|
15
|
-
{
|
16
|
-
kind: "Linked",
|
17
|
-
fieldName: "me",
|
18
|
-
arguments: null,
|
19
|
-
concreteType: "Economist",
|
20
|
-
selections: [
|
21
|
-
{
|
22
|
-
kind: "Scalar",
|
23
|
-
fieldName: "id",
|
24
|
-
arguments: null,
|
25
|
-
},
|
26
|
-
{
|
27
|
-
kind: "Scalar",
|
28
|
-
fieldName: "name",
|
29
|
-
arguments: null,
|
30
|
-
},
|
31
|
-
],
|
32
|
-
},
|
33
|
-
];
|
34
9
|
const artifact: IsographEntrypoint<
|
35
10
|
Query__meName__param,
|
36
|
-
Query__meName__output_type
|
11
|
+
Query__meName__output_type,
|
12
|
+
NormalizationAst
|
37
13
|
> = {
|
38
14
|
kind: "Entrypoint",
|
39
15
|
networkRequestInfo: {
|
@@ -0,0 +1,25 @@
|
|
1
|
+
import type {NormalizationAst} from '@isograph/react';
|
2
|
+
const normalizationAst: NormalizationAst = {
|
3
|
+
kind: "NormalizationAst",
|
4
|
+
selections: [
|
5
|
+
{
|
6
|
+
kind: "Linked",
|
7
|
+
fieldName: "me",
|
8
|
+
arguments: null,
|
9
|
+
concreteType: "Economist",
|
10
|
+
selections: [
|
11
|
+
{
|
12
|
+
kind: "Scalar",
|
13
|
+
fieldName: "id",
|
14
|
+
arguments: null,
|
15
|
+
},
|
16
|
+
{
|
17
|
+
kind: "Scalar",
|
18
|
+
fieldName: "name",
|
19
|
+
arguments: null,
|
20
|
+
},
|
21
|
+
],
|
22
|
+
},
|
23
|
+
],
|
24
|
+
};
|
25
|
+
export default normalizationAst;
|
@@ -10,12 +10,14 @@ const readerAst: ReaderAst<Query__meName__param> = [
|
|
10
10
|
alias: null,
|
11
11
|
arguments: null,
|
12
12
|
condition: null,
|
13
|
+
isUpdatable: false,
|
13
14
|
selections: [
|
14
15
|
{
|
15
16
|
kind: "Scalar",
|
16
17
|
fieldName: "name",
|
17
18
|
alias: null,
|
18
19
|
arguments: null,
|
20
|
+
isUpdatable: false,
|
19
21
|
},
|
20
22
|
],
|
21
23
|
},
|
@@ -26,8 +28,10 @@ const artifact: EagerReaderArtifact<
|
|
26
28
|
Query__meName__output_type
|
27
29
|
> = {
|
28
30
|
kind: "EagerReaderArtifact",
|
31
|
+
fieldName: "Query.meName",
|
29
32
|
resolver,
|
30
33
|
readerAst,
|
34
|
+
hasUpdatable: false,
|
31
35
|
};
|
32
36
|
|
33
37
|
export default artifact;
|
@@ -2,76 +2,14 @@ import type {IsographEntrypoint, NormalizationAst, RefetchQueryNormalizationArti
|
|
2
2
|
import {Query__meNameSuccessor__param} from './param_type';
|
3
3
|
import {Query__meNameSuccessor__output_type} from './output_type';
|
4
4
|
import readerResolver from './resolver_reader';
|
5
|
+
import queryText from './query_text';
|
6
|
+
import normalizationAst from './normalization_ast';
|
5
7
|
const nestedRefetchQueries: RefetchQueryNormalizationArtifactWrapper[] = [];
|
6
8
|
|
7
|
-
const queryText = 'query meNameSuccessor {\
|
8
|
-
me {\
|
9
|
-
id,\
|
10
|
-
name,\
|
11
|
-
successor {\
|
12
|
-
id,\
|
13
|
-
successor {\
|
14
|
-
id,\
|
15
|
-
name,\
|
16
|
-
},\
|
17
|
-
},\
|
18
|
-
},\
|
19
|
-
}';
|
20
|
-
|
21
|
-
const normalizationAst: NormalizationAst = [
|
22
|
-
{
|
23
|
-
kind: "Linked",
|
24
|
-
fieldName: "me",
|
25
|
-
arguments: null,
|
26
|
-
concreteType: "Economist",
|
27
|
-
selections: [
|
28
|
-
{
|
29
|
-
kind: "Scalar",
|
30
|
-
fieldName: "id",
|
31
|
-
arguments: null,
|
32
|
-
},
|
33
|
-
{
|
34
|
-
kind: "Scalar",
|
35
|
-
fieldName: "name",
|
36
|
-
arguments: null,
|
37
|
-
},
|
38
|
-
{
|
39
|
-
kind: "Linked",
|
40
|
-
fieldName: "successor",
|
41
|
-
arguments: null,
|
42
|
-
concreteType: "Economist",
|
43
|
-
selections: [
|
44
|
-
{
|
45
|
-
kind: "Scalar",
|
46
|
-
fieldName: "id",
|
47
|
-
arguments: null,
|
48
|
-
},
|
49
|
-
{
|
50
|
-
kind: "Linked",
|
51
|
-
fieldName: "successor",
|
52
|
-
arguments: null,
|
53
|
-
concreteType: "Economist",
|
54
|
-
selections: [
|
55
|
-
{
|
56
|
-
kind: "Scalar",
|
57
|
-
fieldName: "id",
|
58
|
-
arguments: null,
|
59
|
-
},
|
60
|
-
{
|
61
|
-
kind: "Scalar",
|
62
|
-
fieldName: "name",
|
63
|
-
arguments: null,
|
64
|
-
},
|
65
|
-
],
|
66
|
-
},
|
67
|
-
],
|
68
|
-
},
|
69
|
-
],
|
70
|
-
},
|
71
|
-
];
|
72
9
|
const artifact: IsographEntrypoint<
|
73
10
|
Query__meNameSuccessor__param,
|
74
|
-
Query__meNameSuccessor__output_type
|
11
|
+
Query__meNameSuccessor__output_type,
|
12
|
+
NormalizationAst
|
75
13
|
> = {
|
76
14
|
kind: "Entrypoint",
|
77
15
|
networkRequestInfo: {
|
@@ -0,0 +1,56 @@
|
|
1
|
+
import type {NormalizationAst} from '@isograph/react';
|
2
|
+
const normalizationAst: NormalizationAst = {
|
3
|
+
kind: "NormalizationAst",
|
4
|
+
selections: [
|
5
|
+
{
|
6
|
+
kind: "Linked",
|
7
|
+
fieldName: "me",
|
8
|
+
arguments: null,
|
9
|
+
concreteType: "Economist",
|
10
|
+
selections: [
|
11
|
+
{
|
12
|
+
kind: "Scalar",
|
13
|
+
fieldName: "id",
|
14
|
+
arguments: null,
|
15
|
+
},
|
16
|
+
{
|
17
|
+
kind: "Scalar",
|
18
|
+
fieldName: "name",
|
19
|
+
arguments: null,
|
20
|
+
},
|
21
|
+
{
|
22
|
+
kind: "Linked",
|
23
|
+
fieldName: "successor",
|
24
|
+
arguments: null,
|
25
|
+
concreteType: "Economist",
|
26
|
+
selections: [
|
27
|
+
{
|
28
|
+
kind: "Scalar",
|
29
|
+
fieldName: "id",
|
30
|
+
arguments: null,
|
31
|
+
},
|
32
|
+
{
|
33
|
+
kind: "Linked",
|
34
|
+
fieldName: "successor",
|
35
|
+
arguments: null,
|
36
|
+
concreteType: "Economist",
|
37
|
+
selections: [
|
38
|
+
{
|
39
|
+
kind: "Scalar",
|
40
|
+
fieldName: "id",
|
41
|
+
arguments: null,
|
42
|
+
},
|
43
|
+
{
|
44
|
+
kind: "Scalar",
|
45
|
+
fieldName: "name",
|
46
|
+
arguments: null,
|
47
|
+
},
|
48
|
+
],
|
49
|
+
},
|
50
|
+
],
|
51
|
+
},
|
52
|
+
],
|
53
|
+
},
|
54
|
+
],
|
55
|
+
};
|
56
|
+
export default normalizationAst;
|
@@ -10,12 +10,14 @@ const readerAst: ReaderAst<Query__meNameSuccessor__param> = [
|
|
10
10
|
alias: null,
|
11
11
|
arguments: null,
|
12
12
|
condition: null,
|
13
|
+
isUpdatable: false,
|
13
14
|
selections: [
|
14
15
|
{
|
15
16
|
kind: "Scalar",
|
16
17
|
fieldName: "name",
|
17
18
|
alias: null,
|
18
19
|
arguments: null,
|
20
|
+
isUpdatable: false,
|
19
21
|
},
|
20
22
|
{
|
21
23
|
kind: "Linked",
|
@@ -23,6 +25,7 @@ const readerAst: ReaderAst<Query__meNameSuccessor__param> = [
|
|
23
25
|
alias: null,
|
24
26
|
arguments: null,
|
25
27
|
condition: null,
|
28
|
+
isUpdatable: false,
|
26
29
|
selections: [
|
27
30
|
{
|
28
31
|
kind: "Linked",
|
@@ -30,12 +33,14 @@ const readerAst: ReaderAst<Query__meNameSuccessor__param> = [
|
|
30
33
|
alias: null,
|
31
34
|
arguments: null,
|
32
35
|
condition: null,
|
36
|
+
isUpdatable: false,
|
33
37
|
selections: [
|
34
38
|
{
|
35
39
|
kind: "Scalar",
|
36
40
|
fieldName: "name",
|
37
41
|
alias: null,
|
38
42
|
arguments: null,
|
43
|
+
isUpdatable: false,
|
39
44
|
},
|
40
45
|
],
|
41
46
|
},
|
@@ -50,8 +55,10 @@ const artifact: EagerReaderArtifact<
|
|
50
55
|
Query__meNameSuccessor__output_type
|
51
56
|
> = {
|
52
57
|
kind: "EagerReaderArtifact",
|
58
|
+
fieldName: "Query.meNameSuccessor",
|
53
59
|
resolver,
|
54
60
|
readerAst,
|
61
|
+
hasUpdatable: false,
|
55
62
|
};
|
56
63
|
|
57
64
|
export default artifact;
|