relay-runtime 0.0.0-main-2c5cac44 → 0.0.0-main-e2a58ffa

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/experimental.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Relay v0.0.0-main-2c5cac44
2
+ * Relay v0.0.0-main-e2a58ffa
3
3
  *
4
4
  * Copyright (c) Meta Platforms, Inc. and affiliates.
5
5
  *
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Relay v0.0.0-main-2c5cac44
2
+ * Relay v0.0.0-main-e2a58ffa
3
3
  *
4
4
  * Copyright (c) Meta Platforms, Inc. and affiliates.
5
5
  *
package/index.js.flow CHANGED
@@ -140,6 +140,7 @@ export type {
140
140
  OptimisticUpdateFunction,
141
141
  PluralReaderSelector,
142
142
  Props,
143
+ RecordSourceJSON,
143
144
  PublishQueue,
144
145
  ReaderSelector,
145
146
  ReadOnlyRecordProxy,
@@ -0,0 +1,129 @@
1
+ 'use strict';
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
4
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
5
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
6
+ var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
7
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
8
+ var _excluded = ["path", "locations"];
9
+ var RelayFeatureFlags = require('../util/RelayFeatureFlags');
10
+ var SELF = Symbol('$SELF');
11
+ function buildErrorTrie(errors) {
12
+ if (errors == null) {
13
+ return null;
14
+ }
15
+ if (!RelayFeatureFlags.ENABLE_FIELD_ERROR_HANDLING) {
16
+ return null;
17
+ }
18
+ var trie = new Map();
19
+ var _iterator = (0, _createForOfIteratorHelper2["default"])(errors),
20
+ _step;
21
+ try {
22
+ ERRORS: for (_iterator.s(); !(_step = _iterator.n()).done;) {
23
+ var _step$value = _step.value,
24
+ path = _step$value.path,
25
+ _ = _step$value.locations,
26
+ error = (0, _objectWithoutPropertiesLoose2["default"])(_step$value, _excluded);
27
+ if (path == null) {
28
+ continue;
29
+ }
30
+ var length = path.length;
31
+ if (length === 0) {
32
+ continue;
33
+ }
34
+ var lastIndex = length - 1;
35
+ var currentTrie = trie;
36
+ for (var index = 0; index < lastIndex; index++) {
37
+ var key = path[index];
38
+ var existingValue = currentTrie.get(key);
39
+ if (existingValue instanceof Map) {
40
+ currentTrie = existingValue;
41
+ continue;
42
+ }
43
+ var newValue = new Map();
44
+ if (Array.isArray(existingValue)) {
45
+ newValue.set(SELF, existingValue);
46
+ }
47
+ currentTrie.set(key, newValue);
48
+ currentTrie = newValue;
49
+ }
50
+ var lastKey = path[lastIndex];
51
+ var container = currentTrie.get(lastKey);
52
+ if (container instanceof Map) {
53
+ currentTrie = container;
54
+ container = currentTrie.get(lastKey);
55
+ lastKey = SELF;
56
+ }
57
+ if (Array.isArray(container)) {
58
+ container.push(error);
59
+ } else {
60
+ currentTrie.set(lastKey, [error]);
61
+ }
62
+ }
63
+ } catch (err) {
64
+ _iterator.e(err);
65
+ } finally {
66
+ _iterator.f();
67
+ }
68
+ return trie;
69
+ }
70
+ function getErrorsByKey(trie, key) {
71
+ var value = trie.get(key);
72
+ if (value == null) {
73
+ return null;
74
+ }
75
+ if (Array.isArray(value)) {
76
+ return value;
77
+ }
78
+ var errors = [];
79
+ recursivelyCopyErrorsIntoArray(value, errors);
80
+ return errors;
81
+ }
82
+ function recursivelyCopyErrorsIntoArray(trieOrSet, errors) {
83
+ var _iterator2 = (0, _createForOfIteratorHelper2["default"])(trieOrSet),
84
+ _step2;
85
+ try {
86
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
87
+ var _step2$value = _step2.value,
88
+ childKey = _step2$value[0],
89
+ value = _step2$value[1];
90
+ var oldLength = errors.length;
91
+ if (Array.isArray(value)) {
92
+ errors.push.apply(errors, (0, _toConsumableArray2["default"])(value));
93
+ } else {
94
+ recursivelyCopyErrorsIntoArray(value, errors);
95
+ }
96
+ if (childKey === SELF) {
97
+ continue;
98
+ }
99
+ var newLength = errors.length;
100
+ for (var index = oldLength; index < newLength; index++) {
101
+ var error = errors[index];
102
+ if (error.path == null) {
103
+ errors[index] = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, error), {}, {
104
+ path: [childKey]
105
+ });
106
+ } else {
107
+ error.path.unshift(childKey);
108
+ }
109
+ }
110
+ }
111
+ } catch (err) {
112
+ _iterator2.e(err);
113
+ } finally {
114
+ _iterator2.f();
115
+ }
116
+ }
117
+ function getNestedErrorTrieByKey(trie, key) {
118
+ var value = trie.get(key);
119
+ if (value instanceof Map) {
120
+ return value;
121
+ }
122
+ return null;
123
+ }
124
+ module.exports = {
125
+ SELF: SELF,
126
+ buildErrorTrie: buildErrorTrie,
127
+ getNestedErrorTrieByKey: getNestedErrorTrieByKey,
128
+ getErrorsByKey: getErrorsByKey
129
+ };
@@ -1,6 +1,9 @@
1
1
  'use strict';
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
4
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
5
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
6
+ var _toPropertyKey2 = _interopRequireDefault(require("@babel/runtime/helpers/toPropertyKey"));
4
7
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
5
8
  var deepFreeze = require('../util/deepFreeze');
6
9
  var _require = require('./ClientID'),
