react-relay 2.0.0-rc.2 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (166) hide show
  1. package/index.js +2 -2
  2. package/lib/ReactRelayContext.js +6 -3
  3. package/lib/ReactRelayFragmentContainer.js +48 -46
  4. package/lib/ReactRelayFragmentMockRenderer.js +5 -1
  5. package/lib/ReactRelayPaginationContainer.js +102 -68
  6. package/lib/ReactRelayQueryFetcher.js +54 -28
  7. package/lib/ReactRelayQueryRenderer.js +28 -20
  8. package/lib/ReactRelayRefetchContainer.js +70 -58
  9. package/lib/ReactRelayTestMocker.js +56 -43
  10. package/lib/ReactRelayTypes.js +1 -1
  11. package/lib/RelayContext.js +8 -2
  12. package/lib/assertFragmentMap.js +9 -7
  13. package/lib/buildReactRelayContainer.js +32 -23
  14. package/lib/index.js +41 -0
  15. package/lib/isRelayEnvironment.js +1 -1
  16. package/lib/isRelayVariables.js +1 -1
  17. package/lib/readContext.js +7 -4
  18. package/package.json +4 -4
  19. package/react-relay.js +2 -2
  20. package/react-relay.min.js +2 -2
  21. package/classic.js +0 -10
  22. package/compat.js +0 -10
  23. package/lib/ConcreteQuery.js +0 -10
  24. package/lib/GraphQLQueryRunner.js +0 -264
  25. package/lib/GraphQLRange.js +0 -1124
  26. package/lib/GraphQLSegment.js +0 -743
  27. package/lib/GraphQLStoreChangeEmitter.js +0 -141
  28. package/lib/GraphQLStoreQueryResolver.js +0 -288
  29. package/lib/GraphQLStoreRangeUtils.js +0 -126
  30. package/lib/QueryBuilder.js +0 -228
  31. package/lib/ReactRelayClassicExports.js +0 -29
  32. package/lib/ReactRelayCompatContainerBuilder.js +0 -175
  33. package/lib/ReactRelayCompatPublic.js +0 -28
  34. package/lib/ReactRelayContainerProfiler.js +0 -30
  35. package/lib/ReactRelayFragmentContainer-flowtest.js +0 -201
  36. package/lib/ReactRelayPaginationContainer-flowtest.js +0 -213
  37. package/lib/ReactRelayPublic.js +0 -29
  38. package/lib/ReactRelayRefetchContainer-flowtest.js +0 -191
  39. package/lib/RelayCacheProcessor.js +0 -196
  40. package/lib/RelayChangeTracker.js +0 -83
  41. package/lib/RelayClassicContainerUtils.js +0 -49
  42. package/lib/RelayClassicCore.js +0 -34
  43. package/lib/RelayClassicRecordState.js +0 -31
  44. package/lib/RelayCompatContainer.js +0 -25
  45. package/lib/RelayCompatEnvironment.js +0 -27
  46. package/lib/RelayCompatMutations.js +0 -133
  47. package/lib/RelayCompatPaginationContainer.js +0 -27
  48. package/lib/RelayCompatRefetchContainer.js +0 -27
  49. package/lib/RelayCompatTypes.js +0 -10
  50. package/lib/RelayContainer.js +0 -889
  51. package/lib/RelayContainerComparators.js +0 -75
  52. package/lib/RelayContainerProxy.js +0 -21
  53. package/lib/RelayDefaultNetworkLayer.js +0 -192
  54. package/lib/RelayEnvironment.js +0 -449
  55. package/lib/RelayEnvironmentTypes.js +0 -10
  56. package/lib/RelayFetchMode.js +0 -17
  57. package/lib/RelayFragmentPointer.js +0 -161
  58. package/lib/RelayFragmentReference.js +0 -249
  59. package/lib/RelayFragmentSpecResolver.js +0 -305
  60. package/lib/RelayGraphQLMutation.js +0 -288
  61. package/lib/RelayGraphQLTag.js +0 -42
  62. package/lib/RelayInternalTypes.js +0 -15
  63. package/lib/RelayInternals.js +0 -24
  64. package/lib/RelayMetaRoute.js +0 -35
  65. package/lib/RelayMockRenderer.js +0 -71
  66. package/lib/RelayModern-flowtest.js +0 -342
  67. package/lib/RelayModernFlowtest_badref.graphql.js +0 -10
  68. package/lib/RelayModernFlowtest_notref.graphql.js +0 -10
  69. package/lib/RelayModernFlowtest_user.graphql.js +0 -10
  70. package/lib/RelayModernFlowtest_users.graphql.js +0 -10
  71. package/lib/RelayMutation.js +0 -322
  72. package/lib/RelayMutationDebugPrinter.js +0 -47
  73. package/lib/RelayMutationQuery.js +0 -558
  74. package/lib/RelayMutationQueue.js +0 -530
  75. package/lib/RelayMutationRequest.js +0 -103
  76. package/lib/RelayMutationTracker.js +0 -113
  77. package/lib/RelayMutationTransaction.js +0 -92
  78. package/lib/RelayMutationTransactionStatus.js +0 -55
  79. package/lib/RelayNetworkDebug.js +0 -131
  80. package/lib/RelayNetworkLayer.js +0 -185
  81. package/lib/RelayNodeInterface.js +0 -104
  82. package/lib/RelayOperationDescriptor.js +0 -40
  83. package/lib/RelayOptimisticMutationUtils.js +0 -208
  84. package/lib/RelayPendingQueryTracker.js +0 -166
  85. package/lib/RelayPropTypes.js +0 -57
  86. package/lib/RelayPublic.js +0 -44
  87. package/lib/RelayQL.js +0 -128
  88. package/lib/RelayQuery.js +0 -1584
  89. package/lib/RelayQueryCaching.js +0 -33
  90. package/lib/RelayQueryConfig.js +0 -58
  91. package/lib/RelayQueryPath.js +0 -204
  92. package/lib/RelayQueryRequest.js +0 -103
  93. package/lib/RelayQueryTracker.js +0 -86
  94. package/lib/RelayQueryTransform.js +0 -91
  95. package/lib/RelayQueryVisitor.js +0 -93
  96. package/lib/RelayQueryWriter.js +0 -573
  97. package/lib/RelayReadyState.js +0 -83
  98. package/lib/RelayReadyStateRenderer.js +0 -145
  99. package/lib/RelayRecord.js +0 -75
  100. package/lib/RelayRecordStatusMap.js +0 -57
  101. package/lib/RelayRecordStore.js +0 -433
  102. package/lib/RelayRecordWriter.js +0 -601
  103. package/lib/RelayRefQueryDescriptor.js +0 -27
  104. package/lib/RelayRenderer.js +0 -268
  105. package/lib/RelayRootContainer.js +0 -125
  106. package/lib/RelayRoute.js +0 -92
  107. package/lib/RelayRouteFragment.js +0 -44
  108. package/lib/RelaySelector.js +0 -201
  109. package/lib/RelayShallowMock.js +0 -69
  110. package/lib/RelayStaticContainer.js +0 -38
  111. package/lib/RelayStore.js +0 -12
  112. package/lib/RelayStoreConstants.js +0 -20
  113. package/lib/RelayStoreData.js +0 -660
  114. package/lib/RelayTaskQueue.js +0 -189
  115. package/lib/RelayTypes.js +0 -13
  116. package/lib/RelayVariable.js +0 -32
  117. package/lib/RelayVariables.js +0 -92
  118. package/lib/buildRQL.js +0 -160
  119. package/lib/callsFromGraphQL.js +0 -74
  120. package/lib/callsToGraphQL.js +0 -34
  121. package/lib/checkRelayQueryData.js +0 -250
  122. package/lib/createRelayQuery.js +0 -17
  123. package/lib/dedent.js +0 -49
  124. package/lib/diffRelayQuery.js +0 -757
  125. package/lib/directivesToGraphQL.js +0 -39
  126. package/lib/filterRelayQuery.js +0 -29
  127. package/lib/findRelayQueryLeaves.js +0 -293
  128. package/lib/flattenRelayQuery.js +0 -121
  129. package/lib/flattenSplitRelayQueries.js +0 -44
  130. package/lib/forEachRootCallArg.js +0 -40
  131. package/lib/fromGraphQL.js +0 -48
  132. package/lib/generateClientEdgeID.js +0 -22
  133. package/lib/generateClientID.js +0 -27
  134. package/lib/generateConcreteFragmentID.js +0 -30
  135. package/lib/generateForceIndex.js +0 -24
  136. package/lib/generateRQLFieldAlias.js +0 -39
  137. package/lib/getRangeBehavior.js +0 -58
  138. package/lib/getRelayQueries.js +0 -83
  139. package/lib/intersectRelayQuery.js +0 -149
  140. package/lib/isClassicRelayContext.js +0 -20
  141. package/lib/isClassicRelayEnvironment.js +0 -20
  142. package/lib/isCompatibleRelayFragmentType.js +0 -27
  143. package/lib/isRelayContainer.js +0 -16
  144. package/lib/makeLegacyStringishComponentRef.js +0 -52
  145. package/lib/printRelayOSSQuery.js +0 -329
  146. package/lib/printRelayQuery.js +0 -26
  147. package/lib/rangeOperationToMetadataKey.js +0 -25
  148. package/lib/readRelayQueryData.js +0 -551
  149. package/lib/relayUnstableBatchedUpdates.js +0 -12
  150. package/lib/relayUnstableBatchedUpdates.native.js +0 -11
  151. package/lib/restoreRelayCacheData.js +0 -188
  152. package/lib/serializeRelayQueryCall.js +0 -42
  153. package/lib/splitDeferredRelayQueries.js +0 -298
  154. package/lib/stableStringify.js +0 -85
  155. package/lib/testEditDistance.js +0 -112
  156. package/lib/throwFailedPromise.js +0 -26
  157. package/lib/toGraphQL.js +0 -94
  158. package/lib/transformRelayQueryPayload.js +0 -145
  159. package/lib/validateMutationConfig.js +0 -117
  160. package/lib/validateRelayReadQuery.js +0 -112
  161. package/lib/writeRelayQueryPayload.js +0 -44
  162. package/lib/writeRelayUpdatePayload.js +0 -513
  163. package/react-relay-classic.js +0 -4
  164. package/react-relay-classic.min.js +0 -9
  165. package/react-relay-compat.js +0 -4
  166. package/react-relay-compat.min.js +0 -9
