relay-compiler 10.0.1 → 10.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. package/bin/relay-compiler +1538 -975
  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/CompilerError.js.flow +6 -1
  9. package/core/IR.js.flow +0 -1
  10. package/core/IRPrinter.js.flow +3 -8
  11. package/core/RelayIRTransforms.js.flow +7 -0
  12. package/core/Schema.js.flow +55 -1
  13. package/index.js +1 -1
  14. package/language/javascript/FindGraphQLTags.js.flow +2 -97
  15. package/language/javascript/RelayFlowBabelFactories.js.flow +11 -15
  16. package/language/javascript/RelayFlowGenerator.js.flow +76 -19
  17. package/language/javascript/RelayFlowTypeTransformers.js.flow +4 -4
  18. package/lib/bin/RelayCompilerMain.js +8 -14
  19. package/lib/codegen/CodegenRunner.js +5 -9
  20. package/lib/codegen/NormalizationCodeGenerator.js +21 -13
  21. package/lib/codegen/ReaderCodeGenerator.js +44 -13
  22. package/lib/codegen/RelayFileWriter.js +3 -7
  23. package/lib/codegen/compileRelayArtifacts.js +4 -8
  24. package/lib/codegen/sortObjectByKey.js +3 -5
  25. package/lib/codegen/writeRelayGeneratedFile.js +3 -7
  26. package/lib/core/ASTCache.js +1 -0
  27. package/lib/core/CompilerContext.js +1 -0
  28. package/lib/core/CompilerError.js +8 -8
  29. package/lib/core/IRPrinter.js +3 -4
  30. package/lib/core/IRTransformer.js +3 -7
  31. package/lib/core/RelayGraphQLEnumsGenerator.js +3 -7
  32. package/lib/core/RelayIRTransforms.js +10 -4
  33. package/lib/core/RelayParser.js +7 -15
  34. package/lib/core/Schema.js +50 -13
  35. package/lib/core/getFieldDefinition.js +3 -5
  36. package/lib/core/inferRootArgumentDefinitions.js +6 -14
  37. package/lib/language/javascript/FindGraphQLTags.js +3 -69
  38. package/lib/language/javascript/RelayFlowBabelFactories.js +5 -5
  39. package/lib/language/javascript/RelayFlowGenerator.js +85 -34
  40. package/lib/runner/Artifacts.js +13 -17
  41. package/lib/runner/BufferedFilesystem.js +6 -10
  42. package/lib/runner/GraphQLASTNodeGroup.js +10 -14
  43. package/lib/runner/GraphQLNodeMap.js +3 -7
  44. package/lib/runner/Sources.js +27 -17
  45. package/lib/runner/StrictMap.js +5 -7
  46. package/lib/runner/getChangedNodeNames.js +6 -8
  47. package/lib/transforms/ApplyFragmentArgumentTransform.js +16 -25
  48. package/lib/transforms/ClientExtensionsTransform.js +8 -9
  49. package/lib/transforms/ConnectionTransform.js +9 -14
  50. package/lib/transforms/DeclarativeConnectionMutationTransform.js +115 -64
  51. package/lib/transforms/DeferStreamTransform.js +3 -7
  52. package/lib/transforms/DisallowTypenameOnRoot.js +3 -5
  53. package/lib/transforms/FieldHandleTransform.js +3 -7
  54. package/lib/transforms/FilterCompilerDirectivesTransform.js +29 -0
  55. package/lib/transforms/FlattenTransform.js +14 -17
  56. package/lib/transforms/GenerateIDFieldTransform.js +3 -7
  57. package/lib/transforms/GenerateTypeNameTransform.js +4 -8
  58. package/lib/transforms/InlineDataFragmentTransform.js +3 -7
  59. package/lib/transforms/MaskTransform.js +4 -12
  60. package/lib/transforms/MatchTransform.js +8 -8
  61. package/lib/transforms/ReactFlightComponentTransform.js +158 -0
  62. package/lib/transforms/RefetchableFragmentTransform.js +5 -9
  63. package/lib/transforms/RelayDirectiveTransform.js +3 -7
  64. package/lib/transforms/RequiredFieldTransform.js +369 -0
  65. package/lib/transforms/SkipHandleFieldTransform.js +2 -6
  66. package/lib/transforms/SkipRedundantNodesTransform.js +4 -6
  67. package/lib/transforms/SkipUnreachableNodeTransform.js +2 -6
  68. package/lib/transforms/SkipUnusedVariablesTransform.js +4 -12
  69. package/lib/transforms/TestOperationTransform.js +3 -7
  70. package/lib/transforms/ValidateGlobalVariablesTransform.js +4 -6
  71. package/lib/transforms/ValidateRequiredArgumentsTransform.js +3 -5
  72. package/lib/transforms/ValidateServerOnlyDirectivesTransform.js +4 -6
  73. package/lib/transforms/ValidateUnusedVariablesTransform.js +4 -6
  74. package/lib/transforms/query-generators/FetchableQueryGenerator.js +2 -6
  75. package/lib/transforms/query-generators/NodeQueryGenerator.js +2 -6
  76. package/lib/transforms/query-generators/index.js +3 -5
  77. package/lib/transforms/query-generators/utils.js +3 -5
  78. package/package.json +3 -3
  79. package/relay-compiler.js +4 -4
  80. package/relay-compiler.min.js +4 -4
  81. package/runner/Sources.js.flow +14 -0
  82. package/transforms/ClientExtensionsTransform.js.flow +3 -0
  83. package/transforms/ConnectionTransform.js.flow +0 -1
  84. package/transforms/DeclarativeConnectionMutationTransform.js.flow +140 -48
  85. package/transforms/FieldHandleTransform.js.flow +0 -1
  86. package/transforms/FilterCompilerDirectivesTransform.js.flow +33 -0
  87. package/transforms/FlattenTransform.js.flow +3 -2
  88. package/transforms/MatchTransform.js.flow +6 -0
  89. package/transforms/ReactFlightComponentTransform.js.flow +195 -0
  90. package/transforms/RequiredFieldTransform.js.flow +415 -0
  91. 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),
