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
@@ -26,6 +26,8 @@ var DisallowTypenameOnRoot = require('../transforms/DisallowTypenameOnRoot');
26
26
 
27
27
  var FieldHandleTransform = require('../transforms/FieldHandleTransform');
28
28
 
29
+ var FilterCompilerDirectivesTransform = require('../transforms/FilterCompilerDirectivesTransform');
30
+
29
31
  var FilterDirectivesTransform = require('../transforms/FilterDirectivesTransform');
30
32
 
31
33
  var FlattenTransform = require('../transforms/FlattenTransform');
@@ -42,12 +44,16 @@ var MaskTransform = require('../transforms/MaskTransform');
42
44
 
43
45
  var MatchTransform = require('../transforms/MatchTransform');
44
46
 
47
+ var ReactFlightComponentTransform = require('../transforms/ReactFlightComponentTransform');
48
+
45
49
  var RefetchableFragmentTransform = require('../transforms/RefetchableFragmentTransform');
46
50
 
47
51
  var RelayDirectiveTransform = require('../transforms/RelayDirectiveTransform');
48
52
 
49
53
  var RelayFlowGenerator = require('../language/javascript/RelayFlowGenerator');
50
54
 
55
+ var RequiredFieldTransform = require('../transforms/RequiredFieldTransform');
56
+
51
57
  var SkipClientExtensionsTransform = require('../transforms/SkipClientExtensionsTransform');
52
58
 
53
59
  var SkipHandleFieldTransform = require('../transforms/SkipHandleFieldTransform');
@@ -71,19 +77,19 @@ var ValidateRequiredArgumentsTransform = require('../transforms/ValidateRequired
71
77
  var ValidateUnusedVariablesTransform = require('../transforms/ValidateUnusedVariablesTransform');
72
78
 
73
79
  // Transforms applied to the code used to process a query response.
74
- var relaySchemaExtensions = [ConnectionTransform.SCHEMA_EXTENSION, DeclarativeConnectionMutationTransform.SCHEMA_EXTENSION, InlineDataFragmentTransform.SCHEMA_EXTENSION, MatchTransform.SCHEMA_EXTENSION, RefetchableFragmentTransform.SCHEMA_EXTENSION, RelayDirectiveTransform.SCHEMA_EXTENSION, RelayFlowGenerator.SCHEMA_EXTENSION, TestOperationTransform.SCHEMA_EXTENSION, ValidateUnusedVariablesTransform.SCHEMA_EXTENSION]; // Transforms applied to both operations and fragments for both reading and
80
+ var relaySchemaExtensions = [ConnectionTransform.SCHEMA_EXTENSION, DeclarativeConnectionMutationTransform.SCHEMA_EXTENSION, InlineDataFragmentTransform.SCHEMA_EXTENSION, MatchTransform.SCHEMA_EXTENSION, RequiredFieldTransform.SCHEMA_EXTENSION, RefetchableFragmentTransform.SCHEMA_EXTENSION, RelayDirectiveTransform.SCHEMA_EXTENSION, RelayFlowGenerator.SCHEMA_EXTENSION, TestOperationTransform.SCHEMA_EXTENSION, ValidateUnusedVariablesTransform.SCHEMA_EXTENSION]; // Transforms applied to both operations and fragments for both reading and
75
81
  // writing from the store.
76
82
 
77
- var relayCommonTransforms = [DisallowIdAsAlias.transform, ConnectionTransform.transform, RelayDirectiveTransform.transform, MaskTransform.transform, MatchTransform.transform, RefetchableFragmentTransform.transform, DeferStreamTransform.transform]; // Transforms applied to fragments used for reading data from a store
83
+ var relayCommonTransforms = [DisallowIdAsAlias.transform, ConnectionTransform.transform, RelayDirectiveTransform.transform, MaskTransform.transform, MatchTransform.transform, RefetchableFragmentTransform.transform, DeferStreamTransform.transform, ReactFlightComponentTransform.transform]; // Transforms applied to fragments used for reading data from a store
78
84
 
79
85
  var relayFragmentTransforms = [ClientExtensionsTransform.transform, FieldHandleTransform.transform, InlineDataFragmentTransform.transform, FlattenTransform.transformWithOptions({
80
86
  isForCodegen: true
81
- }), SkipRedundantNodesTransform.transform]; // Transforms applied to queries/mutations/subscriptions that are used for
87
+ }), RequiredFieldTransform.transform, SkipRedundantNodesTransform.transform]; // Transforms applied to queries/mutations/subscriptions that are used for
82
88
  // fetching data from the server and parsing those responses.
