graphql 14.0.0 → 14.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. package/README.md +4 -4
  2. package/error/GraphQLError.js +1 -1
  3. package/error/GraphQLError.js.flow +3 -3
  4. package/error/GraphQLError.mjs +1 -1
  5. package/error/formatError.js +1 -1
  6. package/error/formatError.mjs +1 -1
  7. package/error/index.mjs +1 -1
  8. package/error/locatedError.js +1 -1
  9. package/error/locatedError.mjs +1 -1
  10. package/error/printError.js +1 -1
  11. package/error/printError.mjs +1 -1
  12. package/error/syntaxError.js +1 -1
  13. package/error/syntaxError.mjs +1 -1
  14. package/execution/execute.js +4 -4
  15. package/execution/execute.js.flow +4 -6
  16. package/execution/execute.mjs +5 -5
  17. package/execution/index.mjs +1 -1
  18. package/execution/values.js +4 -4
  19. package/execution/values.js.flow +3 -3
  20. package/execution/values.mjs +3 -3
  21. package/graphql.js +1 -1
  22. package/graphql.mjs +1 -1
  23. package/index.js +12 -0
  24. package/index.js.flow +4 -0
  25. package/index.mjs +4 -4
  26. package/jsutils/dedent.js +2 -2
  27. package/jsutils/dedent.js.flow +1 -1
  28. package/jsutils/dedent.mjs +2 -2
  29. package/jsutils/defineToJSON.js +17 -6
  30. package/jsutils/defineToJSON.js.flow +14 -5
  31. package/jsutils/defineToJSON.mjs +14 -6
  32. package/jsutils/defineToStringTag.js +5 -5
  33. package/jsutils/defineToStringTag.js.flow +3 -3
  34. package/jsutils/defineToStringTag.mjs +4 -4
  35. package/jsutils/inspect.js +46 -12
  36. package/jsutils/inspect.js.flow +42 -15
  37. package/jsutils/inspect.mjs +45 -5
  38. package/jsutils/instanceOf.js +1 -1
  39. package/jsutils/instanceOf.mjs +1 -1
  40. package/jsutils/invariant.js +1 -1
  41. package/jsutils/invariant.mjs +1 -1
  42. package/jsutils/isInvalid.js +1 -1
  43. package/jsutils/isInvalid.mjs +1 -1
  44. package/jsutils/isNullish.js +1 -1
  45. package/jsutils/isNullish.mjs +1 -1
  46. package/jsutils/isPromise.js +1 -1
  47. package/jsutils/isPromise.mjs +1 -1
  48. package/jsutils/keyMap.js +1 -1
  49. package/jsutils/keyMap.mjs +1 -1
  50. package/jsutils/keyValMap.js +1 -1
  51. package/jsutils/keyValMap.mjs +1 -1
  52. package/jsutils/mapValue.js +54 -0
  53. package/jsutils/mapValue.js.flow +27 -0
  54. package/jsutils/mapValue.mjs +44 -0
  55. package/jsutils/memoize3.js +1 -1
  56. package/jsutils/memoize3.mjs +1 -1
  57. package/jsutils/nodejsCustomInspectSymbol.js +18 -0
  58. package/jsutils/nodejsCustomInspectSymbol.js.flow +15 -0
  59. package/jsutils/nodejsCustomInspectSymbol.mjs +10 -0
  60. package/jsutils/orList.js +17 -4
  61. package/jsutils/orList.js.flow +13 -7
  62. package/jsutils/orList.mjs +14 -4
  63. package/jsutils/promiseForObject.js +1 -1
  64. package/jsutils/promiseForObject.mjs +1 -1
  65. package/jsutils/promiseReduce.js +1 -1
  66. package/jsutils/promiseReduce.mjs +1 -1
  67. package/jsutils/quotedOrList.js +1 -1
  68. package/jsutils/quotedOrList.mjs +1 -1
  69. package/jsutils/suggestionList.js +1 -1
  70. package/jsutils/suggestionList.mjs +1 -1
  71. package/language/blockStringValue.js +2 -2
  72. package/language/blockStringValue.js.flow +1 -1
  73. package/language/blockStringValue.mjs +2 -2
  74. package/language/directiveLocation.js +1 -1
  75. package/language/directiveLocation.mjs +1 -1
  76. package/language/index.mjs +1 -1
  77. package/language/kinds.js +1 -1
  78. package/language/kinds.mjs +1 -1
  79. package/language/lexer.js +29 -13
  80. package/language/lexer.js.flow +34 -20
  81. package/language/lexer.mjs +28 -13
  82. package/language/location.js +1 -1
  83. package/language/location.mjs +1 -1
  84. package/language/parser.js +31 -38
  85. package/language/parser.js.flow +32 -48
  86. package/language/parser.mjs +30 -38
  87. package/language/predicates.js +1 -1
  88. package/language/predicates.mjs +1 -1
  89. package/language/printer.js +13 -7
  90. package/language/printer.js.flow +19 -9
  91. package/language/printer.mjs +13 -7
  92. package/language/source.js +8 -7
  93. package/language/source.mjs +1 -9
  94. package/language/visitor.js +11 -20
  95. package/language/visitor.js.flow +4 -5
  96. package/language/visitor.mjs +8 -20
  97. package/package.json +10 -3
  98. package/polyfills/find.js +31 -0
  99. package/polyfills/find.js.flow +29 -0
  100. package/polyfills/find.mjs +23 -0
  101. package/{jsutils → polyfills}/isFinite.js +1 -1
  102. package/{jsutils → polyfills}/isFinite.js.flow +0 -0
  103. package/{jsutils → polyfills}/isFinite.mjs +1 -1
  104. package/{jsutils → polyfills}/isInteger.js +1 -1
  105. package/{jsutils → polyfills}/isInteger.js.flow +0 -0
  106. package/{jsutils → polyfills}/isInteger.mjs +1 -1
  107. package/polyfills/objectEntries.js +26 -0
  108. package/polyfills/objectEntries.js.flow +19 -0
  109. package/polyfills/objectEntries.mjs +18 -0
  110. package/{jsutils → polyfills}/objectValues.js +1 -1
  111. package/{jsutils → polyfills}/objectValues.js.flow +1 -1
  112. package/{jsutils → polyfills}/objectValues.mjs +1 -1
  113. package/subscription/asyncIteratorReject.mjs +1 -1
  114. package/subscription/index.mjs +1 -1
  115. package/subscription/mapAsyncIterator.mjs +1 -1
  116. package/subscription/subscribe.js +1 -1
  117. package/subscription/subscribe.js.flow +1 -1
  118. package/subscription/subscribe.mjs +2 -2
  119. package/type/definition.js +31 -130
  120. package/type/definition.js.flow +35 -47
  121. package/type/definition.mjs +30 -131
  122. package/type/directives.js +25 -29
  123. package/type/directives.js.flow +24 -20
  124. package/type/directives.mjs +22 -30
  125. package/type/index.js +12 -0
  126. package/type/index.js.flow +4 -0
  127. package/type/index.mjs +5 -3
  128. package/type/introspection.js +3 -3
  129. package/type/introspection.js.flow +1 -1
  130. package/type/introspection.mjs +2 -2
  131. package/type/scalars.js +45 -34
  132. package/type/scalars.js.flow +40 -26
  133. package/type/scalars.mjs +44 -26
  134. package/type/schema.js +82 -87
  135. package/type/schema.js.flow +17 -9
  136. package/type/schema.mjs +79 -86
  137. package/type/validate.js +168 -175
  138. package/type/validate.js.flow +8 -49
  139. package/type/validate.mjs +159 -175
  140. package/utilities/TypeInfo.js +10 -23
  141. package/utilities/TypeInfo.js.flow +1 -1
  142. package/utilities/TypeInfo.mjs +2 -24
  143. package/utilities/assertValidName.js +1 -1
  144. package/utilities/assertValidName.mjs +1 -1
  145. package/utilities/astFromValue.js +2 -2
  146. package/utilities/astFromValue.js.flow +1 -1
  147. package/utilities/astFromValue.mjs +2 -2
  148. package/utilities/buildASTSchema.js +169 -152
  149. package/utilities/buildASTSchema.js.flow +117 -113
  150. package/utilities/buildASTSchema.mjs +160 -152
  151. package/utilities/buildClientSchema.js +24 -14
  152. package/utilities/buildClientSchema.js.flow +24 -14
  153. package/utilities/buildClientSchema.mjs +23 -14
  154. package/utilities/coerceValue.js +38 -19
  155. package/utilities/coerceValue.js.flow +41 -47
  156. package/utilities/coerceValue.mjs +38 -20
  157. package/utilities/concatAST.js +1 -1
  158. package/utilities/concatAST.mjs +1 -1
  159. package/utilities/extendSchema.js +228 -312
  160. package/utilities/extendSchema.js.flow +27 -152
  161. package/utilities/extendSchema.mjs +229 -312
  162. package/utilities/findBreakingChanges.js +7 -5
  163. package/utilities/findBreakingChanges.js.flow +3 -2
  164. package/utilities/findBreakingChanges.mjs +6 -5
  165. package/utilities/findDeprecatedUsages.js +1 -1
  166. package/utilities/findDeprecatedUsages.mjs +1 -1
  167. package/utilities/getOperationAST.js +1 -1
  168. package/utilities/getOperationAST.mjs +1 -1
  169. package/utilities/getOperationRootType.js +1 -1
  170. package/utilities/getOperationRootType.mjs +1 -1
  171. package/utilities/index.mjs +1 -1
  172. package/utilities/introspectionFromSchema.js +1 -1
  173. package/utilities/introspectionFromSchema.mjs +1 -1
  174. package/utilities/introspectionQuery.js +1 -1
  175. package/utilities/introspectionQuery.mjs +1 -1
  176. package/utilities/isValidJSValue.js +1 -1
  177. package/utilities/isValidJSValue.mjs +1 -1
  178. package/utilities/isValidLiteralValue.js +1 -1
  179. package/utilities/isValidLiteralValue.mjs +1 -1
  180. package/utilities/lexicographicSortSchema.js +2 -2
  181. package/utilities/lexicographicSortSchema.js.flow +1 -1
  182. package/utilities/lexicographicSortSchema.mjs +2 -2
  183. package/utilities/schemaPrinter.js +3 -3
  184. package/utilities/schemaPrinter.js.flow +1 -1
  185. package/utilities/schemaPrinter.mjs +2 -2
  186. package/utilities/separateOperations.js +1 -1
  187. package/utilities/separateOperations.mjs +1 -1
  188. package/utilities/typeComparators.js +1 -1
  189. package/utilities/typeComparators.mjs +1 -1
  190. package/utilities/typeFromAST.js +1 -1
  191. package/utilities/typeFromAST.mjs +1 -1
  192. package/utilities/valueFromAST.js +3 -3
  193. package/utilities/valueFromAST.js.flow +1 -1
  194. package/utilities/valueFromAST.mjs +2 -2
  195. package/utilities/valueFromASTUntyped.js +1 -1
  196. package/utilities/valueFromASTUntyped.mjs +1 -1
  197. package/validation/ValidationContext.js +57 -82
  198. package/validation/ValidationContext.js.flow +52 -49
  199. package/validation/ValidationContext.mjs +52 -77
  200. package/validation/index.js.flow +1 -0
  201. package/validation/index.mjs +1 -1
  202. package/validation/rules/ExecutableDefinitions.js +1 -1
  203. package/validation/rules/ExecutableDefinitions.js.flow +1 -1
  204. package/validation/rules/ExecutableDefinitions.mjs +1 -1
  205. package/validation/rules/FieldsOnCorrectType.js +1 -1
  206. package/validation/rules/FieldsOnCorrectType.mjs +1 -1
  207. package/validation/rules/FragmentsOnCompositeTypes.js +1 -1
  208. package/validation/rules/FragmentsOnCompositeTypes.mjs +1 -1
  209. package/validation/rules/KnownArgumentNames.mjs +1 -1
  210. package/validation/rules/KnownDirectives.js +1 -1
  211. package/validation/rules/KnownDirectives.mjs +1 -1
  212. package/validation/rules/KnownFragmentNames.js +1 -1
  213. package/validation/rules/KnownFragmentNames.mjs +1 -1
  214. package/validation/rules/KnownTypeNames.js +59 -21
  215. package/validation/rules/KnownTypeNames.js.flow +54 -20
  216. package/validation/rules/KnownTypeNames.mjs +56 -21
  217. package/validation/rules/LoneAnonymousOperation.js +1 -1
  218. package/validation/rules/LoneAnonymousOperation.mjs +1 -1
  219. package/validation/rules/LoneSchemaDefinition.js +1 -1
  220. package/validation/rules/LoneSchemaDefinition.mjs +1 -1
  221. package/validation/rules/NoFragmentCycles.js +1 -1
  222. package/validation/rules/NoFragmentCycles.js.flow +2 -2
  223. package/validation/rules/NoFragmentCycles.mjs +1 -1
  224. package/validation/rules/NoUndefinedVariables.js +1 -1
  225. package/validation/rules/NoUndefinedVariables.mjs +1 -1
  226. package/validation/rules/NoUnusedFragments.js +1 -1
  227. package/validation/rules/NoUnusedFragments.js.flow +2 -2
  228. package/validation/rules/NoUnusedFragments.mjs +1 -1
  229. package/validation/rules/NoUnusedVariables.js +1 -1
  230. package/validation/rules/NoUnusedVariables.mjs +1 -1
  231. package/validation/rules/OverlappingFieldsCanBeMerged.js +57 -33
  232. package/validation/rules/OverlappingFieldsCanBeMerged.js.flow +5 -6
  233. package/validation/rules/OverlappingFieldsCanBeMerged.mjs +48 -33
  234. package/validation/rules/PossibleFragmentSpreads.js +1 -1
  235. package/validation/rules/PossibleFragmentSpreads.mjs +1 -1
  236. package/validation/rules/PossibleTypeExtensions.js +158 -0
  237. package/validation/rules/PossibleTypeExtensions.js.flow +160 -0
  238. package/validation/rules/PossibleTypeExtensions.mjs +146 -0
  239. package/validation/rules/ProvidedRequiredArguments.mjs +1 -1
  240. package/validation/rules/ScalarLeafs.js +1 -1
  241. package/validation/rules/ScalarLeafs.mjs +1 -1
  242. package/validation/rules/SingleFieldSubscriptions.js +1 -1
  243. package/validation/rules/SingleFieldSubscriptions.mjs +1 -1
  244. package/validation/rules/UniqueArgumentNames.js +1 -1
  245. package/validation/rules/UniqueArgumentNames.mjs +1 -1
  246. package/validation/rules/UniqueDirectiveNames.js +55 -0
  247. package/validation/rules/UniqueDirectiveNames.js.flow +64 -0
  248. package/validation/rules/UniqueDirectiveNames.mjs +43 -0
  249. package/validation/rules/UniqueDirectivesPerLocation.js +1 -1
  250. package/validation/rules/UniqueDirectivesPerLocation.mjs +1 -1
  251. package/validation/rules/UniqueEnumValueNames.js +94 -0
  252. package/validation/rules/UniqueEnumValueNames.js.flow +87 -0
  253. package/validation/rules/UniqueEnumValueNames.mjs +81 -0
  254. package/validation/rules/UniqueFieldDefinitionNames.js +105 -0
  255. package/validation/rules/UniqueFieldDefinitionNames.js.flow +101 -0
  256. package/validation/rules/UniqueFieldDefinitionNames.mjs +92 -0
  257. package/validation/rules/UniqueFragmentNames.js +1 -1
  258. package/validation/rules/UniqueFragmentNames.mjs +1 -1
  259. package/validation/rules/UniqueInputFieldNames.js +1 -1
  260. package/validation/rules/UniqueInputFieldNames.mjs +1 -1
  261. package/validation/rules/UniqueOperationNames.js +1 -1
  262. package/validation/rules/UniqueOperationNames.mjs +1 -1
  263. package/validation/rules/UniqueOperationTypes.js +85 -0
  264. package/validation/rules/UniqueOperationTypes.js.flow +76 -0
  265. package/validation/rules/UniqueOperationTypes.mjs +73 -0
  266. package/validation/rules/UniqueTypeNames.js +62 -0
  267. package/validation/rules/UniqueTypeNames.js.flow +67 -0
  268. package/validation/rules/UniqueTypeNames.mjs +50 -0
  269. package/validation/rules/UniqueVariableNames.js +1 -1
  270. package/validation/rules/UniqueVariableNames.mjs +1 -1
  271. package/validation/rules/ValuesOfCorrectType.js +29 -13
  272. package/validation/rules/ValuesOfCorrectType.js.flow +4 -5
  273. package/validation/rules/ValuesOfCorrectType.mjs +28 -13
  274. package/validation/rules/VariablesAreInputTypes.js +1 -1
  275. package/validation/rules/VariablesAreInputTypes.mjs +1 -1
  276. package/validation/rules/VariablesInAllowedPosition.js +4 -4
  277. package/validation/rules/VariablesInAllowedPosition.mjs +4 -4
  278. package/validation/specifiedRules.js +14 -2
  279. package/validation/specifiedRules.js.flow +13 -0
  280. package/validation/specifiedRules.mjs +8 -2
  281. package/validation/validate.js +1 -1
  282. package/validation/validate.mjs +1 -1
  283. package/jsutils/find.js +0 -22
  284. package/jsutils/find.js.flow +0 -19
  285. package/jsutils/find.mjs +0 -15