@@ -14,19 +14,13 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
14
14
 
15
15
  var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator");
16
16
 
17
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
18
-
19
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
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; } } }; }
17
+ var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
22
18
 
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); }
24
-
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; }
19
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
26
20
 
27
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
21
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
28
22
 
29
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
23
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
30
24
 
31
25
  var CodegenRunner = require('../codegen/CodegenRunner');
32
26
 
@@ -224,7 +218,7 @@ function getPathBasedConfig(config) {
224
218
  }
225
219
  }
226
220
 
227
- return _objectSpread({}, config, {
221
+ return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, config), {}, {
228
222
  schema: schema,
229
223
  src: src,
230
224
  persistOutput: persistOutput
@@ -242,7 +236,7 @@ function _getWatchConfig() {
242
236
  if (config.watch) {
243
237
  if (!watchman) {
244
238
  console.error('Watchman is required to watch for changes. Running with watch mode disabled.');
245
- return _objectSpread({}, config, {
239
+ return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, config), {}, {
246
240
  watch: false,
247
241
  watchman: false
248
242
  });
@@ -256,7 +250,7 @@ function _getWatchConfig() {
256
250
  console.log('HINT: pass --watch to keep watching for changes.');
257
251
  }
258
252
 
259
- return _objectSpread({}, config, {
253
+ return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, config), {}, {
260
254
  watchman: watchman
261
255
  });
262
256
  });
@@ -425,7 +419,7 @@ function getRelayFileWriter(baseDir, languagePlugin, noFutureProofEnums, outputD
425
419
  }
426
420
  }
427
421
 
428
- var _iterator = _createForOfIteratorHelper(queryMap.entries()),
422
+ var _iterator = (0, _createForOfIteratorHelper2["default"])(queryMap.entries()),
429
423
  _step;
430
424
 
431
425
  try {
@@ -14,13 +14,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
14
14
 
15
15
  var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator");
16
16
 
17
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
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; } } }; }
17
+ var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
20
18
 
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); }
22
-
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; }
19
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
24
20
 
25
21
  var CodegenDirectory = require('./CodegenDirectory');
26
22
 