83
89
 
84
90
  var relayQueryTransforms = [SplitModuleImportTransform.transform, DisallowTypenameOnRoot.transform, ValidateUnusedVariablesTransform.transform, ApplyFragmentArgumentTransform.transform, ValidateGlobalVariablesTransform.transform, GenerateIDFieldTransform.transform, DeclarativeConnectionMutationTransform.transform]; // Transforms applied to the code used to process a query response.
85
91
 
86
- var relayCodegenTransforms = [SkipUnreachableNodeTransform.transform, InlineFragmentsTransform.transform, // NOTE: For the codegen context, we make sure to run ClientExtensions
92
+ var relayCodegenTransforms = [FilterCompilerDirectivesTransform.transform, SkipUnreachableNodeTransform.transform, InlineFragmentsTransform.transform, // NOTE: For the codegen context, we make sure to run ClientExtensions
87
93
  // transform after we've inlined fragment spreads (i.e. InlineFragmentsTransform)
88
94
  // This will ensure that we don't generate nested ClientExtension nodes
89
95
  ClientExtensionsTransform.transform, GenerateTypeNameTransform.transform, FlattenTransform.transformWithOptions({
@@ -20,9 +20,9 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
20
20
 
21
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
22
 
23
- 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; } } }; }
23
+ 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; } } }; }
24
24
 
25
- 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); }
25
+ 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); }
26
26
 
27
27
  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; }
28
28
 
@@ -623,7 +623,7 @@ var GraphQLDefinitionParser = /*#__PURE__*/function () {
623
623
  directives = _this4$_splitConditio[1];
624
624
 
625
625
  var conditionalNodes = applyConditions(conditions, // $FlowFixMe[incompatible-call]
626
- [_objectSpread({}, node, {
626
+ [_objectSpread(_objectSpread({}, node), {}, {
627
627
  directives: directives
628
628
  })]);
629
629
 
@@ -1317,7 +1317,7 @@ function buildLocation(loc) {
1317
1317
  function applyConditions(conditions, selections) {
1318
1318
  var nextSelections = selections;
1319
1319
  conditions.forEach(function (condition) {
1320
- nextSelections = [_objectSpread({}, condition, {
1320
+ nextSelections = [_objectSpread(_objectSpread({}, condition), {}, {
1321
1321
  selections: nextSelections
1322
1322
  })];
1323
1323
  });
@@ -15,9 +15,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
15
15
 
16
16
  var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
17
17
 
18
- 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; } } }; }
18
+ 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; } } }; }
19
19
 
20
- 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
+ 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); }
21
21
 
22
22
  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; }
23
23
 
