react-relay 2.0.0-rc.2 → 5.0.0
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/index.js +2 -2
- package/lib/ReactRelayContext.js +6 -3
- package/lib/ReactRelayFragmentContainer.js +48 -46
- package/lib/ReactRelayFragmentMockRenderer.js +5 -1
- package/lib/ReactRelayPaginationContainer.js +102 -68
- package/lib/ReactRelayQueryFetcher.js +54 -28
- package/lib/ReactRelayQueryRenderer.js +28 -20
- package/lib/ReactRelayRefetchContainer.js +70 -58
- package/lib/ReactRelayTestMocker.js +56 -43
- package/lib/ReactRelayTypes.js +1 -1
- package/lib/RelayContext.js +8 -2
- package/lib/assertFragmentMap.js +9 -7
- package/lib/buildReactRelayContainer.js +32 -23
- package/lib/index.js +41 -0
- package/lib/isRelayEnvironment.js +1 -1
- package/lib/isRelayVariables.js +1 -1
- package/lib/readContext.js +7 -4
- package/package.json +4 -4
- package/react-relay.js +2 -2
- package/react-relay.min.js +2 -2
- package/classic.js +0 -10
- package/compat.js +0 -10
- package/lib/ConcreteQuery.js +0 -10
- package/lib/GraphQLQueryRunner.js +0 -264
- package/lib/GraphQLRange.js +0 -1124
- package/lib/GraphQLSegment.js +0 -743
- package/lib/GraphQLStoreChangeEmitter.js +0 -141
- package/lib/GraphQLStoreQueryResolver.js +0 -288
- package/lib/GraphQLStoreRangeUtils.js +0 -126
- package/lib/QueryBuilder.js +0 -228
- package/lib/ReactRelayClassicExports.js +0 -29
- package/lib/ReactRelayCompatContainerBuilder.js +0 -175
- package/lib/ReactRelayCompatPublic.js +0 -28
- package/lib/ReactRelayContainerProfiler.js +0 -30
- package/lib/ReactRelayFragmentContainer-flowtest.js +0 -201
- package/lib/ReactRelayPaginationContainer-flowtest.js +0 -213
- package/lib/ReactRelayPublic.js +0 -29
- package/lib/ReactRelayRefetchContainer-flowtest.js +0 -191
- package/lib/RelayCacheProcessor.js +0 -196
- package/lib/RelayChangeTracker.js +0 -83
- package/lib/RelayClassicContainerUtils.js +0 -49
- package/lib/RelayClassicCore.js +0 -34
- package/lib/RelayClassicRecordState.js +0 -31
- package/lib/RelayCompatContainer.js +0 -25
- package/lib/RelayCompatEnvironment.js +0 -27
- package/lib/RelayCompatMutations.js +0 -133
- package/lib/RelayCompatPaginationContainer.js +0 -27
- package/lib/RelayCompatRefetchContainer.js +0 -27
- package/lib/RelayCompatTypes.js +0 -10
- package/lib/RelayContainer.js +0 -889
- package/lib/RelayContainerComparators.js +0 -75
- package/lib/RelayContainerProxy.js +0 -21
- package/lib/RelayDefaultNetworkLayer.js +0 -192
- package/lib/RelayEnvironment.js +0 -449
- package/lib/RelayEnvironmentTypes.js +0 -10
- package/lib/RelayFetchMode.js +0 -17
- package/lib/RelayFragmentPointer.js +0 -161
- package/lib/RelayFragmentReference.js +0 -249
- package/lib/RelayFragmentSpecResolver.js +0 -305
- package/lib/RelayGraphQLMutation.js +0 -288
- package/lib/RelayGraphQLTag.js +0 -42
- package/lib/RelayInternalTypes.js +0 -15
- package/lib/RelayInternals.js +0 -24
- package/lib/RelayMetaRoute.js +0 -35
- package/lib/RelayMockRenderer.js +0 -71
- package/lib/RelayModern-flowtest.js +0 -342
- package/lib/RelayModernFlowtest_badref.graphql.js +0 -10
- package/lib/RelayModernFlowtest_notref.graphql.js +0 -10
- package/lib/RelayModernFlowtest_user.graphql.js +0 -10
- package/lib/RelayModernFlowtest_users.graphql.js +0 -10
- package/lib/RelayMutation.js +0 -322
- package/lib/RelayMutationDebugPrinter.js +0 -47
- package/lib/RelayMutationQuery.js +0 -558
- package/lib/RelayMutationQueue.js +0 -530
- package/lib/RelayMutationRequest.js +0 -103
- package/lib/RelayMutationTracker.js +0 -113
- package/lib/RelayMutationTransaction.js +0 -92
- package/lib/RelayMutationTransactionStatus.js +0 -55
- package/lib/RelayNetworkDebug.js +0 -131
- package/lib/RelayNetworkLayer.js +0 -185
- package/lib/RelayNodeInterface.js +0 -104
- package/lib/RelayOperationDescriptor.js +0 -40
- package/lib/RelayOptimisticMutationUtils.js +0 -208
- package/lib/RelayPendingQueryTracker.js +0 -166
- package/lib/RelayPropTypes.js +0 -57
- package/lib/RelayPublic.js +0 -44
- package/lib/RelayQL.js +0 -128
- package/lib/RelayQuery.js +0 -1584
- package/lib/RelayQueryCaching.js +0 -33
- package/lib/RelayQueryConfig.js +0 -58
- package/lib/RelayQueryPath.js +0 -204
- package/lib/RelayQueryRequest.js +0 -103
- package/lib/RelayQueryTracker.js +0 -86
- package/lib/RelayQueryTransform.js +0 -91
- package/lib/RelayQueryVisitor.js +0 -93
- package/lib/RelayQueryWriter.js +0 -573
- package/lib/RelayReadyState.js +0 -83
- package/lib/RelayReadyStateRenderer.js +0 -145
- package/lib/RelayRecord.js +0 -75
- package/lib/RelayRecordStatusMap.js +0 -57
- package/lib/RelayRecordStore.js +0 -433
- package/lib/RelayRecordWriter.js +0 -601
- package/lib/RelayRefQueryDescriptor.js +0 -27
- package/lib/RelayRenderer.js +0 -268
- package/lib/RelayRootContainer.js +0 -125
- package/lib/RelayRoute.js +0 -92
- package/lib/RelayRouteFragment.js +0 -44
- package/lib/RelaySelector.js +0 -201
- package/lib/RelayShallowMock.js +0 -69
- package/lib/RelayStaticContainer.js +0 -38
- package/lib/RelayStore.js +0 -12
- package/lib/RelayStoreConstants.js +0 -20
- package/lib/RelayStoreData.js +0 -660
- package/lib/RelayTaskQueue.js +0 -189
- package/lib/RelayTypes.js +0 -13
- package/lib/RelayVariable.js +0 -32
- package/lib/RelayVariables.js +0 -92
- package/lib/buildRQL.js +0 -160
- package/lib/callsFromGraphQL.js +0 -74
- package/lib/callsToGraphQL.js +0 -34
- package/lib/checkRelayQueryData.js +0 -250
- package/lib/createRelayQuery.js +0 -17
- package/lib/dedent.js +0 -49
- package/lib/diffRelayQuery.js +0 -757
- package/lib/directivesToGraphQL.js +0 -39
- package/lib/filterRelayQuery.js +0 -29
- package/lib/findRelayQueryLeaves.js +0 -293
- package/lib/flattenRelayQuery.js +0 -121
- package/lib/flattenSplitRelayQueries.js +0 -44
- package/lib/forEachRootCallArg.js +0 -40
- package/lib/fromGraphQL.js +0 -48
- package/lib/generateClientEdgeID.js +0 -22
- package/lib/generateClientID.js +0 -27
- package/lib/generateConcreteFragmentID.js +0 -30
- package/lib/generateForceIndex.js +0 -24
- package/lib/generateRQLFieldAlias.js +0 -39
- package/lib/getRangeBehavior.js +0 -58
- package/lib/getRelayQueries.js +0 -83
- package/lib/intersectRelayQuery.js +0 -149
- package/lib/isClassicRelayContext.js +0 -20
- package/lib/isClassicRelayEnvironment.js +0 -20
- package/lib/isCompatibleRelayFragmentType.js +0 -27
- package/lib/isRelayContainer.js +0 -16
- package/lib/makeLegacyStringishComponentRef.js +0 -52
- package/lib/printRelayOSSQuery.js +0 -329
- package/lib/printRelayQuery.js +0 -26
- package/lib/rangeOperationToMetadataKey.js +0 -25
- package/lib/readRelayQueryData.js +0 -551
- package/lib/relayUnstableBatchedUpdates.js +0 -12
- package/lib/relayUnstableBatchedUpdates.native.js +0 -11
- package/lib/restoreRelayCacheData.js +0 -188
- package/lib/serializeRelayQueryCall.js +0 -42
- package/lib/splitDeferredRelayQueries.js +0 -298
- package/lib/stableStringify.js +0 -85
- package/lib/testEditDistance.js +0 -112
- package/lib/throwFailedPromise.js +0 -26
- package/lib/toGraphQL.js +0 -94
- package/lib/transformRelayQueryPayload.js +0 -145
- package/lib/validateMutationConfig.js +0 -117
- package/lib/validateRelayReadQuery.js +0 -112
- package/lib/writeRelayQueryPayload.js +0 -44
- package/lib/writeRelayUpdatePayload.js +0 -513
- package/react-relay-classic.js +0 -4
- package/react-relay-classic.min.js +0 -9
- package/react-relay-compat.js +0 -4
- package/react-relay-compat.min.js +0 -9
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) Facebook, Inc. and its 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
|
-
* strict-local
|
|
8
|
-
* @format
|
|
9
|
-
*/
|
|
10
|
-
'use strict';
|
|
11
|
-
|
|
12
|
-
var _inheritsLoose2 = require("@babel/runtime/helpers/interopRequireDefault")(require("@babel/runtime/helpers/inheritsLoose"));
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* @internal
|
|
16
|
-
*
|
|
17
|
-
* Retrieves data for queries or fragments from disk into `cachedRecords`.
|
|
18
|
-
*/
|
|
19
|
-
function restoreFragmentDataFromCache(dataID, fragment, path, store, cachedRecords, cachedRootCallMap, cacheManager, changeTracker, callbacks) {
|
|
20
|
-
var restorator = new RelayCachedDataRestorator(cacheManager, store, cachedRecords, cachedRootCallMap, changeTracker, callbacks);
|
|
21
|
-
restorator.restoreFragmentData(dataID, fragment, path);
|
|
22
|
-
return {
|
|
23
|
-
abort: function abort() {
|
|
24
|
-
restorator.abort();
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function restoreQueriesDataFromCache(queries, store, cachedRecords, cachedRootCallMap, cacheManager, changeTracker, callbacks) {
|
|
30
|
-
var restorator = new RelayCachedDataRestorator(cacheManager, store, cachedRecords, cachedRootCallMap, changeTracker, callbacks);
|
|
31
|
-
restorator.restoreQueriesData(queries);
|
|
32
|
-
return {
|
|
33
|
-
abort: function abort() {
|
|
34
|
-
restorator.abort();
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
var RelayCachedDataRestorator =
|
|
40
|
-
/*#__PURE__*/
|
|
41
|
-
function (_RelayCacheProcessor) {
|
|
42
|
-
(0, _inheritsLoose2["default"])(RelayCachedDataRestorator, _RelayCacheProcessor);
|
|
43
|
-
|
|
44
|
-
function RelayCachedDataRestorator(cacheManager, store, cachedRecords, cachedRootCallMap, changeTracker, callbacks) {
|
|
45
|
-
var _this;
|
|
46
|
-
|
|
47
|
-
_this = _RelayCacheProcessor.call(this, cacheManager, callbacks) || this;
|
|
48
|
-
_this._cachedRecords = cachedRecords;
|
|
49
|
-
_this._cachedRootCallMap = cachedRootCallMap;
|
|
50
|
-
_this._changeTracker = changeTracker;
|
|
51
|
-
_this._store = store;
|
|
52
|
-
return _this;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
var _proto = RelayCachedDataRestorator.prototype;
|
|
56
|
-
|
|
57
|
-
_proto.handleNodeVisited = function handleNodeVisited(node, dataID, record, nextState) {
|
|
58
|
-
var recordState = this._store.getRecordState(dataID);
|
|
59
|
-
|
|
60
|
-
this._cachedRecords[dataID] = record; // Mark records as created/updated as necessary. Note that if the
|
|
61
|
-
// record is known to be deleted in the store then it will have been
|
|
62
|
-
// been marked as created already. Further, it does not need to be
|
|
63
|
-
// updated since no additional data can be read about a deleted node.
|
|
64
|
-
|
|
65
|
-
if (recordState === 'UNKNOWN' && record !== undefined) {
|
|
66
|
-
// Mark as created if the store did not have a record but disk cache
|
|
67
|
-
// did (either a known record or known deletion).
|
|
68
|
-
this._changeTracker.createID(dataID);
|
|
69
|
-
} else if (recordState === 'EXISTENT' && record != null) {
|
|
70
|
-
// Mark as updated only if a record exists in both the store and
|
|
71
|
-
// disk cache.
|
|
72
|
-
this._changeTracker.updateID(dataID);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
if (!record) {
|
|
76
|
-
// We are out of luck if disk doesn't have the node either.
|
|
77
|
-
this.handleFailure();
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
if (require("./RelayRecord").isClientID(dataID)) {
|
|
82
|
-
record.__path__ = nextState.path;
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
_proto.handleIdentifiedRootVisited = function handleIdentifiedRootVisited(query, dataID, identifyingArgKey, nextState) {
|
|
87
|
-
if (dataID == null) {
|
|
88
|
-
// Read from cache and we still don't have a valid `dataID`.
|
|
89
|
-
this.handleFailure();
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
var storageKey = query.getStorageKey();
|
|
94
|
-
this._cachedRootCallMap[storageKey] = this._cachedRootCallMap[storageKey] || {};
|
|
95
|
-
this._cachedRootCallMap[storageKey][identifyingArgKey || ''] = dataID;
|
|
96
|
-
nextState.dataID = dataID;
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
_proto.restoreFragmentData = function restoreFragmentData(dataID, fragment, path) {
|
|
100
|
-
var _this2 = this;
|
|
101
|
-
|
|
102
|
-
this.process(function () {
|
|
103
|
-
_this2.visitFragment(fragment, {
|
|
104
|
-
dataID: dataID,
|
|
105
|
-
node: fragment,
|
|
106
|
-
path: path,
|
|
107
|
-
rangeCalls: undefined
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
_proto.restoreQueriesData = function restoreQueriesData(queries) {
|
|
113
|
-
var _this3 = this;
|
|
114
|
-
|
|
115
|
-
this.process(function () {
|
|
116
|
-
require("fbjs/lib/forEachObject")(queries, function (query) {
|
|
117
|
-
if (_this3._state === 'COMPLETED') {
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
if (query) {
|
|
122
|
-
_this3.visitRoot(query, {
|
|
123
|
-
dataID: undefined,
|
|
124
|
-
node: query,
|
|
125
|
-
path: require("./RelayQueryPath").create(query),
|
|
126
|
-
rangeCalls: undefined
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
});
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
_proto.traverse = function traverse(node, nextState) {
|
|
134
|
-
!(nextState.dataID != null) ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayCachedDataRestorator: Attempted to traverse without a ' + '`dataID`.') : require("fbjs/lib/invariant")(false) : void 0;
|
|
135
|
-
|
|
136
|
-
var _findRelayQueryLeaves = require("./findRelayQueryLeaves")(this._store, this._cachedRecords, nextState.node, nextState.dataID, nextState.path, nextState.rangeCalls),
|
|
137
|
-
missingData = _findRelayQueryLeaves.missingData,
|
|
138
|
-
pendingNodeStates = _findRelayQueryLeaves.pendingNodeStates;
|
|
139
|
-
|
|
140
|
-
if (missingData) {
|
|
141
|
-
this.handleFailure();
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
for (var ii = 0; ii < pendingNodeStates.length; ii++) {
|
|
146
|
-
if (this._state === 'COMPLETED') {
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
!(pendingNodeStates[ii].dataID != null) ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayCachedDataRestorator: Attempted to visit a node without ' + 'a `dataID`.') : require("fbjs/lib/invariant")(false) : void 0;
|
|
151
|
-
this.visitNode(pendingNodeStates[ii].node, pendingNodeStates[ii].dataID, pendingNodeStates[ii]);
|
|
152
|
-
}
|
|
153
|
-
};
|
|
154
|
-
|
|
155
|
-
_proto.visitIdentifiedRoot = function visitIdentifiedRoot(query, identifyingArgKey, nextState) {
|
|
156
|
-
var dataID = this._store.getDataID(query.getStorageKey(), identifyingArgKey);
|
|
157
|
-
|
|
158
|
-
if (dataID == null) {
|
|
159
|
-
_RelayCacheProcessor.prototype.visitIdentifiedRoot.call(this, query, identifyingArgKey, nextState);
|
|
160
|
-
} else {
|
|
161
|
-
this.traverse(query, {
|
|
162
|
-
dataID: dataID,
|
|
163
|
-
node: query,
|
|
164
|
-
path: require("./RelayQueryPath").create(query),
|
|
165
|
-
rangeCalls: undefined
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
};
|
|
169
|
-
|
|
170
|
-
return RelayCachedDataRestorator;
|
|
171
|
-
}(require("./RelayCacheProcessor"));
|
|
172
|
-
|
|
173
|
-
require("relay-runtime").RelayProfiler.instrumentMethods(RelayCachedDataRestorator.prototype, {
|
|
174
|
-
handleIdentifiedRootVisited: 'RelayCachedDataRestorator.handleIdentifiedRootVisited',
|
|
175
|
-
handleNodeVisited: 'RelayCachedDataRestorator.handleNodeVisited',
|
|
176
|
-
queueIdentifiedRoot: 'RelayCachedDataRestorator.queueRoot',
|
|
177
|
-
queueNode: 'RelayCachedDataRestorator.queueNode',
|
|
178
|
-
restoreFragmentData: 'RelayCachedDataRestorator.readFragment',
|
|
179
|
-
restoreQueriesData: 'RelayCachedDataRestorator.read',
|
|
180
|
-
traverse: 'RelayCachedDataRestorator.traverse',
|
|
181
|
-
visitNode: 'RelayCachedDataRestorator.visitNode',
|
|
182
|
-
visitRoot: 'RelayCachedDataRestorator.visitRoot'
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
module.exports = {
|
|
186
|
-
restoreFragmentDataFromCache: restoreFragmentDataFromCache,
|
|
187
|
-
restoreQueriesDataFromCache: restoreQueriesDataFromCache
|
|
188
|
-
};
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) Facebook, Inc. and its 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
|
-
*
|
|
8
|
-
* @format
|
|
9
|
-
*/
|
|
10
|
-
'use strict';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* @internal
|
|
14
|
-
*
|
|
15
|
-
* Serializes a query "call" (a classic combination of field and argument value).
|
|
16
|
-
*/
|
|
17
|
-
function serializeRelayQueryCall(call) {
|
|
18
|
-
var value = call.value;
|
|
19
|
-
var valueString;
|
|
20
|
-
|
|
21
|
-
if (Array.isArray(value)) {
|
|
22
|
-
valueString = require("fbjs/lib/flattenArray")(value).map(function (value) {
|
|
23
|
-
return serializeCallValue(value);
|
|
24
|
-
}).join(',');
|
|
25
|
-
} else {
|
|
26
|
-
valueString = serializeCallValue(value);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
return '.' + call.name + '(' + valueString + ')';
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function serializeCallValue(value) {
|
|
33
|
-
if (value == null) {
|
|
34
|
-
return '';
|
|
35
|
-
} else if (typeof value !== 'string') {
|
|
36
|
-
return JSON.stringify(value);
|
|
37
|
-
} else {
|
|
38
|
-
return value;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
module.exports = serializeRelayQueryCall;
|
|
@@ -1,298 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) Facebook, Inc. and its 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
|
-
*
|
|
8
|
-
* @format
|
|
9
|
-
*/
|
|
10
|
-
'use strict';
|
|
11
|
-
|
|
12
|
-
var _inheritsLoose2 = require("@babel/runtime/helpers/interopRequireDefault")(require("@babel/runtime/helpers/inheritsLoose"));
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Traverse `node` splitting off deferred query fragments into separate queries.
|
|
16
|
-
*
|
|
17
|
-
* @internal
|
|
18
|
-
*/
|
|
19
|
-
function splitDeferredRelayQueries(node) {
|
|
20
|
-
var splitter = new GraphQLSplitDeferredQueries();
|
|
21
|
-
var splitQueries = {
|
|
22
|
-
__nodePath__: [],
|
|
23
|
-
__parent__: null,
|
|
24
|
-
__refQuery__: null,
|
|
25
|
-
deferred: [],
|
|
26
|
-
required: null
|
|
27
|
-
};
|
|
28
|
-
splitter.visit(node, splitQueries);
|
|
29
|
-
return buildQueries(splitQueries);
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Returns the requisite siblings of `node`, but filters any non-requisite
|
|
33
|
-
* children of those siblings.
|
|
34
|
-
*/
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
function getRequisiteSiblings(node, parent) {
|
|
38
|
-
// Get the requisite siblings.
|
|
39
|
-
var siblings = parent.getChildren().filter(function (child) {
|
|
40
|
-
return child !== node && child instanceof require("./RelayQuery").Field && child.isRequisite();
|
|
41
|
-
}); // Filter the non-requisite children from those siblings.
|
|
42
|
-
|
|
43
|
-
return siblings.map(function (sibling) {
|
|
44
|
-
var children = sibling.getChildren().filter(function (child) {
|
|
45
|
-
return child instanceof require("./RelayQuery").Field && child.isRequisite();
|
|
46
|
-
});
|
|
47
|
-
var clone = sibling.clone(children);
|
|
48
|
-
!clone ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'splitDeferredRelayQueries(): Unexpected non-scalar, requisite field.') : require("fbjs/lib/invariant")(false) : void 0;
|
|
49
|
-
return clone;
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Traverse the parent chain of `node` wrapping it at each level until it is
|
|
54
|
-
* either:
|
|
55
|
-
*
|
|
56
|
-
* - wrapped in a RelayQuery.Root node
|
|
57
|
-
* - wrapped in a non-root node that can be split off in a "ref query" (ie. a
|
|
58
|
-
* root call with a ref param that references another query)
|
|
59
|
-
*
|
|
60
|
-
* Additionally ensures that any requisite sibling fields are embedded in each
|
|
61
|
-
* layer of the wrapper.
|
|
62
|
-
*/
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
function wrapNode(node, nodePath) {
|
|
66
|
-
for (var ii = nodePath.length - 1; ii >= 0; ii--) {
|
|
67
|
-
var parent = nodePath[ii];
|
|
68
|
-
|
|
69
|
-
if (parent instanceof require("./RelayQuery").Field && parent.getInferredRootCallName()) {
|
|
70
|
-
// We can make a "ref query" at this point, so stop wrapping.
|
|
71
|
-
return new (require("./RelayRefQueryDescriptor"))(node, nodePath.slice(0, ii + 1));
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
var siblings = getRequisiteSiblings(node, parent);
|
|
75
|
-
var children = [node].concat(siblings); // Cast here because we know that `clone` will never return `null` (because
|
|
76
|
-
// we always give it at least one child).
|
|
77
|
-
|
|
78
|
-
node = parent.clone(children);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
!(node instanceof require("./RelayQuery").Root) ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'splitDeferredRelayQueries(): Cannot build query without a root node.') : require("fbjs/lib/invariant")(false) : void 0;
|
|
82
|
-
var identifyingArg = node.getIdentifyingArg();
|
|
83
|
-
var identifyingArgName = identifyingArg && identifyingArg.name || null;
|
|
84
|
-
var identifyingArgValue = identifyingArg && identifyingArg.value || null;
|
|
85
|
-
|
|
86
|
-
var identifyingArgType = identifyingArg && identifyingArg.type || require("./RelayNodeInterface").ID_TYPE;
|
|
87
|
-
|
|
88
|
-
var metadata = {
|
|
89
|
-
identifyingArgName: identifyingArgName,
|
|
90
|
-
identifyingArgType: identifyingArgType,
|
|
91
|
-
isAbstract: true,
|
|
92
|
-
isDeferred: true,
|
|
93
|
-
isPlural: false
|
|
94
|
-
};
|
|
95
|
-
return require("./RelayQuery").Root.build(node.getName(), node.getFieldName(), identifyingArgValue, node.getChildren(), metadata, node.getType());
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Returns `true` if `node` is considered "empty", which means that it contains
|
|
99
|
-
* no non-generated fields, and no ref query dependencies.
|
|
100
|
-
*/
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
function isEmpty(node) {
|
|
104
|
-
if (!node.canHaveSubselections()) {
|
|
105
|
-
return node.isGenerated() && !node.isRefQueryDependency();
|
|
106
|
-
} else {
|
|
107
|
-
return node.getChildren().every(isEmpty);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Mutates and returns a nested `SplitQueries` structure, updating any deferred
|
|
112
|
-
* "ref queries" to actually reference their contexts.
|
|
113
|
-
*/
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
function buildQueries(splitQueries) {
|
|
117
|
-
if (splitQueries.required && isEmpty(splitQueries.required)) {
|
|
118
|
-
splitQueries.required = null;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
splitQueries.deferred = splitQueries.deferred.map(function (nestedSplitQueries) {
|
|
122
|
-
var descriptor = nestedSplitQueries.__refQuery__;
|
|
123
|
-
|
|
124
|
-
if (descriptor) {
|
|
125
|
-
// Wrap the ref query node with a reference to the required query that is
|
|
126
|
-
// its context.
|
|
127
|
-
var context = splitQueries.required;
|
|
128
|
-
|
|
129
|
-
if (!context) {
|
|
130
|
-
// Traverse upwards looking for context.
|
|
131
|
-
var parentSplitQueries = splitQueries;
|
|
132
|
-
|
|
133
|
-
while (parentSplitQueries.__parent__) {
|
|
134
|
-
context = parentSplitQueries.__parent__.required;
|
|
135
|
-
|
|
136
|
-
if (context) {
|
|
137
|
-
break;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
parentSplitQueries = parentSplitQueries.__parent__;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
!context ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'splitDeferredRelayQueries(): Expected a context root query.') : require("fbjs/lib/invariant")(false) : void 0;
|
|
145
|
-
nestedSplitQueries.required = createRefQuery(descriptor, context);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
return buildQueries(nestedSplitQueries);
|
|
149
|
-
});
|
|
150
|
-
return splitQueries;
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Wraps `descriptor` in a new top-level ref query.
|
|
154
|
-
*/
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
function createRefQuery(descriptor, context) {
|
|
158
|
-
var node = descriptor.node;
|
|
159
|
-
!(node instanceof require("./RelayQuery").Field || node instanceof require("./RelayQuery").Fragment) ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'splitDeferredRelayQueries(): Ref query requires a field or fragment.') : require("fbjs/lib/invariant")(false) : void 0; // Build up JSONPath.
|
|
160
|
-
|
|
161
|
-
var jsonPath = ['$', '*'];
|
|
162
|
-
var parent;
|
|
163
|
-
|
|
164
|
-
for (var ii = 0; ii < descriptor.nodePath.length; ii++) {
|
|
165
|
-
parent = descriptor.nodePath[ii];
|
|
166
|
-
|
|
167
|
-
if (parent instanceof require("./RelayQuery").Field) {
|
|
168
|
-
jsonPath.push(parent.getSerializationKey());
|
|
169
|
-
|
|
170
|
-
if (parent.isPlural()) {
|
|
171
|
-
jsonPath.push('*');
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
!(jsonPath.length > 2) ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'splitDeferredRelayQueries(): Ref query requires a complete path.') : require("fbjs/lib/invariant")(false) : void 0;
|
|
177
|
-
var field = parent; // Flow
|
|
178
|
-
|
|
179
|
-
var primaryKey = field.getInferredPrimaryKey();
|
|
180
|
-
!primaryKey ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'splitDeferredRelayQueries(): Ref query requires a primary key.') : require("fbjs/lib/invariant")(false) : void 0;
|
|
181
|
-
jsonPath.push(primaryKey); // Create the wrapper root query.
|
|
182
|
-
|
|
183
|
-
var root = require("./RelayQuery").Root.build(context.getName(), require("./RelayNodeInterface").NODES, require("./QueryBuilder").createBatchCallVariable(context.getID(), jsonPath.join('.')), [node], {
|
|
184
|
-
identifyingArgName: require("./RelayNodeInterface").ID,
|
|
185
|
-
identifyingArgType: require("./RelayNodeInterface").ID_TYPE,
|
|
186
|
-
isAbstract: true,
|
|
187
|
-
isDeferred: true,
|
|
188
|
-
isPlural: false
|
|
189
|
-
}, require("./RelayNodeInterface").NODE_TYPE);
|
|
190
|
-
|
|
191
|
-
var result = root; // Flow
|
|
192
|
-
|
|
193
|
-
return result;
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* Traverses an input query, updating the passed in `SplitQueries` state object
|
|
197
|
-
* to contain a nested structure representing the required and deferred portions
|
|
198
|
-
* of the input query.
|
|
199
|
-
*/
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
var GraphQLSplitDeferredQueries =
|
|
203
|
-
/*#__PURE__*/
|
|
204
|
-
function (_RelayQueryTransform) {
|
|
205
|
-
(0, _inheritsLoose2["default"])(GraphQLSplitDeferredQueries, _RelayQueryTransform);
|
|
206
|
-
|
|
207
|
-
function GraphQLSplitDeferredQueries() {
|
|
208
|
-
return _RelayQueryTransform.apply(this, arguments) || this;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
var _proto = GraphQLSplitDeferredQueries.prototype;
|
|
212
|
-
|
|
213
|
-
_proto.visitField = function visitField(node, splitQueries) {
|
|
214
|
-
if (!node.hasDeferredDescendant()) {
|
|
215
|
-
return node;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
splitQueries.__nodePath__.push(node);
|
|
219
|
-
|
|
220
|
-
var result = this.traverse(node, splitQueries);
|
|
221
|
-
|
|
222
|
-
splitQueries.__nodePath__.pop();
|
|
223
|
-
|
|
224
|
-
if (result && node.getInferredRootCallName()) {
|
|
225
|
-
// The node is a ref query dependency; mark it as one.
|
|
226
|
-
var key = node.getInferredPrimaryKey();
|
|
227
|
-
var children = result.getChildren().map(function (child) {
|
|
228
|
-
if (child instanceof require("./RelayQuery").Field && child.getSchemaName() === key) {
|
|
229
|
-
return child.cloneAsRefQueryDependency();
|
|
230
|
-
} else {
|
|
231
|
-
return child;
|
|
232
|
-
}
|
|
233
|
-
});
|
|
234
|
-
result = result.clone(children);
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
return result;
|
|
238
|
-
};
|
|
239
|
-
|
|
240
|
-
_proto.visitFragment = function visitFragment(node, splitQueries) {
|
|
241
|
-
if (!node.getChildren().length) {
|
|
242
|
-
return null;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
if (node.isDeferred()) {
|
|
246
|
-
var nodePath = splitQueries.__nodePath__;
|
|
247
|
-
var deferred = {
|
|
248
|
-
__nodePath__: nodePath,
|
|
249
|
-
__parent__: splitQueries,
|
|
250
|
-
__refQuery__: null,
|
|
251
|
-
deferred: [],
|
|
252
|
-
required: null
|
|
253
|
-
};
|
|
254
|
-
var result = this.traverse(node, deferred);
|
|
255
|
-
|
|
256
|
-
if (result) {
|
|
257
|
-
var wrapped = wrapNode(result, nodePath);
|
|
258
|
-
|
|
259
|
-
if (wrapped instanceof require("./RelayQuery").Root) {
|
|
260
|
-
deferred.required = wrapped;
|
|
261
|
-
} else if (wrapped instanceof require("./RelayRefQueryDescriptor")) {
|
|
262
|
-
// for Flow
|
|
263
|
-
deferred.__refQuery__ = wrapped;
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
if (result || deferred.deferred.length) {
|
|
268
|
-
splitQueries.deferred.push(deferred);
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
return null;
|
|
272
|
-
} else if (node.hasDeferredDescendant()) {
|
|
273
|
-
return this.traverse(node, splitQueries);
|
|
274
|
-
} else {
|
|
275
|
-
return node;
|
|
276
|
-
}
|
|
277
|
-
};
|
|
278
|
-
|
|
279
|
-
_proto.visitRoot = function visitRoot(node, splitQueries) {
|
|
280
|
-
if (!node.hasDeferredDescendant()) {
|
|
281
|
-
splitQueries.required = node;
|
|
282
|
-
return node;
|
|
283
|
-
} else {
|
|
284
|
-
splitQueries.__nodePath__.push(node);
|
|
285
|
-
|
|
286
|
-
var result = this.traverse(node, splitQueries);
|
|
287
|
-
|
|
288
|
-
splitQueries.__nodePath__.pop();
|
|
289
|
-
|
|
290
|
-
splitQueries.required = result;
|
|
291
|
-
return result;
|
|
292
|
-
}
|
|
293
|
-
};
|
|
294
|
-
|
|
295
|
-
return GraphQLSplitDeferredQueries;
|
|
296
|
-
}(require("./RelayQueryTransform"));
|
|
297
|
-
|
|
298
|
-
module.exports = require("relay-runtime").RelayProfiler.instrument('splitDeferredRelayQueries', splitDeferredRelayQueries);
|
package/lib/stableStringify.js
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) Facebook, Inc. and its 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
|
-
*
|
|
8
|
-
* @format
|
|
9
|
-
*/
|
|
10
|
-
'use strict';
|
|
11
|
-
|
|
12
|
-
function isObject(value) {
|
|
13
|
-
return value !== null && Object.prototype.toString.call(value) === '[object Object]';
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Simple recursive stringifier that handles basic objects (does not handle
|
|
17
|
-
* corner cases such as circular references) and produces a JSON-like
|
|
18
|
-
* serialization suitable for use as a cache key or other similar internal
|
|
19
|
-
* book-keeping detail.
|
|
20
|
-
*
|
|
21
|
-
* Sample input:
|
|
22
|
-
*
|
|
23
|
-
* var object = {
|
|
24
|
-
* top2: {
|
|
25
|
-
* middle: {
|
|
26
|
-
* inner: [1, 'foo', ['bar', 2]],
|
|
27
|
-
* other: false,
|
|
28
|
-
* },
|
|
29
|
-
* },
|
|
30
|
-
* top1: [
|
|
31
|
-
* {first: true},
|
|
32
|
-
* {first: false},
|
|
33
|
-
* 'random',
|
|
34
|
-
* ],
|
|
35
|
-
* misc: true,
|
|
36
|
-
* extra: null,
|
|
37
|
-
* };
|
|
38
|
-
*
|
|
39
|
-
* Sample output (some whitespace added for clarity):
|
|
40
|
-
*
|
|
41
|
-
* {
|
|
42
|
-
* extra:null,
|
|
43
|
-
* misc:true,
|
|
44
|
-
* top1:[0:{first:true},1:{first:false},2:"random"],
|
|
45
|
-
* top2:{middle:{inner:[0:1,1:"foo",2:[0:"bar",1:2]],other:false}}
|
|
46
|
-
* }
|
|
47
|
-
*/
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
function stableStringify(input) {
|
|
51
|
-
var inputIsArray = Array.isArray(input);
|
|
52
|
-
var inputIsObject = isObject(input);
|
|
53
|
-
|
|
54
|
-
if (inputIsArray || inputIsObject) {
|
|
55
|
-
var keys = Object.keys(input);
|
|
56
|
-
|
|
57
|
-
if (keys.length) {
|
|
58
|
-
var result = [];
|
|
59
|
-
keys.sort();
|
|
60
|
-
|
|
61
|
-
for (var i = 0; i < keys.length; i++) {
|
|
62
|
-
var key = keys[i];
|
|
63
|
-
var value = input[key];
|
|
64
|
-
|
|
65
|
-
if (isObject(value) || Array.isArray(value)) {
|
|
66
|
-
value = stableStringify(value);
|
|
67
|
-
} else {
|
|
68
|
-
value = JSON.stringify(value);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
result.push(key + ':' + value);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
if (inputIsArray) {
|
|
75
|
-
return '[' + result.join(',') + ']';
|
|
76
|
-
} else {
|
|
77
|
-
return '{' + result.join(',') + '}';
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
return JSON.stringify(input);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
module.exports = stableStringify;
|