@@ -1,145 +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 _objectSpread2 = require("@babel/runtime/helpers/interopRequireDefault")(require("@babel/runtime/helpers/objectSpread"));
13
-
14
- var _inheritsLoose2 = require("@babel/runtime/helpers/interopRequireDefault")(require("@babel/runtime/helpers/inheritsLoose"));
15
-
16
- /**
17
- * @public
18
- *
19
- * RelayReadyStateRenderer synchronously renders a container and query config
20
- * given `readyState`. The `readyState` must be an accurate representation of
21
- * the data that currently resides in the supplied `environment`. If you need
22
- * data to be fetched in addition to rendering, please use `RelayRenderer`.
23
- *
24
- * If `readyState` is not supplied, the previously rendered `readyState` will
25
- * continue to be rendered (or null if there is no previous `readyState`).
26
- */
27
- var RelayReadyStateRenderer =
28
- /*#__PURE__*/
29
- function (_React$Component) {
30
- (0, _inheritsLoose2["default"])(RelayReadyStateRenderer, _React$Component);
31
-
32
- // TODO t16225453
33
- function RelayReadyStateRenderer(props, context) {
34
- var _this;
35
-
36
- _this = _React$Component.call(this, props, context) || this;
37
- _this._relay = {
38
- environment: props.environment,
39
- variables: props.queryConfig.params,
40
- route: props.queryConfig
41
- };
42
- _this.state = {
43
- getContainerProps: createContainerPropsFactory()
44
- };
45
- return _this;
46
- }
47
-
48
- var _proto = RelayReadyStateRenderer.prototype;
49
-
50
- _proto.UNSAFE_componentWillReceiveProps = function UNSAFE_componentWillReceiveProps(nextProps) {
51
- if (this.props.environment !== nextProps.environment || this.props.queryConfig !== nextProps.queryConfig) {
52
- this._relay = {
53
- environment: nextProps.environment,
54
- variables: nextProps.queryConfig.params,
55
- route: nextProps.queryConfig
56
- };
57
- }
58
- };
59
- /**
60
- * Avoid updating when we have fetched data but are still not ready.
61
- */
62
-
63
-
64
- _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {
65
- var prevProps = this.props;
66
-
67
- if (prevProps.Container !== nextProps.Container || prevProps.environment !== nextProps.environment || prevProps.queryConfig !== nextProps.queryConfig || prevProps.render !== nextProps.render || prevProps.retry !== nextProps.retry) {
68
- return true;
69
- }
70
-
71
- var prevReadyState = prevProps.readyState;
72
- var nextReadyState = nextProps.readyState;
73
-
74
- if (prevReadyState == null || nextReadyState == null) {
75
- return true;
76
- }
77
-
78
- if (prevReadyState.aborted !== nextReadyState.aborted || prevReadyState.done !== nextReadyState.done || prevReadyState.error !== nextReadyState.error || prevReadyState.ready !== nextReadyState.ready || prevReadyState.stale !== nextReadyState.stale) {
79
- return true;
80
- }
81
-
82
- return nextReadyState.ready;
83
- };
84
-
85
- _proto.render = function render() {
86
- var children;
87
- var shouldUpdate = false;
88
- var _this$props = this.props,
89
- readyState = _this$props.readyState,
90
- render = _this$props.render;
91
-
92
- if (readyState) {
93
- if (render) {
94
- children = render({
95
- done: readyState.done,
96
- error: readyState.error,
97
- events: readyState.events,
98
- props: readyState.ready ? this.state.getContainerProps(this.props) : null,
99
- retry: this.props.retry,
100
- stale: readyState.stale
101
- });
102
- } else if (readyState.ready) {
103
- var Container = this.props.Container;
104
- children = require("react").createElement(Container, this.state.getContainerProps(this.props));
105
- }
106
-
107
- shouldUpdate = true;
108
- }
109
-
110
- if (children === undefined) {
111
- children = null;
112
- shouldUpdate = false;
113
- }
114
-
115
- return require("react").createElement(require("./ReactRelayContext").Provider, {
116
- value: this._relay
117
- }, require("react").createElement(require("./RelayStaticContainer"), {
118
- shouldUpdate: shouldUpdate
119
- }, children));
120
- };
121
-
122
- return RelayReadyStateRenderer;
123
- }(require("react").Component);
124
-
125
- function createContainerPropsFactory() {
126
- var prevProps;
127
- var querySet;
128
- return function (nextProps) {
129
- if (!querySet || !prevProps || prevProps.Container !== nextProps.Container || prevProps.queryConfig !== nextProps.queryConfig) {
130
- querySet = require("./getRelayQueries")(nextProps.Container, nextProps.queryConfig);
131
- }
132
-
133
- var containerProps = (0, _objectSpread2["default"])({}, nextProps.queryConfig.params, require("fbjs/lib/mapObject")(querySet, function (query) {
134
- return createFragmentPointerForRoot(nextProps.environment, query);
135
- }));
136
- prevProps = nextProps;
137
- return containerProps;
138
- };
139
- }
140
-
141
- function createFragmentPointerForRoot(environment, query) {
142
- return query ? require("./RelayFragmentPointer").createForRoot(environment.getStoreData().getQueuedStore(), query) : null;
143
- }
144
-
145
- module.exports = RelayReadyStateRenderer;
@@ -1,75 +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 _objectSpread2 = require("@babel/runtime/helpers/interopRequireDefault")(require("@babel/runtime/helpers/objectSpread"));
13
-
14
- var MetadataKey = {
15
- DATA_ID: '__dataID__',
16
- FILTER_CALLS: '__filterCalls__',
17
- FORCE_INDEX: '__forceIndex__',
18
- MUTATION_IDS: '__mutationIDs__',
19
- MUTATION_STATUS: '__mutationStatus__',
20
- PATH: '__path__',
21
- RANGE: '__range__',
22
- RESOLVED_DEFERRED_FRAGMENTS: '__resolvedDeferredFragments__',
23
- RESOLVED_FRAGMENT_MAP: '__resolvedFragmentMap__',
24
- RESOLVED_FRAGMENT_MAP_GENERATION: '__resolvedFragmentMapGeneration__',
25
- STATUS: '__status__'
26
- };
27
- var metadataKeyLookup = {};
28
- Object.keys(MetadataKey).forEach(function (name) {
29
- metadataKeyLookup[MetadataKey[name]] = true;
30
- });
31
- /**
32
- * Records are plain objects with special metadata properties.
33
- */
34
-
35
- var RelayRecord = {
36
- MetadataKey: MetadataKey,
37
- create: function create(dataID) {
38
- return {
39
- __dataID__: dataID
40
- };
41
- },
42
- createWithFields: function createWithFields(dataID, fields) {
43
- return (0, _objectSpread2["default"])({
44
- __dataID__: dataID
45
- }, fields);
46
- },
47
- isRecord: function isRecord(maybeRecord) {
48
- return typeof maybeRecord === 'object' && maybeRecord != null && !Array.isArray(maybeRecord) && typeof maybeRecord.__dataID__ === 'string';
49
- },
50
- getRecord: function getRecord(maybeRecord) {
51
- if (RelayRecord.isRecord(maybeRecord)) {
52
- return maybeRecord;
53
- } else {
54
- return null;
55
- }
56
- },
57
- getDataID: function getDataID(record) {
58
- return record.__dataID__;
59
- },
60
- getDataIDForObject: function getDataIDForObject(maybeRecord) {
61
- return maybeRecord.__dataID__;
62
- },
63
-
64
- /**
65
- * Checks whether the given ID was created on the client, as opposed to an ID
66
- * that's understood by the server as well.
67
- */
68
- isClientID: function isClientID(dataID) {
69
- return dataID.indexOf('client:') === 0;
70
- },
71
- isMetadataKey: function isMetadataKey(key) {
72
- return metadataKeyLookup.hasOwnProperty(key);
73
- }
74
- };
75
- module.exports = RelayRecord;
@@ -1,57 +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
- * Record might contain data from optimistic update.
13
- */
14
-
15
- var OPTIMISTIC_MASK = 0x01;
16
- /**
17
- * The subtree of data from this record contains partial data.
18
- */
19
-
20
- var PARTIAL_MASK = 0x04;
21
-
22
- function set(status, value, mask) {
23
- status = status || 0;
24
-
25
- if (value) {
26
- return status | mask; // eslint-disable-line no-bitwise
27
- } else {
28
- return status & ~mask; // eslint-disable-line no-bitwise
29
- }
30
- }
31
-
32
- function check(status, mask) {
33
- return ((status || 0) & mask) !== 0; // eslint-disable-line no-bitwise
34
- }
35
- /**
36
- * A set of functions for modifying `__status__` on records inside of
37
- * RelayStore.
38
- */
39
-
40
-
41
- var RelayRecordStatusMap = {
42
- setOptimisticStatus: function setOptimisticStatus(status, value) {
43
- return set(status, value, OPTIMISTIC_MASK);
44
- },
45
- isOptimisticStatus: function isOptimisticStatus(status) {
46
- return check(status, OPTIMISTIC_MASK);
47
- },
48
- // Should only be used on records read out from RelayRecordStore
49
- // by `readRelayQueryData`.
50
- setPartialStatus: function setPartialStatus(status, value) {
51
- return set(status, value, PARTIAL_MASK);
52
- },
53
- isPartialStatus: function isPartialStatus(status) {
54
- return check(status, PARTIAL_MASK);
55
- }
56
- };
57
- module.exports = RelayRecordStatusMap;
@@ -1,433 +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 EMPTY = '';
13
-
14
- var FILTER_CALLS = require("./RelayRecord").MetadataKey.FILTER_CALLS,
15
- FORCE_INDEX = require("./RelayRecord").MetadataKey.FORCE_INDEX,
16
- MUTATION_IDS = require("./RelayRecord").MetadataKey.MUTATION_IDS,
17
- PATH = require("./RelayRecord").MetadataKey.PATH,
18
- RANGE = require("./RelayRecord").MetadataKey.RANGE,
19
- RESOLVED_FRAGMENT_MAP = require("./RelayRecord").MetadataKey.RESOLVED_FRAGMENT_MAP;
20
- /**
21
- * @internal
22
- *
23
- * `RelayRecordStore` is the central repository for all data fetched by the
24
- * client. Data is stored as a map from IDs to Records. Records are shapes of
25
- * data with globally unique "data IDs".
26
- */
27
-
28
-
29
- var RelayRecordStore =
30
- /*#__PURE__*/
31
- function () {
32
- function RelayRecordStore(records, rootCallMaps, nodeConnectionMap) {
33
- this._cachedRecords = records.cachedRecords;
34
- this._cachedRootCallMap = rootCallMaps && rootCallMaps.cachedRootCallMap || {};
35
- this._queuedRecords = records.queuedRecords;
36
- this._nodeConnectionMap = nodeConnectionMap || {};
37
- this._records = records.records;
38
- this._rootCallMap = rootCallMaps && rootCallMaps.rootCallMap || {};
39
- this._storage = [];
40
-
41
- if (this._queuedRecords) {
42
- this._storage.push(this._queuedRecords);
43
- }
44
-
45
- if (this._records) {
46
- this._storage.push(this._records);
47
- }
48
-
49
- if (this._cachedRecords) {
50
- this._storage.push(this._cachedRecords);
51
- }
52
- }
53
- /**
54
- * Get the data ID associated with a storage key (and optionally an
55
- * identifying argument value) for a root query.
56
- */
57
-
58
-
59
- var _proto = RelayRecordStore.prototype;
60
-
61
- _proto.getDataID = function getDataID(storageKey, identifyingArgValue) {
62
- if (require("./RelayNodeInterface").isNodeRootCall(storageKey)) {
63
- !(identifyingArgValue != null) ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayRecordStore.getDataID(): Argument to `%s()` ' + 'cannot be null or undefined.', storageKey) : require("fbjs/lib/invariant")(false) : void 0;
64
- return identifyingArgValue;
65
- }
66
-
67
- if (identifyingArgValue == null) {
68
- identifyingArgValue = EMPTY;
69
- }
70
-
71
- if (this._rootCallMap.hasOwnProperty(storageKey) && this._rootCallMap[storageKey].hasOwnProperty(identifyingArgValue)) {
72
- return this._rootCallMap[storageKey][identifyingArgValue];
73
- } else if (this._cachedRootCallMap.hasOwnProperty(storageKey)) {
74
- return this._cachedRootCallMap[storageKey][identifyingArgValue];
75
- }
76
- };
77
- /**
78
- * Returns the status of the record stored at `dataID`.
79
- */
80
-
81
-
82
- _proto.getRecordState = function getRecordState(dataID) {
83
- var record = this._getRecord(dataID);
84
-
85
- if (record === null) {
86
- return require("./RelayClassicRecordState").NONEXISTENT;
87
- } else if (record === undefined) {
88
- return require("./RelayClassicRecordState").UNKNOWN;
89
- }
90
-
91
- return require("./RelayClassicRecordState").EXISTENT;
92
- };
93
- /**
94
- * Returns the path to a non-refetchable record.
95
- */
96
-
97
-
98
- _proto.getPathToRecord = function getPathToRecord(dataID) {
99
- var path = this._getField(dataID, PATH);
100
-
101
- return path;
102
- };
103
- /**
104
- * Returns whether a given record is affected by an optimistic update.
105
- */
106
-
107
-
108
- _proto.hasOptimisticUpdate = function hasOptimisticUpdate(dataID) {
109
- var queuedRecords = this._queuedRecords;
110
- return queuedRecords ? queuedRecords.hasOwnProperty(dataID) : false;
111
- };
112
- /**
113
- * Returns a list of client mutation IDs for queued mutations whose optimistic
114
- * updates are affecting the record corresponding the given dataID. Returns
115
- * null if the record isn't affected by any optimistic updates.
116
- */
117
-
118
-
119
- _proto.getClientMutationIDs = function getClientMutationIDs(dataID) {
120
- var queuedRecords = this._queuedRecords;
121
-
122
- if (queuedRecords) {
123
- var record = queuedRecords[dataID];
124
-
125
- if (record) {
126
- return record[MUTATION_IDS];
127
- }
128
- }
129
-
130
- return null;
131
- };
132
- /**
133
- * Check whether a given record has received data for a deferred fragment.
134
- */
135
-
136
-
137
- _proto.hasFragmentData = function hasFragmentData(dataID, fragmentID) {
138
- var resolvedFragmentMap = this._getField(dataID, RESOLVED_FRAGMENT_MAP);
139
-
140
- !(typeof resolvedFragmentMap === 'object' || resolvedFragmentMap == null) ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayRecordStore.hasFragmentData(): Expected the map of ' + 'resolved deferred fragments associated with record `%s` to be null or ' + 'an object. Found a(n) `%s`.', dataID, typeof resolvedFragmentMap) : require("fbjs/lib/invariant")(false) : void 0;
141
- return !!(resolvedFragmentMap && resolvedFragmentMap[fragmentID]);
142
- };
143
-
144
- _proto.getType = function getType(dataID) {
145
- // `__typename` property is typed as `string`
146
- return this._getField(dataID, '__typename');
147
- };
148
- /**
149
- * Returns the value of the field for the given dataID.
150
- */
151
-
152
-
153
- _proto.getField = function getField(dataID, storageKey) {
154
- return this._getField(dataID, storageKey);
155
- };
156
- /**
157
- * Returns the Data ID of a linked record (eg the ID of the `address` record
158
- * in `actor{address}`).
159
- */
160
-
161
-
162
- _proto.getLinkedRecordID = function getLinkedRecordID(dataID, storageKey) {
163
- var field = this._getField(dataID, storageKey);
164
-
165
- if (field == null) {
166
- return field;
167
- }
168
-
169
- var record = require("./RelayRecord").getRecord(field);
170
-
171
- !record ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayRecordStore.getLinkedRecordID(): Expected field `%s` for record ' + '`%s` to have a linked record.', storageKey, dataID) : require("fbjs/lib/invariant")(false) : void 0;
172
- return require("./RelayRecord").getDataID(record);
173
- };
174
- /**
175
- * Returns an array of Data ID for a plural linked field (eg the actor IDs of
176
- * the `likers` in `story{likers}`).
177
- */
178
-
179
-
180
- _proto.getLinkedRecordIDs = function getLinkedRecordIDs(dataID, storageKey) {
181
- var field = this._getField(dataID, storageKey);
182
-
183
- if (field == null) {
184
- return field;
185
- }
186
-
187
- !Array.isArray(field) ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayRecordStore.getLinkedRecordIDs(): Expected field `%s` for ' + 'record `%s` to have an array of linked records.', storageKey, dataID) : require("fbjs/lib/invariant")(false) : void 0;
188
- return field.map(function (element, ii) {
189
- var record = require("./RelayRecord").getRecord(element);
190
-
191
- !record ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayRecordStore.getLinkedRecordIDs(): Expected element at index %s ' + 'in field `%s` for record `%s` to be a linked record.', ii, storageKey, dataID) : require("fbjs/lib/invariant")(false) : void 0;
192
- return require("./RelayRecord").getDataID(record);
193
- });
194
- };
195
- /**
196
- * Gets the connectionIDs for all the connections that contain the given
197
- * record as a `node`, or null if the record does not appear as a `node` in
198
- * any connection.
199
- */
200
-
201
-
202
- _proto.getConnectionIDsForRecord = function getConnectionIDsForRecord(dataID) {
203
- var connectionIDs = this._nodeConnectionMap[dataID];
204
-
205
- if (connectionIDs) {
206
- return Object.keys(connectionIDs);
207
- }
208
-
209
- return null;
210
- };
211
- /**
212
- * Gets the connectionIDs for all variations of calls for the given base
213
- * schema name (Ex: `posts.orderby(recent)` and `posts.orderby(likes)`).
214
- */
215
-
216
-
217
- _proto.getConnectionIDsForField = function getConnectionIDsForField(dataID, schemaName) {
218
- // ignore queued records because not all range fields may be present there
219
- var record = this._records[dataID];
220
-
221
- if (record == null) {
222
- return record;
223
- }
224
-
225
- var connectionIDs;
226
-
227
- require("fbjs/lib/forEachObject")(record, function (datum, key) {
228
- if (datum && getFieldNameFromKey(key) === schemaName) {
229
- // $FlowFixMe(site=www,mobile) forEachObject is only typed in www
230
- var connectionID = require("./RelayRecord").getDataIDForObject(datum);
231
-
232
- if (connectionID) {
233
- connectionIDs = connectionIDs || [];
234
- connectionIDs.push(connectionID);
235
- }
236
- }
237
- });
238
-
239
- return connectionIDs;
240
- };
241
- /**
242
- * Get the force index associated with the range at `connectionID`.
243
- */
244
-
245
-
246
- _proto.getRangeForceIndex = function getRangeForceIndex(connectionID) {
247
- var forceIndex = this._getField(connectionID, FORCE_INDEX);
248
-
249
- if (forceIndex === null) {
250
- return -1;
251
- }
252
-
253
- return forceIndex || 0;
254
- };
255
- /**
256
- * Get the condition calls that were used to fetch the given connection.
257
- * Ex: for a field `photos.orderby(recent)`, this would be
258
- * [{name: 'orderby', value: 'recent'}]
259
- */
260
-
261
-
262
- _proto.getRangeFilterCalls = function getRangeFilterCalls(connectionID) {
263
- return this._getField(connectionID, FILTER_CALLS);
264
- };
265
- /**
266
- * Returns range information for the given connection field:
267
- * - `filteredEdges`: any edges already fetched for the given `calls`.
268
- * - `diffCalls`: an array of calls describing the difference
269
- * between the given `calls` and already fetched data. Includes conditional
270
- * calls (`orderby`) and range/offset calls (`first`, `after`).
271
- * - `filterCalls`: the subset of `calls` that are condition calls
272
- * (`orderby`).
273
- */
274
-
275
-
276
- _proto.getRangeMetadata = function getRangeMetadata(connectionID, calls) {
277
- var _this = this;
278
-
279
- if (connectionID == null) {
280
- return connectionID;
281
- }
282
-
283
- var range = this._getField(connectionID, RANGE);
284
-
285
- if (range == null) {
286
- if (range === null) {
287
- process.env.NODE_ENV !== "production" ? require("fbjs/lib/warning")(false, 'RelayRecordStore.getRangeMetadata(): Expected range to exist if ' + '`edges` has been fetched.') : void 0;
288
- }
289
-
290
- return undefined;
291
- }
292
-
293
- var filterCalls = getFilterCalls(calls); // Edges can only be fetched if a range call (first/last/find) is given.
294
- // Otherwise return diffCalls/filterCalls with empty edges.
295
-
296
- if (calls.length === filterCalls.length) {
297
- return {
298
- diffCalls: calls,
299
- filterCalls: filterCalls,
300
- pageInfo: undefined,
301
- requestedEdgeIDs: [],
302
- filteredEdges: []
303
- };
304
- }
305
-
306
- var queuedRecord = this._queuedRecords ? this._queuedRecords[connectionID] : null;
307
- var rangeInfo = range.retrieveRangeInfoForQuery(calls, queuedRecord);
308
- var diffCalls = rangeInfo.diffCalls;
309
- var pageInfo = rangeInfo.pageInfo,
310
- requestedEdgeIDs = rangeInfo.requestedEdgeIDs;
311
-
312
- if (diffCalls && diffCalls.length) {
313
- diffCalls = filterCalls.concat(diffCalls);
314
- } else {
315
- diffCalls = [];
316
- }
317
-
318
- var filteredEdges;
319
-
320
- if (requestedEdgeIDs) {
321
- var _ConnectionInterface$ = require("relay-runtime").ConnectionInterface.get(),
322
- NODE = _ConnectionInterface$.NODE;
323
-
324
- filteredEdges = requestedEdgeIDs.map(function (edgeID) {
325
- return {
326
- edgeID: edgeID,
327
- nodeID: _this.getLinkedRecordID(edgeID, NODE)
328
- };
329
- }).filter(function (edge) {
330
- return _this._getRecord(edge.nodeID);
331
- });
332
- } else {
333
- filteredEdges = [];
334
- }
335
-
336
- return {
337
- diffCalls: diffCalls,
338
- filterCalls: filterCalls,
339
- pageInfo: pageInfo,
340
- requestedEdgeIDs: requestedEdgeIDs,
341
- filteredEdges: filteredEdges
342
- };
343
- };
344
- /**
345
- * Returns whether there is a range at `connectionID`.
346
- */
347
-
348
-
349
- _proto.hasRange = function hasRange(connectionID) {
350
- return !!this._getField(connectionID, RANGE);
351
- };
352
- /**
353
- * Completely removes the record identified by `dataID` from the store.
354
- * This is only used by garbage collection.
355
- */
356
-
357
-
358
- _proto.removeRecord = function removeRecord(dataID) {
359
- delete this._records[dataID];
360
-
361
- if (this._queuedRecords) {
362
- delete this._queuedRecords[dataID];
363
- }
364
-
365
- if (this._cachedRecords) {
366
- delete this._cachedRecords[dataID];
367
- }
368
-
369
- delete this._nodeConnectionMap[dataID];
370
- };
371
- /**
372
- * Gets the first version of the record from the available caches.
373
- */
374
-
375
-
376
- _proto._getRecord = function _getRecord(dataID) {
377
- if (this._queuedRecords && this._queuedRecords.hasOwnProperty(dataID)) {
378
- return this._queuedRecords[dataID];
379
- } else if (this._records.hasOwnProperty(dataID)) {
380
- return this._records[dataID];
381
- } else if (this._cachedRecords) {
382
- return this._cachedRecords[dataID];
383
- }
384
- };
385
- /**
386
- * Get the value of the field from the first version of the record for which
387
- * the field is defined, returning `null` if the record has been deleted or
388
- * `undefined` if the record has not been fetched.
389
- */
390
-
391
-
392
- _proto._getField = function _getField(dataID, storageKey) {
393
- var storage = this._storage;
394
-
395
- for (var ii = 0; ii < storage.length; ii++) {
396
- var record = storage[ii][dataID];
397
-
398
- if (record === null) {
399
- return null;
400
- } else if (record && record.hasOwnProperty(storageKey)) {
401
- return record[storageKey];
402
- }
403
- }
404
-
405
- return undefined;
406
- };
407
-
408
- return RelayRecordStore;
409
- }();
410
- /**
411
- * Filter calls to only those that specify conditions on the returned results
412
- * (ex: `orderby(TOP_STORIES)`), removing generic calls (ex: `first`, `find`).
413
- */
414
-
415
-
416
- function getFilterCalls(calls) {
417
- return calls.filter(function (call) {
418
- return !require("relay-runtime").ConnectionInterface.isConnectionCall(call);
419
- });
420
- }
421
- /**
422
- * Returns the field name based on the object key used to store the data in
423
- * nodeData. It returns the field name without any calls. For example, the
424
- * field name for 'profile_picture{size:"50"}' will be 'profile_picture'
425
- */
426
-
427
-
428
- function getFieldNameFromKey(key) {
429
- // This is based on the GraphQL spec for what constitutes a valid field name.
430
- return key.split(/(?![_A-Za-z][_0-9A-Za-z]*)/, 1)[0];
431
- }
432
-
433
- module.exports = RelayRecordStore;