@@ -198,12 +198,13 @@ var NonNull = /*#__PURE__*/function () {
198
198
  */
199
199
 
200
200
 
201
- var Field = function Field(schema, name, type, belongsTo, args, isClient) {
201
+ var Field = function Field(schema, name, type, belongsTo, args, directives, isClient) {
202
202
  this.name = name;
203
203
  this.type = type;
204
204
  this.belongsTo = belongsTo;
205
205
  this.isClient = isClient;
206
206
  this.args = parseInputArgumentDefinitionsMap(schema, args);
207
+ this.directives = directives;
207
208
  };
208
209
  /**
209
210
  * @private
@@ -460,6 +461,27 @@ var Schema = /*#__PURE__*/function () {
460
461
  return type;
461
462
  };
462
463
 
464
+ _proto4.mapListItemType = function mapListItemType(type, mapper) {
465
+ if (!(type instanceof List)) {
466
+ throw createCompilerError('Expected List type');
467
+ }
468
+
469
+ var innerType = mapper(type.ofType);
470
+ var cacheKey = "[".concat(this.getTypeString(innerType), "]");
471
+
472
+ var newType = this._typeWrappersMap.get(cacheKey);
473
+
474
+ if (newType) {
475
+ return newType;
476
+ }
477
+
478
+ newType = new List(innerType);
479
+
480
+ this._typeWrappersMap.set(cacheKey, newType);
481
+
482
+ return newType;
483
+ };
484
+
463
485
  _proto4.areEqualTypes = function areEqualTypes(typeA, typeB) {
464
486
  if (typeA === typeB) {
465
487
  return true;
@@ -667,6 +689,14 @@ var Schema = /*#__PURE__*/function () {
667
689
  return type;
668
690
  };
669
691
 
692
+ _proto4.asInputObjectType = function asInputObjectType(type) {
693
+ if (!_isInputObject(type)) {
694
+ return null;
695
+ }
696
+
697
+ return type;
698
+ };
699
+
670
700
  _proto4.assertInterfaceType = function assertInterfaceType(type) {
671
701
  if (!_isInterface(type)) {
672
702
  throw createCompilerError("Expected ".concat(this.getTypeString(type), " to be an interface type."));
@@ -975,7 +1005,7 @@ var Schema = /*#__PURE__*/function () {
975
1005
  fieldName = _step$value[0],
976
1006
  fieldDefinition = _step$value[1];
977
1007
  var fieldType = this.expectTypeFromAST(fieldDefinition.type);
978
- fieldsMap.set(fieldName, new Field(this, fieldName, fieldType, this.assertCompositeType(type), fieldDefinition.arguments, fieldDefinition.isClient));
1008
+ fieldsMap.set(fieldName, new Field(this, fieldName, fieldType, this.assertCompositeType(type), fieldDefinition.arguments, fieldDefinition.directives, fieldDefinition.isClient));
979
1009
  }
980
1010
  } catch (err) {
981
1011
  _iterator.e(err);
@@ -998,7 +1028,7 @@ var Schema = /*#__PURE__*/function () {
998
1028
 
999
1029
  var _fieldType = this.expectTypeFromAST(typeNode);
1000
1030
 
1001
- fieldsMap.set(_fieldName, new Field(this, _fieldName, _fieldType, type, [], false));
1031
+ fieldsMap.set(_fieldName, new Field(this, _fieldName, _fieldType, type, [], null, false));
1002
1032
  }
1003
1033
  } catch (err) {
1004
1034
  _iterator2.e(err);
@@ -1028,7 +1058,7 @@ var Schema = /*#__PURE__*/function () {
1028
1058
  var typename = this._typeNameMap.get(type);
1029
1059
 
1030
1060
  if (!typename) {
1031
- typename = new Field(this, TYPENAME_FIELD, this.getNonNullType(this.expectStringType()), type, [], false);
1061
+ typename = new Field(this, TYPENAME_FIELD, this.getNonNullType(this.expectStringType()), type, [], null, false);
1032
1062
 
1033
1063
  this._typeNameMap.set(type, typename);
1034
1064
  }
@@ -1040,7 +1070,7 @@ var Schema = /*#__PURE__*/function () {
1040
1070
  var clientId = this._clientIdMap.get(type);
1041
1071
 
1042
1072
  if (!clientId) {
1043
- clientId = new Field(this, CLIENT_ID_FIELD, this.getNonNullType(this.expectIdType()), type, [], true);
1073
+ clientId = new Field(this, CLIENT_ID_FIELD, this.getNonNullType(this.expectIdType()), type, [], null, true);
1044
1074
 
1045
1075
  this._clientIdMap.set(type, clientId);
1046
1076
  }
@@ -1566,6 +1596,17 @@ var TypeMap = /*#__PURE__*/function () {
1566
1596
  defaultValue: arg.defaultValue
1567
1597
  };
1568
1598
  }) : [],
1599
+ directives: fieldNode.directives ? fieldNode.directives.map(function (directive) {
1600
+ return {
1601
+ name: directive.name.value,
1602
+ args: directive.arguments ? directive.arguments.map(function (arg) {
1603
+ return {
1604
+ name: arg.name.value,
1605
+ value: arg.value
1606
+ };
1607
+ }) : []
1608
+ };
1609
+ }) : null,
1569
1610
  type: fieldNode.type,
1570
1611
  isClient: isClient
1571
1612
  });
@@ -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
 
@@ -14,9 +14,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
14
14
 
15
15
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
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
 
@@ -64,7 +64,7 @@ function inferRootArgumentDefinitions(context) {
64
64
  case 'Fragment':
65
65
  {
66
66
  var argumentDefinitions = transformFragmentArguments(context, transformed, node);
67
- return _objectSpread({}, node, {
67
+ return _objectSpread(_objectSpread({}, node), {}, {
68
68
  argumentDefinitions: Array.from(argumentDefinitions.values())
69
69
  });
70
70
  }
@@ -114,7 +114,7 @@ function transformRoot(context, transformed, root) {
114
114
  }
115
115
 
116
116
  visit(context, transformed, argumentDefinitions, root);
117
- return _objectSpread({}, root, {
117
+ return _objectSpread(_objectSpread({}, root), {}, {
118
118
  argumentDefinitions: Array.from(argumentDefinitions.values(), function (argDef) {
119
119
  var _localDefinition$type, _localDefinition$defa;
120
120
 
@@ -31,47 +31,10 @@ var BABYLON_OPTIONS = {
31
31
  };
32
32
 
33
33
  function find(text) {
34
- var result = [];
34
+ var result = []; // $FlowFixMe Discovered when typing babel/parser
35
+
35
36
  var ast = babylon.parse(text, BABYLON_OPTIONS);
36
37
  var visitors = {
37
- CallExpression: function CallExpression(node) {
38
- var callee = node.callee;
39
-
40
- if (!(callee.type === 'Identifier' && CREATE_CONTAINER_FUNCTIONS[callee.name] || callee.kind === 'MemberExpression' && callee.object.type === 'Identifier' && callee.object.value === 'Relay' && callee.property.type === 'Identifier' && CREATE_CONTAINER_FUNCTIONS[callee.property.name])) {
41
- traverse(node, visitors);
42
- return;
43
- }
44
-
45
- var fragments = node.arguments[1];
46
-
47
- if (fragments.type === 'ObjectExpression') {
48
- fragments.properties.forEach(function (property) {
49
- !(property.type === 'ObjectProperty' && property.key.type === 'Identifier' && property.value.type === 'TaggedTemplateExpression') ? process.env.NODE_ENV !== "production" ? invariant(false, 'FindGraphQLTags: `%s` expects fragment definitions to be ' + '`key: graphql`.', node.callee.name) : invariant(false) : void 0;
50
- !isGraphQLModernOrDeprecatedTag(property.value.tag) ? process.env.NODE_ENV !== "production" ? invariant(false, 'FindGraphQLTags: `%s` expects fragment definitions to be tagged ' + 'with `graphql`, got `%s`.', node.callee.name, getSourceTextForLocation(text, property.value.tag.loc)) : invariant(false) : void 0;
51
-
52
- if (isGraphQLTag(property.value.tag)) {
53
- result.push({
54
- keyName: property.key.name,
55
- template: getGraphQLText(property.value.quasi),
56
- sourceLocationOffset: getSourceLocationOffset(property.value.quasi)
57
- });
58
- }
59
- });
60
- } else {
61
- !(fragments && fragments.type === 'TaggedTemplateExpression') ? process.env.NODE_ENV !== "production" ? invariant(false, 'FindGraphQLTags: `%s` expects a second argument of fragment ' + 'definitions.', node.callee.name) : invariant(false) : void 0;
62
- !isGraphQLModernOrDeprecatedTag(fragments.tag) ? process.env.NODE_ENV !== "production" ? invariant(false, 'FindGraphQLTags: `%s` expects fragment definitions to be tagged ' + 'with `graphql`, got `%s`.', node.callee.name, getSourceTextForLocation(text, fragments.tag.loc)) : invariant(false) : void 0;
63
- result.push({
64
- keyName: null,
65
- template: getGraphQLText(fragments.quasi),
66
- sourceLocationOffset: getSourceLocationOffset(fragments.quasi)
67
- });
68
- } // Visit remaining arguments
69
-
70
-
71
- for (var ii = 2; ii < node.arguments.length; ii++) {
72
- visit(node.arguments[ii], visitors);
73
- }
74
- },
75
38
  TaggedTemplateExpression: function TaggedTemplateExpression(node) {
76
39
  if (isGraphQLTag(node.tag)) {
77
40
  result.push({
@@ -86,17 +49,6 @@ function find(text) {
86
49
  return result;
87
50
  }
88
51
 
89
- var CREATE_CONTAINER_FUNCTIONS = Object.create(null, {
90
- createFragmentContainer: {
91
- value: true
92
- },
93
- createPaginationContainer: {
94
- value: true
95
- },
96
- createRefetchContainer: {
97
- value: true
98
- }
99
- });
100
52
  var IGNORED_KEYS = {
101
53
  comments: true,
102
54
  end: true,
@@ -112,20 +64,12 @@ function isGraphQLTag(tag) {
112
64
  return tag.type === 'Identifier' && tag.name === 'graphql';
113
65
  }
114
66
 
115
- function isGraphQLModernOrDeprecatedTag(tag) {
116
- return tag.type === 'Identifier' && (tag.name === 'graphql' || tag.name === 'graphql_DEPRECATED');
117
- }
118
-
119
67
  function getTemplateNode(quasi) {
120
68
  var quasis = quasi.quasis;
121
69
  !(quasis && quasis.length === 1) ? process.env.NODE_ENV !== "production" ? invariant(false, 'FindGraphQLTags: Substitutions are not allowed in graphql tags.') : invariant(false) : void 0;
122
70
  return quasis[0];
123
71
  }
124
72
 
125
- function getGraphQLText(quasi) {
126
- return getTemplateNode(quasi).value.raw;
127
- }
128
-
129
73
  function getSourceLocationOffset(quasi) {
130
74
  var loc = getTemplateNode(quasi).loc.start;
131
75
  return {
@@ -135,17 +79,6 @@ function getSourceLocationOffset(quasi) {
135
79
  };
136
80
  }
137
81
 
138
- function getSourceTextForLocation(text, loc) {
139
- if (loc == null) {
140
- return '(source unavailable)';
141
- }
142
-
143
- var lines = text.split('\n').slice(loc.start.line - 1, loc.end.line);
144
- lines[0] = lines[0].slice(loc.start.column);
145
- lines[lines.length - 1] = lines[lines.length - 1].slice(0, loc.end.column);
146
- return lines.join('\n');
147
- }
148
-
149
82
  function invariant(condition, msg) {
150
83
  if (!condition) {
151
84
  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
@@ -157,6 +90,7 @@ function invariant(condition, msg) {
157
90
  }
158
91
 
159
92
  function visit(node, visitors) {
93
+ // $FlowFixMe Discovered when typing babel
160
94
  var fn = visitors[node.type];
161
95
 
162
96
  if (fn != null) {
@@ -18,7 +18,7 @@ var t = require('@babel/types');
18
18
  * type NAME = any;
19
19
  */
20
20
  function anyTypeAlias(name) {
21
- return t.typeAlias(t.identifier(name), null, t.anyTypeAnnotation());
21
+ return t.typeAlias(t.identifier(name), undefined, t.anyTypeAnnotation());
22
22
  }
23
23
  /**
24
24
  * {|
@@ -51,7 +51,7 @@ function inexactObjectTypeAnnotation(props) {
51
51
 
52
52
 
53
53
  function exportType(name, type) {
54
- return t.exportNamedDeclaration(t.typeAlias(t.identifier(name), null, type), [], null);
54
+ return t.exportNamedDeclaration(t.typeAlias(t.identifier(name), undefined, type), [], undefined);
55
55
  }
56
56
  /**
57
57
  * export type {A, B, C}
@@ -59,9 +59,9 @@ function exportType(name, type) {
59
59
 
60
60
 
61
61
  function exportTypes(names) {
62
- var res = t.exportNamedDeclaration(null, names.map(function (name) {
62
+ var res = t.exportNamedDeclaration(undefined, names.map(function (name) {
63
63
  return t.exportSpecifier(t.identifier(name), t.identifier(name));
64
- }), null);
64
+ }), undefined);
65
65
  res.exportKind = 'type';
66
66
  return res;
67
67
  }
@@ -71,7 +71,7 @@ function exportTypes(names) {
71
71
 
72
72
 
73
73
  function declareExportOpaqueType(name, value) {
74
- return t.declareExportDeclaration(t.declareOpaqueType(t.identifier(name), null, t.genericTypeAnnotation(t.identifier(value))));
74
+ return t.declareExportDeclaration(t.declareOpaqueType(t.identifier(name), undefined, t.genericTypeAnnotation(t.identifier(value))));
75
75
  }
76
76
  /**
77
77
  * import type {NAMES[0], NAMES[1], ...} from 'MODULE';