relay-compiler 10.0.1 → 10.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. package/bin/relay-compiler +1347 -604
  2. package/codegen/NormalizationCodeGenerator.js.flow +12 -4
  3. package/codegen/ReaderCodeGenerator.js.flow +38 -3
  4. package/codegen/RelayFileWriter.js.flow +2 -0
  5. package/codegen/writeRelayGeneratedFile.js.flow +1 -1
  6. package/core/ASTCache.js.flow +1 -0
  7. package/core/CompilerContext.js.flow +1 -0
  8. package/core/IR.js.flow +0 -1
  9. package/core/IRPrinter.js.flow +3 -8
  10. package/core/RelayIRTransforms.js.flow +7 -0
  11. package/core/Schema.js.flow +55 -1
  12. package/index.js +1 -1
  13. package/language/javascript/FindGraphQLTags.js.flow +2 -97
  14. package/language/javascript/RelayFlowBabelFactories.js.flow +11 -15
  15. package/language/javascript/RelayFlowGenerator.js.flow +76 -19
  16. package/language/javascript/RelayFlowTypeTransformers.js.flow +4 -4
  17. package/lib/bin/RelayCompilerMain.js +5 -5
  18. package/lib/codegen/CodegenRunner.js +2 -2
  19. package/lib/codegen/NormalizationCodeGenerator.js +20 -8
  20. package/lib/codegen/ReaderCodeGenerator.js +43 -8
  21. package/lib/codegen/RelayFileWriter.js +2 -2
  22. package/lib/codegen/compileRelayArtifacts.js +2 -2
  23. package/lib/codegen/sortObjectByKey.js +2 -2
  24. package/lib/codegen/writeRelayGeneratedFile.js +2 -2
  25. package/lib/core/ASTCache.js +1 -0
  26. package/lib/core/CompilerContext.js +1 -0
  27. package/lib/core/CompilerError.js +2 -2
  28. package/lib/core/IRPrinter.js +3 -4
  29. package/lib/core/RelayGraphQLEnumsGenerator.js +2 -2
  30. package/lib/core/RelayIRTransforms.js +10 -4
  31. package/lib/core/RelayParser.js +4 -4
  32. package/lib/core/Schema.js +48 -7
  33. package/lib/core/getFieldDefinition.js +2 -2
  34. package/lib/core/inferRootArgumentDefinitions.js +4 -4
  35. package/lib/language/javascript/FindGraphQLTags.js +3 -69
  36. package/lib/language/javascript/RelayFlowBabelFactories.js +5 -5
  37. package/lib/language/javascript/RelayFlowGenerator.js +80 -21
  38. package/lib/runner/Artifacts.js +2 -2
  39. package/lib/runner/BufferedFilesystem.js +2 -2
  40. package/lib/runner/GraphQLASTNodeGroup.js +2 -2
  41. package/lib/runner/GraphQLNodeMap.js +2 -2
  42. package/lib/runner/Sources.js +21 -2
  43. package/lib/runner/StrictMap.js +2 -2
  44. package/lib/runner/getChangedNodeNames.js +2 -2
  45. package/lib/transforms/ApplyFragmentArgumentTransform.js +14 -14
  46. package/lib/transforms/ClientExtensionsTransform.js +5 -3
  47. package/lib/transforms/ConnectionTransform.js +8 -9
  48. package/lib/transforms/DeclarativeConnectionMutationTransform.js +113 -55
  49. package/lib/transforms/DeferStreamTransform.js +2 -2
  50. package/lib/transforms/DisallowTypenameOnRoot.js +2 -2
  51. package/lib/transforms/FieldHandleTransform.js +2 -2
  52. package/lib/transforms/FilterCompilerDirectivesTransform.js +29 -0
  53. package/lib/transforms/FlattenTransform.js +13 -12
  54. package/lib/transforms/GenerateIDFieldTransform.js +2 -2
  55. package/lib/transforms/GenerateTypeNameTransform.js +3 -3
  56. package/lib/transforms/InlineDataFragmentTransform.js +2 -2
  57. package/lib/transforms/MaskTransform.js +3 -3
  58. package/lib/transforms/MatchTransform.js +7 -3
  59. package/lib/transforms/ReactFlightComponentTransform.js +162 -0
  60. package/lib/transforms/RefetchableFragmentTransform.js +4 -4
  61. package/lib/transforms/RelayDirectiveTransform.js +2 -2
  62. package/lib/transforms/RequiredFieldTransform.js +380 -0
  63. package/lib/transforms/SkipHandleFieldTransform.js +1 -1
  64. package/lib/transforms/SkipRedundantNodesTransform.js +3 -1
  65. package/lib/transforms/SkipUnreachableNodeTransform.js +1 -1
  66. package/lib/transforms/SkipUnusedVariablesTransform.js +3 -3
  67. package/lib/transforms/TestOperationTransform.js +2 -2
  68. package/lib/transforms/ValidateGlobalVariablesTransform.js +2 -2
  69. package/lib/transforms/ValidateRequiredArgumentsTransform.js +2 -2
  70. package/lib/transforms/ValidateServerOnlyDirectivesTransform.js +2 -2
  71. package/lib/transforms/ValidateUnusedVariablesTransform.js +2 -2
  72. package/lib/transforms/query-generators/FetchableQueryGenerator.js +1 -1
  73. package/lib/transforms/query-generators/NodeQueryGenerator.js +1 -1
  74. package/lib/transforms/query-generators/index.js +2 -2
  75. package/lib/transforms/query-generators/utils.js +2 -2
  76. package/package.json +3 -3
  77. package/relay-compiler.js +4 -4
  78. package/relay-compiler.min.js +4 -4
  79. package/runner/Sources.js.flow +14 -0
  80. package/transforms/ClientExtensionsTransform.js.flow +2 -0
  81. package/transforms/ConnectionTransform.js.flow +0 -1
  82. package/transforms/DeclarativeConnectionMutationTransform.js.flow +137 -48
  83. package/transforms/FieldHandleTransform.js.flow +0 -1
  84. package/transforms/FilterCompilerDirectivesTransform.js.flow +33 -0
  85. package/transforms/FlattenTransform.js.flow +3 -2
  86. package/transforms/MatchTransform.js.flow +6 -0
  87. package/transforms/ReactFlightComponentTransform.js.flow +195 -0
  88. package/transforms/RequiredFieldTransform.js.flow +415 -0
  89. package/transforms/SkipRedundantNodesTransform.js.flow +3 -0