@@ -10,6 +13,7 @@ var _require2 = require('./experimental-live-resolvers/LiveResolverSuspenseSenti
10
13
  isSuspenseSentinel = _require2.isSuspenseSentinel;
11
14
  var _require3 = require('./RelayStoreUtils'),
12
15
  ACTOR_IDENTIFIER_KEY = _require3.ACTOR_IDENTIFIER_KEY,
16
+ ERRORS_KEY = _require3.ERRORS_KEY,
13
17
  ID_KEY = _require3.ID_KEY,
14
18
  INVALIDATED_AT_KEY = _require3.INVALIDATED_AT_KEY,
15
19
  REF_KEY = _require3.REF_KEY,
@@ -45,11 +49,20 @@ function getDataID(record) {
45
49
  return record[ID_KEY];
46
50
  }
47
51
  function getFields(record) {
52
+ if (ERRORS_KEY in record) {
53
+ return Object.keys(record).filter(function (field) {
54
+ return field !== ERRORS_KEY;
55
+ });
56
+ }
48
57
  return Object.keys(record);
49
58
  }
50
59
  function getType(record) {
51
60
  return record[TYPENAME_KEY];
52
61
  }
62
+ function getErrors(record, storageKey) {
63
+ var _record$ERRORS_KEY;
64
+ return (_record$ERRORS_KEY = record[ERRORS_KEY]) === null || _record$ERRORS_KEY === void 0 ? void 0 : _record$ERRORS_KEY[storageKey];
65
+ }
53
66
  function getValue(record, storageKey) {
54
67
  var value = record[storageKey];
55
68
  if (value && typeof value === 'object') {
@@ -88,6 +101,7 @@ function getInvalidationEpoch(record) {
88
101
  return invalidatedAt;
89
102
  }
90
103
  function update(prevRecord, nextRecord) {
104
+ var _updated2;
91
105
  if (process.env.NODE_ENV !== "production") {
92
106
  var _getType, _getType2;
93
107
  var prevID = getDataID(prevRecord);
@@ -97,16 +111,40 @@ function update(prevRecord, nextRecord) {
97
111
  var nextType = (_getType2 = getType(nextRecord)) !== null && _getType2 !== void 0 ? _getType2 : null;
98
112
  process.env.NODE_ENV !== "production" ? warning(isClientID(nextID) && nextID !== ROOT_ID || prevType === nextType, 'RelayModernRecord: Invalid record update, expected both versions of ' + 'record `%s` to have the same `%s` but got conflicting types `%s` ' + 'and `%s`. The GraphQL server likely violated the globally unique ' + 'id requirement by returning the same id for different objects.', prevID, TYPENAME_KEY, prevType, nextType) : void 0;
99
113
  }
114
+ var prevErrorsByKey = prevRecord[ERRORS_KEY];
115
+ var nextErrorsByKey = nextRecord[ERRORS_KEY];
100
116
  var updated = null;
101
- var keys = Object.keys(nextRecord);
102
- for (var ii = 0; ii < keys.length; ii++) {
103
- var key = keys[ii];
104
- if (updated || !areEqual(prevRecord[key], nextRecord[key])) {
105
- updated = updated !== null ? updated : (0, _objectSpread2["default"])({}, prevRecord);
106
- updated[key] = nextRecord[key];
117
+ if (prevErrorsByKey == null && nextErrorsByKey == null) {
118
+ var _updated;
119
+ for (var storageKey in nextRecord) {
120
+ if (updated || !areEqual(prevRecord[storageKey], nextRecord[storageKey])) {
121
+ updated = updated !== null ? updated : (0, _objectSpread2["default"])({}, prevRecord);
122
+ updated[storageKey] = nextRecord[storageKey];
123
+ }
107
124
  }
125
+ return (_updated = updated) !== null && _updated !== void 0 ? _updated : prevRecord;
108
126
  }
109
- return updated !== null ? updated : prevRecord;
127
+ for (var _storageKey2 in nextRecord) {
128
+ if (_storageKey2 === ERRORS_KEY) {
129
+ continue;
130
+ }
131
+ var nextValue = nextRecord[_storageKey2];
132
+ var nextErrors = nextErrorsByKey === null || nextErrorsByKey === void 0 ? void 0 : nextErrorsByKey[_storageKey2];
133
+ if (updated == null) {
134
+ var prevValue = prevRecord[_storageKey2];
135
+ var prevErrors = prevErrorsByKey === null || prevErrorsByKey === void 0 ? void 0 : prevErrorsByKey[_storageKey2];
136
+ if (areEqual(prevValue, nextValue) && areEqual(prevErrors, nextErrors)) {
137
+ continue;
138
+ }
139
+ updated = (0, _objectSpread2["default"])({}, prevRecord);
140
+ if (prevErrorsByKey != null) {
141
+ updated[ERRORS_KEY] = (0, _objectSpread2["default"])({}, prevErrorsByKey);
142
+ }
143
+ }
144
+ setValue(updated, _storageKey2, nextValue);
145
+ setErrors(updated, _storageKey2, nextErrors);
146
+ }
147
+ return (_updated2 = updated) !== null && _updated2 !== void 0 ? _updated2 : prevRecord;
110
148
  }
111
149
  function merge(record1, record2) {
112
150
  if (process.env.NODE_ENV !== "production") {
@@ -118,11 +156,59 @@ function merge(record1, record2) {
118
156
  var nextType = (_getType4 = getType(record2)) !== null && _getType4 !== void 0 ? _getType4 : null;
119
157
  process.env.NODE_ENV !== "production" ? warning(isClientID(nextID) && nextID !== ROOT_ID || prevType === nextType, 'RelayModernRecord: Invalid record merge, expected both versions of ' + 'record `%s` to have the same `%s` but got conflicting types `%s` ' + 'and `%s`. The GraphQL server likely violated the globally unique ' + 'id requirement by returning the same id for different objects.', prevID, TYPENAME_KEY, prevType, nextType) : void 0;
120
158
  }
121
- return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, record1), record2);
159
+ if (ERRORS_KEY in record1 || ERRORS_KEY in record2) {
160
+ var errors1 = record1[ERRORS_KEY],
161
+ fields1 = (0, _objectWithoutPropertiesLoose2["default"])(record1, [ERRORS_KEY].map(_toPropertyKey2["default"]));
162
+ var errors2 = record2[ERRORS_KEY],
163
+ fields2 = (0, _objectWithoutPropertiesLoose2["default"])(record2, [ERRORS_KEY].map(_toPropertyKey2["default"]));
164
+ var updated = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, fields1), fields2);
165
+ if (errors1 == null && errors2 == null) {
166
+ return updated;
167
+ }
168
+ var updatedErrors = {};
169
+ for (var storageKey in errors1) {
170
+ if (fields2.hasOwnProperty(storageKey)) {
171
+ continue;
172
+ }
173
+ updatedErrors[storageKey] = errors1[storageKey];
174
+ }
175
+ for (var _storageKey3 in errors2) {
176
+ updatedErrors[_storageKey3] = errors2[_storageKey3];
177
+ }
178
+ for (var _storageKey in updatedErrors) {
179
+ updated[ERRORS_KEY] = updatedErrors;
180
+ break;
181
+ }
182
+ return updated;
183
+ } else {
184
+ return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, record1), record2);
185
+ }
122
186
  }
123
187
  function freeze(record) {
124
188
  deepFreeze(record);
125
189
  }
190
+ function setErrors(record, storageKey, errors) {
191
+ if (process.env.NODE_ENV !== "production") {
192
+ process.env.NODE_ENV !== "production" ? warning(storageKey in record, 'RelayModernRecord: Invalid error update, `%s` should not be undefined.', storageKey) : void 0;
193
+ }
194
+ var errorsByStorageKey = record[ERRORS_KEY];
195
+ if (errors != null && errors.length > 0) {
196
+ if (errorsByStorageKey == null) {
197
+ record[ERRORS_KEY] = (0, _defineProperty2["default"])({}, storageKey, errors);
198
+ } else {
199
+ errorsByStorageKey[storageKey] = errors;
200
+ }
201
+ } else if (errorsByStorageKey != null) {
202
+ if (delete errorsByStorageKey[storageKey]) {
203
+ for (var otherStorageKey in errorsByStorageKey) {
204
+ if (errorsByStorageKey.hasOwnProperty(otherStorageKey)) {
205
+ return;
206
+ }
207
+ }
208
+ delete record[ERRORS_KEY];
209
+ }
210
+ }
211
+ }
126
212
  function setValue(record, storageKey, value) {
127
213
  if (process.env.NODE_ENV !== "production") {
128
214
  var prevID = getDataID(record);
@@ -199,6 +285,7 @@ module.exports = {
199
285
  freeze: freeze,
200
286
  fromObject: fromObject,
201
287
  getDataID: getDataID,
288
+ getErrors: getErrors,
202
289
  getFields: getFields,
203
290
  getInvalidationEpoch: getInvalidationEpoch,
204
291
  getLinkedRecordID: getLinkedRecordID,
@@ -207,6 +294,7 @@ module.exports = {
207
294
  getValue: getValue,
208
295
  hasValue: hasValue,
209
296
  merge: merge,
297
+ setErrors: setErrors,
210
298
  setValue: setValue,
211
299
  setLinkedRecordID: setLinkedRecordID,
212
300
  setLinkedRecordIDs: setLinkedRecordIDs,
@@ -29,29 +29,33 @@ var _require3 = require('./ClientID'),
29
29
  isClientID = _require3.isClientID;
30
30
  var _require4 = require('./RelayConcreteVariables'),
31
31
  getLocalVariables = _require4.getLocalVariables;
32
+ var _require5 = require('./RelayErrorTrie'),
33
+ buildErrorTrie = _require5.buildErrorTrie,
34
+ getErrorsByKey = _require5.getErrorsByKey,
35
+ getNestedErrorTrieByKey = _require5.getNestedErrorTrieByKey;
32
36
  var RelayModernRecord = require('./RelayModernRecord');
33
- var _require5 = require('./RelayModernSelector'),
34
- createNormalizationSelector = _require5.createNormalizationSelector;
35
- var _require6 = require('./RelayStoreUtils'),
36
- ROOT_ID = _require6.ROOT_ID,
37
- TYPENAME_KEY = _require6.TYPENAME_KEY,
38
- getArgumentValues = _require6.getArgumentValues,
39
- getHandleStorageKey = _require6.getHandleStorageKey,
40
- getModuleComponentKey = _require6.getModuleComponentKey,
41
- getModuleOperationKey = _require6.getModuleOperationKey,
42
- getStorageKey = _require6.getStorageKey;
43
- var _require7 = require('./TypeID'),
44
- TYPE_SCHEMA_TYPE = _require7.TYPE_SCHEMA_TYPE,
45
- generateTypeID = _require7.generateTypeID;
37
+ var _require6 = require('./RelayModernSelector'),
38
+ createNormalizationSelector = _require6.createNormalizationSelector;
39
+ var _require7 = require('./RelayStoreUtils'),
40
+ ROOT_ID = _require7.ROOT_ID,
41
+ TYPENAME_KEY = _require7.TYPENAME_KEY,
42
+ getArgumentValues = _require7.getArgumentValues,
43
+ getHandleStorageKey = _require7.getHandleStorageKey,
44
+ getModuleComponentKey = _require7.getModuleComponentKey,
45
+ getModuleOperationKey = _require7.getModuleOperationKey,
46
+ getStorageKey = _require7.getStorageKey;
47
+ var _require8 = require('./TypeID'),
48
+ TYPE_SCHEMA_TYPE = _require8.TYPE_SCHEMA_TYPE,
49
+ generateTypeID = _require8.generateTypeID;
46
50
  var areEqual = require("fbjs/lib/areEqual");
47
51
  var invariant = require('invariant');
48
52
  var warning = require("fbjs/lib/warning");
49
- function normalize(recordSource, selector, response, options) {
53
+ function normalize(recordSource, selector, response, options, errors) {
50
54
  var dataID = selector.dataID,
51
55
  node = selector.node,
52
56
  variables = selector.variables;
53
57
  var normalizer = new RelayResponseNormalizer(recordSource, variables, options);
54
- return normalizer.normalizeResponse(node, dataID, response);
58
+ return normalizer.normalizeResponse(node, dataID, response, errors);
55
59
  }
56
60
  var RelayResponseNormalizer = /*#__PURE__*/function () {
57
61
  function RelayResponseNormalizer(recordSource, variables, options) {
@@ -69,13 +73,14 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
69
73
  this._shouldProcessClientComponents = options.shouldProcessClientComponents;
70
74
  }
71
75
  var _proto = RelayResponseNormalizer.prototype;
72
- _proto.normalizeResponse = function normalizeResponse(node, dataID, data) {
76
+ _proto.normalizeResponse = function normalizeResponse(node, dataID, data, errors) {
73
77
  var record = this._recordSource.get(dataID);
74
78
  !record ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayResponseNormalizer(): Expected root record `%s` to exist.', dataID) : invariant(false) : void 0;
75
79
  this._assignClientAbstractTypes(node);
80
+ this._errorTrie = buildErrorTrie(errors);
76
81
  this._traverseSelections(node, record, data);
77
82
  return {
78
- errors: null,
83
+ errors: errors,
79
84
  fieldPayloads: this._handleFieldPayloads,
80
85
  incrementalPlaceholders: this._incrementalPlaceholders,
81
86
  followupPayloads: this._followupPayloads,
@@ -319,6 +324,13 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
319
324
  }
320
325
  }
321
326
  RelayModernRecord.setValue(record, storageKey, null);
327
+ var errorTrie = this._errorTrie;
328
+ if (errorTrie != null) {
329
+ var errors = getErrorsByKey(errorTrie, responseKey);
330
+ if (errors != null) {
331
+ RelayModernRecord.setErrors(record, storageKey, errors);
332
+ }
333
+ }
322
334
  return;
323
335
  }
324
336
  if (selection.kind === SCALAR_FIELD) {
@@ -328,11 +340,14 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
328
340
  RelayModernRecord.setValue(record, storageKey, fieldValue);
329
341
  } else if (selection.kind === LINKED_FIELD) {
330
342
  this._path.push(responseKey);
343
+ var oldErrorTrie = this._errorTrie;
344
+ this._errorTrie = oldErrorTrie == null ? null : getNestedErrorTrieByKey(oldErrorTrie, responseKey);
331
345
  if (selection.plural) {
332
346
  this._normalizePluralLink(selection, record, storageKey, fieldValue);
333
347
  } else {
334
348
  this._normalizeLink(selection, record, storageKey, fieldValue);
335
349
  }
350
+ this._errorTrie = oldErrorTrie;
336
351
  this._path.pop();
337
352
  } else {
338
353
  selection;
@@ -415,6 +430,8 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
415
430
  return;
416
431
  }
417
432
  _this._path.push(String(nextIndex));
433
+ var oldErrorTrie = _this._errorTrie;
434
+ _this._errorTrie = oldErrorTrie == null ? null : getNestedErrorTrieByKey(oldErrorTrie, nextIndex);
418
435
  !(typeof item === 'object') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayResponseNormalizer: Expected elements for field `%s` to be ' + 'objects.', storageKey) : invariant(false) : void 0;
419
436
  var nextID = _this._getDataId(item, (_field$concreteType3 = field.concreteType) !== null && _field$concreteType3 !== void 0 ? _field$concreteType3 : _this._getRecordType(item)) || prevIDs && prevIDs[nextIndex] || generateClientID(RelayModernRecord.getDataID(record), storageKey, nextIndex);
420
437
  !(typeof nextID === 'string') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayResponseNormalizer: Expected id of elements of field `%s` to ' + 'be strings.', storageKey) : invariant(false) : void 0;
@@ -433,6 +450,7 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
433
450
  }
434
451
  }
435
452
  _this._traverseSelections(field, nextRecord, item);
453
+ _this._errorTrie = oldErrorTrie;
436
454
  _this._path.pop();
437
455
  });
438
456
  RelayModernRecord.setLinkedRecordIDs(record, storageKey, nextIDs);
@@ -10,6 +10,7 @@ var VARIABLE = RelayConcreteNode.VARIABLE,
10
10
  LITERAL = RelayConcreteNode.LITERAL,
11
11
  OBJECT_VALUE = RelayConcreteNode.OBJECT_VALUE,
12
12
  LIST_VALUE = RelayConcreteNode.LIST_VALUE;
13
+ var ERRORS_KEY = '__errors';
13
14
  var MODULE_COMPONENT_KEY_PREFIX = '__module_component_';
14
15
  var MODULE_OPERATION_KEY_PREFIX = '__module_operation_';
15
16
  function getArgumentValue(arg, variables) {
@@ -126,6 +127,7 @@ var RelayStoreUtils = {
126
127
  FRAGMENT_POINTER_IS_WITHIN_UNMATCHED_TYPE_REFINEMENT: '$isWithinUnmatchedTypeRefinement',
127
128
  FRAGMENT_PROP_NAME_KEY: '__fragmentPropName',
128
129
  MODULE_COMPONENT_KEY: '__module_component',
130
+ ERRORS_KEY: ERRORS_KEY,
129
131
  ID_KEY: '__id',
130
132
  REF_KEY: '__ref',
131
133
  REFS_KEY: '__refs',
@@ -12,9 +12,8 @@ function normalizeResponse(response, selector, typeName, options) {
12
12
  var source = _RelayRecordSource["default"].create();
13
13
  var record = _RelayModernRecord["default"].create(selector.dataID, typeName);
14
14
  source.set(selector.dataID, record);
15
- var relayPayload = _RelayResponseNormalizer["default"].normalize(source, selector, data, options);
15
+ var relayPayload = _RelayResponseNormalizer["default"].normalize(source, selector, data, options, errors);
16
16
  return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, relayPayload), {}, {
17
- errors: errors,
18
17
  isFinal: ((_response$extensions = response.extensions) === null || _response$extensions === void 0 ? void 0 : _response$extensions.is_final) === true
19
18
  });
20
19
  }
@@ -15,10 +15,10 @@ var RelayFeatureFlags = {
15
15
  STRING_INTERN_LEVEL: 0,
16
16
  USE_REACT_CACHE: false,
17
17
  USE_REACT_CACHE_LEGACY_TIMEOUTS: true,
18
- ENABLE_QUERY_RENDERER_SET_STATE_PREVENTION: false,
19
18
  LOG_MISSING_RECORDS_IN_PROD: false,
20
19
  ENABLE_LOOSE_SUBSCRIPTION_ATTRIBUTION: false,
21
20
  ENABLE_OPERATION_TRACKER_OPTIMISTIC_UPDATES: false,
22
- ENABLE_RELAY_OPERATION_TRACKER_SUSPENSE: false
21
+ ENABLE_RELAY_OPERATION_TRACKER_SUSPENSE: false,
22
+ ENABLE_FIELD_ERROR_HANDLING: false
23
23
  };
24
24
  module.exports = RelayFeatureFlags;
@@ -34,6 +34,7 @@ export type PayloadError = interface {
34
34
  column: number,
35
35
  ...
36
36
  }>,
37
+ path?: Array<string | number>,
37
38
  // Not officially part of the spec, but used at Facebook
38
39
  severity?: 'CRITICAL' | 'ERROR' | 'WARNING',
39
40
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "relay-runtime",
3
3
  "description": "A core runtime for building GraphQL-driven applications.",
4
- "version": "0.0.0-main-2c5cac44",
4
+ "version": "0.0.0-main-e2a58ffa",
5
5
  "keywords": [
6
6
  "graphql",
7
7
  "relay"
@@ -1,4 +1,4 @@
1
1
  /**
2
- * Relay v0.0.0-main-2c5cac44
2
+ * Relay v0.0.0-main-e2a58ffa
3
3
  */
4
- !function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r(require("invariant"),require("@babel/runtime/helpers/interopRequireDefault"),require("fbjs/lib/warning"),require("@babel/runtime/helpers/objectSpread2"),require("@babel/runtime/helpers/toConsumableArray"),require("fbjs/lib/areEqual"),require("@babel/runtime/helpers/defineProperty")):"function"==typeof define&&define.amd?define(["invariant","@babel/runtime/helpers/interopRequireDefault","fbjs/lib/warning","@babel/runtime/helpers/objectSpread2","@babel/runtime/helpers/toConsumableArray","fbjs/lib/areEqual","@babel/runtime/helpers/defineProperty"],r):"object"==typeof exports?exports.ReactRelayExperimental=r(require("invariant"),require("@babel/runtime/helpers/interopRequireDefault"),require("fbjs/lib/warning"),require("@babel/runtime/helpers/objectSpread2"),require("@babel/runtime/helpers/toConsumableArray"),require("fbjs/lib/areEqual"),require("@babel/runtime/helpers/defineProperty")):e.ReactRelayExperimental=r(e.invariant,e["@babel/runtime/helpers/interopRequireDefault"],e["fbjs/lib/warning"],e["@babel/runtime/helpers/objectSpread2"],e["@babel/runtime/helpers/toConsumableArray"],e["fbjs/lib/areEqual"],e["@babel/runtime/helpers/defineProperty"])}(window,(function(e,r,t,n,a,o,l){return function(e){var r={};function t(n){if(r[n])return r[n].exports;var a=r[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,t),a.l=!0,a.exports}return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:n})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,r){if(1&r&&(e=t(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var a in e)t.d(n,a,function(r){return e[r]}.bind(null,a));return n},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},t.p="",t(t.s=6)}([function(r,t){r.exports=e},function(e,t){e.exports=r},function(e,r,t){"use strict";e.exports={ACTOR_CHANGE:"ActorChange",CONDITION:"Condition",CLIENT_COMPONENT:"ClientComponent",CLIENT_EDGE_TO_SERVER_OBJECT:"ClientEdgeToServerObject",CLIENT_EDGE_TO_CLIENT_OBJECT:"ClientEdgeToClientObject",CLIENT_EXTENSION:"ClientExtension",DEFER:"Defer",CONNECTION:"Connection",FRAGMENT:"Fragment",FRAGMENT_SPREAD:"FragmentSpread",INLINE_DATA_FRAGMENT_SPREAD:"InlineDataFragmentSpread",INLINE_DATA_FRAGMENT:"InlineDataFragment",INLINE_FRAGMENT:"InlineFragment",LINKED_FIELD:"LinkedField",LINKED_HANDLE:"LinkedHandle",LITERAL:"Literal",LIST_VALUE:"ListValue",LOCAL_ARGUMENT:"LocalArgument",MODULE_IMPORT:"ModuleImport",ALIASED_FRAGMENT_SPREAD:"AliasedFragmentSpread",ALIASED_INLINE_FRAGMENT_SPREAD:"AliasedInlineFragmentSpread",RELAY_RESOLVER:"RelayResolver",RELAY_LIVE_RESOLVER:"RelayLiveResolver",REQUIRED_FIELD:"RequiredField",OBJECT_VALUE:"ObjectValue",OPERATION:"Operation",REQUEST:"Request",ROOT_ARGUMENT:"RootArgument",SCALAR_FIELD:"ScalarField",SCALAR_HANDLE:"ScalarHandle",SPLIT_OPERATION:"SplitOperation",STREAM:"Stream",TYPE_DISCRIMINATOR:"TypeDiscriminator",UPDATABLE_QUERY:"UpdatableQuery",VARIABLE:"Variable"}},function(e,r){e.exports=t},function(e,r){e.exports=n},function(e,r,t){"use strict";var n=(0,t(1).default)(t(12)),a=t(13),o=t(2),l=t(15),i=t(0),u=o.VARIABLE,s=o.LITERAL,f=o.OBJECT_VALUE,c=o.LIST_VALUE;function d(e,r){if(e.kind===u)return function(e,r){return r.hasOwnProperty(e)||i(!1,"getVariableValue(): Undefined variable `%s`.",e),l(r[e])}(e.variableName,r);if(e.kind===s)return e.value;if(e.kind===f){var t={};return e.fields.forEach((function(e){t[e.name]=d(e,r)})),t}if(e.kind===c){var n=[];return e.items.forEach((function(e){null!=e&&n.push(d(e,r))})),n}}function p(e,r,t){var n={};return 1==t&&(n[g.FRAGMENT_POINTER_IS_WITHIN_UNMATCHED_TYPE_REFINEMENT]=!0),e&&e.forEach((function(e){n[e.name]=d(e,r)})),n}function E(e,r){if(!r)return e;var t=[];for(var n in r)if(r.hasOwnProperty(n)){var a,o=r[n];if(null!=o)t.push(n+":"+(null!==(a=JSON.stringify(o))&&void 0!==a?a:"undefined"))}return 0===t.length?e:e+"(".concat(t.join(","),")")}var g={ACTOR_IDENTIFIER_KEY:"__actorIdentifier",CLIENT_EDGE_TRAVERSAL_PATH:"__clientEdgeTraversalPath",FRAGMENTS_KEY:"__fragments",FRAGMENT_OWNER_KEY:"__fragmentOwner",FRAGMENT_POINTER_IS_WITHIN_UNMATCHED_TYPE_REFINEMENT:"$isWithinUnmatchedTypeRefinement",FRAGMENT_PROP_NAME_KEY:"__fragmentPropName",MODULE_COMPONENT_KEY:"__module_component",ID_KEY:"__id",REF_KEY:"__ref",REFS_KEY:"__refs",ROOT_ID:"client:root",ROOT_TYPE:"__Root",TYPENAME_KEY:"__typename",INVALIDATED_AT_KEY:"__invalidated_at",RELAY_RESOLVER_VALUE_KEY:"__resolverValue",RELAY_RESOLVER_INVALIDATION_KEY:"__resolverValueMayBeInvalid",RELAY_RESOLVER_SNAPSHOT_KEY:"__resolverSnapshot",RELAY_RESOLVER_ERROR_KEY:"__resolverError",RELAY_RESOLVER_OUTPUT_TYPE_RECORD_IDS:"__resolverOutputTypeRecordIDs",formatStorageKey:E,getArgumentValue:d,getArgumentValues:p,getHandleStorageKey:function(e,r){var t=e.dynamicKey,o=e.handle,l=e.key,i=e.name,u=e.args,s=e.filters,f=a(o,l,i),c=null;return u&&s&&0!==u.length&&0!==s.length&&(c=u.filter((function(e){return s.indexOf(e.name)>-1}))),t&&(c=null!=c?[t].concat((0,n.default)(c)):[t]),null===c?f:E(f,p(c,r))},getStorageKey:function(e,r){if(e.storageKey)return e.storageKey;var t=function(e){if("RelayResolver"===e.kind||"RelayLiveResolver"===e.kind){var r,t;return null==e.args?null===(t=e.fragment)||void 0===t?void 0:t.args:null==(null===(r=e.fragment)||void 0===r?void 0:r.args)?e.args:e.args.concat(e.fragment.args)}return void 0===e.args?void 0:e.args}(e),n=e.name;return t&&0!==t.length?E(n,p(t,r)):n},getStableStorageKey:function(e,r){return E(e,l(r))},getModuleComponentKey:function(e){return"".concat("__module_component_").concat(e)},getModuleOperationKey:function(e){return"".concat("__module_operation_").concat(e)}};e.exports=g},function(e,r,t){"use strict";var n=t(7),a=t(17),o=a.weakObjectWrapper,l=a.weakObjectWrapperLive;e.exports={resolverDataInjector:n,weakObjectWrapper:o,weakObjectWrapperLive:l}},function(e,r,t){"use strict";var n=t(8).readFragment,a=t(0);e.exports=function(e,r,t,o){var l=r;return function(r,i){var u=n(e,r);if(null==t)return l(u,i);if(null==u){if(!0!==o)return l(null,i);a(!1,"Expected required resolver field `%s` in fragment `%s` to be present. But resolvers fragment data is null/undefined.",t,e.name)}if(t in u)return!0===o&&null==u[t]&&a(!1,"Expected required resolver field `%s` in fragment `%s` to be non-null.",t,e.name),l(u[t],i);a(!1,"Missing field `%s` in fragment `%s` in resolver response.",t,e.name)}}},function(e,r,t){"use strict";var n=t(9).getFragment,a=t(10).getSelector,o=t(0),l=[];var i={};e.exports={readFragment:function(e,r){if(!l.length)throw new Error("readFragment should be called only from within a Relay Resolver function.");var t=l[l.length-1],u=n(e),s=a(u,r);null==s&&o(!1,"Expected a selector for the fragment of the resolver ".concat(u.name,", but got null.")),"SingularReaderSelector"!==s.kind&&o(!1,"Expected a singular reader selector for the fragment of the resolver ".concat(u.name,", but it was plural."));var f=t.getDataForResolverFragment(s,r),c=f.data;if(f.isMissingData)throw i;return c},withResolverContext:function(e,r){l.push(e);try{return r()}finally{l.pop()}},RESOLVER_FRAGMENT_MISSING_DATA_SENTINEL:i}},function(e,r,t){"use strict";var n=t(2),a=t(0),o=t(3);function l(e){var r=e;return"function"==typeof r?(r=r(),o(!1,"RelayGraphQLTag: node `%s` unexpectedly wrapped in a function.","Fragment"===r.kind?r.name:r.operation.name)):r.default&&(r=r.default),r}function i(e){var r=l(e);return"object"==typeof r&&null!==r&&r.kind===n.FRAGMENT}function u(e){var r=l(e);return"object"==typeof r&&null!==r&&r.kind===n.REQUEST}function s(e){var r=l(e);return"object"==typeof r&&null!==r&&r.kind===n.UPDATABLE_QUERY}function f(e){var r=l(e);return"object"==typeof r&&null!==r&&r.kind===n.INLINE_DATA_FRAGMENT}function c(e){var r=l(e);return i(r)||a(!1,"GraphQLTag: Expected a fragment, got `%s`.",JSON.stringify(r)),r}e.exports={getFragment:c,getNode:l,getPaginationFragment:function(e){var r,t=c(e),n=null===(r=t.metadata)||void 0===r?void 0:r.refetch,a=null==n?void 0:n.connection;return null===n||"object"!=typeof n||null===a||"object"!=typeof a?null:t},getRefetchableFragment:function(e){var r,t=c(e),n=null===(r=t.metadata)||void 0===r?void 0:r.refetch;return null===n||"object"!=typeof n?null:t},getRequest:function(e){var r=l(e);return u(r)||a(!1,"GraphQLTag: Expected a request, got `%s`.",JSON.stringify(r)),r},getUpdatableQuery:function(e){var r=l(e);return s(r)||a(!1,"GraphQLTag: Expected a request, got `%s`.",JSON.stringify(r)),r},getInlineDataFragment:function(e){var r=l(e);return f(r)||a(!1,"GraphQLTag: Expected an inline data fragment, got `%s`.",JSON.stringify(r)),r},graphql:function(e){a(!1,"graphql: Unexpected invocation at runtime. Either the Babel transform was not set up, or it failed to identify this call site. Make sure it is being used verbatim as `graphql`. Note also that there cannot be a space between graphql and the backtick that follows.")},isFragment:i,isRequest:u,isUpdatableQuery:s,isInlineDataFragment:f}},function(e,r,t){"use strict";var n=t(11).getFragmentVariables,a=t(5),o=a.CLIENT_EDGE_TRAVERSAL_PATH,l=a.FRAGMENT_OWNER_KEY,i=a.FRAGMENT_POINTER_IS_WITHIN_UNMATCHED_TYPE_REFINEMENT,u=a.FRAGMENTS_KEY,s=a.ID_KEY,f=t(16),c=t(0),d=t(3);function p(e,r){("object"!=typeof r||null===r||Array.isArray(r))&&c(!1,"RelayModernSelector: Expected value for fragment `%s` to be an object, got `%s`.",e.name,JSON.stringify(r));var t=r[s],a=r[u],f=r[l],p=r[o];if("string"==typeof t&&"object"==typeof a&&null!==a&&"object"==typeof a[e.name]&&null!==a[e.name]&&"object"==typeof f&&null!==f&&(null==p||Array.isArray(p))){var E=f,g=p,m=a[e.name];return A(e,t,n(e,E.variables,m),E,!0===m[i],g)}var _=JSON.stringify(r);return _.length>499&&(_=_.substr(0,498)+"…"),d(!1,"RelayModernSelector: Expected object to contain data for fragment `%s`, got `%s`. Make sure that the parent operation/fragment included fragment `...%s` without `@relay(mask: false)`.",e.name,_,e.name),null}function E(e,r){var t=null;return r.forEach((function(r,n){var a=null!=r?p(e,r):null;null!=a&&(t=t||[]).push(a)})),null==t?null:{kind:"PluralReaderSelector",selectors:t}}function g(e,r){return null==r?r:e.metadata&&!0===e.metadata.plural?(Array.isArray(r)||c(!1,"RelayModernSelector: Expected value for fragment `%s` to be an array, got `%s`. Remove `@relay(plural: true)` from fragment `%s` to allow the prop to be an object.",e.name,JSON.stringify(r),e.name),E(e,r)):(Array.isArray(r)&&c(!1,"RelayModernSelector: Expected value for fragment `%s` to be an object, got `%s`. Add `@relay(plural: true)` to fragment `%s` to allow the prop to be an array of items.",e.name,JSON.stringify(r),e.name),p(e,r))}function m(e,r){return null==r?r:e.metadata&&!0===e.metadata.plural?(Array.isArray(r)||c(!1,"RelayModernSelector: Expected value for fragment `%s` to be an array, got `%s`. Remove `@relay(plural: true)` from fragment `%s` to allow the prop to be an object.",e.name,JSON.stringify(r),e.name),function(e,r){var t=null;return r.forEach((function(r){var n=null!=r?_(e,r):null;null!=n&&(t=t||[]).push(n)})),t}(e,r)):(Array.isArray(r)&&c(!1,"RelayModernFragmentSpecResolver: Expected value for fragment `%s` to be an object, got `%s`. Add `@relay(plural: true)` to fragment `%s` to allow the prop to be an array of items.",e.name,JSON.stringify(r),e.name),_(e,r))}function _(e,r){("object"!=typeof r||null===r||Array.isArray(r))&&c(!1,"RelayModernSelector: Expected value for fragment `%s` to be an object, got `%s`.",e.name,JSON.stringify(r));var t=r[s];return"string"==typeof t?t:(d(!1,"RelayModernSelector: Expected object to contain data for fragment `%s`, got `%s`. Make sure that the parent operation/fragment included fragment `...%s` without `@relay(mask: false)`, or `null` is passed as the fragment reference for `%s` if it's conditonally included and the condition isn't met.",e.name,JSON.stringify(r),e.name,e.name),null)}function b(e,r){var t;return null==r?{}:!0===(null===(t=e.metadata)||void 0===t?void 0:t.plural)?(Array.isArray(r)||c(!1,"RelayModernSelector: Expected value for fragment `%s` to be an array, got `%s`. Remove `@relay(plural: true)` from fragment `%s` to allow the prop to be an object.",e.name,JSON.stringify(r),e.name),y(e,r)):(Array.isArray(r)&&c(!1,"RelayModernFragmentSpecResolver: Expected value for fragment `%s` to be an object, got `%s`. Add `@relay(plural: true)` to fragment `%s` to allow the prop to be an array of items.",e.name,JSON.stringify(r),e.name),v(e,r)||{})}function v(e,r){var t=p(e,r);return t?t.variables:null}function y(e,r){var t={};return r.forEach((function(r,n){if(null!=r){var a=v(e,r);null!=a&&Object.assign(t,a)}})),t}function R(e,r){return e.owner===r.owner&&e.dataID===r.dataID&&e.node===r.node&&f(e.variables,r.variables)}function A(e,r,t,n){var a=arguments.length>4&&void 0!==arguments[4]&&arguments[4],o=arguments.length>5?arguments[5]:void 0;return{kind:"SingularReaderSelector",dataID:r,isWithinUnmatchedTypeRefinement:a,clientEdgeTraversalPath:null!=o?o:null,node:e,variables:t,owner:n}}e.exports={areEqualSelectors:function(e,r){return e===r||(null==e?null==r:null==r?null==e:"SingularReaderSelector"===e.kind&&"SingularReaderSelector"===r.kind?R(e,r):"PluralReaderSelector"===e.kind&&"PluralReaderSelector"===r.kind&&(e.selectors.length===r.selectors.length&&e.selectors.every((function(e,t){return R(e,r.selectors[t])}))))},createReaderSelector:A,createNormalizationSelector:function(e,r,t){return{dataID:r,node:e,variables:t}},getDataIDsFromFragment:m,getDataIDsFromObject:function(e,r){var t={};for(var n in e)if(e.hasOwnProperty(n)){var a=e[n],o=r[n];t[n]=m(a,o)}return t},getSingularSelector:p,getPluralSelector:E,getSelector:g,getSelectorsFromObject:function(e,r){var t={};for(var n in e)if(e.hasOwnProperty(n)){var a=e[n],o=r[n];t[n]=g(a,o)}return t},getVariablesFromSingularFragment:v,getVariablesFromPluralFragment:y,getVariablesFromFragment:b,getVariablesFromObject:function(e,r){var t={};for(var n in e)if(e.hasOwnProperty(n)){var a=b(e[n],r[n]);Object.assign(t,a)}return t}}},function(e,r,t){"use strict";var n=(0,t(1).default)(t(4)),a=t(5).getArgumentValues,o=t(0);e.exports={getLocalVariables:function(e,r,t){if(null==r)return e;var o=(0,n.default)({},e),l=t?a(t,e):{};return r.forEach((function(e){var r,t=null!==(r=l[e.name])&&void 0!==r?r:e.defaultValue;o[e.name]=t})),o},getFragmentVariables:function(e,r,t){return null==e.argumentDefinitions?t:(e.argumentDefinitions.forEach((function(l){if(!t.hasOwnProperty(l.name))switch(a=a||(0,n.default)({},t),l.kind){case"LocalArgument":a[l.name]=l.defaultValue;break;case"RootArgument":if(!r.hasOwnProperty(l.name)){a[l.name]=void 0;break}a[l.name]=r[l.name];break;default:o(!1,"RelayConcreteVariables: Unexpected node kind `%s` in fragment `%s`.",l.kind,e.name)}})),a||t);var a},getOperationVariables:function(e,r,t){var n={};return e.argumentDefinitions.forEach((function(e){var r=e.defaultValue;null!=t[e.name]&&(r=t[e.name]),n[e.name]=r})),null!=r&&Object.keys(r).forEach((function(e){n[e]=r[e].get()})),n}}},function(e,r){e.exports=a},function(e,r,t){"use strict";var n=t(14).DEFAULT_HANDLE_KEY,a=t(0);e.exports=function(e,r,t){return r&&r!==n?"__".concat(r,"_").concat(e):(null==t&&a(!1,"getRelayHandleKey: Expected either `fieldName` or `key` in `handle` to be provided"),"__".concat(t,"_").concat(e))}},function(e,r,t){"use strict";e.exports={DEFAULT_HANDLE_KEY:""}},function(e,r,t){"use strict";e.exports=function e(r){if(!r||"object"!=typeof r)return r;if(Array.isArray(r))return r.map(e);for(var t=Object.keys(r).sort(),n={},a=0;a<t.length;a++)n[t[a]]=e(r[t[a]]);return n}},function(e,r){e.exports=o},function(e,r,t){"use strict";var n=t(1).default,a=n(t(18)),o=n(t(4)),l=t(19),i=t(20).isSuspenseSentinel,u=t(0);function s(e,r,t){return function(){for(var n=arguments.length,o=new Array(n),l=0;l<n;l++)o[l]=arguments[l];var s=e.apply(null,o);return null==s||i(s)?s:t?(Array.isArray(s)||u(!1,"Resolver is expected to return a plural value."),s.map((function(e){return(0,a.default)({},r,e)}))):(0,a.default)({},r,s)}}e.exports={weakObjectWrapperLive:function(e,r,t){return function(){for(var n=arguments.length,a=new Array(n),i=0;i<n;i++)a[i]=arguments[i];var f=e.apply(null,a);return l(f)||u(!1,"Resolver is expected to return a LiveState value."),(0,o.default)((0,o.default)({},f),{},{read:s((function(){return f.read()}),r,t)})}},weakObjectWrapper:s}},function(e,r){e.exports=l},function(e,r,t){"use strict";e.exports=function(e){return null!=e&&"object"==typeof e&&"function"==typeof e.read&&"function"==typeof e.subscribe}},function(e,r,t){"use strict";var n=Object.freeze({__LIVE_RESOLVER_SUSPENSE_SENTINEL:!0});e.exports={isSuspenseSentinel:function(e){return e===n},suspenseSentinel:function(){return n}}}])}));
4
+ !function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r(require("invariant"),require("@babel/runtime/helpers/interopRequireDefault"),require("fbjs/lib/warning"),require("@babel/runtime/helpers/objectSpread2"),require("@babel/runtime/helpers/toConsumableArray"),require("fbjs/lib/areEqual"),require("@babel/runtime/helpers/defineProperty")):"function"==typeof define&&define.amd?define(["invariant","@babel/runtime/helpers/interopRequireDefault","fbjs/lib/warning","@babel/runtime/helpers/objectSpread2","@babel/runtime/helpers/toConsumableArray","fbjs/lib/areEqual","@babel/runtime/helpers/defineProperty"],r):"object"==typeof exports?exports.ReactRelayExperimental=r(require("invariant"),require("@babel/runtime/helpers/interopRequireDefault"),require("fbjs/lib/warning"),require("@babel/runtime/helpers/objectSpread2"),require("@babel/runtime/helpers/toConsumableArray"),require("fbjs/lib/areEqual"),require("@babel/runtime/helpers/defineProperty")):e.ReactRelayExperimental=r(e.invariant,e["@babel/runtime/helpers/interopRequireDefault"],e["fbjs/lib/warning"],e["@babel/runtime/helpers/objectSpread2"],e["@babel/runtime/helpers/toConsumableArray"],e["fbjs/lib/areEqual"],e["@babel/runtime/helpers/defineProperty"])}(window,(function(e,r,t,n,a,o,l){return function(e){var r={};function t(n){if(r[n])return r[n].exports;var a=r[n]={i:n,l:!1,exports:{}};return e[n].call(a.exports,a,a.exports,t),a.l=!0,a.exports}return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:n})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,r){if(1&r&&(e=t(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var a in e)t.d(n,a,function(r){return e[r]}.bind(null,a));return n},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},t.p="",t(t.s=6)}([function(r,t){r.exports=e},function(e,t){e.exports=r},function(e,r,t){"use strict";e.exports={ACTOR_CHANGE:"ActorChange",CONDITION:"Condition",CLIENT_COMPONENT:"ClientComponent",CLIENT_EDGE_TO_SERVER_OBJECT:"ClientEdgeToServerObject",CLIENT_EDGE_TO_CLIENT_OBJECT:"ClientEdgeToClientObject",CLIENT_EXTENSION:"ClientExtension",DEFER:"Defer",CONNECTION:"Connection",FRAGMENT:"Fragment",FRAGMENT_SPREAD:"FragmentSpread",INLINE_DATA_FRAGMENT_SPREAD:"InlineDataFragmentSpread",INLINE_DATA_FRAGMENT:"InlineDataFragment",INLINE_FRAGMENT:"InlineFragment",LINKED_FIELD:"LinkedField",LINKED_HANDLE:"LinkedHandle",LITERAL:"Literal",LIST_VALUE:"ListValue",LOCAL_ARGUMENT:"LocalArgument",MODULE_IMPORT:"ModuleImport",ALIASED_FRAGMENT_SPREAD:"AliasedFragmentSpread",ALIASED_INLINE_FRAGMENT_SPREAD:"AliasedInlineFragmentSpread",RELAY_RESOLVER:"RelayResolver",RELAY_LIVE_RESOLVER:"RelayLiveResolver",REQUIRED_FIELD:"RequiredField",OBJECT_VALUE:"ObjectValue",OPERATION:"Operation",REQUEST:"Request",ROOT_ARGUMENT:"RootArgument",SCALAR_FIELD:"ScalarField",SCALAR_HANDLE:"ScalarHandle",SPLIT_OPERATION:"SplitOperation",STREAM:"Stream",TYPE_DISCRIMINATOR:"TypeDiscriminator",UPDATABLE_QUERY:"UpdatableQuery",VARIABLE:"Variable"}},function(e,r){e.exports=t},function(e,r){e.exports=n},function(e,r,t){"use strict";var n=(0,t(1).default)(t(12)),a=t(13),o=t(2),l=t(15),i=t(0),u=o.VARIABLE,s=o.LITERAL,f=o.OBJECT_VALUE,c=o.LIST_VALUE;function d(e,r){if(e.kind===u)return function(e,r){return r.hasOwnProperty(e)||i(!1,"getVariableValue(): Undefined variable `%s`.",e),l(r[e])}(e.variableName,r);if(e.kind===s)return e.value;if(e.kind===f){var t={};return e.fields.forEach((function(e){t[e.name]=d(e,r)})),t}if(e.kind===c){var n=[];return e.items.forEach((function(e){null!=e&&n.push(d(e,r))})),n}}function E(e,r,t){var n={};return 1==t&&(n[g.FRAGMENT_POINTER_IS_WITHIN_UNMATCHED_TYPE_REFINEMENT]=!0),e&&e.forEach((function(e){n[e.name]=d(e,r)})),n}function p(e,r){if(!r)return e;var t=[];for(var n in r)if(r.hasOwnProperty(n)){var a,o=r[n];if(null!=o)t.push(n+":"+(null!==(a=JSON.stringify(o))&&void 0!==a?a:"undefined"))}return 0===t.length?e:e+"(".concat(t.join(","),")")}var g={ACTOR_IDENTIFIER_KEY:"__actorIdentifier",CLIENT_EDGE_TRAVERSAL_PATH:"__clientEdgeTraversalPath",FRAGMENTS_KEY:"__fragments",FRAGMENT_OWNER_KEY:"__fragmentOwner",FRAGMENT_POINTER_IS_WITHIN_UNMATCHED_TYPE_REFINEMENT:"$isWithinUnmatchedTypeRefinement",FRAGMENT_PROP_NAME_KEY:"__fragmentPropName",MODULE_COMPONENT_KEY:"__module_component",ERRORS_KEY:"__errors",ID_KEY:"__id",REF_KEY:"__ref",REFS_KEY:"__refs",ROOT_ID:"client:root",ROOT_TYPE:"__Root",TYPENAME_KEY:"__typename",INVALIDATED_AT_KEY:"__invalidated_at",RELAY_RESOLVER_VALUE_KEY:"__resolverValue",RELAY_RESOLVER_INVALIDATION_KEY:"__resolverValueMayBeInvalid",RELAY_RESOLVER_SNAPSHOT_KEY:"__resolverSnapshot",RELAY_RESOLVER_ERROR_KEY:"__resolverError",RELAY_RESOLVER_OUTPUT_TYPE_RECORD_IDS:"__resolverOutputTypeRecordIDs",formatStorageKey:p,getArgumentValue:d,getArgumentValues:E,getHandleStorageKey:function(e,r){var t=e.dynamicKey,o=e.handle,l=e.key,i=e.name,u=e.args,s=e.filters,f=a(o,l,i),c=null;return u&&s&&0!==u.length&&0!==s.length&&(c=u.filter((function(e){return s.indexOf(e.name)>-1}))),t&&(c=null!=c?[t].concat((0,n.default)(c)):[t]),null===c?f:p(f,E(c,r))},getStorageKey:function(e,r){if(e.storageKey)return e.storageKey;var t=function(e){if("RelayResolver"===e.kind||"RelayLiveResolver"===e.kind){var r,t;return null==e.args?null===(t=e.fragment)||void 0===t?void 0:t.args:null==(null===(r=e.fragment)||void 0===r?void 0:r.args)?e.args:e.args.concat(e.fragment.args)}return void 0===e.args?void 0:e.args}(e),n=e.name;return t&&0!==t.length?p(n,E(t,r)):n},getStableStorageKey:function(e,r){return p(e,l(r))},getModuleComponentKey:function(e){return"".concat("__module_component_").concat(e)},getModuleOperationKey:function(e){return"".concat("__module_operation_").concat(e)}};e.exports=g},function(e,r,t){"use strict";var n=t(7),a=t(17),o=a.weakObjectWrapper,l=a.weakObjectWrapperLive;e.exports={resolverDataInjector:n,weakObjectWrapper:o,weakObjectWrapperLive:l}},function(e,r,t){"use strict";var n=t(8).readFragment,a=t(0);e.exports=function(e,r,t,o){var l=r;return function(r,i){var u=n(e,r);if(null==t)return l(u,i);if(null==u){if(!0!==o)return l(null,i);a(!1,"Expected required resolver field `%s` in fragment `%s` to be present. But resolvers fragment data is null/undefined.",t,e.name)}if(t in u)return!0===o&&null==u[t]&&a(!1,"Expected required resolver field `%s` in fragment `%s` to be non-null.",t,e.name),l(u[t],i);a(!1,"Missing field `%s` in fragment `%s` in resolver response.",t,e.name)}}},function(e,r,t){"use strict";var n=t(9).getFragment,a=t(10).getSelector,o=t(0),l=[];var i={};e.exports={readFragment:function(e,r){if(!l.length)throw new Error("readFragment should be called only from within a Relay Resolver function.");var t=l[l.length-1],u=n(e),s=a(u,r);null==s&&o(!1,"Expected a selector for the fragment of the resolver ".concat(u.name,", but got null.")),"SingularReaderSelector"!==s.kind&&o(!1,"Expected a singular reader selector for the fragment of the resolver ".concat(u.name,", but it was plural."));var f=t.getDataForResolverFragment(s,r),c=f.data;if(f.isMissingData)throw i;return c},withResolverContext:function(e,r){l.push(e);try{return r()}finally{l.pop()}},RESOLVER_FRAGMENT_MISSING_DATA_SENTINEL:i}},function(e,r,t){"use strict";var n=t(2),a=t(0),o=t(3);function l(e){var r=e;return"function"==typeof r?(r=r(),o(!1,"RelayGraphQLTag: node `%s` unexpectedly wrapped in a function.","Fragment"===r.kind?r.name:r.operation.name)):r.default&&(r=r.default),r}function i(e){var r=l(e);return"object"==typeof r&&null!==r&&r.kind===n.FRAGMENT}function u(e){var r=l(e);return"object"==typeof r&&null!==r&&r.kind===n.REQUEST}function s(e){var r=l(e);return"object"==typeof r&&null!==r&&r.kind===n.UPDATABLE_QUERY}function f(e){var r=l(e);return"object"==typeof r&&null!==r&&r.kind===n.INLINE_DATA_FRAGMENT}function c(e){var r=l(e);return i(r)||a(!1,"GraphQLTag: Expected a fragment, got `%s`.",JSON.stringify(r)),r}e.exports={getFragment:c,getNode:l,getPaginationFragment:function(e){var r,t=c(e),n=null===(r=t.metadata)||void 0===r?void 0:r.refetch,a=null==n?void 0:n.connection;return null===n||"object"!=typeof n||null===a||"object"!=typeof a?null:t},getRefetchableFragment:function(e){var r,t=c(e),n=null===(r=t.metadata)||void 0===r?void 0:r.refetch;return null===n||"object"!=typeof n?null:t},getRequest:function(e){var r=l(e);return u(r)||a(!1,"GraphQLTag: Expected a request, got `%s`.",JSON.stringify(r)),r},getUpdatableQuery:function(e){var r=l(e);return s(r)||a(!1,"GraphQLTag: Expected a request, got `%s`.",JSON.stringify(r)),r},getInlineDataFragment:function(e){var r=l(e);return f(r)||a(!1,"GraphQLTag: Expected an inline data fragment, got `%s`.",JSON.stringify(r)),r},graphql:function(e){a(!1,"graphql: Unexpected invocation at runtime. Either the Babel transform was not set up, or it failed to identify this call site. Make sure it is being used verbatim as `graphql`. Note also that there cannot be a space between graphql and the backtick that follows.")},isFragment:i,isRequest:u,isUpdatableQuery:s,isInlineDataFragment:f}},function(e,r,t){"use strict";var n=t(11).getFragmentVariables,a=t(5),o=a.CLIENT_EDGE_TRAVERSAL_PATH,l=a.FRAGMENT_OWNER_KEY,i=a.FRAGMENT_POINTER_IS_WITHIN_UNMATCHED_TYPE_REFINEMENT,u=a.FRAGMENTS_KEY,s=a.ID_KEY,f=t(16),c=t(0),d=t(3);function E(e,r){("object"!=typeof r||null===r||Array.isArray(r))&&c(!1,"RelayModernSelector: Expected value for fragment `%s` to be an object, got `%s`.",e.name,JSON.stringify(r));var t=r[s],a=r[u],f=r[l],E=r[o];if("string"==typeof t&&"object"==typeof a&&null!==a&&"object"==typeof a[e.name]&&null!==a[e.name]&&"object"==typeof f&&null!==f&&(null==E||Array.isArray(E))){var p=f,g=E,m=a[e.name];return A(e,t,n(e,p.variables,m),p,!0===m[i],g)}var _=JSON.stringify(r);return _.length>499&&(_=_.substr(0,498)+"…"),d(!1,"RelayModernSelector: Expected object to contain data for fragment `%s`, got `%s`. Make sure that the parent operation/fragment included fragment `...%s` without `@relay(mask: false)`.",e.name,_,e.name),null}function p(e,r){var t=null;return r.forEach((function(r,n){var a=null!=r?E(e,r):null;null!=a&&(t=t||[]).push(a)})),null==t?null:{kind:"PluralReaderSelector",selectors:t}}function g(e,r){return null==r?r:e.metadata&&!0===e.metadata.plural?(Array.isArray(r)||c(!1,"RelayModernSelector: Expected value for fragment `%s` to be an array, got `%s`. Remove `@relay(plural: true)` from fragment `%s` to allow the prop to be an object.",e.name,JSON.stringify(r),e.name),p(e,r)):(Array.isArray(r)&&c(!1,"RelayModernSelector: Expected value for fragment `%s` to be an object, got `%s`. Add `@relay(plural: true)` to fragment `%s` to allow the prop to be an array of items.",e.name,JSON.stringify(r),e.name),E(e,r))}function m(e,r){return null==r?r:e.metadata&&!0===e.metadata.plural?(Array.isArray(r)||c(!1,"RelayModernSelector: Expected value for fragment `%s` to be an array, got `%s`. Remove `@relay(plural: true)` from fragment `%s` to allow the prop to be an object.",e.name,JSON.stringify(r),e.name),function(e,r){var t=null;return r.forEach((function(r){var n=null!=r?_(e,r):null;null!=n&&(t=t||[]).push(n)})),t}(e,r)):(Array.isArray(r)&&c(!1,"RelayModernFragmentSpecResolver: Expected value for fragment `%s` to be an object, got `%s`. Add `@relay(plural: true)` to fragment `%s` to allow the prop to be an array of items.",e.name,JSON.stringify(r),e.name),_(e,r))}function _(e,r){("object"!=typeof r||null===r||Array.isArray(r))&&c(!1,"RelayModernSelector: Expected value for fragment `%s` to be an object, got `%s`.",e.name,JSON.stringify(r));var t=r[s];return"string"==typeof t?t:(d(!1,"RelayModernSelector: Expected object to contain data for fragment `%s`, got `%s`. Make sure that the parent operation/fragment included fragment `...%s` without `@relay(mask: false)`, or `null` is passed as the fragment reference for `%s` if it's conditonally included and the condition isn't met.",e.name,JSON.stringify(r),e.name,e.name),null)}function b(e,r){var t;return null==r?{}:!0===(null===(t=e.metadata)||void 0===t?void 0:t.plural)?(Array.isArray(r)||c(!1,"RelayModernSelector: Expected value for fragment `%s` to be an array, got `%s`. Remove `@relay(plural: true)` from fragment `%s` to allow the prop to be an object.",e.name,JSON.stringify(r),e.name),R(e,r)):(Array.isArray(r)&&c(!1,"RelayModernFragmentSpecResolver: Expected value for fragment `%s` to be an object, got `%s`. Add `@relay(plural: true)` to fragment `%s` to allow the prop to be an array of items.",e.name,JSON.stringify(r),e.name),v(e,r)||{})}function v(e,r){var t=E(e,r);return t?t.variables:null}function R(e,r){var t={};return r.forEach((function(r,n){if(null!=r){var a=v(e,r);null!=a&&Object.assign(t,a)}})),t}function y(e,r){return e.owner===r.owner&&e.dataID===r.dataID&&e.node===r.node&&f(e.variables,r.variables)}function A(e,r,t,n){var a=arguments.length>4&&void 0!==arguments[4]&&arguments[4],o=arguments.length>5?arguments[5]:void 0;return{kind:"SingularReaderSelector",dataID:r,isWithinUnmatchedTypeRefinement:a,clientEdgeTraversalPath:null!=o?o:null,node:e,variables:t,owner:n}}e.exports={areEqualSelectors:function(e,r){return e===r||(null==e?null==r:null==r?null==e:"SingularReaderSelector"===e.kind&&"SingularReaderSelector"===r.kind?y(e,r):"PluralReaderSelector"===e.kind&&"PluralReaderSelector"===r.kind&&(e.selectors.length===r.selectors.length&&e.selectors.every((function(e,t){return y(e,r.selectors[t])}))))},createReaderSelector:A,createNormalizationSelector:function(e,r,t){return{dataID:r,node:e,variables:t}},getDataIDsFromFragment:m,getDataIDsFromObject:function(e,r){var t={};for(var n in e)if(e.hasOwnProperty(n)){var a=e[n],o=r[n];t[n]=m(a,o)}return t},getSingularSelector:E,getPluralSelector:p,getSelector:g,getSelectorsFromObject:function(e,r){var t={};for(var n in e)if(e.hasOwnProperty(n)){var a=e[n],o=r[n];t[n]=g(a,o)}return t},getVariablesFromSingularFragment:v,getVariablesFromPluralFragment:R,getVariablesFromFragment:b,getVariablesFromObject:function(e,r){var t={};for(var n in e)if(e.hasOwnProperty(n)){var a=b(e[n],r[n]);Object.assign(t,a)}return t}}},function(e,r,t){"use strict";var n=(0,t(1).default)(t(4)),a=t(5).getArgumentValues,o=t(0);e.exports={getLocalVariables:function(e,r,t){if(null==r)return e;var o=(0,n.default)({},e),l=t?a(t,e):{};return r.forEach((function(e){var r,t=null!==(r=l[e.name])&&void 0!==r?r:e.defaultValue;o[e.name]=t})),o},getFragmentVariables:function(e,r,t){return null==e.argumentDefinitions?t:(e.argumentDefinitions.forEach((function(l){if(!t.hasOwnProperty(l.name))switch(a=a||(0,n.default)({},t),l.kind){case"LocalArgument":a[l.name]=l.defaultValue;break;case"RootArgument":if(!r.hasOwnProperty(l.name)){a[l.name]=void 0;break}a[l.name]=r[l.name];break;default:o(!1,"RelayConcreteVariables: Unexpected node kind `%s` in fragment `%s`.",l.kind,e.name)}})),a||t);var a},getOperationVariables:function(e,r,t){var n={};return e.argumentDefinitions.forEach((function(e){var r=e.defaultValue;null!=t[e.name]&&(r=t[e.name]),n[e.name]=r})),null!=r&&Object.keys(r).forEach((function(e){n[e]=r[e].get()})),n}}},function(e,r){e.exports=a},function(e,r,t){"use strict";var n=t(14).DEFAULT_HANDLE_KEY,a=t(0);e.exports=function(e,r,t){return r&&r!==n?"__".concat(r,"_").concat(e):(null==t&&a(!1,"getRelayHandleKey: Expected either `fieldName` or `key` in `handle` to be provided"),"__".concat(t,"_").concat(e))}},function(e,r,t){"use strict";e.exports={DEFAULT_HANDLE_KEY:""}},function(e,r,t){"use strict";e.exports=function e(r){if(!r||"object"!=typeof r)return r;if(Array.isArray(r))return r.map(e);for(var t=Object.keys(r).sort(),n={},a=0;a<t.length;a++)n[t[a]]=e(r[t[a]]);return n}},function(e,r){e.exports=o},function(e,r,t){"use strict";var n=t(1).default,a=n(t(18)),o=n(t(4)),l=t(19),i=t(20).isSuspenseSentinel,u=t(0);function s(e,r,t){return function(){for(var n=arguments.length,o=new Array(n),l=0;l<n;l++)o[l]=arguments[l];var s=e.apply(null,o);return null==s||i(s)?s:t?(Array.isArray(s)||u(!1,"Resolver is expected to return a plural value."),s.map((function(e){return(0,a.default)({},r,e)}))):(0,a.default)({},r,s)}}e.exports={weakObjectWrapperLive:function(e,r,t){return function(){for(var n=arguments.length,a=new Array(n),i=0;i<n;i++)a[i]=arguments[i];var f=e.apply(null,a);return l(f)||u(!1,"Resolver is expected to return a LiveState value."),(0,o.default)((0,o.default)({},f),{},{read:s((function(){return f.read()}),r,t)})}},weakObjectWrapper:s}},function(e,r){e.exports=l},function(e,r,t){"use strict";e.exports=function(e){return null!=e&&"object"==typeof e&&"function"==typeof e.read&&"function"==typeof e.subscribe}},function(e,r,t){"use strict";var n=Object.freeze({__LIVE_RESOLVER_SUSPENSE_SENTINEL:!0});e.exports={isSuspenseSentinel:function(e){return e===n},suspenseSentinel:function(){return n}}}])}));