@@ -4,9 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.isDirective = isDirective;
7
+ exports.assertDirective = assertDirective;
7
8
  exports.isSpecifiedDirective = isSpecifiedDirective;
8
9
  exports.specifiedDirectives = exports.GraphQLDeprecatedDirective = exports.DEFAULT_DEPRECATION_REASON = exports.GraphQLSkipDirective = exports.GraphQLIncludeDirective = exports.GraphQLDirective = void 0;
9
10
 
11
+ var _objectEntries = _interopRequireDefault(require("../polyfills/objectEntries"));
12
+
10
13
  var _definition = require("./definition");
11
14
 
12
15
  var _scalars = require("./scalars");
@@ -19,16 +22,23 @@ var _instanceOf = _interopRequireDefault(require("../jsutils/instanceOf"));
19
22
 
20
23
  var _invariant = _interopRequireDefault(require("../jsutils/invariant"));
21
24
 
25
+ var _inspect = _interopRequireDefault(require("../jsutils/inspect"));
26
+
22
27
  var _directiveLocation = require("../language/directiveLocation");
23
28
 
24
29
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
30
 
26
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
31
+ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
27
32
 
28
33
  // eslint-disable-next-line no-redeclare
29
34
  function isDirective(directive) {
30
35
  return (0, _instanceOf.default)(directive, GraphQLDirective);
31
36
  }