@@ -19,6 +19,7 @@ const MatchTransform = require('../../transforms/MatchTransform');
19
19
  const Profiler = require('../../core/GraphQLCompilerProfiler');
20
20
  const RefetchableFragmentTransform = require('../../transforms/RefetchableFragmentTransform');
21
21
  const RelayDirectiveTransform = require('../../transforms/RelayDirectiveTransform');
22
+ const RequiredFieldTransform = require('../../transforms/RequiredFieldTransform');
22
23
 
23
24
  const generateAbstractTypeRefinementKey = require('../../util/generateAbstractTypeRefinementKey');
24
25
  const partitionArray = require('../../util/partitionArray');
@@ -49,8 +50,11 @@ import type {
49
50
  Directive,
50
51
  Metadata,
51
52
  ModuleImport,
53
+ Selection as IRSelection,
52
54
  } from '../../core/IR';
55
+ import type {NodeVisitor} from '../../core/IRVisitor';
53
56
  import type {Schema, TypeID, EnumTypeID} from '../../core/Schema';
57
+ import type {RequiredDirectiveMetadata} from '../../transforms/RequiredFieldTransform';
54
58
  import type {TypeGeneratorOptions} from '../RelayLanguagePluginInterface';
55
59
 
56
60
  const babelGenerator = require('@babel/generator').default;
@@ -281,7 +285,10 @@ function isPlural(node: Fragment): boolean {
281
285
  return Boolean(node.metadata && node.metadata.plural);
282
286
  }
283
287
 
