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
@@ -7,14 +7,13 @@
7
7
  * @flow strict
8
8
  */
9
9
 
10
+ import objectValues from '../polyfills/objectValues';
10
11
  import invariant from '../jsutils/invariant';
11
- import keyMap from '../jsutils/keyMap';
12
+ import mapValue from '../jsutils/mapValue';
12
13
  import keyValMap from '../jsutils/keyValMap';
13
- import objectValues from '../jsutils/objectValues';
14
14
  import { ASTDefinitionBuilder } from './buildASTSchema';
15
15
  import { assertValidSDLExtension } from '../validation/validate';
16
- import { GraphQLError } from '../error/GraphQLError';
17
- import { isSchema, GraphQLSchema } from '../type/schema';
16
+ import { assertSchema, GraphQLSchema } from '../type/schema';
18
17
  import { isIntrospectionType } from '../type/introspection';
19
18
  import { isSpecifiedScalarType } from '../type/scalars';
20
19
 
@@ -105,7 +104,7 @@ export function extendSchema(
105
104
  documentAST: DocumentNode,
106
105
  options?: Options,
107
106
  ): GraphQLSchema {
108
- invariant(isSchema(schema), 'Must provide valid GraphQLSchema');
107
+ assertSchema(schema);
109
108
 
110
109
  invariant(
111
110
  documentAST && documentAST.kind === Kind.DOCUMENT,
@@ -128,52 +127,21 @@ export function extendSchema(
128
127
  // Schema extensions are collected which may add additional operation types.
129
128
  const schemaExtensions: Array<SchemaExtensionNode> = [];
130
129
 
131
- for (let i = 0; i < documentAST.definitions.length; i++) {
132
- const def = documentAST.definitions[i];
130
+ for (const def of documentAST.definitions) {
133
131
  if (def.kind === Kind.SCHEMA_DEFINITION) {
134
132
  schemaDef = def;
135
133
  } else if (def.kind === Kind.SCHEMA_EXTENSION) {
136
134
  schemaExtensions.push(def);
137
135
  } else if (isTypeDefinitionNode(def)) {
138
- // Sanity check that none of the defined types conflict with the
139
- // schema's existing types.
140
136
  const typeName = def.name.value;
141
- if (schema.getType(typeName)) {
142
- throw new GraphQLError(
143
- `Type "${typeName}" already exists in the schema. It cannot also ` +
144
- 'be defined in this type definition.',
145
- [def],
146
- );
147
- }
148
137
  typeDefinitionMap[typeName] = def;
149
138
  } else if (isTypeExtensionNode(def)) {
150
- // Sanity check that this type extension exists within the
151
- // schema's existing types.
152
139
  const extendedTypeName = def.name.value;
153
- const existingType = schema.getType(extendedTypeName);
154
- if (!existingType) {
155
- throw new GraphQLError(
156
- `Cannot extend type "${extendedTypeName}" because it does not ` +
157
- 'exist in the existing schema.',
158
- [def],
159
- );
160
- }
161
- checkExtensionNode(existingType, def);
162
-
163
140
  const existingTypeExtensions = typeExtensionsMap[extendedTypeName];
164
141
  typeExtensionsMap[extendedTypeName] = existingTypeExtensions
165
142
  ? existingTypeExtensions.concat([def])
166
143
  : [def];
167
144
  } else if (def.kind === Kind.DIRECTIVE_DEFINITION) {
168
- const directiveName = def.name.value;
169
- const existingDirective = schema.getDirective(directiveName);
170
- if (existingDirective) {
171
- throw new GraphQLError(
172
- `Directive "${directiveName}" already exists in the schema. It ` +
173
- 'cannot be redefined.',
174
- [def],
175
- );
176
- }
177
145
  directiveDefinitions.push(def);
178
146
  }
179
147
  }
@@ -193,18 +161,11 @@ export function extendSchema(
193
161
  const astBuilder = new ASTDefinitionBuilder(
194
162
  typeDefinitionMap,
195
163
  options,
196
- typeRef => {
197
- const typeName = typeRef.name.value;
164
+ typeName => {
198
165
  const existingType = schema.getType(typeName);
199
- if (existingType) {
200
- return extendNamedType(existingType);
201
- }
166
+ invariant(existingType, `Unknown type: "${typeName}".`);
202
167
 
203
- throw new GraphQLError(
204
- `Unknown type: "${typeName}". Ensure that this type exists ` +
205
- 'either in the original schema, or is added in a type definition.',
206
- [typeRef],
207
- );
168
+ return extendNamedType(existingType);
208
169
  },
209
170
  );
210
171
 
@@ -219,9 +180,6 @@ export function extendSchema(
219
180
 
220
181
  if (schemaDef) {
221
182
  for (const { operation, type } of schemaDef.operationTypes) {
222
- if (operationTypes[operation]) {
223
- throw new Error(`Must provide only one ${operation} type in schema.`);
224
- }
225
183
  // Note: While this could make early assertions to get the correctly
226
184
  // typed values, that would throw immediately while type system
227
185
  // validation with validateSchema() will produce more actionable results.
@@ -232,9 +190,6 @@ export function extendSchema(
232
190
  for (const schemaExtension of schemaExtensions) {
233
191
  if (schemaExtension.operationTypes) {
234
192
  for (const { operation, type } of schemaExtension.operationTypes) {
235
- if (operationTypes[operation]) {
236
- throw new Error(`Must provide only one ${operation} type in schema.`);
237
- }
238
193
  // Note: While this could make early assertions to get the correctly
239
194
  // typed values, that would throw immediately while type system
240
195
  // validation with validateSchema() will produce more actionable results.
@@ -342,32 +297,19 @@ export function extendSchema(
342
297
  }
343
298
 
344
299
  function extendInputFieldMap(type: GraphQLInputObjectType) {
345
- const newFieldMap = Object.create(null);
346
- const oldFieldMap = type.getFields();
347
- for (const fieldName of Object.keys(oldFieldMap)) {
348
- const field = oldFieldMap[fieldName];
349
- newFieldMap[fieldName] = {
350
- description: field.description,
351
- type: extendType(field.type),
352
- defaultValue: field.defaultValue,
353
- astNode: field.astNode,
354
- };
355
- }
300
+ const newFieldMap = mapValue(type.getFields(), field => ({
301
+ description: field.description,
302
+ type: extendType(field.type),
303
+ defaultValue: field.defaultValue,
304
+ astNode: field.astNode,
305
+ }));
356
306
 
357
307
  // If there are any extensions to the fields, apply those here.
358
308
  const extensions = typeExtensionsMap[type.name];
359
309
  if (extensions) {
360
310
  for (const extension of extensions) {
361
311
  for (const field of extension.fields) {
362
- const fieldName = field.name.value;
363
- if (oldFieldMap[fieldName]) {
364
- throw new GraphQLError(
365
- `Field "${type.name}.${fieldName}" already exists in the ` +
366
- 'schema. It cannot also be defined in this type extension.',
367
- [field],
368
- );
369
- }
370
- newFieldMap[fieldName] = astBuilder.buildInputField(field);
312
+ newFieldMap[field.name.value] = astBuilder.buildInputField(field);
371
313
  }
372
314
  }
373
315
  }
@@ -393,11 +335,8 @@ export function extendSchema(
393
335
 
394
336
  function extendValueMap(type: GraphQLEnumType) {
395
337
  const newValueMap = Object.create(null);
396
- const oldValueMap = keyMap(type.getValues(), value => value.name);
397
- for (const valueName of Object.keys(oldValueMap)) {
398
- const value = oldValueMap[valueName];
399
- newValueMap[valueName] = {
400
- name: value.name,
338
+ for (const value of type.getValues()) {
339
+ newValueMap[value.name] = {
401
340
  description: value.description,
402
341
  value: value.value,
403
342
  deprecationReason: value.deprecationReason,
@@ -410,15 +349,7 @@ export function extendSchema(
410
349
  if (extensions) {
411
350
  for (const extension of extensions) {
412
351
  for (const value of extension.values) {
413
- const valueName = value.name.value;
414
- if (oldValueMap[valueName]) {
415
- throw new GraphQLError(
416
- `Enum value "${type.name}.${valueName}" already exists in the ` +
417
- 'schema. It cannot also be defined in this type extension.',
418
- [value],
419
- );
420
- }
421
- newValueMap[valueName] = astBuilder.buildEnumValue(value);
352
+ newValueMap[value.name.value] = astBuilder.buildEnumValue(value);
422
353
  }
423
354
  }
424
355
  }
@@ -555,34 +486,21 @@ export function extendSchema(
555
486
  }
556
487
 
557
488
  function extendFieldMap(type: GraphQLObjectType | GraphQLInterfaceType) {
558
- const newFieldMap = Object.create(null);
559
- const oldFieldMap = type.getFields();
560
- for (const fieldName of Object.keys(oldFieldMap)) {
561
- const field = oldFieldMap[fieldName];
562
- newFieldMap[fieldName] = {
563
- description: field.description,
564
- deprecationReason: field.deprecationReason,
565
- type: extendType(field.type),
566
- args: extendArgs(field.args),
567
- astNode: field.astNode,
568
- resolve: field.resolve,
569
- };
570
- }
489
+ const newFieldMap = mapValue(type.getFields(), field => ({
490
+ description: field.description,
491
+ deprecationReason: field.deprecationReason,
492
+ type: extendType(field.type),
493
+ args: extendArgs(field.args),
494
+ astNode: field.astNode,
495
+ resolve: field.resolve,
496
+ }));
571
497
 
572
498
  // If there are any extensions to the fields, apply those here.
573
499
  const extensions = typeExtensionsMap[type.name];
574
500
  if (extensions) {
575
501
  for (const extension of extensions) {
576
502
  for (const field of extension.fields) {
577
- const fieldName = field.name.value;
578
- if (oldFieldMap[fieldName]) {
579
- throw new GraphQLError(
580
- `Field "${type.name}.${fieldName}" already exists in the ` +
581
- 'schema. It cannot also be defined in this type extension.',
582
- [field],
583
- );
584
- }
585
- newFieldMap[fieldName] = astBuilder.buildField(field);
503
+ newFieldMap[field.name.value] = astBuilder.buildField(field);
586
504
  }
587
505
  }
588
506
  }
@@ -600,46 +518,3 @@ export function extendSchema(
600
518
  return extendNamedType(typeDef);
601
519
  }
602
520
  }
603
-
604
- function checkExtensionNode(type, node) {
605
- switch (node.kind) {
606
- case Kind.OBJECT_TYPE_EXTENSION:
607
- if (!isObjectType(type)) {
608
- throw new GraphQLError(
609
- `Cannot extend non-object type "${type.name}".`,
610
- [node],
611
- );
612
- }
613
- break;
614
- case Kind.INTERFACE_TYPE_EXTENSION:
615
- if (!isInterfaceType(type)) {
616
- throw new GraphQLError(
617
- `Cannot extend non-interface type "${type.name}".`,
618
- [node],
619
- );
620
- }
621
- break;
622
- case Kind.ENUM_TYPE_EXTENSION:
623
- if (!isEnumType(type)) {
624
- throw new GraphQLError(`Cannot extend non-enum type "${type.name}".`, [
625
- node,
626
- ]);
627
- }
628
- break;
629
- case Kind.UNION_TYPE_EXTENSION:
630
- if (!isUnionType(type)) {
631
- throw new GraphQLError(`Cannot extend non-union type "${type.name}".`, [
632
- node,
633
- ]);
634
- }
635
- break;
636
- case Kind.INPUT_OBJECT_TYPE_EXTENSION:
637
- if (!isInputObjectType(type)) {
638
- throw new GraphQLError(
639
- `Cannot extend non-input object type "${type.name}".`,
640
- [node],
641
- );
642
- }
643
- break;
644
- }
645
- }