react-relay 0.0.0-main-510cf1ea → 0.0.0-main-c26dc44a
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/ReactRelayContext.js +1 -1
- package/hooks.js +1 -1
- package/index.js +1 -1
- package/legacy.js +1 -1
- package/lib/relay-hooks/rsc/serverPreloadQuery.js +31 -0
- package/lib/relay-hooks/rsc/useQueryFromServer.js +62 -0
- package/lib/rsc-client_EXPERIMENTAL.js +7 -0
- package/lib/rsc_EXPERIMENTAL.js +5 -0
- package/package.json +2 -2
- package/relay-hooks/rsc/serverPreloadQuery.js.flow +69 -0
- package/relay-hooks/rsc/useQueryFromServer.js.flow +135 -0
- package/rsc-client_EXPERIMENTAL.js +10 -0
- package/rsc-client_EXPERIMENTAL.js.flow +23 -0
- package/rsc_EXPERIMENTAL.js +1 -1
- package/rsc_EXPERIMENTAL.js.flow +16 -0
package/ReactRelayContext.js
CHANGED
package/hooks.js
CHANGED
package/index.js
CHANGED
package/legacy.js
CHANGED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var invariant = require('invariant');
|
|
4
|
+
var _require = require('relay-runtime'),
|
|
5
|
+
createOperationDescriptor = _require.createOperationDescriptor,
|
|
6
|
+
getRequest = _require.getRequest;
|
|
7
|
+
function serverPreloadQuery(environment, query, variables) {
|
|
8
|
+
var _ref, _request$params$id;
|
|
9
|
+
var request = getRequest(query);
|
|
10
|
+
var operationDescriptor = createOperationDescriptor(request, variables);
|
|
11
|
+
var observable = environment.execute({
|
|
12
|
+
operation: operationDescriptor
|
|
13
|
+
});
|
|
14
|
+
var queryId = (_ref = (_request$params$id = request.params.id) !== null && _request$params$id !== void 0 ? _request$params$id : request.params.cacheID) !== null && _ref !== void 0 ? _ref : request.params.name;
|
|
15
|
+
var response = observable.toPromise().then(function (rawResponse) {
|
|
16
|
+
!(rawResponse != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Unexpected null response from execute') : invariant(false) : void 0;
|
|
17
|
+
!!Array.isArray(rawResponse) ? process.env.NODE_ENV !== "production" ? invariant(false, '@defer is not yet supported in serverPreloadQuery') : invariant(false) : void 0;
|
|
18
|
+
return {
|
|
19
|
+
data: rawResponse.data,
|
|
20
|
+
errors: rawResponse.errors
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
return {
|
|
24
|
+
kind: 'PreloadedQueryRef',
|
|
25
|
+
queryId: queryId,
|
|
26
|
+
variables: variables,
|
|
27
|
+
_response: response,
|
|
28
|
+
fetchedAt: Date.now()
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
module.exports = serverPreloadQuery;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var usePreloadedQuery = require('../usePreloadedQuery');
|
|
5
|
+
var useRelayEnvironment = require('../useRelayEnvironment');
|
|
6
|
+
var _require = require('react'),
|
|
7
|
+
use = _require.use,
|
|
8
|
+
useMemo = _require.useMemo;
|
|
9
|
+
var _require2 = require('relay-runtime'),
|
|
10
|
+
__internal = _require2.__internal,
|
|
11
|
+
ROOT_TYPE = _require2.ROOT_TYPE,
|
|
12
|
+
createOperationDescriptor = _require2.createOperationDescriptor,
|
|
13
|
+
getRequest = _require2.getRequest;
|
|
14
|
+
var defaultGetDataID = __internal.defaultGetDataID,
|
|
15
|
+
normalizeResponse = __internal.normalizeResponse;
|
|
16
|
+
var committedRefs = new WeakSet();
|
|
17
|
+
var DEFAULT_STALE_MS = 30_000;
|
|
18
|
+
function useQueryFromServer(query, queryRef, options) {
|
|
19
|
+
var _options$staleThresho, _environment$_getData;
|
|
20
|
+
var environment = useRelayEnvironment();
|
|
21
|
+
var request = getRequest(query);
|
|
22
|
+
var threshold = (_options$staleThresho = options === null || options === void 0 ? void 0 : options.staleThresholdMs) !== null && _options$staleThresho !== void 0 ? _options$staleThresho : DEFAULT_STALE_MS;
|
|
23
|
+
var getDataID = (_environment$_getData = environment._getDataID) !== null && _environment$_getData !== void 0 ? _environment$_getData : defaultGetDataID;
|
|
24
|
+
var response = use(queryRef._response);
|
|
25
|
+
var isFresh = response.data != null && Date.now() - queryRef.fetchedAt <= threshold;
|
|
26
|
+
var shouldCommit = isFresh && !committedRefs.has(queryRef);
|
|
27
|
+
if (shouldCommit) {
|
|
28
|
+
var _environment$__log;
|
|
29
|
+
committedRefs.add(queryRef);
|
|
30
|
+
var operation = createOperationDescriptor(request, queryRef.variables);
|
|
31
|
+
var responsePayload = {
|
|
32
|
+
data: response.data,
|
|
33
|
+
errors: response.errors
|
|
34
|
+
};
|
|
35
|
+
var relayPayload = normalizeResponse(responsePayload, operation.root, ROOT_TYPE, {
|
|
36
|
+
getDataID: getDataID,
|
|
37
|
+
treatMissingFieldsAsNull: false,
|
|
38
|
+
deferDeduplicatedFields: false,
|
|
39
|
+
log: (_environment$__log = environment.__log) !== null && _environment$__log !== void 0 ? _environment$__log : null,
|
|
40
|
+
path: [],
|
|
41
|
+
shouldProcessClientComponents: false
|
|
42
|
+
}, false);
|
|
43
|
+
environment.getStore().publish(relayPayload.source);
|
|
44
|
+
}
|
|
45
|
+
var preloadedQuery = useMemo(function () {
|
|
46
|
+
var _request$params$id;
|
|
47
|
+
var isFreshAtMemo = response.data != null && Date.now() - queryRef.fetchedAt <= threshold;
|
|
48
|
+
var useStore = isFreshAtMemo || committedRefs.has(queryRef);
|
|
49
|
+
return {
|
|
50
|
+
kind: 'PreloadedQuery_DEPRECATED',
|
|
51
|
+
environment: environment,
|
|
52
|
+
fetchKey: queryRef.fetchedAt,
|
|
53
|
+
fetchPolicy: useStore ? 'store-or-network' : 'network-only',
|
|
54
|
+
id: (_request$params$id = request.params.id) !== null && _request$params$id !== void 0 ? _request$params$id : request.params.name,
|
|
55
|
+
name: request.params.name,
|
|
56
|
+
source: null,
|
|
57
|
+
variables: queryRef.variables
|
|
58
|
+
};
|
|
59
|
+
}, [environment, queryRef.fetchedAt, response.data, queryRef.variables, request.params.id, request.params.name, threshold]);
|
|
60
|
+
return usePreloadedQuery(query, preloadedQuery);
|
|
61
|
+
}
|
|
62
|
+
module.exports = useQueryFromServer;
|
package/lib/rsc_EXPERIMENTAL.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator").default;
|
|
4
4
|
var serverFetchQueryImpl = require('./relay-hooks/rsc/serverFetchQuery');
|
|
5
|
+
var serverPreloadQueryImpl = require('./relay-hooks/rsc/serverPreloadQuery');
|
|
5
6
|
var serverReadFragmentImpl = require('./relay-hooks/rsc/serverReadFragment');
|
|
6
7
|
var invariant = require('invariant');
|
|
7
8
|
var React = require('react');
|
|
@@ -18,6 +19,9 @@ function createServerEnvironment(create) {
|
|
|
18
19
|
});
|
|
19
20
|
return _serverFetchQuery.apply(this, arguments);
|
|
20
21
|
}
|
|
22
|
+
function serverPreloadQuery(query, variables) {
|
|
23
|
+
return serverPreloadQueryImpl(getEnvironment(), query, variables);
|
|
24
|
+
}
|
|
21
25
|
function serverReadFragment(_x3, _x4) {
|
|
22
26
|
return _serverReadFragment.apply(this, arguments);
|
|
23
27
|
}
|
|
@@ -30,6 +34,7 @@ function createServerEnvironment(create) {
|
|
|
30
34
|
return {
|
|
31
35
|
getEnvironment: getEnvironment,
|
|
32
36
|
serverFetchQuery: serverFetchQuery,
|
|
37
|
+
serverPreloadQuery: serverPreloadQuery,
|
|
33
38
|
serverReadFragment: serverReadFragment
|
|
34
39
|
};
|
|
35
40
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-relay",
|
|
3
3
|
"description": "A framework for building GraphQL-driven React applications.",
|
|
4
|
-
"version": "0.0.0-main-
|
|
4
|
+
"version": "0.0.0-main-c26dc44a",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"graphql",
|
|
7
7
|
"relay",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"fbjs": "^3.0.2",
|
|
21
21
|
"invariant": "^2.2.4",
|
|
22
22
|
"nullthrows": "^1.1.1",
|
|
23
|
-
"relay-runtime": "0.0.0-main-
|
|
23
|
+
"relay-runtime": "0.0.0-main-c26dc44a"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
26
|
"react": "^16.9.0 || ^17 || ^18 || ^19"
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict-local
|
|
8
|
+
* @format
|
|
9
|
+
* @oncall relay
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
'use strict';
|
|
13
|
+
|
|
14
|
+
import type {IEnvironment, PayloadError, Query, Variables} from 'relay-runtime';
|
|
15
|
+
|
|
16
|
+
const invariant = require('invariant');
|
|
17
|
+
const {createOperationDescriptor, getRequest} = require('relay-runtime');
|
|
18
|
+
|
|
19
|
+
export type PreloadedQueryResponse<TData> = {
|
|
20
|
+
+data: TData,
|
|
21
|
+
+errors?: ReadonlyArray<PayloadError>,
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export type PreloadedQueryRef<TVariables, TData> = {
|
|
25
|
+
+kind: 'PreloadedQueryRef',
|
|
26
|
+
+queryId: string,
|
|
27
|
+
+variables: TVariables,
|
|
28
|
+
+_response: Promise<PreloadedQueryResponse<TData>>,
|
|
29
|
+
+fetchedAt: number,
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
function serverPreloadQuery<TVariables extends Variables, TData>(
|
|
33
|
+
environment: IEnvironment,
|
|
34
|
+
query: Query<TVariables, TData>,
|
|
35
|
+
variables: TVariables,
|
|
36
|
+
): PreloadedQueryRef<TVariables, TData> {
|
|
37
|
+
const request = getRequest(query);
|
|
38
|
+
const operationDescriptor = createOperationDescriptor(request, variables);
|
|
39
|
+
|
|
40
|
+
const observable = environment.execute({operation: operationDescriptor});
|
|
41
|
+
|
|
42
|
+
const queryId =
|
|
43
|
+
request.params.id ?? request.params.cacheID ?? request.params.name;
|
|
44
|
+
|
|
45
|
+
const response: Promise<PreloadedQueryResponse<TData>> =
|
|
46
|
+
// $FlowFixMe[incompatible-type] PayloadData -> TData; shape validated by the Relay compiler
|
|
47
|
+
observable.toPromise().then(rawResponse => {
|
|
48
|
+
invariant(rawResponse != null, 'Unexpected null response from execute');
|
|
49
|
+
// TODO: @defer returns batched responses; this only handles the first payload
|
|
50
|
+
invariant(
|
|
51
|
+
!Array.isArray(rawResponse),
|
|
52
|
+
'@defer is not yet supported in serverPreloadQuery',
|
|
53
|
+
);
|
|
54
|
+
return {
|
|
55
|
+
data: rawResponse.data,
|
|
56
|
+
errors: rawResponse.errors,
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
return {
|
|
61
|
+
kind: 'PreloadedQueryRef',
|
|
62
|
+
queryId,
|
|
63
|
+
variables,
|
|
64
|
+
_response: response,
|
|
65
|
+
fetchedAt: Date.now(),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
module.exports = serverPreloadQuery;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict-local
|
|
8
|
+
* @format
|
|
9
|
+
* @oncall relay
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
'use client';
|
|
13
|
+
'use strict';
|
|
14
|
+
|
|
15
|
+
import type {
|
|
16
|
+
PreloadedQueryRef,
|
|
17
|
+
PreloadedQueryResponse,
|
|
18
|
+
} from './serverPreloadQuery';
|
|
19
|
+
import type {Query, Variables} from 'relay-runtime';
|
|
20
|
+
|
|
21
|
+
const usePreloadedQuery = require('../usePreloadedQuery');
|
|
22
|
+
const useRelayEnvironment = require('../useRelayEnvironment');
|
|
23
|
+
// $FlowFixMe[missing-export] React.use is available in React 19+
|
|
24
|
+
const {use, useMemo} = require('react');
|
|
25
|
+
const {
|
|
26
|
+
__internal,
|
|
27
|
+
ROOT_TYPE,
|
|
28
|
+
createOperationDescriptor,
|
|
29
|
+
getRequest,
|
|
30
|
+
} = require('relay-runtime');
|
|
31
|
+
|
|
32
|
+
const {defaultGetDataID, normalizeResponse} = __internal;
|
|
33
|
+
|
|
34
|
+
// $FlowFixMe[unclear-type] WeakSet used for identity-based dedup only
|
|
35
|
+
const committedRefs: WeakSet<any> = new WeakSet();
|
|
36
|
+
|
|
37
|
+
const DEFAULT_STALE_MS = 30_000;
|
|
38
|
+
|
|
39
|
+
function useQueryFromServer<TVariables extends Variables, TData>(
|
|
40
|
+
query: Query<TVariables, TData>,
|
|
41
|
+
queryRef: PreloadedQueryRef<TVariables, TData>,
|
|
42
|
+
options?: {staleThresholdMs?: number},
|
|
43
|
+
): TData {
|
|
44
|
+
const environment = useRelayEnvironment();
|
|
45
|
+
const request = getRequest(query);
|
|
46
|
+
const threshold = options?.staleThresholdMs ?? DEFAULT_STALE_MS;
|
|
47
|
+
// TODO: Add a method to IEnvironment for server-side publish so custom
|
|
48
|
+
// IEnvironment implementations don't need to access _getDataID.
|
|
49
|
+
// $FlowFixMe[prop-missing] _getDataID is not on IEnvironment
|
|
50
|
+
// $FlowFixMe[unclear-type]
|
|
51
|
+
const getDataID: any = environment._getDataID ?? defaultGetDataID;
|
|
52
|
+
|
|
53
|
+
const response: PreloadedQueryResponse<TData> = use(queryRef._response);
|
|
54
|
+
|
|
55
|
+
const isFresh =
|
|
56
|
+
response.data != null && Date.now() - queryRef.fetchedAt <= threshold;
|
|
57
|
+
|
|
58
|
+
const shouldCommit = isFresh && !committedRefs.has(queryRef);
|
|
59
|
+
|
|
60
|
+
// Publish server data to the Relay store without notifying subscribers.
|
|
61
|
+
// This avoids the React "Cannot update a component while rendering a
|
|
62
|
+
// different component" error that occurs when store.notify() triggers
|
|
63
|
+
// setState in other mounted components that subscribe to overlapping records.
|
|
64
|
+
if (shouldCommit) {
|
|
65
|
+
committedRefs.add(queryRef);
|
|
66
|
+
|
|
67
|
+
const operation = createOperationDescriptor(request, queryRef.variables);
|
|
68
|
+
|
|
69
|
+
// $FlowFixMe[unclear-type]
|
|
70
|
+
const responsePayload: any = {
|
|
71
|
+
data: response.data,
|
|
72
|
+
errors: response.errors,
|
|
73
|
+
};
|
|
74
|
+
const relayPayload = normalizeResponse(
|
|
75
|
+
responsePayload,
|
|
76
|
+
operation.root,
|
|
77
|
+
ROOT_TYPE,
|
|
78
|
+
{
|
|
79
|
+
getDataID,
|
|
80
|
+
treatMissingFieldsAsNull: false,
|
|
81
|
+
deferDeduplicatedFields: false,
|
|
82
|
+
// $FlowFixMe[prop-missing]
|
|
83
|
+
log: environment.__log ?? null,
|
|
84
|
+
path: [],
|
|
85
|
+
shouldProcessClientComponents: false,
|
|
86
|
+
},
|
|
87
|
+
false,
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
environment.getStore().publish(relayPayload.source);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Build a PreloadedQuery shim. Fresh data was committed to the store
|
|
94
|
+
// above, so source is null and fetchPolicy is "store-or-network".
|
|
95
|
+
// Stale path uses "network-only" to trigger a client-side refetch.
|
|
96
|
+
const preloadedQuery = useMemo(() => {
|
|
97
|
+
const isFreshAtMemo =
|
|
98
|
+
response.data != null && Date.now() - queryRef.fetchedAt <= threshold;
|
|
99
|
+
|
|
100
|
+
// If this queryRef was already committed to the store by a previous
|
|
101
|
+
// component instance, read from the store even if the server timestamp
|
|
102
|
+
// is past the staleness threshold. This prevents a network refetch
|
|
103
|
+
// from overwriting store mutations made after the initial commit.
|
|
104
|
+
const useStore = isFreshAtMemo || committedRefs.has(queryRef);
|
|
105
|
+
|
|
106
|
+
return {
|
|
107
|
+
kind: 'PreloadedQuery_DEPRECATED',
|
|
108
|
+
environment,
|
|
109
|
+
fetchKey: queryRef.fetchedAt,
|
|
110
|
+
fetchPolicy: useStore ? 'store-or-network' : 'network-only',
|
|
111
|
+
id: request.params.id ?? request.params.name,
|
|
112
|
+
name: request.params.name,
|
|
113
|
+
source: null,
|
|
114
|
+
variables: queryRef.variables,
|
|
115
|
+
};
|
|
116
|
+
}, [
|
|
117
|
+
environment,
|
|
118
|
+
queryRef.fetchedAt,
|
|
119
|
+
response.data,
|
|
120
|
+
queryRef.variables,
|
|
121
|
+
request.params.id,
|
|
122
|
+
request.params.name,
|
|
123
|
+
threshold,
|
|
124
|
+
]);
|
|
125
|
+
|
|
126
|
+
// usePreloadedQuery expects an opaque PreloadedQuery that can only be
|
|
127
|
+
// created via loadQuery/useQueryLoader. There's no public API to create
|
|
128
|
+
// one from server-fetched data, so we construct a plain object with the
|
|
129
|
+
// fields usePreloadedQuery reads internally.
|
|
130
|
+
// $FlowFixMe[incompatible-call]
|
|
131
|
+
// $FlowFixMe[incompatible-type]
|
|
132
|
+
return usePreloadedQuery(query, preloadedQuery);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
module.exports = useQueryFromServer;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Relay v0.0.0-main-c26dc44a
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
5
|
+
*
|
|
6
|
+
* This source code is licensed under the MIT license found in the
|
|
7
|
+
* LICENSE file in the root directory of this source tree.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
module.exports = require('./lib/rsc-client_EXPERIMENTAL.js');
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @flow strict-local
|
|
8
|
+
* @format
|
|
9
|
+
* @oncall relay
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
'use client';
|
|
13
|
+
'use strict';
|
|
14
|
+
|
|
15
|
+
import type {PreloadedQueryRef} from './relay-hooks/rsc/serverPreloadQuery';
|
|
16
|
+
|
|
17
|
+
const useQueryFromServer = require('./relay-hooks/rsc/useQueryFromServer');
|
|
18
|
+
|
|
19
|
+
export type {PreloadedQueryRef};
|
|
20
|
+
|
|
21
|
+
module.exports = {
|
|
22
|
+
useQueryFromServer,
|
|
23
|
+
};
|
package/rsc_EXPERIMENTAL.js
CHANGED
package/rsc_EXPERIMENTAL.js.flow
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
'use strict';
|
|
13
13
|
|
|
14
|
+
import type {PreloadedQueryRef} from './relay-hooks/rsc/serverPreloadQuery';
|
|
14
15
|
import type {
|
|
15
16
|
Fragment,
|
|
16
17
|
FragmentType,
|
|
@@ -20,10 +21,13 @@ import type {
|
|
|
20
21
|
} from 'relay-runtime';
|
|
21
22
|
|
|
22
23
|
const serverFetchQueryImpl = require('./relay-hooks/rsc/serverFetchQuery');
|
|
24
|
+
const serverPreloadQueryImpl = require('./relay-hooks/rsc/serverPreloadQuery');
|
|
23
25
|
const serverReadFragmentImpl = require('./relay-hooks/rsc/serverReadFragment');
|
|
24
26
|
const invariant = require('invariant');
|
|
25
27
|
const React = require('react');
|
|
26
28
|
|
|
29
|
+
export type {PreloadedQueryRef};
|
|
30
|
+
|
|
27
31
|
type HasSpread<TFragmentType> = {+$fragmentSpreads: TFragmentType, ...};
|
|
28
32
|
|
|
29
33
|
export type ServerEnvironment = {
|
|
@@ -32,6 +36,10 @@ export type ServerEnvironment = {
|
|
|
32
36
|
query: Query<TVariables, TData>,
|
|
33
37
|
variables: TVariables,
|
|
34
38
|
) => Promise<TData>,
|
|
39
|
+
+serverPreloadQuery: <TVariables extends Variables, TData>(
|
|
40
|
+
query: Query<TVariables, TData>,
|
|
41
|
+
variables: TVariables,
|
|
42
|
+
) => PreloadedQueryRef<TVariables, TData>,
|
|
35
43
|
+serverReadFragment: <TFragmentType extends FragmentType, TData>(
|
|
36
44
|
fragment: Fragment<TFragmentType, TData>,
|
|
37
45
|
fragmentRef:
|
|
@@ -55,6 +63,13 @@ function createServerEnvironment(
|
|
|
55
63
|
return serverFetchQueryImpl(getEnvironment(), query, variables);
|
|
56
64
|
}
|
|
57
65
|
|
|
66
|
+
function serverPreloadQuery<TVariables extends Variables, TData>(
|
|
67
|
+
query: Query<TVariables, TData>,
|
|
68
|
+
variables: TVariables,
|
|
69
|
+
): PreloadedQueryRef<TVariables, TData> {
|
|
70
|
+
return serverPreloadQueryImpl(getEnvironment(), query, variables);
|
|
71
|
+
}
|
|
72
|
+
|
|
58
73
|
async function serverReadFragment<TFragmentType extends FragmentType, TData>(
|
|
59
74
|
fragment: Fragment<TFragmentType, TData>,
|
|
60
75
|
fragmentRef:
|
|
@@ -67,6 +82,7 @@ function createServerEnvironment(
|
|
|
67
82
|
return {
|
|
68
83
|
getEnvironment,
|
|
69
84
|
serverFetchQuery,
|
|
85
|
+
serverPreloadQuery,
|
|
70
86
|
serverReadFragment,
|
|
71
87
|
};
|
|
72
88
|
}
|