284
- function createVisitor(schema: Schema, options: TypeGeneratorOptions) {
288
+ function createVisitor(
289
+ schema: Schema,
290
+ options: TypeGeneratorOptions,
291
+ ): NodeVisitor {
285
292
  const state = {
286
293
  customScalars: options.customScalars,
287
294
  enumsHasteModule: options.enumsHasteModule,
@@ -298,22 +305,31 @@ function createVisitor(schema: Schema, options: TypeGeneratorOptions) {
298
305
  };
299
306
  return {
300
307
  leave: {
301
- Root(node) {
308
+ Root(node: Root) {
302
309
  const inputVariablesType = generateInputVariablesType(
303
310
  schema,
304
311
  node,
305
312
  state,
306
313
  );
307
314
  const inputObjectTypes = generateInputObjectTypes(state);
315
+
316
+ let responseTypeDefinition = selectionsToBabel(
317
+ schema,
318
+ /* $FlowFixMe: selections have already been transformed */
319
+ (node.selections: $ReadOnlyArray<$ReadOnlyArray<Selection>>),
320
+ state,
321
+ false,
322
+ );
323
+
324
+ if (node.metadata?.childrenCanBubbleNull === true) {
325
+ responseTypeDefinition = t.nullableTypeAnnotation(
326
+ responseTypeDefinition,
327
+ );
328
+ }
329
+
308
330
  const responseType = exportType(
309
331
  `${node.name}Response`,
310
- selectionsToBabel(
311
- schema,
312
- // $FlowFixMe[incompatible-cast] : selections have already been transformed
313
- (node.selections: $ReadOnlyArray<$ReadOnlyArray<Selection>>),
314
- state,
315
- false,
316
- ),
332
+ responseTypeDefinition,
317
333
  );
318
334
 
319
335
  const operationTypes = [
@@ -441,9 +457,12 @@ function createVisitor(schema: Schema, options: TypeGeneratorOptions) {
441
457
  unmasked,
442
458
  unmasked ? undefined : getOldFragmentTypeName(node.name),
443
459
  );
444
- const type = isPluralFragment
445
- ? readOnlyArrayOfType(baseType)
446
- : baseType;
460
+ let type = isPluralFragment ? readOnlyArrayOfType(baseType) : baseType;
461
+
462
+ if (node.metadata?.childrenCanBubbleNull === true) {
463
+ type = t.nullableTypeAnnotation(type);
464
+ }
465
+
447
466
  state.runtimeImports.add('FragmentReference');
448
467
 
449
468
  return t.program([
@@ -489,7 +508,9 @@ function createVisitor(schema: Schema, options: TypeGeneratorOptions) {
489
508
  ScalarField(node) {
490
509
  return visitScalarField(schema, node, state);
491
510
  },
492
- LinkedField: visitLinkedField,
511
+ LinkedField(node) {
512
+ return visitLinkedField(schema, node);
513
+ },
493
514
  ModuleImport(node) {
494
515
  return [
495
516
  {
@@ -536,22 +557,55 @@ function visitNodeWithSelectionsOnly(node) {
536
557
  );
537
558
  }
538
559
 
539
- function visitScalarField(schema, node, state) {
560
+ function visitScalarField(schema: Schema, node, state: State) {
561
+ const requiredMetadata: ?RequiredDirectiveMetadata = (node.metadata
562
+ ?.required: $FlowFixMe);
563
+ const nodeType =
564
+ requiredMetadata != null ? schema.getNonNullType(node.type) : node.type;
540
565
  return [
541
566
  {
542
567
  key: node.alias,
543
568
  schemaName: node.name,
544
- value: transformScalarType(schema, node.type, state),
569
+ value: transformScalarType(schema, nodeType, state),
545
570
  },
546
571
  ];
547
572
  }
548
573
 
549
- function visitLinkedField(node) {
574
+ function getLinkedFieldNodeType(schema: Schema, node) {
575
+ const requiredMetadata: ?RequiredDirectiveMetadata = (node.metadata
576
+ ?.required: $FlowFixMe);
577
+
578
+ if (requiredMetadata != null) {
579
+ return schema.getNonNullType(node.type);
580
+ }
581
+ if (node.metadata?.childrenCanBubbleNull === true) {
582
+ if (schema.isList(node.type)) {
583
+ // In a plural field, nulls bubble up to the item, resulting in a list of nullable items.
584
+ return schema.mapListItemType(node.type, inner =>
585
+ schema.getNullableType(inner),
586
+ );
587
+ } else if (schema.isNonNull(node.type)) {
588
+ const nullable = schema.getNullableType(node.type);
589
+ if (schema.isList(nullable)) {
590
+ return schema.getNonNullType(
591
+ schema.mapListItemType(nullable, inner =>
592
+ schema.getNullableType(inner),
593
+ ),
594
+ );
595
+ }
596
+ return nullable;
597
+ }
598
+ return node.type;
599
+ }
600
+ return node.type;
601
+ }
602
+
603
+ function visitLinkedField(schema: Schema, node) {
550
604
  return [
551
605
  {
552
606
  key: node.alias,
553
607
  schemaName: node.name,
554
- nodeType: node.type,
608
+ nodeType: getLinkedFieldNodeType(schema, node),
555
609
  nodeSelections: selectionsToMap(
556
610
  flattenArray(
557
611
  // $FlowFixMe[incompatible-cast] : selections have already been transformed
@@ -679,7 +733,7 @@ function appendLocal3DPayload(
679
733
  t.genericTypeAnnotation(
680
734
  t.identifier('Local3DPayload'),
681
735
  t.typeParameterInstantiation([
682
- t.stringLiteralTypeAnnotation(moduleImport.documentName),
736
+ t.stringLiteralTypeAnnotation(nullthrows(moduleImport.documentName)),
683
737
  exactObjectTypeAnnotation(
684
738
  selections
685
739
  .filter(sel => sel.schemaName !== 'js')
@@ -735,7 +789,9 @@ function createRawResponseTypeVisitor(schema: Schema, state: State) {
735
789
  conditional: true,
736
790
  }));
737
791
  },
738
- LinkedField: visitLinkedField,
792
+ LinkedField(node) {
793
+ return visitLinkedField(schema, node);
794
+ },
739
795
  Condition: visitNodeWithSelectionsOnly,
740
796
  Defer: visitNodeWithSelectionsOnly,
741
797
  Stream: visitNodeWithSelectionsOnly,
@@ -1025,6 +1081,7 @@ const FLOW_TRANSFORMS: $ReadOnlyArray<IRTransform> = [
1025
1081
  RelayDirectiveTransform.transform,
1026
1082
  MaskTransform.transform,
1027
1083
  MatchTransform.transform,
1084
+ RequiredFieldTransform.transform,
1028
1085
  FlattenTransform.transformWithOptions({}),
1029
1086
  RefetchableFragmentTransform.transform,
1030
1087
  ];
@@ -23,7 +23,7 @@ import type {Schema, TypeID, EnumTypeID} from '../../core/Schema';
23
23
 
24
24
  export type BabelTypes = typeof t;
25
25
  export type ScalarTypeMapping = {
26
- [type: string]: string | (BabelTypes => mixed),
26
+ [type: string]: string | (BabelTypes => BabelNode_DEPRECATED),
27
27
  ...,
28
28
  };
29
29
 
@@ -37,7 +37,7 @@ function transformScalarType(
37
37
  schema: Schema,
38
38
  type: TypeID,
39
39
  state: State,
40
- objectProps?: mixed,
40
+ objectProps?: BabelNode_DEPRECATED,
41
41
  ): mixed {
42
42
  if (schema.isNonNull(type)) {
43
43
  return transformNonNullableScalarType(
@@ -58,7 +58,7 @@ function transformNonNullableScalarType(
58
58
  type: TypeID,
59
59
  state: State,
60
60
  objectProps,
61
- ) {
61
+ ): BabelNode_DEPRECATED {
62
62
  if (schema.isList(type)) {
63
63
  return readOnlyArrayOfType(
64
64
  transformScalarType(
@@ -135,7 +135,7 @@ function transformNonNullableInputType(
135
135
  schema: Schema,
136
136
  type: TypeID,
137
137
  state: State,
138
- ) {
138
+ ): BabelNode_DEPRECATED {
139
139
  if (schema.isList(type)) {
140
140
  return readOnlyArrayOfType(
141
141
  transformInputType(schema, schema.getListItemType(type), state),
@@ -18,9 +18,9 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
18
18
 
19
19
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
20
20
 
21
- function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
21
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
22
22
 
23
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
23
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
24
24
 
25
25
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
26
26
 
@@ -224,7 +224,7 @@ function getPathBasedConfig(config) {
224
224
  }
225
225
  }
226
226
 
227
- return _objectSpread({}, config, {
227
+ return _objectSpread(_objectSpread({}, config), {}, {
228
228
  schema: schema,
229
229
  src: src,
230
230
  persistOutput: persistOutput
@@ -242,7 +242,7 @@ function _getWatchConfig() {
242
242
  if (config.watch) {
243
243
  if (!watchman) {
244
244
  console.error('Watchman is required to watch for changes. Running with watch mode disabled.');
245
- return _objectSpread({}, config, {
245
+ return _objectSpread(_objectSpread({}, config), {}, {
246
246
  watch: false,
247
247
  watchman: false
248
248
  });
@@ -256,7 +256,7 @@ function _getWatchConfig() {
256
256
  console.log('HINT: pass --watch to keep watching for changes.');
257
257
  }
258
258
 
259
- return _objectSpread({}, config, {
259
+ return _objectSpread(_objectSpread({}, config), {}, {
260
260
  watchman: watchman
261
261
  });
262
262
  });
@@ -16,9 +16,9 @@ var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator");
16
16
 
17
17
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
18
18
 
19
- function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
19
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
20
20
 
21
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
21
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
22
22
 
23
23
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
24
24
 
@@ -225,14 +225,13 @@ function generateLinkedField(schema, node) {
225
225
  key: handle.key,
226
226
  kind: 'LinkedHandle',
227
227
  name: node.name
228
- }; // T45504512: new connection model
229
- // NOTE: this intentionally adds a dynamic key in order to avoid
228
+ }; // NOTE: this intentionally adds a dynamic key in order to avoid
230
229
  // triggering updates to existing queries that do not use dynamic
231
230
  // keys.
232
231
 
233
232
  if (handle.dynamicKey != null) {
234
233
  var dynamicKeyArgName = '__dynamicKey';
235
- handleNode = _objectSpread({}, handleNode, {
234
+ handleNode = _objectSpread(_objectSpread({}, handleNode), {}, {
236
235
  dynamicKey: {
237
236
  kind: 'Variable',
238
237
  name: dynamicKeyArgName,
@@ -245,7 +244,7 @@ function generateLinkedField(schema, node) {
245
244
  var handleArgs = generateArgs(handle.handleArgs);
246
245
 
247
246
  if (handleArgs != null) {
248
- handleNode = _objectSpread({}, handleNode, {
247
+ handleNode = _objectSpread(_objectSpread({}, handleNode), {}, {
249
248
  handleArgs: handleArgs
250
249
  });
251
250
  }
@@ -268,7 +267,7 @@ function generateLinkedField(schema, node) {
268
267
  var storageKey = getStaticStorageKey(field, node.metadata);
269
268
 
270
269
  if (storageKey != null) {
271
- field = _objectSpread({}, field, {
270
+ field = _objectSpread(_objectSpread({}, field), {}, {
272
271
  storageKey: storageKey
273
272
  });
274
273
  }
@@ -306,7 +305,7 @@ function generateTypeDiscriminator(abstractKey) {
306
305
  }
307
306
 
308
307
  function generateScalarField(node) {
309
- var _node$metadata;
308
+ var _node$metadata, _node$metadata2;
310
309
 
311
310
  // flowlint-next-line sketchy-null-mixed:off
312
311
  if ((_node$metadata = node.metadata) === null || _node$metadata === void 0 ? void 0 : _node$metadata.skipNormalizationNode) {
@@ -321,7 +320,7 @@ function generateScalarField(node) {
321
320
  throw createUserError('Dynamic key values are not supported on scalar fields.', [handle.dynamicKey.loc]);
322
321
  }
323
322
 
324
- return {
323
+ var nodeHandle = {
325
324
  alias: node.alias === node.name ? null : node.alias,
326
325
  args: generateArgs(node.args),
327
326
  filters: handle.filters,
@@ -330,6 +329,13 @@ function generateScalarField(node) {
330
329
  kind: 'ScalarHandle',
331
330
  name: node.name
332
331
  };
332
+
333
+ if (handle.handleArgs != null) {
334
+ // $FlowFixMe handleArgs exists in Handle
335
+ nodeHandle.handleArgs = generateArgs(handle.handleArgs);
336
+ }
337
+
338
+ return nodeHandle;
333
339
  }) || [];
334
340
  var field = {
335
341
  alias: node.alias === node.name ? null : node.alias,
@@ -342,11 +348,17 @@ function generateScalarField(node) {
342
348
  var storageKey = getStaticStorageKey(field, node.metadata);
343
349
 
344
350
  if (storageKey != null) {
345
- field = _objectSpread({}, field, {
351
+ field = _objectSpread(_objectSpread({}, field), {}, {
346
352
  storageKey: storageKey
347
353
  });
348
354
  }
349
355
 
356
+ if (((_node$metadata2 = node.metadata) === null || _node$metadata2 === void 0 ? void 0 : _node$metadata2.flight) === true) {
357
+ field = _objectSpread(_objectSpread({}, field), {}, {
358
+ kind: 'FlightField'
359
+ });
360
+ }
361
+
350
362
  return [field].concat(handles);
351
363
  }
352
364
 
@@ -46,11 +46,11 @@ function generate(schema, node) {
46
46
  var metadata = null;
47
47
 
48
48
  if (node.metadata != null) {
49
- var _node$metadata = node.metadata,
50
- mask = _node$metadata.mask,
51
- plural = _node$metadata.plural,
52
- connection = _node$metadata.connection,
53
- refetch = _node$metadata.refetch;
49
+ var _node$metadata4 = node.metadata,
50
+ mask = _node$metadata4.mask,
51
+ plural = _node$metadata4.plural,
52
+ connection = _node$metadata4.connection,
53
+ refetch = _node$metadata4.refetch;
54
54
 
55
55
  if (Array.isArray(connection)) {
56
56
  var _metadata;
@@ -85,7 +85,7 @@ function generate(schema, node) {
85
85
  };
86
86
 
87
87
  if (typeof refetch.identifierField === 'string') {
88
- metadata.refetch = _objectSpread({}, metadata.refetch, {
88
+ metadata.refetch = _objectSpread(_objectSpread({}, metadata.refetch), {}, {
89
89
  identifierField: refetch.identifierField
90
90
  });
91
91
  }
@@ -248,6 +248,8 @@ function generateInlineDataFragmentSpread(schema, node) {
248
248
  }
249
249
 
250
250
  function generateLinkedField(schema, node) {
251
+ var _node$metadata;
252
+
251
253
  // Note: it is important that the arguments of this field be sorted to
252
254
  // ensure stable generation of storage keys for equivalent arguments
253
255
  // which may have originally appeared in different orders across an app.
@@ -274,14 +276,29 @@ function generateLinkedField(schema, node) {
274
276
  var storageKey = getStaticStorageKey(field, node.metadata);
275
277
 
276
278
  if (storageKey) {
277
- field = _objectSpread({}, field, {
279
+ field = _objectSpread(_objectSpread({}, field), {}, {
278
280
  storageKey: storageKey
279
281
  });
280
282
  }
281
283
 
284
+ var requiredMetadata = (_node$metadata = node.metadata) === null || _node$metadata === void 0 ? void 0 : _node$metadata.required;
285
+
286
+ if (requiredMetadata != null) {
287
+ return createRequiredField(field, requiredMetadata);
288
+ }
289
+
282
290
  return field;
283
291
  }
284
292
 
293
+ function createRequiredField(field, requiredMetadata) {
294
+ return {
295
+ kind: 'RequiredField',
296
+ field: field,
297
+ action: requiredMetadata.action,
298
+ path: requiredMetadata.path
299
+ };
300
+ }
301
+
285
302
  function generateModuleImport(schema, node) {
286
303
  var fragmentName = node.name;
287
304
  var regExpMatch = fragmentName.match(/^([a-zA-Z][a-zA-Z0-9]*)(?:_([a-zA-Z][_a-zA-Z0-9]*))?$/);
@@ -305,6 +322,8 @@ function generateModuleImport(schema, node) {
305
322
  }
306
323
 
307
324
  function generateScalarField(schema, node) {
325
+ var _node$metadata2, _node$metadata3;
326
+
308
327
  // Note: it is important that the arguments of this field be sorted to
309
328
  // ensure stable generation of storage keys for equivalent arguments
310
329
  // which may have originally appeared in different orders across an app.
@@ -327,11 +346,27 @@ function generateScalarField(schema, node) {
327
346
  var storageKey = getStaticStorageKey(field, node.metadata);
328
347
 
329
348
  if (storageKey) {
330
- field = _objectSpread({}, field, {
349
+ field = _objectSpread(_objectSpread({}, field), {}, {
331
350
  storageKey: storageKey
332
351
  });
333
352
  }
334
353
 
354
+ if (((_node$metadata2 = node.metadata) === null || _node$metadata2 === void 0 ? void 0 : _node$metadata2.flight) === true) {
355
+ field = _objectSpread(_objectSpread({}, field), {}, {
356
+ kind: 'FlightField'
357
+ });
358
+ }
359
+
360
+ var requiredMetadata = (_node$metadata3 = node.metadata) === null || _node$metadata3 === void 0 ? void 0 : _node$metadata3.required;
361
+
362
+ if (requiredMetadata != null) {
363
+ if (field.kind === 'FlightField') {
364
+ throw new createUserError('@required cannot be used on a ReactFlightComponent.', [node.loc]);
365
+ }
366
+
367
+ return createRequiredField(field, requiredMetadata);
368
+ }
369
+
335
370
  return field;
336
371
  }
337
372
 
@@ -16,9 +16,9 @@ var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator");
16
16
 
17
17
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
18
18
 
19
- function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
19
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
20
20
 
21
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
21
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
22
22
 
23
23
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
24
24
 
@@ -14,9 +14,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
14
14
 
15
15
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
16
16
 
17
- function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
17
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
18
18
 
19
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
19
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
20
20
 
21
21
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
22
22
 
@@ -9,9 +9,9 @@
9
9
  */
10
10
  'use strict';
11
11
 
12
- function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
12
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
13
13
 
14
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
14
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
15
15
 
16
16
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
17
17
 
@@ -127,7 +127,7 @@ function writeRelayGeneratedFile(schema, codegenDir, definition, _generatedNode,
127
127
  };
128
128
  }
129
129
 
130
- generatedNode = _objectSpread({}, generatedNode, {
130
+ generatedNode = _objectSpread(_objectSpread({}, generatedNode), {}, {
131
131
  params: nextRequestParams
132
132
  });
133
133
  } // Strip metadata only used within the compiler
@@ -137,7 +137,7 @@ function writeRelayGeneratedFile(schema, codegenDir, definition, _generatedNode,
137
137
  var _generatedNode$metada2 = generatedNode.metadata,
138
138
  _ignored3 = _generatedNode$metada2.derivedFrom,
139
139
  metadata = (0, _objectWithoutPropertiesLoose2["default"])(_generatedNode$metada2, ["derivedFrom"]);
140
- generatedNode = _objectSpread({}, generatedNode, {
140
+ generatedNode = _objectSpread(_objectSpread({}, generatedNode), {}, {
141
141
  metadata: metadata
142
142
  });
143
143
  }
@@ -22,6 +22,7 @@ var ASTCache = /*#__PURE__*/function () {
22
22
  this._baseDir = config.baseDir;
23
23
  this._parse = Profiler.instrument(config.parse, 'ASTCache.parseFn');
24
24
  } // Short-term: we don't do subscriptions/delta updates, instead always use all definitions
25
+ // $FlowFixMe[value-as-type]
25
26
 
26
27
 
27
28
  var _proto = ASTCache.prototype;
@@ -26,6 +26,7 @@ var _require2 = require('immutable'),
26
26
  * For each document, the context stores the IR and any validation errors.
27
27
  */
28
28
  var CompilerContext = /*#__PURE__*/function () {
29
+ // $FlowFixMe[value-as-type]
29
30
  function CompilerContext(schema) {
30
31
  this._isMutable = false;
31
32
  this._documents = new ImmutableOrderedMap();
@@ -10,9 +10,9 @@
10
10
  // flowlint ambiguous-object-type:error
11
11
  'use strict';
12
12
 
13
- function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
13
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
14
14
 
15
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
15
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
16
16
 
17
17
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
18
18
 
@@ -295,11 +295,10 @@ function printValue(schema, value, type) {
295
295
  if (value.kind === 'Variable') {
296
296
  return '$' + value.variableName;
297
297
  } else if (value.kind === 'ObjectValue') {
298
- !(type && schema.isInputObject(type)) ? process.env.NODE_ENV !== "production" ? invariant(false, 'GraphQLIRPrinter: Need an InputObject type to print objects.') : invariant(false) : void 0;
299
- var inputType = schema.assertInputObjectType(type);
298
+ var inputType = type != null ? schema.asInputObjectType(type) : null;
300
299
  var pairs = value.fields.map(function (field) {
301
- var fieldConfig = type != null ? schema.hasField(inputType, field.name) ? schema.getFieldConfig(schema.expectField(inputType, field.name)) : null : null;
302
- var innerValue = fieldConfig && printValue(schema, field.value, fieldConfig.type);
300
+ var fieldConfig = inputType != null ? schema.hasField(inputType, field.name) ? schema.getFieldConfig(schema.expectField(inputType, field.name)) : null : null;
301
+ var innerValue = printValue(schema, field.value, fieldConfig === null || fieldConfig === void 0 ? void 0 : fieldConfig.type);
303
302
  return innerValue == null ? null : field.name + ': ' + innerValue;
304
303
  }).filter(Boolean);
305
304
  return '{' + pairs.join(', ') + '}';
@@ -14,9 +14,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
14
14
 
15
15
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
16
16
 
17
- function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
17
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
18
18
 
19
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
19
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
20
20
 
21
21
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
22
22