@@ -154,7 +150,7 @@ var CodegenRunner = /*#__PURE__*/function () {
154
150
  for (var configName in _this3.writerConfigs) {
155
151
  var config = _this3.writerConfigs[configName];
156
152
 
157
- var _iterator = _createForOfIteratorHelper(filePaths),
153
+ var _iterator = (0, _createForOfIteratorHelper2["default"])(filePaths),
158
154
  _step;
159
155
 
160
156
  try {
@@ -296,7 +292,7 @@ var CodegenRunner = /*#__PURE__*/function () {
296
292
  reporter: _this5._reporter
297
293
  });
298
294
 
299
- var _iterator2 = _createForOfIteratorHelper(outputDirectories.values()),
295
+ var _iterator2 = (0, _createForOfIteratorHelper2["default"])(outputDirectories.values()),
300
296
  _step2;
301
297
 
302
298
  try {
@@ -304,7 +300,7 @@ var CodegenRunner = /*#__PURE__*/function () {
304
300
  var dir = _step2.value;
305
301
  var all = [].concat((0, _toConsumableArray2["default"])(dir.changes.created), (0, _toConsumableArray2["default"])(dir.changes.updated), (0, _toConsumableArray2["default"])(dir.changes.deleted), (0, _toConsumableArray2["default"])(dir.changes.unchanged));
306
302
 
307
- var _iterator3 = _createForOfIteratorHelper(all),
303
+ var _iterator3 = (0, _createForOfIteratorHelper2["default"])(all),
308
304
  _step3;
309
305
 
310
306
  try {
@@ -12,14 +12,10 @@
12
12
 
13
13
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
14
14
 
15
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
16
16
 
17
17
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
18
18
 
19
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
20
-
21
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
22
-
23
19
  var argumentContainsVariables = require('../util/argumentContainsVariables');
24
20
 
25
21
  var generateAbstractTypeRefinementKey = require('../util/generateAbstractTypeRefinementKey');
@@ -225,14 +221,13 @@ function generateLinkedField(schema, node) {
225
221
  key: handle.key,
226
222
  kind: 'LinkedHandle',
227
223
  name: node.name
228
- }; // T45504512: new connection model
229
- // NOTE: this intentionally adds a dynamic key in order to avoid
224
+ }; // NOTE: this intentionally adds a dynamic key in order to avoid
230
225
  // triggering updates to existing queries that do not use dynamic
231
226
  // keys.
232
227
 
233
228
  if (handle.dynamicKey != null) {
234
229
  var dynamicKeyArgName = '__dynamicKey';
235
- handleNode = _objectSpread({}, handleNode, {
230
+ handleNode = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, handleNode), {}, {
236
231
  dynamicKey: {
237
232
  kind: 'Variable',
238
233
  name: dynamicKeyArgName,
@@ -245,7 +240,7 @@ function generateLinkedField(schema, node) {
245
240
  var handleArgs = generateArgs(handle.handleArgs);
246
241
 
247
242
  if (handleArgs != null) {
248
- handleNode = _objectSpread({}, handleNode, {
243
+ handleNode = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, handleNode), {}, {
249
244
  handleArgs: handleArgs
250
245
  });
251
246
  }
@@ -268,7 +263,7 @@ function generateLinkedField(schema, node) {
268
263
  var storageKey = getStaticStorageKey(field, node.metadata);
269
264
 
270
265
  if (storageKey != null) {
271
- field = _objectSpread({}, field, {
266
+ field = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, field), {}, {
272
267
  storageKey: storageKey
273
268
  });
274
269
  }
@@ -306,7 +301,7 @@ function generateTypeDiscriminator(abstractKey) {
306
301
  }
307
302
 
308
303
  function generateScalarField(node) {
309
- var _node$metadata;
304
+ var _node$metadata, _node$metadata2;
310
305
 
311
306
  // flowlint-next-line sketchy-null-mixed:off
312
307
  if ((_node$metadata = node.metadata) === null || _node$metadata === void 0 ? void 0 : _node$metadata.skipNormalizationNode) {
@@ -321,7 +316,7 @@ function generateScalarField(node) {
321
316
  throw createUserError('Dynamic key values are not supported on scalar fields.', [handle.dynamicKey.loc]);
322
317
  }
323
318
 
324
- return {
319
+ var nodeHandle = {
325
320
  alias: node.alias === node.name ? null : node.alias,
326
321
  args: generateArgs(node.args),
327
322
  filters: handle.filters,
@@ -330,6 +325,13 @@ function generateScalarField(node) {
330
325
  kind: 'ScalarHandle',
331
326
  name: node.name
332
327
  };
328
+
329
+ if (handle.handleArgs != null) {
330
+ // $FlowFixMe handleArgs exists in Handle
331
+ nodeHandle.handleArgs = generateArgs(handle.handleArgs);
332
+ }
333
+
334
+ return nodeHandle;
333
335
  }) || [];
334
336
  var field = {
335
337
  alias: node.alias === node.name ? null : node.alias,
@@ -342,11 +344,17 @@ function generateScalarField(node) {
342
344
  var storageKey = getStaticStorageKey(field, node.metadata);
343
345
 
344
346
  if (storageKey != null) {
345
- field = _objectSpread({}, field, {
347
+ field = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, field), {}, {
346
348
  storageKey: storageKey
347
349
  });
348
350
  }
349
351
 
352
+ if (((_node$metadata2 = node.metadata) === null || _node$metadata2 === void 0 ? void 0 : _node$metadata2.flight) === true) {
353
+ field = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, field), {}, {
354
+ kind: 'FlightField'
355
+ });
356
+ }
357
+
350
358
  return [field].concat(handles);
351
359
  }
352
360
 
@@ -12,11 +12,7 @@
12
12
 
13
13
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
14
14
 
15
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
-
17
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
18
-
19
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
15
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
20
16
 
21
17
  var CodeMarker = require('../util/CodeMarker');
22
18
 
@@ -46,11 +42,11 @@ function generate(schema, node) {
46
42
  var metadata = null;
47
43
 
48
44
  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;
45
+ var _node$metadata4 = node.metadata,
46
+ mask = _node$metadata4.mask,
47
+ plural = _node$metadata4.plural,
48
+ connection = _node$metadata4.connection,
49
+ refetch = _node$metadata4.refetch;
54
50
 
55
51
  if (Array.isArray(connection)) {
56
52
  var _metadata;
@@ -85,7 +81,7 @@ function generate(schema, node) {
85
81
  };
86
82
 
87
83
  if (typeof refetch.identifierField === 'string') {
88
- metadata.refetch = _objectSpread({}, metadata.refetch, {
84
+ metadata.refetch = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, metadata.refetch), {}, {
89
85
  identifierField: refetch.identifierField
90
86
  });
91
87
  }
@@ -248,6 +244,8 @@ function generateInlineDataFragmentSpread(schema, node) {
248
244
  }
249
245
 
250
246
  function generateLinkedField(schema, node) {
247
+ var _node$metadata;
248
+
251
249
  // Note: it is important that the arguments of this field be sorted to
252
250
  // ensure stable generation of storage keys for equivalent arguments
253
251
  // which may have originally appeared in different orders across an app.
@@ -274,14 +272,29 @@ function generateLinkedField(schema, node) {
274
272
  var storageKey = getStaticStorageKey(field, node.metadata);
275
273
 
276
274
  if (storageKey) {
277
- field = _objectSpread({}, field, {
275
+ field = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, field), {}, {
278
276
  storageKey: storageKey
279
277
  });
280
278
  }
281
279
 
280
+ var requiredMetadata = (_node$metadata = node.metadata) === null || _node$metadata === void 0 ? void 0 : _node$metadata.required;
281
+
282
+ if (requiredMetadata != null) {
283
+ return createRequiredField(field, requiredMetadata);
284
+ }
285
+
282
286
  return field;
283
287
  }
284
288
 
289
+ function createRequiredField(field, requiredMetadata) {
290
+ return {
291
+ kind: 'RequiredField',
292
+ field: field,
293
+ action: requiredMetadata.action,
294
+ path: requiredMetadata.path
295
+ };
296
+ }
297
+
285
298
  function generateModuleImport(schema, node) {
286
299
  var fragmentName = node.name;
287
300
  var regExpMatch = fragmentName.match(/^([a-zA-Z][a-zA-Z0-9]*)(?:_([a-zA-Z][_a-zA-Z0-9]*))?$/);
@@ -305,6 +318,8 @@ function generateModuleImport(schema, node) {
305
318
  }
306
319
 
307
320
  function generateScalarField(schema, node) {
321
+ var _node$metadata2, _node$metadata3;
322
+
308
323
  // Note: it is important that the arguments of this field be sorted to
309
324
  // ensure stable generation of storage keys for equivalent arguments
310
325
  // which may have originally appeared in different orders across an app.
@@ -327,11 +342,27 @@ function generateScalarField(schema, node) {
327
342
  var storageKey = getStaticStorageKey(field, node.metadata);
328
343
 
329
344
  if (storageKey) {
330
- field = _objectSpread({}, field, {
345
+ field = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, field), {}, {
331
346
  storageKey: storageKey
332
347
  });
333
348
  }
334
349
 
350
+ if (((_node$metadata2 = node.metadata) === null || _node$metadata2 === void 0 ? void 0 : _node$metadata2.flight) === true) {
351
+ field = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, field), {}, {
352
+ kind: 'FlightField'
353
+ });
354
+ }
355
+
356
+ var requiredMetadata = (_node$metadata3 = node.metadata) === null || _node$metadata3 === void 0 ? void 0 : _node$metadata3.required;
357
+
358
+ if (requiredMetadata != null) {
359
+ if (field.kind === 'FlightField') {
360
+ throw new createUserError('@required cannot be used on a ReactFlightComponent.', [node.loc]);
361
+ }
362
+
363
+ return createRequiredField(field, requiredMetadata);
364
+ }
365
+
335
366
  return field;
336
367
  }
337
368
 
@@ -14,13 +14,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
14
14
 
15
15
  var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator");
16
16
 
17
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
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; } } }; }
17
+ var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
20
18
 
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); }
22
-
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; }
19
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
24
20
 
25
21
  var ASTConvert = require('../core/ASTConvert');
26
22
 
@@ -152,7 +148,7 @@ function writeAll(_ref2) {
152
148
  return codegenDir;
153
149
  };
154
150
 
155
- var _iterator = _createForOfIteratorHelper(writerConfig.generatedDirectories || []),
151
+ var _iterator = (0, _createForOfIteratorHelper2["default"])(writerConfig.generatedDirectories || []),
156
152
  _step;
157
153
 
158
154
  try {
@@ -12,13 +12,9 @@
12
12
 
13
13
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
14
14
 
15
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
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; } } }; }
15
+ var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
18
16
 
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); }
20
-
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; }
17
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
22
18
 
23
19
  var Printer = require('../core/IRPrinter');
24
20
 
@@ -50,7 +46,7 @@ function compile(context, fragmentContext, printContext, codeGenContext) {
50
46
  var schema = context.getSchema(); // Add everything from codeGenContext, these are the operations as well as
51
47
  // SplitOperations from @match.
52
48
 
53
- var _iterator = _createForOfIteratorHelper(codeGenContext.documents()),
49
+ var _iterator = (0, _createForOfIteratorHelper2["default"])(codeGenContext.documents()),
54
50
  _step;
55
51
 
56
52
  try {
@@ -93,7 +89,7 @@ function compile(context, fragmentContext, printContext, codeGenContext) {
93
89
  _iterator.f();
94
90
  }
95
91
 
96
- var _iterator2 = _createForOfIteratorHelper(fragmentContext.documents()),
92
+ var _iterator2 = (0, _createForOfIteratorHelper2["default"])(fragmentContext.documents()),
97
93
  _step2;
98
94
 
99
95
  try {
@@ -9,11 +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
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
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); }
15
-
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; }
14
+ var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
17
15
 
18
16
  function sortObjectByKey(obj) {
19
17
  if (obj == null) {
@@ -22,7 +20,7 @@ function sortObjectByKey(obj) {
22
20
 
23
21
  var result = {};
24
22
 
25
- var _iterator = _createForOfIteratorHelper(Object.keys(obj).sort()),
23
+ var _iterator = (0, _createForOfIteratorHelper2["default"])(Object.keys(obj).sort()),
26
24
  _step;
27
25
 
28
26
  try {