You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							44 lines
						
					
					
						
							1.2 KiB
						
					
					
				
			
		
		
	
	
							44 lines
						
					
					
						
							1.2 KiB
						
					
					
				| import { groupBy } from '../../jsutils/groupBy.mjs'; | |
| import { GraphQLError } from '../../error/GraphQLError.mjs'; | |
|  | |
| /** | |
|  * Unique argument names | |
|  * | |
|  * A GraphQL field or directive is only valid if all supplied arguments are | |
|  * uniquely named. | |
|  * | |
|  * See https://spec.graphql.org/draft/#sec-Argument-Names | |
|  */ | |
| export function UniqueArgumentNamesRule(context) { | |
|   return { | |
|     Field: checkArgUniqueness, | |
|     Directive: checkArgUniqueness, | |
|   }; | |
|  | |
|   function checkArgUniqueness(parentNode) { | |
|     var _parentNode$arguments; | |
|  | |
|     // FIXME: https://github.com/graphql/graphql-js/issues/2203 | |
|  | |
|     /* c8 ignore next */ | |
|     const argumentNodes = | |
|       (_parentNode$arguments = parentNode.arguments) !== null && | |
|       _parentNode$arguments !== void 0 | |
|         ? _parentNode$arguments | |
|         : []; | |
|     const seenArgs = groupBy(argumentNodes, (arg) => arg.name.value); | |
|  | |
|     for (const [argName, argNodes] of seenArgs) { | |
|       if (argNodes.length > 1) { | |
|         context.reportError( | |
|           new GraphQLError( | |
|             `There can be only one argument named "${argName}".`, | |
|             { | |
|               nodes: argNodes.map((node) => node.name), | |
|             }, | |
|           ), | |
|         ); | |
|       } | |
|     } | |
|   } | |
| }
 | |
| 
 |