37
+
38
+ function assertDirective(directive) {
39
+ !isDirective(directive) ? (0, _invariant.default)(0, "Expected ".concat((0, _inspect.default)(directive), " to be a GraphQL directive.")) : void 0;
40
+ return directive;
41
+ }
32
42
  /**
33
43
  * Directives are used by the GraphQL runtime as a way of modifying execution
34
44
  * behavior. Type system creators will usually not create these directly.
@@ -39,39 +49,25 @@ var GraphQLDirective =
39
49
  /*#__PURE__*/
40
50
  function () {
41
51
  function GraphQLDirective(config) {
42
- _defineProperty(this, "name", void 0);
43
-
44
- _defineProperty(this, "description", void 0);
45
-
46
- _defineProperty(this, "locations", void 0);
47
-
48
- _defineProperty(this, "args", void 0);
49
-
50
- _defineProperty(this, "astNode", void 0);
51
-
52
52
  this.name = config.name;
53
53
  this.description = config.description;
54
54
  this.locations = config.locations;
55
55
  this.astNode = config.astNode;
56
56
  !config.name ? (0, _invariant.default)(0, 'Directive must be named.') : void 0;
57
- !Array.isArray(config.locations) ? (0, _invariant.default)(0, 'Must provide locations for directive.') : void 0;
58
- var args = config.args;
59
-
60
- if (!args) {
61
- this.args = [];
62
- } else {
63
- !!Array.isArray(args) ? (0, _invariant.default)(0, "@".concat(config.name, " args must be an object with argument names as keys.")) : void 0;
64
- this.args = Object.keys(args).map(function (argName) {
65
- var arg = args[argName];
66
- return {
67
- name: argName,
68
- description: arg.description === undefined ? null : arg.description,
69
- type: arg.type,
70
- defaultValue: arg.defaultValue,
71
- astNode: arg.astNode
72
- };
73
- });
74
- }
57
+ !Array.isArray(config.locations) ? (0, _invariant.default)(0, "@".concat(config.name, " locations must be an Array.")) : void 0;
58
+ var args = config.args || {};
59
+ !(_typeof(args) === 'object' && !Array.isArray(args)) ? (0, _invariant.default)(0, "@".concat(config.name, " args must be an object with argument names as keys.")) : void 0;
60
+ this.args = (0, _objectEntries.default)(args).map(function (_ref) {
61
+ var argName = _ref[0],
62
+ arg = _ref[1];
63
+ return {
64
+ name: argName,
65
+ description: arg.description === undefined ? null : arg.description,
66
+ type: arg.type,
67
+ defaultValue: arg.defaultValue,
68
+ astNode: arg.astNode
69
+ };
70
+ });
75
71
  }
76
72
 
77
73
  var _proto = GraphQLDirective.prototype;
@@ -7,6 +7,7 @@
7
7
  * @flow strict
8
8
  */
9
9
 
10
+ import objectEntries from '../polyfills/objectEntries';
10
11
  import type {
11
12
  GraphQLFieldConfigArgumentMap,
12
13
  GraphQLArgument,
@@ -17,6 +18,7 @@ import defineToStringTag from '../jsutils/defineToStringTag';
17
18
  import defineToJSON from '../jsutils/defineToJSON';
18
19
  import instanceOf from '../jsutils/instanceOf';
19
20
  import invariant from '../jsutils/invariant';
21
+ import inspect from '../jsutils/inspect';
20
22
  import type { DirectiveDefinitionNode } from '../language/ast';
21
23
  import {
22
24
  DirectiveLocation,
@@ -34,6 +36,14 @@ export function isDirective(directive) {
34
36
  return instanceOf(directive, GraphQLDirective);
35
37
  }
36
38
 
39
+ export function assertDirective(directive: mixed): GraphQLDirective {
40
+ invariant(
41
+ isDirective(directive),
42
+ `Expected ${inspect(directive)} to be a GraphQL directive.`,
43
+ );
44
+ return directive;
45
+ }
46
+
37
47
  /**
38
48
  * Directives are used by the GraphQL runtime as a way of modifying execution
39
49
  * behavior. Type system creators will usually not create these directly.
@@ -53,28 +63,22 @@ export class GraphQLDirective {
53
63
  invariant(config.name, 'Directive must be named.');
54
64
  invariant(
55
65
  Array.isArray(config.locations),
56
- 'Must provide locations for directive.',
66
+ `@${config.name} locations must be an Array.`,
67
+ );
68
+
69
+ const args = config.args || {};
70
+ invariant(
71
+ typeof args === 'object' && !Array.isArray(args),
72
+ `@${config.name} args must be an object with argument names as keys.`,
57
73
  );
58
74
 
59
- const args = config.args;
60
- if (!args) {
61
- this.args = [];
62
- } else {
63
- invariant(
64
- !Array.isArray(args),
65
- `@${config.name} args must be an object with argument names as keys.`,
66
- );
67
- this.args = Object.keys(args).map(argName => {
68
- const arg = args[argName];
69
- return {
70
- name: argName,
71
- description: arg.description === undefined ? null : arg.description,
72
- type: arg.type,
73
- defaultValue: arg.defaultValue,
74
- astNode: arg.astNode,
75
- };
76
- });
77
- }
75
+ this.args = objectEntries(args).map(([argName, arg]) => ({
76
+ name: argName,
77
+ description: arg.description === undefined ? null : arg.description,
78
+ type: arg.type,
79
+ defaultValue: arg.defaultValue,
80
+ astNode: arg.astNode,
81
+ }));
78
82
  }
79
83
 
80
84
  toString(): string {
@@ -1,4 +1,4 @@
1
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
1
+ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
2
2
 
3
3
  /**
4
4
  * Copyright (c) 2015-present, Facebook, Inc.
@@ -6,14 +6,16 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
6
6
  * This source code is licensed under the MIT license found in the
7
7
  * LICENSE file in the root directory of this source tree.
8
8
  *
9
- * strict
9
+ *
10
10
  */
11
+ import objectEntries from '../polyfills/objectEntries';
11
12
  import { GraphQLNonNull } from './definition';
12
13
  import { GraphQLString, GraphQLBoolean } from './scalars';
13
14
  import defineToStringTag from '../jsutils/defineToStringTag';
14
15
  import defineToJSON from '../jsutils/defineToJSON';
15
16
  import instanceOf from '../jsutils/instanceOf';
16
17
  import invariant from '../jsutils/invariant';
18
+ import inspect from '../jsutils/inspect';
17
19
  import { DirectiveLocation } from '../language/directiveLocation';
18
20
  /**
19
21
  * Test if the given value is a GraphQL directive.
@@ -23,6 +25,10 @@ import { DirectiveLocation } from '../language/directiveLocation';
23
25
  export function isDirective(directive) {
24
26
  return instanceOf(directive, GraphQLDirective);
25
27
  }
28
+ export function assertDirective(directive) {
29
+ !isDirective(directive) ? invariant(0, "Expected ".concat(inspect(directive), " to be a GraphQL directive.")) : void 0;
30
+ return directive;
31
+ }
26
32
  /**
27
33
  * Directives are used by the GraphQL runtime as a way of modifying execution
28
34
  * behavior. Type system creators will usually not create these directly.
@@ -32,39 +38,25 @@ export var GraphQLDirective =
32
38
  /*#__PURE__*/
33
39
  function () {
34
40
  function GraphQLDirective(config) {
35
- _defineProperty(this, "name", void 0);
36
-
37
- _defineProperty(this, "description", void 0);
38
-
39
- _defineProperty(this, "locations", void 0);
40
-
41
- _defineProperty(this, "args", void 0);
42
-
43
- _defineProperty(this, "astNode", void 0);
44
-
45
41
  this.name = config.name;
46
42
  this.description = config.description;
47
43
  this.locations = config.locations;
48
44
  this.astNode = config.astNode;
49
45
  !config.name ? invariant(0, 'Directive must be named.') : void 0;
50
- !Array.isArray(config.locations) ? invariant(0, 'Must provide locations for directive.') : void 0;
51
- var args = config.args;
52
-
53
- if (!args) {
54
- this.args = [];
55
- } else {
56
- !!Array.isArray(args) ? invariant(0, "@".concat(config.name, " args must be an object with argument names as keys.")) : void 0;
57
- this.args = Object.keys(args).map(function (argName) {
58
- var arg = args[argName];
59
- return {
60
- name: argName,
61
- description: arg.description === undefined ? null : arg.description,
62
- type: arg.type,
63
- defaultValue: arg.defaultValue,
64
- astNode: arg.astNode
65
- };
66
- });
67
- }
46
+ !Array.isArray(config.locations) ? invariant(0, "@".concat(config.name, " locations must be an Array.")) : void 0;
47
+ var args = config.args || {};
48
+ !(_typeof(args) === 'object' && !Array.isArray(args)) ? invariant(0, "@".concat(config.name, " args must be an object with argument names as keys.")) : void 0;
49
+ this.args = objectEntries(args).map(function (_ref) {
50
+ var argName = _ref[0],
51
+ arg = _ref[1];
52
+ return {
53
+ name: argName,
54
+ description: arg.description === undefined ? null : arg.description,
55
+ type: arg.type,
56
+ defaultValue: arg.defaultValue,
57
+ astNode: arg.astNode
58
+ };
59
+ });
68
60
  }
69
61
 
70
62
  var _proto = GraphQLDirective.prototype;
package/type/index.js CHANGED
@@ -9,6 +9,12 @@ Object.defineProperty(exports, "isSchema", {
9
9
  return _schema.isSchema;
10
10
  }
11
11
  });
12
+ Object.defineProperty(exports, "assertSchema", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _schema.assertSchema;
16
+ }
17
+ });
12
18
  Object.defineProperty(exports, "GraphQLSchema", {
13
19
  enumerable: true,
14
20
  get: function get() {
@@ -297,6 +303,12 @@ Object.defineProperty(exports, "isDirective", {
297
303
  return _directives.isDirective;
298
304
  }
299
305
  });
306
+ Object.defineProperty(exports, "assertDirective", {
307
+ enumerable: true,
308
+ get: function get() {
309
+ return _directives.assertDirective;
310
+ }
311
+ });
300
312
  Object.defineProperty(exports, "GraphQLDirective", {
301
313
  enumerable: true,
302
314
  get: function get() {
@@ -10,6 +10,8 @@
10
10
  export {
11
11
  // Predicate
12
12
  isSchema,
13
+ // Assertion
14
+ assertSchema,
13
15
  // GraphQL Schema definition
14
16
  GraphQLSchema,
15
17
  } from './schema';
@@ -73,6 +75,8 @@ export {
73
75
  export {
74
76
  // Predicate
75
77
  isDirective,
78
+ // Assertion
79
+ assertDirective,
76
80
  // Directives Definition
77
81
  GraphQLDirective,
78
82
  // Built-in Directives defined by the Spec
package/type/index.mjs CHANGED
@@ -4,10 +4,11 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * strict
7
+ *
8
8
  */
9
9
  export { // Predicate
10
- isSchema, // GraphQL Schema definition
10
+ isSchema, // Assertion
11
+ assertSchema, // GraphQL Schema definition
11
12
  GraphQLSchema } from './schema';
12
13
  export { // Predicates
13
14
  isType, isScalarType, isObjectType, isInterfaceType, isUnionType, isEnumType, isInputObjectType, isListType, isNonNullType, isInputType, isOutputType, isLeafType, isCompositeType, isAbstractType, isWrappingType, isNullableType, isNamedType, isRequiredArgument, isRequiredInputField, // Assertions
@@ -16,7 +17,8 @@ getNullableType, getNamedType, // Definitions
16
17
  GraphQLScalarType, GraphQLObjectType, GraphQLInterfaceType, GraphQLUnionType, GraphQLEnumType, GraphQLInputObjectType, // Type Wrappers
17
18
  GraphQLList, GraphQLNonNull } from './definition';
18
19
  export { // Predicate
19
- isDirective, // Directives Definition
20
+ isDirective, // Assertion
21
+ assertDirective, // Directives Definition
20
22
  GraphQLDirective, // Built-in Directives defined by the Spec
21
23
  isSpecifiedDirective, specifiedDirectives, GraphQLIncludeDirective, GraphQLSkipDirective, GraphQLDeprecatedDirective, // Constant Deprecation Reason
22
24
  DEFAULT_DEPRECATION_REASON } from './directives';
@@ -6,9 +6,9 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.isIntrospectionType = isIntrospectionType;
7
7
  exports.introspectionTypes = exports.TypeNameMetaFieldDef = exports.TypeMetaFieldDef = exports.SchemaMetaFieldDef = exports.__TypeKind = exports.TypeKind = exports.__EnumValue = exports.__InputValue = exports.__Field = exports.__Type = exports.__DirectiveLocation = exports.__Directive = exports.__Schema = void 0;
8
8
 
9
- var _isInvalid = _interopRequireDefault(require("../jsutils/isInvalid"));
9
+ var _objectValues = _interopRequireDefault(require("../polyfills/objectValues"));
10
10
 
11
- var _objectValues = _interopRequireDefault(require("../jsutils/objectValues"));
11
+ var _isInvalid = _interopRequireDefault(require("../jsutils/isInvalid"));
12
12
 
13
13
  var _astFromValue = require("../utilities/astFromValue");
14
14
 
@@ -28,7 +28,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
28
28
  * This source code is licensed under the MIT license found in the
29
29
  * LICENSE file in the root directory of this source tree.
30
30
  *
31
- * strict
31
+ *
32
32
  */
33
33
  var __Schema = new _definition.GraphQLObjectType({
34
34
  name: '__Schema',
@@ -7,8 +7,8 @@
7
7
  * @flow strict
8
8
  */
9
9
 
10
+ import objectValues from '../polyfills/objectValues';
10
11
  import isInvalid from '../jsutils/isInvalid';
11
- import objectValues from '../jsutils/objectValues';
12
12
  import { astFromValue } from '../utilities/astFromValue';
13
13
  import { print } from '../language/printer';
14
14
  import {
@@ -4,10 +4,10 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * strict
7
+ *
8
8
  */
9
+ import objectValues from '../polyfills/objectValues';
9
10
  import isInvalid from '../jsutils/isInvalid';
10
- import objectValues from '../jsutils/objectValues';
11
11
  import { astFromValue } from '../utilities/astFromValue';
12
12
  import { print } from '../language/printer';
13
13
  import { GraphQLObjectType, GraphQLEnumType, GraphQLList, GraphQLNonNull, isScalarType, isObjectType, isInterfaceType, isUnionType, isEnumType, isInputObjectType, isListType, isNonNullType, isAbstractType, isNamedType } from './definition';
package/type/scalars.js CHANGED
@@ -6,11 +6,11 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.isSpecifiedScalarType = isSpecifiedScalarType;
7
7
  exports.specifiedScalarTypes = exports.GraphQLID = exports.GraphQLBoolean = exports.GraphQLString = exports.GraphQLFloat = exports.GraphQLInt = void 0;
8
8
 
9
- var _inspect = _interopRequireDefault(require("../jsutils/inspect"));
9
+ var _isFinite = _interopRequireDefault(require("../polyfills/isFinite"));
10
10
 
11
- var _isFinite = _interopRequireDefault(require("../jsutils/isFinite"));
11
+ var _isInteger = _interopRequireDefault(require("../polyfills/isInteger"));
12
12
 
13
- var _isInteger = _interopRequireDefault(require("../jsutils/isInteger"));
13
+ var _inspect = _interopRequireDefault(require("../jsutils/inspect"));
14
14
 
15
15
  var _definition = require("./definition");
16
16
 
@@ -18,14 +18,8 @@ var _kinds = require("../language/kinds");
18
18
 
19
19
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
20
 
21
- /**
22
- * Copyright (c) 2015-present, Facebook, Inc.
23
- *
24
- * This source code is licensed under the MIT license found in the
25
- * LICENSE file in the root directory of this source tree.
26
- *
27
- * strict
28
- */
21
+ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
22
+
29
23
  // As per the GraphQL Spec, Integers are only treated as valid when a valid
30
24
  // 32-bit signed integer, providing the broadest support across platforms.
31
25
  //
@@ -115,35 +109,54 @@ function coerceFloat(value) {
115
109
 
116
110
  var GraphQLFloat = new _definition.GraphQLScalarType({
117
111
  name: 'Float',
118
- description: 'The `Float` scalar type represents signed double-precision fractional ' + 'values as specified by ' + '[IEEE 754](http://en.wikipedia.org/wiki/IEEE_floating_point). ',
112
+ description: 'The `Float` scalar type represents signed double-precision fractional ' + 'values as specified by ' + '[IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point). ',
119
113
  serialize: serializeFloat,
120
114
  parseValue: coerceFloat,
121
115
  parseLiteral: function parseLiteral(ast) {
122
116
  return ast.kind === _kinds.Kind.FLOAT || ast.kind === _kinds.Kind.INT ? parseFloat(ast.value) : undefined;
123
117
  }
124
- });
118
+ }); // Support serializing objects with custom valueOf() or toJSON() functions -
119
+ // a common way to represent a complex value which can be represented as
120
+ // a string (ex: MongoDB id objects).
121
+
125
122
  exports.GraphQLFloat = GraphQLFloat;
126
123
 
127
- function serializeString(value) {
128
- // Support serializing objects with custom valueOf() functions - a common way
129
- // to represent an complex value which can be represented as a string
130
- // (ex: MongoDB id objects).
131
- var result = value && typeof value.valueOf === 'function' ? value.valueOf() : value; // Serialize string, boolean and number values to a string, but do not
124
+ function serializeObject(value) {
125
+ if (_typeof(value) === 'object' && value !== null) {
126
+ if (typeof value.valueOf === 'function') {
127
+ var valueOfResult = value.valueOf();
128
+
129
+ if (_typeof(valueOfResult) !== 'object') {
130
+ return valueOfResult;
131
+ }
132
+ }
133
+
134
+ if (typeof value.toJSON === 'function') {
135
+ // $FlowFixMe(>=0.90.0)
136
+ return value.toJSON();
137
+ }
138
+ }
139
+
140
+ return value;
141
+ }
142
+
143
+ function serializeString(rawValue) {
144
+ var value = serializeObject(rawValue); // Serialize string, boolean and number values to a string, but do not
132
145
  // attempt to coerce object, function, symbol, or other types as strings.
133
146
 
134
- if (typeof result === 'string') {
135
- return result;
147
+ if (typeof value === 'string') {
148
+ return value;
136
149
  }
137
150
 
138
- if (typeof result === 'boolean') {
139
- return result ? 'true' : 'false';
151
+ if (typeof value === 'boolean') {
152
+ return value ? 'true' : 'false';
140
153
  }
141
154
 
142
- if ((0, _isFinite.default)(result)) {
143
- return result.toString();
155
+ if ((0, _isFinite.default)(value)) {
156
+ return value.toString();
144
157
  }
145
158
 
146
- throw new TypeError("String cannot represent value: ".concat((0, _inspect.default)(value)));
159
+ throw new TypeError("String cannot represent value: ".concat((0, _inspect.default)(rawValue)));
147
160
  }
148
161
 
149
162
  function coerceString(value) {
@@ -196,20 +209,18 @@ var GraphQLBoolean = new _definition.GraphQLScalarType({
196
209
  });
197
210
  exports.GraphQLBoolean = GraphQLBoolean;
198
211
 
199
- function serializeID(value) {
200
- // Support serializing objects with custom valueOf() functions - a common way
201
- // to represent an object identifier (ex. MongoDB).
202
- var result = value && typeof value.valueOf === 'function' ? value.valueOf() : value;
212
+ function serializeID(rawValue) {
213
+ var value = serializeObject(rawValue);
203
214
 
204
- if (typeof result === 'string') {
205
- return result;
215
+ if (typeof value === 'string') {
216
+ return value;
206
217
  }
207
218
 
208
- if ((0, _isInteger.default)(result)) {
209
- return String(result);
219
+ if ((0, _isInteger.default)(value)) {
220
+ return String(value);
210
221
  }
211
222
 
212
- throw new TypeError("ID cannot represent value: ".concat((0, _inspect.default)(value)));
223
+ throw new TypeError("ID cannot represent value: ".concat((0, _inspect.default)(rawValue)));
213
224
  }
214
225
 
215
226
  function coerceID(value) {
@@ -7,9 +7,9 @@
7
7
  * @flow strict
8
8
  */
9
9
 
10
+ import isFinite from '../polyfills/isFinite';
11
+ import isInteger from '../polyfills/isInteger';
10
12
  import inspect from '../jsutils/inspect';
11
- import isFinite from '../jsutils/isFinite';
12
- import isInteger from '../jsutils/isInteger';
13
13
  import { GraphQLScalarType, isNamedType } from './definition';
14
14
  import { Kind } from '../language/kinds';
15
15
 
@@ -107,7 +107,7 @@ export const GraphQLFloat = new GraphQLScalarType({
107
107
  description:
108
108
  'The `Float` scalar type represents signed double-precision fractional ' +
109
109
  'values as specified by ' +
110
- '[IEEE 754](http://en.wikipedia.org/wiki/IEEE_floating_point). ',
110
+ '[IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point). ',
111
111
  serialize: serializeFloat,
112
112
  parseValue: coerceFloat,
113
113
  parseLiteral(ast) {
@@ -117,24 +117,40 @@ export const GraphQLFloat = new GraphQLScalarType({
117
117
  },
118
118
  });
119
119
 
120
- function serializeString(value: mixed): string {
121
- // Support serializing objects with custom valueOf() functions - a common way
122
- // to represent an complex value which can be represented as a string
123
- // (ex: MongoDB id objects).
124
- const result =
125
- value && typeof value.valueOf === 'function' ? value.valueOf() : value;
120
+ // Support serializing objects with custom valueOf() or toJSON() functions -
121
+ // a common way to represent a complex value which can be represented as
122
+ // a string (ex: MongoDB id objects).
123
+ function serializeObject(value: mixed): mixed {
124
+ if (typeof value === 'object' && value !== null) {
125
+ if (typeof value.valueOf === 'function') {
126
+ const valueOfResult = value.valueOf();
127
+ if (typeof valueOfResult !== 'object') {
128
+ return valueOfResult;
129
+ }
130
+ }
131
+ if (typeof value.toJSON === 'function') {
132
+ // $FlowFixMe(>=0.90.0)
133
+ return value.toJSON();
134
+ }
135
+ }
136
+ return value;
137
+ }
138
+
139
+ function serializeString(rawValue: mixed): string {
140
+ const value = serializeObject(rawValue);
141
+
126
142
  // Serialize string, boolean and number values to a string, but do not
127
143
  // attempt to coerce object, function, symbol, or other types as strings.
128
- if (typeof result === 'string') {
129
- return result;
144
+ if (typeof value === 'string') {
145
+ return value;
130
146
  }
131
- if (typeof result === 'boolean') {
132
- return result ? 'true' : 'false';
147
+ if (typeof value === 'boolean') {
148
+ return value ? 'true' : 'false';
133
149
  }
134
- if (isFinite(result)) {
135
- return result.toString();
150
+ if (isFinite(value)) {
151
+ return value.toString();
136
152
  }
137
- throw new TypeError(`String cannot represent value: ${inspect(value)}`);
153
+ throw new TypeError(`String cannot represent value: ${inspect(rawValue)}`);
138
154
  }
139
155
 
140
156
  function coerceString(value: mixed): string {
@@ -190,18 +206,16 @@ export const GraphQLBoolean = new GraphQLScalarType({
190
206
  },
191
207
  });
192
208
 
193
- function serializeID(value: mixed): string {
194
- // Support serializing objects with custom valueOf() functions - a common way
195
- // to represent an object identifier (ex. MongoDB).
196
- const result =
197
- value && typeof value.valueOf === 'function' ? value.valueOf() : value;
198
- if (typeof result === 'string') {
199
- return result;
209
+ function serializeID(rawValue: mixed): string {
210
+ const value = serializeObject(rawValue);
211
+
212
+ if (typeof value === 'string') {
213
+ return value;
200
214
  }
201
- if (isInteger(result)) {
202
- return String(result);
215
+ if (isInteger(value)) {
216
+ return String(value);
203
217
  }
204
- throw new TypeError(`ID cannot represent value: ${inspect(value)}`);
218
+ throw new TypeError(`ID cannot represent value: ${inspect(rawValue)}`);
205
219
  }
206
220
 
207
221
  function coerceID(value: mixed): string {