graphql 17.0.0-beta.2 → 17.0.0
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.
- package/README.md +3 -5
- package/__dev__/diagnostics.d.mts +1 -0
- package/__dev__/diagnostics.d.ts +1 -0
- package/__dev__/diagnostics.js +3 -0
- package/__dev__/diagnostics.mjs +3 -0
- package/diagnostics.d.mts +307 -0
- package/diagnostics.d.ts +307 -0
- package/diagnostics.js +75 -0
- package/diagnostics.js.map +1 -0
- package/diagnostics.mjs +70 -0
- package/diagnostics.mjs.map +1 -0
- package/error/GraphQLError.d.mts +3 -1
- package/error/GraphQLError.d.ts +3 -1
- package/error/GraphQLError.js +3 -3
- package/error/GraphQLError.js.map +1 -1
- package/error/GraphQLError.mjs +3 -3
- package/error/GraphQLError.mjs.map +1 -1
- package/error/locatedError.d.mts +1 -3
- package/error/locatedError.d.ts +1 -3
- package/error/locatedError.js.map +1 -1
- package/error/locatedError.mjs.map +1 -1
- package/execution/ExecutionArgs.d.mts +6 -0
- package/execution/ExecutionArgs.d.ts +6 -0
- package/execution/ExecutionArgs.js.map +1 -1
- package/execution/ExecutionArgs.mjs.map +1 -1
- package/execution/Executor.d.mts +19 -1
- package/execution/Executor.d.ts +19 -1
- package/execution/Executor.js +49 -4
- package/execution/Executor.js.map +1 -1
- package/execution/Executor.mjs +49 -4
- package/execution/Executor.mjs.map +1 -1
- package/execution/execute.d.mts +65 -44
- package/execution/execute.d.ts +65 -44
- package/execution/execute.js +73 -4
- package/execution/execute.js.map +1 -1
- package/execution/execute.mjs +73 -4
- package/execution/execute.mjs.map +1 -1
- package/execution/values.d.mts +17 -17
- package/execution/values.d.ts +17 -17
- package/execution/values.js.map +1 -1
- package/execution/values.mjs.map +1 -1
- package/index.d.mts +1 -0
- package/index.d.ts +1 -0
- package/index.js.map +1 -1
- package/index.mjs.map +1 -1
- package/language/parser.d.mts +20 -30
- package/language/parser.d.ts +20 -30
- package/language/parser.js +9 -9
- package/language/parser.js.map +1 -1
- package/language/parser.mjs +9 -9
- package/language/parser.mjs.map +1 -1
- package/language/predicates.d.mts +5 -1
- package/language/predicates.d.ts +5 -1
- package/language/predicates.js.map +1 -1
- package/language/predicates.mjs.map +1 -1
- package/language/source.d.mts +4 -5
- package/language/source.d.ts +4 -5
- package/language/source.js.map +1 -1
- package/language/source.mjs.map +1 -1
- package/language/visitor.d.mts +10 -2
- package/language/visitor.d.ts +10 -2
- package/language/visitor.js.map +1 -1
- package/language/visitor.mjs.map +1 -1
- package/package.json +2 -2
- package/type/definition.d.mts +96 -64
- package/type/definition.d.ts +96 -64
- package/type/definition.js.map +1 -1
- package/type/definition.mjs.map +1 -1
- package/type/directives.d.mts +3 -3
- package/type/directives.d.ts +3 -3
- package/type/directives.js.map +1 -1
- package/type/directives.mjs.map +1 -1
- package/type/schema.d.mts +4 -8
- package/type/schema.d.ts +4 -8
- package/type/schema.js.map +1 -1
- package/type/schema.mjs.map +1 -1
- package/type/validate.js +101 -30
- package/type/validate.js.map +1 -1
- package/type/validate.mjs +101 -30
- package/type/validate.mjs.map +1 -1
- package/utilities/TypeInfo.d.mts +1 -1
- package/utilities/TypeInfo.d.ts +1 -1
- package/utilities/TypeInfo.js.map +1 -1
- package/utilities/TypeInfo.mjs.map +1 -1
- package/utilities/buildASTSchema.d.mts +0 -1
- package/utilities/buildASTSchema.d.ts +0 -1
- package/utilities/buildASTSchema.js +0 -1
- package/utilities/buildASTSchema.js.map +1 -1
- package/utilities/buildASTSchema.mjs +0 -1
- package/utilities/buildASTSchema.mjs.map +1 -1
- package/utilities/buildClientSchema.d.mts +5 -1
- package/utilities/buildClientSchema.d.ts +5 -1
- package/utilities/buildClientSchema.js.map +1 -1
- package/utilities/buildClientSchema.mjs.map +1 -1
- package/utilities/coerceInputValue.d.mts +7 -6
- package/utilities/coerceInputValue.d.ts +7 -6
- package/utilities/coerceInputValue.js.map +1 -1
- package/utilities/coerceInputValue.mjs.map +1 -1
- package/utilities/concatAST.d.mts +4 -1
- package/utilities/concatAST.d.ts +4 -1
- package/utilities/concatAST.js.map +1 -1
- package/utilities/concatAST.mjs.map +1 -1
- package/utilities/extendSchema.d.mts +3 -3
- package/utilities/extendSchema.d.ts +3 -3
- package/utilities/extendSchema.js +5 -1
- package/utilities/extendSchema.js.map +1 -1
- package/utilities/extendSchema.mjs +5 -1
- package/utilities/extendSchema.mjs.map +1 -1
- package/utilities/introspectionFromSchema.d.mts +6 -2
- package/utilities/introspectionFromSchema.d.ts +6 -2
- package/utilities/introspectionFromSchema.js.map +1 -1
- package/utilities/introspectionFromSchema.mjs.map +1 -1
- package/utilities/lexicographicSortSchema.d.mts +5 -1
- package/utilities/lexicographicSortSchema.d.ts +5 -1
- package/utilities/lexicographicSortSchema.js.map +1 -1
- package/utilities/lexicographicSortSchema.mjs.map +1 -1
- package/utilities/printSchema.d.mts +5 -1
- package/utilities/printSchema.d.ts +5 -1
- package/utilities/printSchema.js.map +1 -1
- package/utilities/printSchema.mjs.map +1 -1
- package/utilities/replaceVariables.d.mts +4 -8
- package/utilities/replaceVariables.d.ts +4 -8
- package/utilities/replaceVariables.js.map +1 -1
- package/utilities/replaceVariables.mjs.map +1 -1
- package/utilities/stripIgnoredCharacters.d.mts +2 -2
- package/utilities/stripIgnoredCharacters.d.ts +2 -2
- package/utilities/stripIgnoredCharacters.js.map +1 -1
- package/utilities/stripIgnoredCharacters.mjs.map +1 -1
- package/utilities/typeComparators.d.mts +1 -5
- package/utilities/typeComparators.d.ts +1 -5
- package/utilities/typeComparators.js.map +1 -1
- package/utilities/typeComparators.mjs.map +1 -1
- package/utilities/validateInputValue.d.mts +10 -8
- package/utilities/validateInputValue.d.ts +10 -8
- package/utilities/validateInputValue.js.map +1 -1
- package/utilities/validateInputValue.mjs.map +1 -1
- package/validation/rules/DeferStreamDirectiveOnRootFieldRule.d.mts +4 -1
- package/validation/rules/DeferStreamDirectiveOnRootFieldRule.d.ts +4 -1
- package/validation/rules/DeferStreamDirectiveOnRootFieldRule.js +70 -17
- package/validation/rules/DeferStreamDirectiveOnRootFieldRule.js.map +1 -1
- package/validation/rules/DeferStreamDirectiveOnRootFieldRule.mjs +70 -17
- package/validation/rules/DeferStreamDirectiveOnRootFieldRule.mjs.map +1 -1
- package/validation/rules/DeferStreamDirectiveOnValidOperationsRule.d.mts +1 -1
- package/validation/rules/DeferStreamDirectiveOnValidOperationsRule.d.ts +1 -1
- package/validation/rules/DeferStreamDirectiveOnValidOperationsRule.js +90 -21
- package/validation/rules/DeferStreamDirectiveOnValidOperationsRule.js.map +1 -1
- package/validation/rules/DeferStreamDirectiveOnValidOperationsRule.mjs +91 -22
- package/validation/rules/DeferStreamDirectiveOnValidOperationsRule.mjs.map +1 -1
- package/validation/rules/ExecutableDefinitionsRule.d.mts +6 -2
- package/validation/rules/ExecutableDefinitionsRule.d.ts +6 -2
- package/validation/rules/ExecutableDefinitionsRule.js.map +1 -1
- package/validation/rules/ExecutableDefinitionsRule.mjs.map +1 -1
- package/validation/rules/FieldsOnCorrectTypeRule.d.mts +3 -1
- package/validation/rules/FieldsOnCorrectTypeRule.d.ts +3 -1
- package/validation/rules/FieldsOnCorrectTypeRule.js.map +1 -1
- package/validation/rules/FieldsOnCorrectTypeRule.mjs.map +1 -1
- package/validation/rules/FragmentsOnCompositeTypesRule.d.mts +6 -2
- package/validation/rules/FragmentsOnCompositeTypesRule.d.ts +6 -2
- package/validation/rules/FragmentsOnCompositeTypesRule.js.map +1 -1
- package/validation/rules/FragmentsOnCompositeTypesRule.mjs.map +1 -1
- package/validation/rules/KnownArgumentNamesRule.d.mts +3 -1
- package/validation/rules/KnownArgumentNamesRule.d.ts +3 -1
- package/validation/rules/KnownArgumentNamesRule.js.map +1 -1
- package/validation/rules/KnownArgumentNamesRule.mjs.map +1 -1
- package/validation/rules/KnownDirectivesRule.js +2 -1
- package/validation/rules/KnownDirectivesRule.js.map +1 -1
- package/validation/rules/KnownDirectivesRule.mjs +2 -1
- package/validation/rules/KnownDirectivesRule.mjs.map +1 -1
- package/validation/rules/KnownFragmentNamesRule.d.mts +3 -1
- package/validation/rules/KnownFragmentNamesRule.d.ts +3 -1
- package/validation/rules/KnownFragmentNamesRule.js.map +1 -1
- package/validation/rules/KnownFragmentNamesRule.mjs.map +1 -1
- package/validation/rules/LoneAnonymousOperationRule.d.mts +6 -2
- package/validation/rules/LoneAnonymousOperationRule.d.ts +6 -2
- package/validation/rules/LoneAnonymousOperationRule.js.map +1 -1
- package/validation/rules/LoneAnonymousOperationRule.mjs.map +1 -1
- package/validation/rules/MaxIntrospectionDepthRule.d.mts +6 -2
- package/validation/rules/MaxIntrospectionDepthRule.d.ts +6 -2
- package/validation/rules/MaxIntrospectionDepthRule.js.map +1 -1
- package/validation/rules/MaxIntrospectionDepthRule.mjs.map +1 -1
- package/validation/rules/NoUndefinedVariablesRule.d.mts +3 -1
- package/validation/rules/NoUndefinedVariablesRule.d.ts +3 -1
- package/validation/rules/NoUndefinedVariablesRule.js.map +1 -1
- package/validation/rules/NoUndefinedVariablesRule.mjs.map +1 -1
- package/validation/rules/NoUnusedFragmentsRule.d.mts +3 -1
- package/validation/rules/NoUnusedFragmentsRule.d.ts +3 -1
- package/validation/rules/NoUnusedFragmentsRule.js.map +1 -1
- package/validation/rules/NoUnusedFragmentsRule.mjs.map +1 -1
- package/validation/rules/NoUnusedVariablesRule.d.mts +3 -1
- package/validation/rules/NoUnusedVariablesRule.d.ts +3 -1
- package/validation/rules/NoUnusedVariablesRule.js.map +1 -1
- package/validation/rules/NoUnusedVariablesRule.mjs.map +1 -1
- package/validation/rules/OverlappingFieldsCanBeMergedRule.d.mts +6 -2
- package/validation/rules/OverlappingFieldsCanBeMergedRule.d.ts +6 -2
- package/validation/rules/OverlappingFieldsCanBeMergedRule.js.map +1 -1
- package/validation/rules/OverlappingFieldsCanBeMergedRule.mjs.map +1 -1
- package/validation/rules/PossibleFragmentSpreadsRule.d.mts +6 -2
- package/validation/rules/PossibleFragmentSpreadsRule.d.ts +6 -2
- package/validation/rules/PossibleFragmentSpreadsRule.js.map +1 -1
- package/validation/rules/PossibleFragmentSpreadsRule.mjs.map +1 -1
- package/validation/rules/ProvidedRequiredArgumentsRule.d.mts +6 -2
- package/validation/rules/ProvidedRequiredArgumentsRule.d.ts +6 -2
- package/validation/rules/ProvidedRequiredArgumentsRule.js.map +1 -1
- package/validation/rules/ProvidedRequiredArgumentsRule.mjs.map +1 -1
- package/validation/rules/SingleFieldSubscriptionsRule.d.mts +6 -2
- package/validation/rules/SingleFieldSubscriptionsRule.d.ts +6 -2
- package/validation/rules/SingleFieldSubscriptionsRule.js.map +1 -1
- package/validation/rules/SingleFieldSubscriptionsRule.mjs.map +1 -1
- package/validation/rules/UniqueArgumentNamesRule.d.mts +3 -1
- package/validation/rules/UniqueArgumentNamesRule.d.ts +3 -1
- package/validation/rules/UniqueArgumentNamesRule.js.map +1 -1
- package/validation/rules/UniqueArgumentNamesRule.mjs.map +1 -1
- package/validation/rules/UniqueDirectivesPerLocationRule.d.mts +6 -2
- package/validation/rules/UniqueDirectivesPerLocationRule.d.ts +6 -2
- package/validation/rules/UniqueDirectivesPerLocationRule.js.map +1 -1
- package/validation/rules/UniqueDirectivesPerLocationRule.mjs.map +1 -1
- package/validation/rules/UniqueFragmentNamesRule.d.mts +3 -1
- package/validation/rules/UniqueFragmentNamesRule.d.ts +3 -1
- package/validation/rules/UniqueFragmentNamesRule.js.map +1 -1
- package/validation/rules/UniqueFragmentNamesRule.mjs.map +1 -1
- package/validation/rules/UniqueInputFieldNamesRule.d.mts +6 -2
- package/validation/rules/UniqueInputFieldNamesRule.d.ts +6 -2
- package/validation/rules/UniqueInputFieldNamesRule.js.map +1 -1
- package/validation/rules/UniqueInputFieldNamesRule.mjs.map +1 -1
- package/validation/rules/UniqueOperationNamesRule.d.mts +3 -1
- package/validation/rules/UniqueOperationNamesRule.d.ts +3 -1
- package/validation/rules/UniqueOperationNamesRule.js.map +1 -1
- package/validation/rules/UniqueOperationNamesRule.mjs.map +1 -1
- package/validation/rules/UniqueVariableNamesRule.d.mts +3 -1
- package/validation/rules/UniqueVariableNamesRule.d.ts +3 -1
- package/validation/rules/UniqueVariableNamesRule.js.map +1 -1
- package/validation/rules/UniqueVariableNamesRule.mjs.map +1 -1
- package/validation/rules/ValuesOfCorrectTypeRule.d.mts +3 -1
- package/validation/rules/ValuesOfCorrectTypeRule.d.ts +3 -1
- package/validation/rules/ValuesOfCorrectTypeRule.js.map +1 -1
- package/validation/rules/ValuesOfCorrectTypeRule.mjs.map +1 -1
- package/validation/rules/VariablesAreInputTypesRule.d.mts +6 -2
- package/validation/rules/VariablesAreInputTypesRule.d.ts +6 -2
- package/validation/rules/VariablesAreInputTypesRule.js.map +1 -1
- package/validation/rules/VariablesAreInputTypesRule.mjs.map +1 -1
- package/validation/rules/VariablesInAllowedPositionRule.d.mts +6 -2
- package/validation/rules/VariablesInAllowedPositionRule.d.ts +6 -2
- package/validation/rules/VariablesInAllowedPositionRule.js.map +1 -1
- package/validation/rules/VariablesInAllowedPositionRule.mjs.map +1 -1
- package/validation/rules/custom/NoDeprecatedCustomRule.d.mts +3 -1
- package/validation/rules/custom/NoDeprecatedCustomRule.d.ts +3 -1
- package/validation/rules/custom/NoDeprecatedCustomRule.js.map +1 -1
- package/validation/rules/custom/NoDeprecatedCustomRule.mjs.map +1 -1
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.d.mts +6 -2
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.d.ts +6 -2
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.js.map +1 -1
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.mjs.map +1 -1
- package/validation/validate.d.mts +3 -6
- package/validation/validate.d.ts +3 -6
- package/validation/validate.js +6 -0
- package/validation/validate.js.map +1 -1
- package/validation/validate.mjs +6 -0
- package/validation/validate.mjs.map +1 -1
- package/version.js +2 -2
- package/version.js.map +1 -1
- package/version.mjs +2 -2
- package/version.mjs.map +1 -1
|
@@ -26,15 +26,11 @@ import type { VariableValues } from "../execution/values.mjs";
|
|
|
26
26
|
* review(stars: Int = 5): String
|
|
27
27
|
* }
|
|
28
28
|
* `);
|
|
29
|
-
* const document = parse(
|
|
30
|
-
* 'query ($stars: Int = 5) { review(stars: $stars) }',
|
|
31
|
-
* );
|
|
29
|
+
* const document = parse('query ($stars: Int = 5) { review(stars: $stars) }');
|
|
32
30
|
* const operation = document.definitions[0];
|
|
33
|
-
* const result = getVariableValues(
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* { stars: 4 },
|
|
37
|
-
* );
|
|
31
|
+
* const result = getVariableValues(schema, operation.variableDefinitions, {
|
|
32
|
+
* stars: 4,
|
|
33
|
+
* });
|
|
38
34
|
*
|
|
39
35
|
* assert('variableValues' in result);
|
|
40
36
|
*
|
|
@@ -26,15 +26,11 @@ import type { VariableValues } from "../execution/values.js";
|
|
|
26
26
|
* review(stars: Int = 5): String
|
|
27
27
|
* }
|
|
28
28
|
* `);
|
|
29
|
-
* const document = parse(
|
|
30
|
-
* 'query ($stars: Int = 5) { review(stars: $stars) }',
|
|
31
|
-
* );
|
|
29
|
+
* const document = parse('query ($stars: Int = 5) { review(stars: $stars) }');
|
|
32
30
|
* const operation = document.definitions[0];
|
|
33
|
-
* const result = getVariableValues(
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* { stars: 4 },
|
|
37
|
-
* );
|
|
31
|
+
* const result = getVariableValues(schema, operation.variableDefinitions, {
|
|
32
|
+
* stars: 4,
|
|
33
|
+
* });
|
|
38
34
|
*
|
|
39
35
|
* assert('variableValues' in result);
|
|
40
36
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replaceVariables.js","sourceRoot":"","sources":["../../src/utilities/replaceVariables.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"replaceVariables.js","sourceRoot":"","sources":["../../src/utilities/replaceVariables.ts"],"names":[],"mappings":"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","sourcesContent":["/** @category Values */\n\nimport type { Maybe } from '../jsutils/Maybe.ts';\n\nimport type {\n ConstValueNode,\n ObjectFieldNode,\n ValueNode,\n} from '../language/ast.ts';\nimport { Kind } from '../language/kinds.ts';\n\nimport type { FragmentVariableValues } from '../execution/collectFields.ts';\nimport type { VariableValues } from '../execution/values.ts';\n\nimport { valueToLiteral } from './valueToLiteral.ts';\n\n/**\n * Replaces any Variables found within an AST Value literal with literals\n * supplied from a map of variable values, or removed if no variable replacement\n * exists, returning a constant value.\n *\n * Used primarily to ensure only complete constant values are used during input\n * coercion of custom scalars which accept complex literals.\n * @param valueNode - Value AST node in which variables should be replaced.\n * @param variableValues - Operation variable values returned by getVariableValues.\n * @param fragmentVariableValues - Fragment variable values for the current fragment scope.\n * @returns A constant value AST with variables replaced.\n * @example\n * ```ts\n * import assert from 'node:assert';\n * import { parse, parseValue, print } from 'graphql/language';\n * import { getVariableValues } from 'graphql/execution';\n * import { buildSchema, replaceVariables } from 'graphql/utilities';\n *\n * const schema = buildSchema(`\n * type Query {\n * review(stars: Int = 5): String\n * }\n * `);\n * const document = parse('query ($stars: Int = 5) { review(stars: $stars) }');\n * const operation = document.definitions[0];\n * const result = getVariableValues(schema, operation.variableDefinitions, {\n * stars: 4,\n * });\n *\n * assert('variableValues' in result);\n *\n * const literal = replaceVariables(\n * parseValue('{ stars: $stars, comment: $missing }'),\n * result.variableValues,\n * );\n *\n * print(literal); // => '{ stars: 4 }'\n * ```\n */\nexport function replaceVariables(\n valueNode: ValueNode,\n variableValues?: Maybe<VariableValues>,\n fragmentVariableValues?: Maybe<FragmentVariableValues>,\n): ConstValueNode {\n switch (valueNode.kind) {\n case Kind.VARIABLE: {\n const varName = valueNode.name.value;\n const fragmentVariableValueSource =\n fragmentVariableValues?.sources[varName];\n\n if (fragmentVariableValueSource) {\n const value = fragmentVariableValueSource.value;\n if (value === undefined) {\n const defaultValue = fragmentVariableValueSource.signature.default;\n if (defaultValue !== undefined) {\n return defaultValue.literal;\n }\n return { kind: Kind.NULL };\n }\n return replaceVariables(\n value,\n variableValues,\n fragmentVariableValueSource.fragmentVariableValues,\n );\n }\n\n const variableValueSource = variableValues?.sources[varName];\n if (variableValueSource == null) {\n return { kind: Kind.NULL };\n }\n\n if (variableValueSource.value === undefined) {\n const defaultValue = variableValueSource.signature.default;\n if (defaultValue !== undefined) {\n return defaultValue.literal;\n }\n }\n\n return valueToLiteral(\n variableValueSource.value,\n variableValueSource.signature.type,\n ) as ConstValueNode;\n }\n case Kind.OBJECT: {\n const newFields: Array<ObjectFieldNode> = [];\n for (const field of valueNode.fields) {\n if (field.value.kind === Kind.VARIABLE) {\n const scopedVariableSource =\n fragmentVariableValues?.sources[field.value.name.value] ??\n variableValues?.sources[field.value.name.value];\n\n if (\n scopedVariableSource?.value === undefined &&\n scopedVariableSource?.signature.default === undefined\n ) {\n continue;\n }\n }\n const newFieldNodeValue = replaceVariables(\n field.value,\n variableValues,\n fragmentVariableValues,\n );\n newFields.push({\n ...field,\n value: newFieldNodeValue,\n });\n }\n return {\n ...valueNode,\n fields: newFields,\n } as ConstValueNode;\n }\n case Kind.LIST: {\n const newValues: Array<ValueNode> = [];\n for (const value of valueNode.values) {\n const newItemNodeValue = replaceVariables(\n value,\n variableValues,\n fragmentVariableValues,\n );\n newValues.push(newItemNodeValue);\n }\n return {\n ...valueNode,\n values: newValues,\n } as ConstValueNode;\n }\n default: {\n return valueNode;\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replaceVariables.js","sourceRoot":"","sources":["../../src/utilities/replaceVariables.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,8BAA6B;AAK5C,OAAO,EAAE,cAAc,EAAE,6BAA4B;
|
|
1
|
+
{"version":3,"file":"replaceVariables.js","sourceRoot":"","sources":["../../src/utilities/replaceVariables.ts"],"names":[],"mappings":"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","sourcesContent":["/** @category Values */\n\nimport type { Maybe } from '../jsutils/Maybe.ts';\n\nimport type {\n ConstValueNode,\n ObjectFieldNode,\n ValueNode,\n} from '../language/ast.ts';\nimport { Kind } from '../language/kinds.ts';\n\nimport type { FragmentVariableValues } from '../execution/collectFields.ts';\nimport type { VariableValues } from '../execution/values.ts';\n\nimport { valueToLiteral } from './valueToLiteral.ts';\n\n/**\n * Replaces any Variables found within an AST Value literal with literals\n * supplied from a map of variable values, or removed if no variable replacement\n * exists, returning a constant value.\n *\n * Used primarily to ensure only complete constant values are used during input\n * coercion of custom scalars which accept complex literals.\n * @param valueNode - Value AST node in which variables should be replaced.\n * @param variableValues - Operation variable values returned by getVariableValues.\n * @param fragmentVariableValues - Fragment variable values for the current fragment scope.\n * @returns A constant value AST with variables replaced.\n * @example\n * ```ts\n * import assert from 'node:assert';\n * import { parse, parseValue, print } from 'graphql/language';\n * import { getVariableValues } from 'graphql/execution';\n * import { buildSchema, replaceVariables } from 'graphql/utilities';\n *\n * const schema = buildSchema(`\n * type Query {\n * review(stars: Int = 5): String\n * }\n * `);\n * const document = parse('query ($stars: Int = 5) { review(stars: $stars) }');\n * const operation = document.definitions[0];\n * const result = getVariableValues(schema, operation.variableDefinitions, {\n * stars: 4,\n * });\n *\n * assert('variableValues' in result);\n *\n * const literal = replaceVariables(\n * parseValue('{ stars: $stars, comment: $missing }'),\n * result.variableValues,\n * );\n *\n * print(literal); // => '{ stars: 4 }'\n * ```\n */\nexport function replaceVariables(\n valueNode: ValueNode,\n variableValues?: Maybe<VariableValues>,\n fragmentVariableValues?: Maybe<FragmentVariableValues>,\n): ConstValueNode {\n switch (valueNode.kind) {\n case Kind.VARIABLE: {\n const varName = valueNode.name.value;\n const fragmentVariableValueSource =\n fragmentVariableValues?.sources[varName];\n\n if (fragmentVariableValueSource) {\n const value = fragmentVariableValueSource.value;\n if (value === undefined) {\n const defaultValue = fragmentVariableValueSource.signature.default;\n if (defaultValue !== undefined) {\n return defaultValue.literal;\n }\n return { kind: Kind.NULL };\n }\n return replaceVariables(\n value,\n variableValues,\n fragmentVariableValueSource.fragmentVariableValues,\n );\n }\n\n const variableValueSource = variableValues?.sources[varName];\n if (variableValueSource == null) {\n return { kind: Kind.NULL };\n }\n\n if (variableValueSource.value === undefined) {\n const defaultValue = variableValueSource.signature.default;\n if (defaultValue !== undefined) {\n return defaultValue.literal;\n }\n }\n\n return valueToLiteral(\n variableValueSource.value,\n variableValueSource.signature.type,\n ) as ConstValueNode;\n }\n case Kind.OBJECT: {\n const newFields: Array<ObjectFieldNode> = [];\n for (const field of valueNode.fields) {\n if (field.value.kind === Kind.VARIABLE) {\n const scopedVariableSource =\n fragmentVariableValues?.sources[field.value.name.value] ??\n variableValues?.sources[field.value.name.value];\n\n if (\n scopedVariableSource?.value === undefined &&\n scopedVariableSource?.signature.default === undefined\n ) {\n continue;\n }\n }\n const newFieldNodeValue = replaceVariables(\n field.value,\n variableValues,\n fragmentVariableValues,\n );\n newFields.push({\n ...field,\n value: newFieldNodeValue,\n });\n }\n return {\n ...valueNode,\n fields: newFields,\n } as ConstValueNode;\n }\n case Kind.LIST: {\n const newValues: Array<ValueNode> = [];\n for (const value of valueNode.values) {\n const newItemNodeValue = replaceVariables(\n value,\n variableValues,\n fragmentVariableValues,\n );\n newValues.push(newItemNodeValue);\n }\n return {\n ...valueNode,\n values: newValues,\n } as ConstValueNode;\n }\n default: {\n return valueNode;\n }\n }\n}\n"]}
|
|
@@ -36,7 +36,7 @@ import { Source } from "../language/source.mjs";
|
|
|
36
36
|
*
|
|
37
37
|
* Becomes:
|
|
38
38
|
*
|
|
39
|
-
* ```graphql
|
|
39
|
+
* ```graphql prettier-ignore
|
|
40
40
|
* query SomeQuery($foo:String!$bar:String){someField(foo:$foo bar:$bar){a b{c d}}}
|
|
41
41
|
* ```
|
|
42
42
|
* @example SDL source
|
|
@@ -54,7 +54,7 @@ import { Source } from "../language/source.mjs";
|
|
|
54
54
|
*
|
|
55
55
|
* Becomes:
|
|
56
56
|
*
|
|
57
|
-
* ```graphql
|
|
57
|
+
* ```graphql prettier-ignore
|
|
58
58
|
* """Type description""" type Foo{"""Field description""" bar:String}
|
|
59
59
|
* ```
|
|
60
60
|
* @example
|
|
@@ -36,7 +36,7 @@ import { Source } from "../language/source.js";
|
|
|
36
36
|
*
|
|
37
37
|
* Becomes:
|
|
38
38
|
*
|
|
39
|
-
* ```graphql
|
|
39
|
+
* ```graphql prettier-ignore
|
|
40
40
|
* query SomeQuery($foo:String!$bar:String){someField(foo:$foo bar:$bar){a b{c d}}}
|
|
41
41
|
* ```
|
|
42
42
|
* @example SDL source
|
|
@@ -54,7 +54,7 @@ import { Source } from "../language/source.js";
|
|
|
54
54
|
*
|
|
55
55
|
* Becomes:
|
|
56
56
|
*
|
|
57
|
-
* ```graphql
|
|
57
|
+
* ```graphql prettier-ignore
|
|
58
58
|
* """Type description""" type Foo{"""Field description""" bar:String}
|
|
59
59
|
* ```
|
|
60
60
|
* @example
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripIgnoredCharacters.js","sourceRoot":"","sources":["../../src/utilities/stripIgnoredCharacters.ts"],"names":[],"mappings":";;AAyEA,wDAqCC;AA5GD,+DAA8D;AAC9D,mDAAoE;AACpE,qDAAyD;AACzD,2DAAqD;AAoErD,SAAgB,sBAAsB,CAAC,MAAuB;IAC5D,MAAM,SAAS,GAAG,IAAA,oBAAQ,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,kBAAM,CAAC,MAAM,CAAC,CAAC;IAEjE,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,gBAAK,CAAC,SAAS,CAAC,CAAC;IACnC,IAAI,YAAY,GAAG,EAAE,CAAC;IAEtB,IAAI,8BAA8B,GAAG,KAAK,CAAC;IAC3C,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,KAAK,wBAAS,CAAC,GAAG,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC;QACjC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC;QASpC,MAAM,eAAe,GAAG,CAAC,IAAA,gCAAqB,EAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAClE,IAAI,8BAA8B,EAAE,CAAC;YACnC,IAAI,eAAe,IAAI,YAAY,CAAC,IAAI,KAAK,wBAAS,CAAC,MAAM,EAAE,CAAC;gBAC9D,YAAY,IAAI,GAAG,CAAC;YACtB,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;QACnE,IAAI,SAAS,KAAK,wBAAS,CAAC,YAAY,EAAE,CAAC;YACzC,YAAY,IAAI,IAAA,iCAAgB,EAAC,YAAY,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,YAAY,IAAI,SAAS,CAAC;QAC5B,CAAC;QAED,8BAA8B,GAAG,eAAe,CAAC;IACnD,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC","sourcesContent":["/** @category AST Utilities */\n\nimport { printBlockString } from '../language/blockString.ts';\nimport { isPunctuatorTokenKind, Lexer } from '../language/lexer.ts';\nimport { isSource, Source } from '../language/source.ts';\nimport { TokenKind } from '../language/tokenKind.ts';\n\n/**\n * Strips characters that are not significant to the validity or execution\n * of a GraphQL document:\n * - UnicodeBOM\n * - WhiteSpace\n * - LineTerminator\n * - Comment\n * - Comma\n * - BlockString indentation\n *\n * Note: It is required to have a delimiter character between neighboring\n * non-punctuator tokens and this function always uses single space as delimiter.\n *\n * It is guaranteed that both input and output documents if parsed would result\n * in the exact same AST except for nodes location.\n *\n * Warning: It is guaranteed that this function will always produce stable results.\n * However, it's not guaranteed that it will stay the same between different\n * releases due to bugfixes or changes in the GraphQL specification.\n * @param source - The GraphQL source text or source object.\n * @returns A semantically equivalent GraphQL source string without ignored characters.\n * @example Query source\n * ```graphql\n * query SomeQuery($foo: String!, $bar: String) {\n * someField(foo: $foo, bar: $bar) {\n * a\n * b {\n * c\n * d\n * }\n * }\n * }\n * ```\n *\n * Becomes:\n *\n * ```graphql\n * query SomeQuery($foo:String!$bar:String){someField(foo:$foo bar:$bar){a b{c d}}}\n * ```\n * @example SDL source\n * ```graphql\n * \"\"\"\n * Type description\n * \"\"\"\n * type Foo {\n * \"\"\"\n * Field description\n * \"\"\"\n * bar: String\n * }\n * ```\n *\n * Becomes:\n *\n * ```graphql\n * \"\"\"Type description\"\"\" type Foo{\"\"\"Field description\"\"\" bar:String}\n * ```\n * @example\n * ```ts\n * import { stripIgnoredCharacters } from 'graphql/utilities';\n *\n * const source = stripIgnoredCharacters('query Example { name }');\n *\n * source; // => 'query Example{name}'\n * ```\n */\nexport function stripIgnoredCharacters(source: string | Source): string {\n const sourceObj = isSource(source) ? source : new Source(source);\n\n const body = sourceObj.body;\n const lexer = new Lexer(sourceObj);\n let strippedBody = '';\n\n let wasLastAddedTokenNonPunctuator = false;\n while (lexer.advance().kind !== TokenKind.EOF) {\n const currentToken = lexer.token;\n const tokenKind = currentToken.kind;\n\n /**\n * Every two non-punctuator tokens should have space between them.\n * Also prevent case of non-punctuator token following by spread resulting\n * in invalid token (e.g. `1...` is invalid Float token).\n *\n * @internal\n */\n const isNonPunctuator = !isPunctuatorTokenKind(currentToken.kind);\n if (wasLastAddedTokenNonPunctuator) {\n if (isNonPunctuator || currentToken.kind === TokenKind.SPREAD) {\n strippedBody += ' ';\n }\n }\n\n const tokenBody = body.slice(currentToken.start, currentToken.end);\n if (tokenKind === TokenKind.BLOCK_STRING) {\n strippedBody += printBlockString(currentToken.value, { minimize: true });\n } else {\n strippedBody += tokenBody;\n }\n\n wasLastAddedTokenNonPunctuator = isNonPunctuator;\n }\n\n return strippedBody;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"stripIgnoredCharacters.js","sourceRoot":"","sources":["../../src/utilities/stripIgnoredCharacters.ts"],"names":[],"mappings":";;AAyEA,wDAqCC;AA5GD,+DAA8D;AAC9D,mDAAoE;AACpE,qDAAyD;AACzD,2DAAqD;AAoErD,SAAgB,sBAAsB,CAAC,MAAuB;IAC5D,MAAM,SAAS,GAAG,IAAA,oBAAQ,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,kBAAM,CAAC,MAAM,CAAC,CAAC;IAEjE,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,gBAAK,CAAC,SAAS,CAAC,CAAC;IACnC,IAAI,YAAY,GAAG,EAAE,CAAC;IAEtB,IAAI,8BAA8B,GAAG,KAAK,CAAC;IAC3C,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,KAAK,wBAAS,CAAC,GAAG,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC;QACjC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC;QASpC,MAAM,eAAe,GAAG,CAAC,IAAA,gCAAqB,EAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAClE,IAAI,8BAA8B,EAAE,CAAC;YACnC,IAAI,eAAe,IAAI,YAAY,CAAC,IAAI,KAAK,wBAAS,CAAC,MAAM,EAAE,CAAC;gBAC9D,YAAY,IAAI,GAAG,CAAC;YACtB,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;QACnE,IAAI,SAAS,KAAK,wBAAS,CAAC,YAAY,EAAE,CAAC;YACzC,YAAY,IAAI,IAAA,iCAAgB,EAAC,YAAY,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,YAAY,IAAI,SAAS,CAAC;QAC5B,CAAC;QAED,8BAA8B,GAAG,eAAe,CAAC;IACnD,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC","sourcesContent":["/** @category AST Utilities */\n\nimport { printBlockString } from '../language/blockString.ts';\nimport { isPunctuatorTokenKind, Lexer } from '../language/lexer.ts';\nimport { isSource, Source } from '../language/source.ts';\nimport { TokenKind } from '../language/tokenKind.ts';\n\n/**\n * Strips characters that are not significant to the validity or execution\n * of a GraphQL document:\n * - UnicodeBOM\n * - WhiteSpace\n * - LineTerminator\n * - Comment\n * - Comma\n * - BlockString indentation\n *\n * Note: It is required to have a delimiter character between neighboring\n * non-punctuator tokens and this function always uses single space as delimiter.\n *\n * It is guaranteed that both input and output documents if parsed would result\n * in the exact same AST except for nodes location.\n *\n * Warning: It is guaranteed that this function will always produce stable results.\n * However, it's not guaranteed that it will stay the same between different\n * releases due to bugfixes or changes in the GraphQL specification.\n * @param source - The GraphQL source text or source object.\n * @returns A semantically equivalent GraphQL source string without ignored characters.\n * @example Query source\n * ```graphql\n * query SomeQuery($foo: String!, $bar: String) {\n * someField(foo: $foo, bar: $bar) {\n * a\n * b {\n * c\n * d\n * }\n * }\n * }\n * ```\n *\n * Becomes:\n *\n * ```graphql prettier-ignore\n * query SomeQuery($foo:String!$bar:String){someField(foo:$foo bar:$bar){a b{c d}}}\n * ```\n * @example SDL source\n * ```graphql\n * \"\"\"\n * Type description\n * \"\"\"\n * type Foo {\n * \"\"\"\n * Field description\n * \"\"\"\n * bar: String\n * }\n * ```\n *\n * Becomes:\n *\n * ```graphql prettier-ignore\n * \"\"\"Type description\"\"\" type Foo{\"\"\"Field description\"\"\" bar:String}\n * ```\n * @example\n * ```ts\n * import { stripIgnoredCharacters } from 'graphql/utilities';\n *\n * const source = stripIgnoredCharacters('query Example { name }');\n *\n * source; // => 'query Example{name}'\n * ```\n */\nexport function stripIgnoredCharacters(source: string | Source): string {\n const sourceObj = isSource(source) ? source : new Source(source);\n\n const body = sourceObj.body;\n const lexer = new Lexer(sourceObj);\n let strippedBody = '';\n\n let wasLastAddedTokenNonPunctuator = false;\n while (lexer.advance().kind !== TokenKind.EOF) {\n const currentToken = lexer.token;\n const tokenKind = currentToken.kind;\n\n /**\n * Every two non-punctuator tokens should have space between them.\n * Also prevent case of non-punctuator token following by spread resulting\n * in invalid token (e.g. `1...` is invalid Float token).\n *\n * @internal\n */\n const isNonPunctuator = !isPunctuatorTokenKind(currentToken.kind);\n if (wasLastAddedTokenNonPunctuator) {\n if (isNonPunctuator || currentToken.kind === TokenKind.SPREAD) {\n strippedBody += ' ';\n }\n }\n\n const tokenBody = body.slice(currentToken.start, currentToken.end);\n if (tokenKind === TokenKind.BLOCK_STRING) {\n strippedBody += printBlockString(currentToken.value, { minimize: true });\n } else {\n strippedBody += tokenBody;\n }\n\n wasLastAddedTokenNonPunctuator = isNonPunctuator;\n }\n\n return strippedBody;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripIgnoredCharacters.js","sourceRoot":"","sources":["../../src/utilities/stripIgnoredCharacters.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,oCAAmC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,8BAA6B;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,+BAA8B;AACzD,OAAO,EAAE,SAAS,EAAE,kCAAiC;AAoErD,MAAM,UAAU,sBAAsB,CAAC,MAAuB;IAC5D,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;IAEjE,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;IACnC,IAAI,YAAY,GAAG,EAAE,CAAC;IAEtB,IAAI,8BAA8B,GAAG,KAAK,CAAC;IAC3C,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,GAAG,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC;QACjC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC;QASpC,MAAM,eAAe,GAAG,CAAC,qBAAqB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAClE,IAAI,8BAA8B,EAAE,CAAC;YACnC,IAAI,eAAe,IAAI,YAAY,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;gBAC9D,YAAY,IAAI,GAAG,CAAC;YACtB,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;QACnE,IAAI,SAAS,KAAK,SAAS,CAAC,YAAY,EAAE,CAAC;YACzC,YAAY,IAAI,gBAAgB,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,YAAY,IAAI,SAAS,CAAC;QAC5B,CAAC;QAED,8BAA8B,GAAG,eAAe,CAAC;IACnD,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC","sourcesContent":["/** @category AST Utilities */\n\nimport { printBlockString } from '../language/blockString.ts';\nimport { isPunctuatorTokenKind, Lexer } from '../language/lexer.ts';\nimport { isSource, Source } from '../language/source.ts';\nimport { TokenKind } from '../language/tokenKind.ts';\n\n/**\n * Strips characters that are not significant to the validity or execution\n * of a GraphQL document:\n * - UnicodeBOM\n * - WhiteSpace\n * - LineTerminator\n * - Comment\n * - Comma\n * - BlockString indentation\n *\n * Note: It is required to have a delimiter character between neighboring\n * non-punctuator tokens and this function always uses single space as delimiter.\n *\n * It is guaranteed that both input and output documents if parsed would result\n * in the exact same AST except for nodes location.\n *\n * Warning: It is guaranteed that this function will always produce stable results.\n * However, it's not guaranteed that it will stay the same between different\n * releases due to bugfixes or changes in the GraphQL specification.\n * @param source - The GraphQL source text or source object.\n * @returns A semantically equivalent GraphQL source string without ignored characters.\n * @example Query source\n * ```graphql\n * query SomeQuery($foo: String!, $bar: String) {\n * someField(foo: $foo, bar: $bar) {\n * a\n * b {\n * c\n * d\n * }\n * }\n * }\n * ```\n *\n * Becomes:\n *\n * ```graphql\n * query SomeQuery($foo:String!$bar:String){someField(foo:$foo bar:$bar){a b{c d}}}\n * ```\n * @example SDL source\n * ```graphql\n * \"\"\"\n * Type description\n * \"\"\"\n * type Foo {\n * \"\"\"\n * Field description\n * \"\"\"\n * bar: String\n * }\n * ```\n *\n * Becomes:\n *\n * ```graphql\n * \"\"\"Type description\"\"\" type Foo{\"\"\"Field description\"\"\" bar:String}\n * ```\n * @example\n * ```ts\n * import { stripIgnoredCharacters } from 'graphql/utilities';\n *\n * const source = stripIgnoredCharacters('query Example { name }');\n *\n * source; // => 'query Example{name}'\n * ```\n */\nexport function stripIgnoredCharacters(source: string | Source): string {\n const sourceObj = isSource(source) ? source : new Source(source);\n\n const body = sourceObj.body;\n const lexer = new Lexer(sourceObj);\n let strippedBody = '';\n\n let wasLastAddedTokenNonPunctuator = false;\n while (lexer.advance().kind !== TokenKind.EOF) {\n const currentToken = lexer.token;\n const tokenKind = currentToken.kind;\n\n /**\n * Every two non-punctuator tokens should have space between them.\n * Also prevent case of non-punctuator token following by spread resulting\n * in invalid token (e.g. `1...` is invalid Float token).\n *\n * @internal\n */\n const isNonPunctuator = !isPunctuatorTokenKind(currentToken.kind);\n if (wasLastAddedTokenNonPunctuator) {\n if (isNonPunctuator || currentToken.kind === TokenKind.SPREAD) {\n strippedBody += ' ';\n }\n }\n\n const tokenBody = body.slice(currentToken.start, currentToken.end);\n if (tokenKind === TokenKind.BLOCK_STRING) {\n strippedBody += printBlockString(currentToken.value, { minimize: true });\n } else {\n strippedBody += tokenBody;\n }\n\n wasLastAddedTokenNonPunctuator = isNonPunctuator;\n }\n\n return strippedBody;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"stripIgnoredCharacters.js","sourceRoot":"","sources":["../../src/utilities/stripIgnoredCharacters.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,oCAAmC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,8BAA6B;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,+BAA8B;AACzD,OAAO,EAAE,SAAS,EAAE,kCAAiC;AAoErD,MAAM,UAAU,sBAAsB,CAAC,MAAuB;IAC5D,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;IAEjE,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;IACnC,IAAI,YAAY,GAAG,EAAE,CAAC;IAEtB,IAAI,8BAA8B,GAAG,KAAK,CAAC;IAC3C,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,GAAG,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC;QACjC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC;QASpC,MAAM,eAAe,GAAG,CAAC,qBAAqB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAClE,IAAI,8BAA8B,EAAE,CAAC;YACnC,IAAI,eAAe,IAAI,YAAY,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;gBAC9D,YAAY,IAAI,GAAG,CAAC;YACtB,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;QACnE,IAAI,SAAS,KAAK,SAAS,CAAC,YAAY,EAAE,CAAC;YACzC,YAAY,IAAI,gBAAgB,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,YAAY,IAAI,SAAS,CAAC;QAC5B,CAAC;QAED,8BAA8B,GAAG,eAAe,CAAC;IACnD,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC","sourcesContent":["/** @category AST Utilities */\n\nimport { printBlockString } from '../language/blockString.ts';\nimport { isPunctuatorTokenKind, Lexer } from '../language/lexer.ts';\nimport { isSource, Source } from '../language/source.ts';\nimport { TokenKind } from '../language/tokenKind.ts';\n\n/**\n * Strips characters that are not significant to the validity or execution\n * of a GraphQL document:\n * - UnicodeBOM\n * - WhiteSpace\n * - LineTerminator\n * - Comment\n * - Comma\n * - BlockString indentation\n *\n * Note: It is required to have a delimiter character between neighboring\n * non-punctuator tokens and this function always uses single space as delimiter.\n *\n * It is guaranteed that both input and output documents if parsed would result\n * in the exact same AST except for nodes location.\n *\n * Warning: It is guaranteed that this function will always produce stable results.\n * However, it's not guaranteed that it will stay the same between different\n * releases due to bugfixes or changes in the GraphQL specification.\n * @param source - The GraphQL source text or source object.\n * @returns A semantically equivalent GraphQL source string without ignored characters.\n * @example Query source\n * ```graphql\n * query SomeQuery($foo: String!, $bar: String) {\n * someField(foo: $foo, bar: $bar) {\n * a\n * b {\n * c\n * d\n * }\n * }\n * }\n * ```\n *\n * Becomes:\n *\n * ```graphql prettier-ignore\n * query SomeQuery($foo:String!$bar:String){someField(foo:$foo bar:$bar){a b{c d}}}\n * ```\n * @example SDL source\n * ```graphql\n * \"\"\"\n * Type description\n * \"\"\"\n * type Foo {\n * \"\"\"\n * Field description\n * \"\"\"\n * bar: String\n * }\n * ```\n *\n * Becomes:\n *\n * ```graphql prettier-ignore\n * \"\"\"Type description\"\"\" type Foo{\"\"\"Field description\"\"\" bar:String}\n * ```\n * @example\n * ```ts\n * import { stripIgnoredCharacters } from 'graphql/utilities';\n *\n * const source = stripIgnoredCharacters('query Example { name }');\n *\n * source; // => 'query Example{name}'\n * ```\n */\nexport function stripIgnoredCharacters(source: string | Source): string {\n const sourceObj = isSource(source) ? source : new Source(source);\n\n const body = sourceObj.body;\n const lexer = new Lexer(sourceObj);\n let strippedBody = '';\n\n let wasLastAddedTokenNonPunctuator = false;\n while (lexer.advance().kind !== TokenKind.EOF) {\n const currentToken = lexer.token;\n const tokenKind = currentToken.kind;\n\n /**\n * Every two non-punctuator tokens should have space between them.\n * Also prevent case of non-punctuator token following by spread resulting\n * in invalid token (e.g. `1...` is invalid Float token).\n *\n * @internal\n */\n const isNonPunctuator = !isPunctuatorTokenKind(currentToken.kind);\n if (wasLastAddedTokenNonPunctuator) {\n if (isNonPunctuator || currentToken.kind === TokenKind.SPREAD) {\n strippedBody += ' ';\n }\n }\n\n const tokenBody = body.slice(currentToken.start, currentToken.end);\n if (tokenKind === TokenKind.BLOCK_STRING) {\n strippedBody += printBlockString(currentToken.value, { minimize: true });\n } else {\n strippedBody += tokenBody;\n }\n\n wasLastAddedTokenNonPunctuator = isNonPunctuator;\n }\n\n return strippedBody;\n}\n"]}
|
|
@@ -8,11 +8,7 @@ import type { GraphQLSchema } from "../type/schema.mjs";
|
|
|
8
8
|
* @returns True when both types are equal.
|
|
9
9
|
* @example
|
|
10
10
|
* ```ts
|
|
11
|
-
* import {
|
|
12
|
-
* GraphQLList,
|
|
13
|
-
* GraphQLNonNull,
|
|
14
|
-
* GraphQLString,
|
|
15
|
-
* } from 'graphql/type';
|
|
11
|
+
* import { GraphQLList, GraphQLNonNull, GraphQLString } from 'graphql/type';
|
|
16
12
|
* import { isEqualType } from 'graphql/utilities';
|
|
17
13
|
*
|
|
18
14
|
* isEqualType(GraphQLString, GraphQLString); // => true
|
|
@@ -8,11 +8,7 @@ import type { GraphQLSchema } from "../type/schema.js";
|
|
|
8
8
|
* @returns True when both types are equal.
|
|
9
9
|
* @example
|
|
10
10
|
* ```ts
|
|
11
|
-
* import {
|
|
12
|
-
* GraphQLList,
|
|
13
|
-
* GraphQLNonNull,
|
|
14
|
-
* GraphQLString,
|
|
15
|
-
* } from 'graphql/type';
|
|
11
|
+
* import { GraphQLList, GraphQLNonNull, GraphQLString } from 'graphql/type';
|
|
16
12
|
* import { isEqualType } from 'graphql/utilities';
|
|
17
13
|
*
|
|
18
14
|
* isEqualType(GraphQLString, GraphQLString); // => true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typeComparators.js","sourceRoot":"","sources":["../../src/utilities/typeComparators.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"typeComparators.js","sourceRoot":"","sources":["../../src/utilities/typeComparators.ts"],"names":[],"mappings":";;AA2BA,kCAkBC;AAwCD,0CAyCC;AA4CD,wCA6BC;AApMD,yDAM+B;AAkB/B,SAAgB,WAAW,CAAC,KAAkB,EAAE,KAAkB;IAEhE,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,IAAI,IAAA,6BAAa,EAAC,KAAK,CAAC,IAAI,IAAA,6BAAa,EAAC,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAGD,IAAI,IAAA,0BAAU,EAAC,KAAK,CAAC,IAAI,IAAA,0BAAU,EAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAGD,OAAO,KAAK,CAAC;AACf,CAAC;AAwCD,SAAgB,eAAe,CAC7B,MAAqB,EACrB,YAAyB,EACzB,SAAsB;IAGtB,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,IAAI,IAAA,6BAAa,EAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,IAAI,IAAA,6BAAa,EAAC,YAAY,CAAC,EAAE,CAAC;YAChC,OAAO,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,IAAA,6BAAa,EAAC,YAAY,CAAC,EAAE,CAAC;QAEhC,OAAO,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjE,CAAC;IAGD,IAAI,IAAA,0BAAU,EAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,IAAI,IAAA,0BAAU,EAAC,YAAY,CAAC,EAAE,CAAC;YAC7B,OAAO,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,IAAA,0BAAU,EAAC,YAAY,CAAC,EAAE,CAAC;QAE7B,OAAO,KAAK,CAAC;IACf,CAAC;IAID,OAAO,CACL,IAAA,8BAAc,EAAC,SAAS,CAAC;QACzB,CAAC,IAAA,+BAAe,EAAC,YAAY,CAAC,IAAI,IAAA,4BAAY,EAAC,YAAY,CAAC,CAAC;QAC7D,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC,CAC1C,CAAC;AACJ,CAAC;AA4CD,SAAgB,cAAc,CAC5B,MAAqB,EACrB,KAA2B,EAC3B,KAA2B;IAG3B,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAA,8BAAc,EAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,IAAI,IAAA,8BAAc,EAAC,KAAK,CAAC,EAAE,CAAC;YAG1B,OAAO,MAAM;iBACV,gBAAgB,CAAC,KAAK,CAAC;iBACvB,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,IAAA,8BAAc,EAAC,KAAK,CAAC,EAAE,CAAC;QAE1B,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAGD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["/** @category Type Comparisons */\n\nimport type { GraphQLCompositeType, GraphQLType } from '../type/definition.ts';\nimport {\n isAbstractType,\n isInterfaceType,\n isListType,\n isNonNullType,\n isObjectType,\n} from '../type/definition.ts';\nimport type { GraphQLSchema } from '../type/schema.ts';\n\n/**\n * Provided two types, return true if the types are equal (invariant).\n * @param typeA - The first GraphQL type to compare.\n * @param typeB - The second GraphQL type to compare.\n * @returns True when both types are equal.\n * @example\n * ```ts\n * import { GraphQLList, GraphQLNonNull, GraphQLString } from 'graphql/type';\n * import { isEqualType } from 'graphql/utilities';\n *\n * isEqualType(GraphQLString, GraphQLString); // => true\n * isEqualType(new GraphQLList(GraphQLString), new GraphQLList(GraphQLString)); // => true\n * isEqualType(new GraphQLNonNull(GraphQLString), GraphQLString); // => false\n * ```\n */\nexport function isEqualType(typeA: GraphQLType, typeB: GraphQLType): boolean {\n // Equivalent types are equal.\n if (typeA === typeB) {\n return true;\n }\n\n // If either type is non-null, the other must also be non-null.\n if (isNonNullType(typeA) && isNonNullType(typeB)) {\n return isEqualType(typeA.ofType, typeB.ofType);\n }\n\n // If either type is a list, the other must also be a list.\n if (isListType(typeA) && isListType(typeB)) {\n return isEqualType(typeA.ofType, typeB.ofType);\n }\n\n // Otherwise the types are not equal.\n return false;\n}\n\n/**\n * Provided a type and a super type, return true if the first type is either\n * equal or a subset of the second super type (covariant).\n * @param schema - GraphQL schema to use.\n * @param maybeSubType - The possible subtype to compare.\n * @param superType - The possible supertype to compare.\n * @returns True when `maybeSubType` is equal to or a subtype of `superType`.\n * @example\n * ```ts\n * import { buildSchema } from 'graphql/utilities';\n * import {\n * GraphQLNonNull,\n * assertInterfaceType,\n * assertObjectType,\n * } from 'graphql/type';\n * import { isTypeSubTypeOf } from 'graphql/utilities';\n *\n * const schema = buildSchema(`\n * interface Node {\n * id: ID!\n * }\n *\n * type User implements Node {\n * id: ID!\n * }\n *\n * type Query {\n * node: Node\n * }\n * `);\n * const Node = assertInterfaceType(schema.getType('Node'));\n * const User = assertObjectType(schema.getType('User'));\n *\n * isTypeSubTypeOf(schema, User, Node); // => true\n * isTypeSubTypeOf(schema, new GraphQLNonNull(User), Node); // => true\n * isTypeSubTypeOf(schema, Node, User); // => false\n * ```\n */\nexport function isTypeSubTypeOf(\n schema: GraphQLSchema,\n maybeSubType: GraphQLType,\n superType: GraphQLType,\n): boolean {\n // Equivalent type is a valid subtype\n if (maybeSubType === superType) {\n return true;\n }\n\n // If superType is non-null, maybeSubType must also be non-null.\n if (isNonNullType(superType)) {\n if (isNonNullType(maybeSubType)) {\n return isTypeSubTypeOf(schema, maybeSubType.ofType, superType.ofType);\n }\n return false;\n }\n if (isNonNullType(maybeSubType)) {\n // If superType is nullable, maybeSubType may be non-null or nullable.\n return isTypeSubTypeOf(schema, maybeSubType.ofType, superType);\n }\n\n // If superType type is a list, maybeSubType type must also be a list.\n if (isListType(superType)) {\n if (isListType(maybeSubType)) {\n return isTypeSubTypeOf(schema, maybeSubType.ofType, superType.ofType);\n }\n return false;\n }\n if (isListType(maybeSubType)) {\n // If superType is not a list, maybeSubType must also be not a list.\n return false;\n }\n\n // If superType type is an abstract type, check if it is super type of maybeSubType.\n // Otherwise, the child type is not a valid subtype of the parent type.\n return (\n isAbstractType(superType) &&\n (isInterfaceType(maybeSubType) || isObjectType(maybeSubType)) &&\n schema.isSubType(superType, maybeSubType)\n );\n}\n\n/**\n * Provided two composite types, determine if they \"overlap\". Two composite\n * types overlap when the Sets of possible concrete types for each intersect.\n *\n * This is often used to determine if a fragment of a given type could possibly\n * be visited in a context of another type.\n *\n * This function is commutative.\n * @param schema - GraphQL schema to use.\n * @param typeA - The first GraphQL type to compare.\n * @param typeB - The second GraphQL type to compare.\n * @returns True when the two composite types can apply to at least one common object type.\n * @example\n * ```ts\n * import { buildSchema } from 'graphql/utilities';\n * import { assertObjectType, assertUnionType } from 'graphql/type';\n * import { doTypesOverlap } from 'graphql/utilities';\n *\n * const schema = buildSchema(`\n * type Photo {\n * url: String!\n * }\n *\n * type Video {\n * url: String!\n * }\n *\n * union Media = Photo | Video\n * union StillImage = Photo\n *\n * type Query {\n * media: [Media]\n * }\n * `);\n * const Media = assertUnionType(schema.getType('Media'));\n * const StillImage = assertUnionType(schema.getType('StillImage'));\n * const Video = assertObjectType(schema.getType('Video'));\n *\n * doTypesOverlap(schema, Media, StillImage); // => true\n * doTypesOverlap(schema, StillImage, Video); // => false\n * ```\n */\nexport function doTypesOverlap(\n schema: GraphQLSchema,\n typeA: GraphQLCompositeType,\n typeB: GraphQLCompositeType,\n): boolean {\n // Equivalent types overlap\n if (typeA === typeB) {\n return true;\n }\n\n if (isAbstractType(typeA)) {\n if (isAbstractType(typeB)) {\n // If both types are abstract, then determine if there is any intersection\n // between possible concrete types of each.\n return schema\n .getPossibleTypes(typeA)\n .some((type) => schema.isSubType(typeB, type));\n }\n // Determine if the latter type is a possible concrete type of the former.\n return schema.isSubType(typeA, typeB);\n }\n\n if (isAbstractType(typeB)) {\n // Determine if the former type is a possible concrete type of the latter.\n return schema.isSubType(typeB, typeA);\n }\n\n // Otherwise the types do not overlap.\n return false;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typeComparators.js","sourceRoot":"","sources":["../../src/utilities/typeComparators.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,EACV,aAAa,EACb,YAAY,GACb,+BAA8B;
|
|
1
|
+
{"version":3,"file":"typeComparators.js","sourceRoot":"","sources":["../../src/utilities/typeComparators.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,EACV,aAAa,EACb,YAAY,GACb,+BAA8B;AAkB/B,MAAM,UAAU,WAAW,CAAC,KAAkB,EAAE,KAAkB;IAEhE,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAGD,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAGD,OAAO,KAAK,CAAC;AACf,CAAC;AAwCD,MAAM,UAAU,eAAe,CAC7B,MAAqB,EACrB,YAAyB,EACzB,SAAsB;IAGtB,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,IAAI,aAAa,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,OAAO,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,aAAa,CAAC,YAAY,CAAC,EAAE,CAAC;QAEhC,OAAO,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjE,CAAC;IAGD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7B,OAAO,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAE7B,OAAO,KAAK,CAAC;IACf,CAAC;IAID,OAAO,CACL,cAAc,CAAC,SAAS,CAAC;QACzB,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,YAAY,CAAC,CAAC;QAC7D,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC,CAC1C,CAAC;AACJ,CAAC;AA4CD,MAAM,UAAU,cAAc,CAC5B,MAAqB,EACrB,KAA2B,EAC3B,KAA2B;IAG3B,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAG1B,OAAO,MAAM;iBACV,gBAAgB,CAAC,KAAK,CAAC;iBACvB,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAE1B,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAGD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["/** @category Type Comparisons */\n\nimport type { GraphQLCompositeType, GraphQLType } from '../type/definition.ts';\nimport {\n isAbstractType,\n isInterfaceType,\n isListType,\n isNonNullType,\n isObjectType,\n} from '../type/definition.ts';\nimport type { GraphQLSchema } from '../type/schema.ts';\n\n/**\n * Provided two types, return true if the types are equal (invariant).\n * @param typeA - The first GraphQL type to compare.\n * @param typeB - The second GraphQL type to compare.\n * @returns True when both types are equal.\n * @example\n * ```ts\n * import { GraphQLList, GraphQLNonNull, GraphQLString } from 'graphql/type';\n * import { isEqualType } from 'graphql/utilities';\n *\n * isEqualType(GraphQLString, GraphQLString); // => true\n * isEqualType(new GraphQLList(GraphQLString), new GraphQLList(GraphQLString)); // => true\n * isEqualType(new GraphQLNonNull(GraphQLString), GraphQLString); // => false\n * ```\n */\nexport function isEqualType(typeA: GraphQLType, typeB: GraphQLType): boolean {\n // Equivalent types are equal.\n if (typeA === typeB) {\n return true;\n }\n\n // If either type is non-null, the other must also be non-null.\n if (isNonNullType(typeA) && isNonNullType(typeB)) {\n return isEqualType(typeA.ofType, typeB.ofType);\n }\n\n // If either type is a list, the other must also be a list.\n if (isListType(typeA) && isListType(typeB)) {\n return isEqualType(typeA.ofType, typeB.ofType);\n }\n\n // Otherwise the types are not equal.\n return false;\n}\n\n/**\n * Provided a type and a super type, return true if the first type is either\n * equal or a subset of the second super type (covariant).\n * @param schema - GraphQL schema to use.\n * @param maybeSubType - The possible subtype to compare.\n * @param superType - The possible supertype to compare.\n * @returns True when `maybeSubType` is equal to or a subtype of `superType`.\n * @example\n * ```ts\n * import { buildSchema } from 'graphql/utilities';\n * import {\n * GraphQLNonNull,\n * assertInterfaceType,\n * assertObjectType,\n * } from 'graphql/type';\n * import { isTypeSubTypeOf } from 'graphql/utilities';\n *\n * const schema = buildSchema(`\n * interface Node {\n * id: ID!\n * }\n *\n * type User implements Node {\n * id: ID!\n * }\n *\n * type Query {\n * node: Node\n * }\n * `);\n * const Node = assertInterfaceType(schema.getType('Node'));\n * const User = assertObjectType(schema.getType('User'));\n *\n * isTypeSubTypeOf(schema, User, Node); // => true\n * isTypeSubTypeOf(schema, new GraphQLNonNull(User), Node); // => true\n * isTypeSubTypeOf(schema, Node, User); // => false\n * ```\n */\nexport function isTypeSubTypeOf(\n schema: GraphQLSchema,\n maybeSubType: GraphQLType,\n superType: GraphQLType,\n): boolean {\n // Equivalent type is a valid subtype\n if (maybeSubType === superType) {\n return true;\n }\n\n // If superType is non-null, maybeSubType must also be non-null.\n if (isNonNullType(superType)) {\n if (isNonNullType(maybeSubType)) {\n return isTypeSubTypeOf(schema, maybeSubType.ofType, superType.ofType);\n }\n return false;\n }\n if (isNonNullType(maybeSubType)) {\n // If superType is nullable, maybeSubType may be non-null or nullable.\n return isTypeSubTypeOf(schema, maybeSubType.ofType, superType);\n }\n\n // If superType type is a list, maybeSubType type must also be a list.\n if (isListType(superType)) {\n if (isListType(maybeSubType)) {\n return isTypeSubTypeOf(schema, maybeSubType.ofType, superType.ofType);\n }\n return false;\n }\n if (isListType(maybeSubType)) {\n // If superType is not a list, maybeSubType must also be not a list.\n return false;\n }\n\n // If superType type is an abstract type, check if it is super type of maybeSubType.\n // Otherwise, the child type is not a valid subtype of the parent type.\n return (\n isAbstractType(superType) &&\n (isInterfaceType(maybeSubType) || isObjectType(maybeSubType)) &&\n schema.isSubType(superType, maybeSubType)\n );\n}\n\n/**\n * Provided two composite types, determine if they \"overlap\". Two composite\n * types overlap when the Sets of possible concrete types for each intersect.\n *\n * This is often used to determine if a fragment of a given type could possibly\n * be visited in a context of another type.\n *\n * This function is commutative.\n * @param schema - GraphQL schema to use.\n * @param typeA - The first GraphQL type to compare.\n * @param typeB - The second GraphQL type to compare.\n * @returns True when the two composite types can apply to at least one common object type.\n * @example\n * ```ts\n * import { buildSchema } from 'graphql/utilities';\n * import { assertObjectType, assertUnionType } from 'graphql/type';\n * import { doTypesOverlap } from 'graphql/utilities';\n *\n * const schema = buildSchema(`\n * type Photo {\n * url: String!\n * }\n *\n * type Video {\n * url: String!\n * }\n *\n * union Media = Photo | Video\n * union StillImage = Photo\n *\n * type Query {\n * media: [Media]\n * }\n * `);\n * const Media = assertUnionType(schema.getType('Media'));\n * const StillImage = assertUnionType(schema.getType('StillImage'));\n * const Video = assertObjectType(schema.getType('Video'));\n *\n * doTypesOverlap(schema, Media, StillImage); // => true\n * doTypesOverlap(schema, StillImage, Video); // => false\n * ```\n */\nexport function doTypesOverlap(\n schema: GraphQLSchema,\n typeA: GraphQLCompositeType,\n typeB: GraphQLCompositeType,\n): boolean {\n // Equivalent types overlap\n if (typeA === typeB) {\n return true;\n }\n\n if (isAbstractType(typeA)) {\n if (isAbstractType(typeB)) {\n // If both types are abstract, then determine if there is any intersection\n // between possible concrete types of each.\n return schema\n .getPossibleTypes(typeA)\n .some((type) => schema.isSubType(typeB, type));\n }\n // Determine if the latter type is a possible concrete type of the former.\n return schema.isSubType(typeA, typeB);\n }\n\n if (isAbstractType(typeB)) {\n // Determine if the former type is a possible concrete type of the latter.\n return schema.isSubType(typeB, typeA);\n }\n\n // Otherwise the types do not overlap.\n return false;\n}\n"]}
|
|
@@ -96,9 +96,13 @@ export declare function validateInputValue(inputValue: unknown, type: GraphQLInp
|
|
|
96
96
|
* });
|
|
97
97
|
* const errors = [];
|
|
98
98
|
*
|
|
99
|
-
* validateInputLiteral(
|
|
100
|
-
*
|
|
101
|
-
*
|
|
99
|
+
* validateInputLiteral(
|
|
100
|
+
* parseValue('{ stars: "bad" }'),
|
|
101
|
+
* ReviewInput,
|
|
102
|
+
* (error, path) => {
|
|
103
|
+
* errors.push({ message: error.message, path });
|
|
104
|
+
* },
|
|
105
|
+
* );
|
|
102
106
|
*
|
|
103
107
|
* errors; // => [ { message: 'Expected value of type "Int", found: "bad".', path: ['stars'] } ]
|
|
104
108
|
* ```
|
|
@@ -118,11 +122,9 @@ export declare function validateInputValue(inputValue: unknown, type: GraphQLInp
|
|
|
118
122
|
* `);
|
|
119
123
|
* const document = parse('query ($stars: Int = 5) { review(stars: $stars) }');
|
|
120
124
|
* const operation = document.definitions[0];
|
|
121
|
-
* const result = getVariableValues(
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
* { stars: '4' },
|
|
125
|
-
* );
|
|
125
|
+
* const result = getVariableValues(schema, operation.variableDefinitions, {
|
|
126
|
+
* stars: '4',
|
|
127
|
+
* });
|
|
126
128
|
*
|
|
127
129
|
* assert('variableValues' in result);
|
|
128
130
|
*
|
|
@@ -96,9 +96,13 @@ export declare function validateInputValue(inputValue: unknown, type: GraphQLInp
|
|
|
96
96
|
* });
|
|
97
97
|
* const errors = [];
|
|
98
98
|
*
|
|
99
|
-
* validateInputLiteral(
|
|
100
|
-
*
|
|
101
|
-
*
|
|
99
|
+
* validateInputLiteral(
|
|
100
|
+
* parseValue('{ stars: "bad" }'),
|
|
101
|
+
* ReviewInput,
|
|
102
|
+
* (error, path) => {
|
|
103
|
+
* errors.push({ message: error.message, path });
|
|
104
|
+
* },
|
|
105
|
+
* );
|
|
102
106
|
*
|
|
103
107
|
* errors; // => [ { message: 'Expected value of type "Int", found: "bad".', path: ['stars'] } ]
|
|
104
108
|
* ```
|
|
@@ -118,11 +122,9 @@ export declare function validateInputValue(inputValue: unknown, type: GraphQLInp
|
|
|
118
122
|
* `);
|
|
119
123
|
* const document = parse('query ($stars: Int = 5) { review(stars: $stars) }');
|
|
120
124
|
* const operation = document.definitions[0];
|
|
121
|
-
* const result = getVariableValues(
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
* { stars: '4' },
|
|
125
|
-
* );
|
|
125
|
+
* const result = getVariableValues(schema, operation.variableDefinitions, {
|
|
126
|
+
* stars: '4',
|
|
127
|
+
* });
|
|
126
128
|
*
|
|
127
129
|
* assert('variableValues' in result);
|
|
128
130
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateInputValue.js","sourceRoot":"","sources":["../../src/utilities/validateInputValue.ts"],"names":[],"mappings":"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","sourcesContent":["/** @category Values */\n\nimport { didYouMean } from '../jsutils/didYouMean.ts';\nimport { inspect } from '../jsutils/inspect.ts';\nimport { isIterableObject } from '../jsutils/isIterableObject.ts';\nimport { isObjectLike } from '../jsutils/isObjectLike.ts';\nimport { keyMap } from '../jsutils/keyMap.ts';\nimport type { Maybe } from '../jsutils/Maybe.ts';\nimport type { Path } from '../jsutils/Path.ts';\nimport { addPath, pathToArray } from '../jsutils/Path.ts';\nimport { suggestionList } from '../jsutils/suggestionList.ts';\n\nimport { ensureGraphQLError } from '../error/ensureGraphQLError.ts';\nimport { GraphQLError } from '../error/GraphQLError.ts';\n\nimport type { ASTNode, ValueNode, VariableNode } from '../language/ast.ts';\nimport { Kind } from '../language/kinds.ts';\nimport { print } from '../language/printer.ts';\n\nimport type { GraphQLInputType } from '../type/definition.ts';\nimport {\n assertLeafType,\n isInputObjectType,\n isListType,\n isNonNullType,\n isRequiredInputField,\n} from '../type/definition.ts';\n\nimport type { FragmentVariableValues } from '../execution/collectFields.ts';\nimport type { VariableValues } from '../execution/values.ts';\n\nimport { replaceVariables } from './replaceVariables.ts';\n\n/**\n * Validate that the provided input value is allowed for this type, collecting\n * all errors via a callback function.\n * @param inputValue - JavaScript value to validate.\n * @param type - GraphQL input type to validate the value against.\n * @param onError - Callback invoked for each validation error and path.\n * @param hideSuggestions - Whether suggestion text should be omitted from errors.\n * @returns Nothing.\n * @example\n * ```ts\n * // Collect validation errors with their input paths.\n * import {\n * GraphQLInputObjectType,\n * GraphQLInt,\n * GraphQLNonNull,\n * } from 'graphql/type';\n * import { validateInputValue } from 'graphql/utilities';\n *\n * const ReviewInput = new GraphQLInputObjectType({\n * name: 'ReviewInput',\n * fields: {\n * stars: { type: new GraphQLNonNull(GraphQLInt) },\n * },\n * });\n * const errors = [];\n *\n * validateInputValue({ stars: 'bad' }, ReviewInput, (error, path) => {\n * errors.push({ message: error.message, path });\n * });\n *\n * errors; // => [ { message: 'Expected value of type \"Int\", found: \"bad\".', path: ['stars'] } ]\n * ```\n * @example\n * ```ts\n * // This variant hides suggestion text for unknown input fields.\n * import { GraphQLInputObjectType, GraphQLString } from 'graphql/type';\n * import { validateInputValue } from 'graphql/utilities';\n *\n * const ReviewInput = new GraphQLInputObjectType({\n * name: 'ReviewInput',\n * fields: {\n * comment: { type: GraphQLString },\n * },\n * });\n * const errors = [];\n *\n * validateInputValue(\n * { rating: 'extra field' },\n * ReviewInput,\n * (error) => {\n * errors.push(error.message);\n * },\n * true,\n * );\n *\n * errors; // => ['Expected value of type \"ReviewInput\" not to include unknown field \"rating\", found: { rating: \"extra field\" }.']\n * ```\n */\nexport function validateInputValue(\n inputValue: unknown,\n type: GraphQLInputType,\n onError: (error: GraphQLError, path: ReadonlyArray<string | number>) => void,\n hideSuggestions?: Maybe<boolean>,\n): void {\n return validateInputValueImpl(\n inputValue,\n type,\n onError,\n hideSuggestions,\n undefined,\n );\n}\n\nfunction validateInputValueImpl(\n inputValue: unknown,\n type: GraphQLInputType,\n onError: (error: GraphQLError, path: ReadonlyArray<string | number>) => void,\n hideSuggestions: Maybe<boolean>,\n path: Path | undefined,\n): void {\n if (isNonNullType(type)) {\n if (inputValue === undefined) {\n reportInvalidValue(\n onError,\n `Expected a value of non-null type \"${type}\" to be provided.`,\n path,\n );\n return;\n }\n if (inputValue === null) {\n reportInvalidValue(\n onError,\n `Expected value of non-null type \"${type}\" not to be null.`,\n path,\n );\n return;\n }\n return validateInputValueImpl(\n inputValue,\n type.ofType,\n onError,\n hideSuggestions,\n path,\n );\n }\n\n if (inputValue == null) {\n return;\n }\n\n if (isListType(type)) {\n if (!isIterableObject(inputValue)) {\n // Lists accept a non-list value as a list of one.\n validateInputValueImpl(\n inputValue,\n type.ofType,\n onError,\n hideSuggestions,\n path,\n );\n } else {\n let index = 0;\n for (const itemValue of inputValue) {\n validateInputValueImpl(\n itemValue,\n type.ofType,\n onError,\n hideSuggestions,\n addPath(path, index++, undefined),\n );\n }\n }\n } else if (isInputObjectType(type)) {\n if (!isObjectLike(inputValue) || Array.isArray(inputValue)) {\n reportInvalidValue(\n onError,\n `Expected value of type \"${type}\" to be an object, found: ${inspect(\n inputValue,\n )}.`,\n path,\n );\n return;\n }\n\n const fieldDefs = type.getFields();\n\n for (const field of Object.values(fieldDefs)) {\n const fieldValue = inputValue[field.name];\n if (fieldValue === undefined) {\n if (isRequiredInputField(field)) {\n reportInvalidValue(\n onError,\n `Expected value of type \"${type}\" to include required field \"${\n field.name\n }\", found: ${inspect(inputValue)}.`,\n path,\n );\n }\n } else {\n validateInputValueImpl(\n fieldValue,\n field.type,\n onError,\n hideSuggestions,\n addPath(path, field.name, type.name),\n );\n }\n }\n\n const fields: Array<string> = [];\n // Ensure every provided field is defined.\n for (const fieldName of Object.keys(inputValue)) {\n if (inputValue[fieldName] === undefined) {\n continue;\n }\n if (!Object.hasOwn(fieldDefs, fieldName)) {\n const suggestion = hideSuggestions\n ? ''\n : didYouMean(suggestionList(fieldName, Object.keys(fieldDefs)));\n reportInvalidValue(\n onError,\n `Expected value of type \"${type}\" not to include unknown field \"${fieldName}\"${\n suggestion ? `.${suggestion} Found` : ', found'\n }: ${inspect(inputValue)}.`,\n path,\n );\n continue;\n }\n fields.push(fieldName);\n }\n\n if (type.isOneOf) {\n if (fields.length !== 1) {\n reportInvalidValue(\n onError,\n getOneOfInputObjectErrorMessage(type),\n path,\n );\n }\n\n const field = fields[0];\n const value = inputValue[field];\n if (value === null) {\n reportInvalidValue(\n onError,\n getOneOfInputObjectErrorMessage(type),\n addPath(path, field, type.name),\n );\n }\n }\n } else {\n assertLeafType(type);\n\n let result;\n let caughtError: unknown;\n\n try {\n result = type.coerceInputValue(inputValue, hideSuggestions);\n } catch (error) {\n if (error instanceof GraphQLError) {\n onError(error, pathToArray(path));\n return;\n }\n caughtError = error;\n }\n\n if (result === undefined) {\n reportInvalidValue(\n onError,\n `Expected value of type \"${type}\"${\n caughtError != null\n ? `, but encountered error \"${getCaughtErrorMessage(caughtError)}\"; found`\n : ', found'\n }: ${inspect(inputValue)}.`,\n path,\n ensureGraphQLError(caughtError),\n );\n }\n }\n}\n\nfunction reportInvalidValue(\n onError: (error: GraphQLError, path: ReadonlyArray<string | number>) => void,\n message: string,\n path: Path | undefined,\n originalError?: GraphQLError,\n): void {\n onError(new GraphQLError(message, { originalError }), pathToArray(path));\n}\n\n/**\n * Validate that the provided input literal is allowed for this type, collecting\n * all errors via a callback function.\n *\n * If variable values are not provided, the literal is validated statically\n * (not assuming that those variables are missing runtime values).\n * @param valueNode - GraphQL value AST node to validate.\n * @param type - GraphQL input type to validate the literal against.\n * @param onError - Callback invoked for each validation error and path.\n * @param variables - Operation variable values returned by getVariableValues.\n * @param fragmentVariableValues - Fragment variable values for the current fragment scope.\n * @param hideSuggestions - Whether suggestion text should be omitted from errors.\n * @returns Nothing.\n * @example\n * ```ts\n * // Validate literal input values and collect literal paths.\n * import { parseValue } from 'graphql/language';\n * import {\n * GraphQLInputObjectType,\n * GraphQLInt,\n * GraphQLNonNull,\n * } from 'graphql/type';\n * import { validateInputLiteral } from 'graphql/utilities';\n *\n * const ReviewInput = new GraphQLInputObjectType({\n * name: 'ReviewInput',\n * fields: {\n * stars: { type: new GraphQLNonNull(GraphQLInt) },\n * },\n * });\n * const errors = [];\n *\n * validateInputLiteral(parseValue('{ stars: \"bad\" }'), ReviewInput, (error, path) => {\n * errors.push({ message: error.message, path });\n * });\n *\n * errors; // => [ { message: 'Expected value of type \"Int\", found: \"bad\".', path: ['stars'] } ]\n * ```\n * @example\n * ```ts\n * // This variant resolves variable references using VariableValues from getVariableValues().\n * import assert from 'node:assert';\n * import { parse, parseValue } from 'graphql/language';\n * import { GraphQLInt } from 'graphql/type';\n * import { getVariableValues } from 'graphql/execution';\n * import { buildSchema, validateInputLiteral } from 'graphql/utilities';\n *\n * const schema = buildSchema(`\n * type Query {\n * review(stars: Int): String\n * }\n * `);\n * const document = parse('query ($stars: Int = 5) { review(stars: $stars) }');\n * const operation = document.definitions[0];\n * const result = getVariableValues(\n * schema,\n * operation.variableDefinitions,\n * { stars: '4' },\n * );\n *\n * assert('variableValues' in result);\n *\n * const errors = [];\n * validateInputLiteral(\n * parseValue('$stars'),\n * GraphQLInt,\n * (error) => errors.push(error.message),\n * result.variableValues,\n * undefined,\n * true,\n * );\n *\n * errors; // => []\n * ```\n */\n// eslint-disable-next-line max-params\nexport function validateInputLiteral(\n valueNode: ValueNode,\n type: GraphQLInputType,\n onError: (error: GraphQLError, path: ReadonlyArray<string | number>) => void,\n variables?: Maybe<VariableValues>,\n fragmentVariableValues?: Maybe<FragmentVariableValues>,\n hideSuggestions?: Maybe<boolean>,\n): void {\n const context: ValidationContext = {\n static: !variables && !fragmentVariableValues,\n onError,\n variables,\n fragmentVariableValues,\n };\n return validateInputLiteralImpl(\n context,\n valueNode,\n type,\n hideSuggestions,\n undefined,\n );\n}\n\ninterface ValidationContext {\n static: boolean;\n onError: (error: GraphQLError, path: ReadonlyArray<string | number>) => void;\n variables?: Maybe<VariableValues>;\n fragmentVariableValues?: Maybe<FragmentVariableValues>;\n}\n\nfunction validateInputLiteralImpl(\n context: ValidationContext,\n valueNode: ValueNode,\n type: GraphQLInputType,\n hideSuggestions: Maybe<boolean>,\n path: Path | undefined,\n): void {\n if (valueNode.kind === Kind.VARIABLE) {\n if (context.static) {\n // If no variable values are provided, this is being validated statically,\n // and cannot yet produce any validation errors for variables.\n return;\n }\n const scopedVariableValues = getScopedVariableValues(context, valueNode);\n const value = scopedVariableValues?.coerced[valueNode.name.value];\n if (isNonNullType(type)) {\n if (value === undefined) {\n reportInvalidLiteral(\n context.onError,\n `Expected variable \"$${valueNode.name.value}\" provided to type \"${type}\" to provide a runtime value.`,\n valueNode,\n path,\n );\n } else if (value === null) {\n reportInvalidLiteral(\n context.onError,\n `Expected variable \"$${valueNode.name.value}\" provided to non-null type \"${type}\" not to be null.`,\n valueNode,\n path,\n );\n }\n }\n // Note: This does no further checking that this variable is correct.\n // This assumes this variable usage has already been validated.\n return;\n }\n\n if (isNonNullType(type)) {\n if (valueNode.kind === Kind.NULL) {\n reportInvalidLiteral(\n context.onError,\n `Expected value of non-null type \"${type}\" not to be null.`,\n valueNode,\n path,\n );\n return;\n }\n return validateInputLiteralImpl(\n context,\n valueNode,\n type.ofType,\n hideSuggestions,\n path,\n );\n }\n\n if (valueNode.kind === Kind.NULL) {\n return;\n }\n\n if (isListType(type)) {\n if (valueNode.kind !== Kind.LIST) {\n // Lists accept a non-list value as a list of one.\n validateInputLiteralImpl(\n context,\n valueNode,\n type.ofType,\n hideSuggestions,\n path,\n );\n } else {\n let index = 0;\n for (const itemNode of valueNode.values) {\n validateInputLiteralImpl(\n context,\n itemNode,\n type.ofType,\n hideSuggestions,\n addPath(path, index++, undefined),\n );\n }\n }\n } else if (isInputObjectType(type)) {\n if (valueNode.kind !== Kind.OBJECT) {\n reportInvalidLiteral(\n context.onError,\n `Expected value of type \"${type}\" to be an object, found: ${print(\n valueNode,\n )}.`,\n valueNode,\n path,\n );\n return;\n }\n\n const fieldDefs = type.getFields();\n const fieldNodes = keyMap(valueNode.fields, (field) => field.name.value);\n\n for (const field of Object.values(fieldDefs)) {\n const fieldNode = fieldNodes[field.name];\n if (fieldNode === undefined) {\n if (isRequiredInputField(field)) {\n reportInvalidLiteral(\n context.onError,\n `Expected value of type \"${type}\" to include required field \"${\n field.name\n }\", found: ${print(valueNode)}.`,\n valueNode,\n path,\n );\n }\n } else {\n const fieldValueNode = fieldNode.value;\n if (fieldValueNode.kind === Kind.VARIABLE && !context.static) {\n const scopedVariableValues = getScopedVariableValues(\n context,\n fieldValueNode,\n );\n const variableName = fieldValueNode.name.value;\n const value = scopedVariableValues?.coerced[variableName];\n if (type.isOneOf) {\n if (value === undefined) {\n reportInvalidLiteral(\n context.onError,\n `Expected variable \"$${variableName}\" provided to field \"${field.name}\" for OneOf Input Object type \"${type}\" to provide a runtime value.`,\n valueNode,\n path,\n );\n } else if (value === null) {\n reportInvalidLiteral(\n context.onError,\n `Expected variable \"$${variableName}\" provided to field \"${field.name}\" for OneOf Input Object type \"${type}\" not to be null.`,\n valueNode,\n path,\n );\n }\n } else if (value === undefined && !isRequiredInputField(field)) {\n continue;\n }\n }\n\n validateInputLiteralImpl(\n context,\n fieldValueNode,\n field.type,\n hideSuggestions,\n addPath(path, field.name, type.name),\n );\n }\n }\n\n const fields = valueNode.fields;\n const knownFields: Array<(typeof fields)[number]> = [];\n // Ensure every provided field is defined.\n for (const fieldNode of fields) {\n const fieldName = fieldNode.name.value;\n if (!Object.hasOwn(fieldDefs, fieldName)) {\n const suggestion = hideSuggestions\n ? ''\n : didYouMean(suggestionList(fieldName, Object.keys(fieldDefs)));\n reportInvalidLiteral(\n context.onError,\n `Expected value of type \"${type}\" not to include unknown field \"${fieldName}\"${\n suggestion ? `.${suggestion} Found` : ', found'\n }: ${print(valueNode)}.`,\n fieldNode,\n path,\n );\n } else {\n knownFields.push(fieldNode);\n }\n }\n\n if (type.isOneOf) {\n const isNotExactlyOneField = knownFields.length !== 1;\n if (isNotExactlyOneField) {\n reportInvalidLiteral(\n context.onError,\n getOneOfInputObjectErrorMessage(type),\n valueNode,\n path,\n );\n return;\n }\n\n const fieldValueNode = knownFields[0].value;\n if (fieldValueNode.kind === Kind.NULL) {\n const fieldName = knownFields[0].name.value;\n reportInvalidLiteral(\n context.onError,\n getOneOfInputObjectErrorMessage(type),\n valueNode,\n addPath(path, fieldName, undefined),\n );\n }\n }\n } else {\n assertLeafType(type);\n\n let result;\n let caughtError: unknown;\n try {\n result = type.coerceInputLiteral\n ? type.coerceInputLiteral(\n replaceVariables(\n valueNode,\n context.variables,\n context.fragmentVariableValues,\n ),\n hideSuggestions,\n )\n : type.parseLiteral(valueNode, undefined, hideSuggestions);\n } catch (error) {\n if (error instanceof GraphQLError) {\n context.onError(error, pathToArray(path));\n return;\n }\n caughtError = error;\n }\n\n if (result === undefined) {\n reportInvalidLiteral(\n context.onError,\n `Expected value of type \"${type}\"${\n caughtError != null\n ? `, but encountered error \"${getCaughtErrorMessage(caughtError)}\"; found`\n : ', found'\n }: ${print(valueNode)}.`,\n valueNode,\n path,\n ensureGraphQLError(caughtError),\n );\n }\n }\n}\n\nfunction getScopedVariableValues(\n context: ValidationContext,\n valueNode: VariableNode,\n): Maybe<VariableValues> {\n const variableName = valueNode.name.value;\n const { fragmentVariableValues, variables } = context;\n return fragmentVariableValues?.sources[variableName]\n ? fragmentVariableValues\n : variables;\n}\n\nfunction reportInvalidLiteral(\n onError: (error: GraphQLError, path: ReadonlyArray<string | number>) => void,\n message: string,\n valueNode: ASTNode,\n path: Path | undefined,\n originalError?: GraphQLError,\n): void {\n onError(\n new GraphQLError(message, {\n nodes: valueNode,\n originalError,\n }),\n pathToArray(path),\n );\n}\n\nfunction getCaughtErrorMessage(caughtError: unknown): string {\n if (isObjectLike(caughtError)) {\n const message = caughtError.message;\n if (typeof message === 'string' && message !== '') {\n return message;\n }\n }\n\n return String(caughtError);\n}\n\nfunction getOneOfInputObjectErrorMessage(type: GraphQLInputType): string {\n return `Within OneOf Input Object type \"${type}\", exactly one field must be specified, and the value for that field must be non-null.`;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"validateInputValue.js","sourceRoot":"","sources":["../../src/utilities/validateInputValue.ts"],"names":[],"mappings":";;AA2FA,gDAaC;AAiQD,oDAqBC;AA5XD,4DAAsD;AACtD,sDAAgD;AAChD,wEAAkE;AAClE,gEAA0D;AAC1D,oDAA8C;AAG9C,gDAA0D;AAC1D,oEAA8D;AAE9D,0EAAoE;AACpE,8DAAwD;AAGxD,mDAA4C;AAC5C,uDAA+C;AAG/C,yDAM+B;AAK/B,+DAAyD;AA4DzD,SAAgB,kBAAkB,CAChC,UAAmB,EACnB,IAAsB,EACtB,OAA4E,EAC5E,eAAgC;IAEhC,OAAO,sBAAsB,CAC3B,UAAU,EACV,IAAI,EACJ,OAAO,EACP,eAAe,EACf,SAAS,CACV,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,UAAmB,EACnB,IAAsB,EACtB,OAA4E,EAC5E,eAA+B,EAC/B,IAAsB;IAEtB,IAAI,IAAA,6BAAa,EAAC,IAAI,CAAC,EAAE,CAAC;QACxB,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,kBAAkB,CAChB,OAAO,EACP,sCAAsC,IAAI,mBAAmB,EAC7D,IAAI,CACL,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,kBAAkB,CAChB,OAAO,EACP,oCAAoC,IAAI,mBAAmB,EAC3D,IAAI,CACL,CAAC;YACF,OAAO;QACT,CAAC;QACD,OAAO,sBAAsB,CAC3B,UAAU,EACV,IAAI,CAAC,MAAM,EACX,OAAO,EACP,eAAe,EACf,IAAI,CACL,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,IAAI,IAAA,0BAAU,EAAC,IAAI,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,IAAA,sCAAgB,EAAC,UAAU,CAAC,EAAE,CAAC;YAElC,sBAAsB,CACpB,UAAU,EACV,IAAI,CAAC,MAAM,EACX,OAAO,EACP,eAAe,EACf,IAAI,CACL,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;gBACnC,sBAAsB,CACpB,SAAS,EACT,IAAI,CAAC,MAAM,EACX,OAAO,EACP,eAAe,EACf,IAAA,iBAAO,EAAC,IAAI,EAAE,KAAK,EAAE,EAAE,SAAS,CAAC,CAClC,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,IAAA,iCAAiB,EAAC,IAAI,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,IAAA,8BAAY,EAAC,UAAU,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3D,kBAAkB,CAChB,OAAO,EACP,2BAA2B,IAAI,6BAA6B,IAAA,oBAAO,EACjE,UAAU,CACX,GAAG,EACJ,IAAI,CACL,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAEnC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7C,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,IAAI,IAAA,oCAAoB,EAAC,KAAK,CAAC,EAAE,CAAC;oBAChC,kBAAkB,CAChB,OAAO,EACP,2BAA2B,IAAI,gCAC7B,KAAK,CAAC,IACR,aAAa,IAAA,oBAAO,EAAC,UAAU,CAAC,GAAG,EACnC,IAAI,CACL,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,sBAAsB,CACpB,UAAU,EACV,KAAK,CAAC,IAAI,EACV,OAAO,EACP,eAAe,EACf,IAAA,iBAAO,EAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CACrC,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAkB,EAAE,CAAC;QAEjC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAChD,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE,CAAC;gBACxC,SAAS;YACX,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC;gBACzC,MAAM,UAAU,GAAG,eAAe;oBAChC,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,IAAA,0BAAU,EAAC,IAAA,kCAAc,EAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAClE,kBAAkB,CAChB,OAAO,EACP,2BAA2B,IAAI,mCAAmC,SAAS,IACzE,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,QAAQ,CAAC,CAAC,CAAC,SACxC,KAAK,IAAA,oBAAO,EAAC,UAAU,CAAC,GAAG,EAC3B,IAAI,CACL,CAAC;gBACF,SAAS;YACX,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,kBAAkB,CAChB,OAAO,EACP,+BAA+B,CAAC,IAAI,CAAC,EACrC,IAAI,CACL,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,kBAAkB,CAChB,OAAO,EACP,+BAA+B,CAAC,IAAI,CAAC,EACrC,IAAA,iBAAO,EAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAChC,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAA,8BAAc,EAAC,IAAI,CAAC,CAAC;QAErB,IAAI,MAAM,CAAC;QACX,IAAI,WAAoB,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,8BAAY,EAAE,CAAC;gBAClC,OAAO,CAAC,KAAK,EAAE,IAAA,qBAAW,EAAC,IAAI,CAAC,CAAC,CAAC;gBAClC,OAAO;YACT,CAAC;YACD,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;QAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,kBAAkB,CAChB,OAAO,EACP,2BAA2B,IAAI,IAC7B,WAAW,IAAI,IAAI;gBACjB,CAAC,CAAC,4BAA4B,qBAAqB,CAAC,WAAW,CAAC,UAAU;gBAC1E,CAAC,CAAC,SACN,KAAK,IAAA,oBAAO,EAAC,UAAU,CAAC,GAAG,EAC3B,IAAI,EACJ,IAAA,0CAAkB,EAAC,WAAW,CAAC,CAChC,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,OAA4E,EAC5E,OAAe,EACf,IAAsB,EACtB,aAA4B;IAE5B,OAAO,CAAC,IAAI,8BAAY,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,IAAA,qBAAW,EAAC,IAAI,CAAC,CAAC,CAAC;AAC3E,CAAC;AAgFD,SAAgB,oBAAoB,CAClC,SAAoB,EACpB,IAAsB,EACtB,OAA4E,EAC5E,SAAiC,EACjC,sBAAsD,EACtD,eAAgC;IAEhC,MAAM,OAAO,GAAsB;QACjC,MAAM,EAAE,CAAC,SAAS,IAAI,CAAC,sBAAsB;QAC7C,OAAO;QACP,SAAS;QACT,sBAAsB;KACvB,CAAC;IACF,OAAO,wBAAwB,CAC7B,OAAO,EACP,SAAS,EACT,IAAI,EACJ,eAAe,EACf,SAAS,CACV,CAAC;AACJ,CAAC;AASD,SAAS,wBAAwB,CAC/B,OAA0B,EAC1B,SAAoB,EACpB,IAAsB,EACtB,eAA+B,EAC/B,IAAsB;IAEtB,IAAI,SAAS,CAAC,IAAI,KAAK,eAAI,CAAC,QAAQ,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAGnB,OAAO;QACT,CAAC;QACD,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACzE,MAAM,KAAK,GAAG,oBAAoB,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClE,IAAI,IAAA,6BAAa,EAAC,IAAI,CAAC,EAAE,CAAC;YACxB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,oBAAoB,CAClB,OAAO,CAAC,OAAO,EACf,uBAAuB,SAAS,CAAC,IAAI,CAAC,KAAK,uBAAuB,IAAI,+BAA+B,EACrG,SAAS,EACT,IAAI,CACL,CAAC;YACJ,CAAC;iBAAM,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC1B,oBAAoB,CAClB,OAAO,CAAC,OAAO,EACf,uBAAuB,SAAS,CAAC,IAAI,CAAC,KAAK,gCAAgC,IAAI,mBAAmB,EAClG,SAAS,EACT,IAAI,CACL,CAAC;YACJ,CAAC;QACH,CAAC;QAGD,OAAO;IACT,CAAC;IAED,IAAI,IAAA,6BAAa,EAAC,IAAI,CAAC,EAAE,CAAC;QACxB,IAAI,SAAS,CAAC,IAAI,KAAK,eAAI,CAAC,IAAI,EAAE,CAAC;YACjC,oBAAoB,CAClB,OAAO,CAAC,OAAO,EACf,oCAAoC,IAAI,mBAAmB,EAC3D,SAAS,EACT,IAAI,CACL,CAAC;YACF,OAAO;QACT,CAAC;QACD,OAAO,wBAAwB,CAC7B,OAAO,EACP,SAAS,EACT,IAAI,CAAC,MAAM,EACX,eAAe,EACf,IAAI,CACL,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,CAAC,IAAI,KAAK,eAAI,CAAC,IAAI,EAAE,CAAC;QACjC,OAAO;IACT,CAAC;IAED,IAAI,IAAA,0BAAU,EAAC,IAAI,CAAC,EAAE,CAAC;QACrB,IAAI,SAAS,CAAC,IAAI,KAAK,eAAI,CAAC,IAAI,EAAE,CAAC;YAEjC,wBAAwB,CACtB,OAAO,EACP,SAAS,EACT,IAAI,CAAC,MAAM,EACX,eAAe,EACf,IAAI,CACL,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;gBACxC,wBAAwB,CACtB,OAAO,EACP,QAAQ,EACR,IAAI,CAAC,MAAM,EACX,eAAe,EACf,IAAA,iBAAO,EAAC,IAAI,EAAE,KAAK,EAAE,EAAE,SAAS,CAAC,CAClC,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,IAAA,iCAAiB,EAAC,IAAI,CAAC,EAAE,CAAC;QACnC,IAAI,SAAS,CAAC,IAAI,KAAK,eAAI,CAAC,MAAM,EAAE,CAAC;YACnC,oBAAoB,CAClB,OAAO,CAAC,OAAO,EACf,2BAA2B,IAAI,6BAA6B,IAAA,kBAAK,EAC/D,SAAS,CACV,GAAG,EACJ,SAAS,EACT,IAAI,CACL,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,IAAA,kBAAM,EAAC,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEzE,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7C,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,IAAI,IAAA,oCAAoB,EAAC,KAAK,CAAC,EAAE,CAAC;oBAChC,oBAAoB,CAClB,OAAO,CAAC,OAAO,EACf,2BAA2B,IAAI,gCAC7B,KAAK,CAAC,IACR,aAAa,IAAA,kBAAK,EAAC,SAAS,CAAC,GAAG,EAChC,SAAS,EACT,IAAI,CACL,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC;gBACvC,IAAI,cAAc,CAAC,IAAI,KAAK,eAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;oBAC7D,MAAM,oBAAoB,GAAG,uBAAuB,CAClD,OAAO,EACP,cAAc,CACf,CAAC;oBACF,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;oBAC/C,MAAM,KAAK,GAAG,oBAAoB,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;oBAC1D,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;wBACjB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;4BACxB,oBAAoB,CAClB,OAAO,CAAC,OAAO,EACf,uBAAuB,YAAY,wBAAwB,KAAK,CAAC,IAAI,kCAAkC,IAAI,+BAA+B,EAC1I,SAAS,EACT,IAAI,CACL,CAAC;wBACJ,CAAC;6BAAM,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;4BAC1B,oBAAoB,CAClB,OAAO,CAAC,OAAO,EACf,uBAAuB,YAAY,wBAAwB,KAAK,CAAC,IAAI,kCAAkC,IAAI,mBAAmB,EAC9H,SAAS,EACT,IAAI,CACL,CAAC;wBACJ,CAAC;oBACH,CAAC;yBAAM,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,IAAA,oCAAoB,EAAC,KAAK,CAAC,EAAE,CAAC;wBAC/D,SAAS;oBACX,CAAC;gBACH,CAAC;gBAED,wBAAwB,CACtB,OAAO,EACP,cAAc,EACd,KAAK,CAAC,IAAI,EACV,eAAe,EACf,IAAA,iBAAO,EAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CACrC,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAChC,MAAM,WAAW,GAAmC,EAAE,CAAC;QAEvD,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC;gBACzC,MAAM,UAAU,GAAG,eAAe;oBAChC,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,IAAA,0BAAU,EAAC,IAAA,kCAAc,EAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAClE,oBAAoB,CAClB,OAAO,CAAC,OAAO,EACf,2BAA2B,IAAI,mCAAmC,SAAS,IACzE,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,QAAQ,CAAC,CAAC,CAAC,SACxC,KAAK,IAAA,kBAAK,EAAC,SAAS,CAAC,GAAG,EACxB,SAAS,EACT,IAAI,CACL,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,oBAAoB,GAAG,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC;YACtD,IAAI,oBAAoB,EAAE,CAAC;gBACzB,oBAAoB,CAClB,OAAO,CAAC,OAAO,EACf,+BAA+B,CAAC,IAAI,CAAC,EACrC,SAAS,EACT,IAAI,CACL,CAAC;gBACF,OAAO;YACT,CAAC;YAED,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC5C,IAAI,cAAc,CAAC,IAAI,KAAK,eAAI,CAAC,IAAI,EAAE,CAAC;gBACtC,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC5C,oBAAoB,CAClB,OAAO,CAAC,OAAO,EACf,+BAA+B,CAAC,IAAI,CAAC,EACrC,SAAS,EACT,IAAA,iBAAO,EAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CACpC,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAA,8BAAc,EAAC,IAAI,CAAC,CAAC;QAErB,IAAI,MAAM,CAAC;QACX,IAAI,WAAoB,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,kBAAkB;gBAC9B,CAAC,CAAC,IAAI,CAAC,kBAAkB,CACrB,IAAA,sCAAgB,EACd,SAAS,EACT,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,sBAAsB,CAC/B,EACD,eAAe,CAChB;gBACH,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,8BAAY,EAAE,CAAC;gBAClC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAA,qBAAW,EAAC,IAAI,CAAC,CAAC,CAAC;gBAC1C,OAAO;YACT,CAAC;YACD,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;QAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,oBAAoB,CAClB,OAAO,CAAC,OAAO,EACf,2BAA2B,IAAI,IAC7B,WAAW,IAAI,IAAI;gBACjB,CAAC,CAAC,4BAA4B,qBAAqB,CAAC,WAAW,CAAC,UAAU;gBAC1E,CAAC,CAAC,SACN,KAAK,IAAA,kBAAK,EAAC,SAAS,CAAC,GAAG,EACxB,SAAS,EACT,IAAI,EACJ,IAAA,0CAAkB,EAAC,WAAW,CAAC,CAChC,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAC9B,OAA0B,EAC1B,SAAuB;IAEvB,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1C,MAAM,EAAE,sBAAsB,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACtD,OAAO,sBAAsB,EAAE,OAAO,CAAC,YAAY,CAAC;QAClD,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,oBAAoB,CAC3B,OAA4E,EAC5E,OAAe,EACf,SAAkB,EAClB,IAAsB,EACtB,aAA4B;IAE5B,OAAO,CACL,IAAI,8BAAY,CAAC,OAAO,EAAE;QACxB,KAAK,EAAE,SAAS;QAChB,aAAa;KACd,CAAC,EACF,IAAA,qBAAW,EAAC,IAAI,CAAC,CAClB,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,WAAoB;IACjD,IAAI,IAAA,8BAAY,EAAC,WAAW,CAAC,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;QACpC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;YAClD,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,+BAA+B,CAAC,IAAsB;IAC7D,OAAO,mCAAmC,IAAI,wFAAwF,CAAC;AACzI,CAAC","sourcesContent":["/** @category Values */\n\nimport { didYouMean } from '../jsutils/didYouMean.ts';\nimport { inspect } from '../jsutils/inspect.ts';\nimport { isIterableObject } from '../jsutils/isIterableObject.ts';\nimport { isObjectLike } from '../jsutils/isObjectLike.ts';\nimport { keyMap } from '../jsutils/keyMap.ts';\nimport type { Maybe } from '../jsutils/Maybe.ts';\nimport type { Path } from '../jsutils/Path.ts';\nimport { addPath, pathToArray } from '../jsutils/Path.ts';\nimport { suggestionList } from '../jsutils/suggestionList.ts';\n\nimport { ensureGraphQLError } from '../error/ensureGraphQLError.ts';\nimport { GraphQLError } from '../error/GraphQLError.ts';\n\nimport type { ASTNode, ValueNode, VariableNode } from '../language/ast.ts';\nimport { Kind } from '../language/kinds.ts';\nimport { print } from '../language/printer.ts';\n\nimport type { GraphQLInputType } from '../type/definition.ts';\nimport {\n assertLeafType,\n isInputObjectType,\n isListType,\n isNonNullType,\n isRequiredInputField,\n} from '../type/definition.ts';\n\nimport type { FragmentVariableValues } from '../execution/collectFields.ts';\nimport type { VariableValues } from '../execution/values.ts';\n\nimport { replaceVariables } from './replaceVariables.ts';\n\n/**\n * Validate that the provided input value is allowed for this type, collecting\n * all errors via a callback function.\n * @param inputValue - JavaScript value to validate.\n * @param type - GraphQL input type to validate the value against.\n * @param onError - Callback invoked for each validation error and path.\n * @param hideSuggestions - Whether suggestion text should be omitted from errors.\n * @returns Nothing.\n * @example\n * ```ts\n * // Collect validation errors with their input paths.\n * import {\n * GraphQLInputObjectType,\n * GraphQLInt,\n * GraphQLNonNull,\n * } from 'graphql/type';\n * import { validateInputValue } from 'graphql/utilities';\n *\n * const ReviewInput = new GraphQLInputObjectType({\n * name: 'ReviewInput',\n * fields: {\n * stars: { type: new GraphQLNonNull(GraphQLInt) },\n * },\n * });\n * const errors = [];\n *\n * validateInputValue({ stars: 'bad' }, ReviewInput, (error, path) => {\n * errors.push({ message: error.message, path });\n * });\n *\n * errors; // => [ { message: 'Expected value of type \"Int\", found: \"bad\".', path: ['stars'] } ]\n * ```\n * @example\n * ```ts\n * // This variant hides suggestion text for unknown input fields.\n * import { GraphQLInputObjectType, GraphQLString } from 'graphql/type';\n * import { validateInputValue } from 'graphql/utilities';\n *\n * const ReviewInput = new GraphQLInputObjectType({\n * name: 'ReviewInput',\n * fields: {\n * comment: { type: GraphQLString },\n * },\n * });\n * const errors = [];\n *\n * validateInputValue(\n * { rating: 'extra field' },\n * ReviewInput,\n * (error) => {\n * errors.push(error.message);\n * },\n * true,\n * );\n *\n * errors; // => ['Expected value of type \"ReviewInput\" not to include unknown field \"rating\", found: { rating: \"extra field\" }.']\n * ```\n */\nexport function validateInputValue(\n inputValue: unknown,\n type: GraphQLInputType,\n onError: (error: GraphQLError, path: ReadonlyArray<string | number>) => void,\n hideSuggestions?: Maybe<boolean>,\n): void {\n return validateInputValueImpl(\n inputValue,\n type,\n onError,\n hideSuggestions,\n undefined,\n );\n}\n\nfunction validateInputValueImpl(\n inputValue: unknown,\n type: GraphQLInputType,\n onError: (error: GraphQLError, path: ReadonlyArray<string | number>) => void,\n hideSuggestions: Maybe<boolean>,\n path: Path | undefined,\n): void {\n if (isNonNullType(type)) {\n if (inputValue === undefined) {\n reportInvalidValue(\n onError,\n `Expected a value of non-null type \"${type}\" to be provided.`,\n path,\n );\n return;\n }\n if (inputValue === null) {\n reportInvalidValue(\n onError,\n `Expected value of non-null type \"${type}\" not to be null.`,\n path,\n );\n return;\n }\n return validateInputValueImpl(\n inputValue,\n type.ofType,\n onError,\n hideSuggestions,\n path,\n );\n }\n\n if (inputValue == null) {\n return;\n }\n\n if (isListType(type)) {\n if (!isIterableObject(inputValue)) {\n // Lists accept a non-list value as a list of one.\n validateInputValueImpl(\n inputValue,\n type.ofType,\n onError,\n hideSuggestions,\n path,\n );\n } else {\n let index = 0;\n for (const itemValue of inputValue) {\n validateInputValueImpl(\n itemValue,\n type.ofType,\n onError,\n hideSuggestions,\n addPath(path, index++, undefined),\n );\n }\n }\n } else if (isInputObjectType(type)) {\n if (!isObjectLike(inputValue) || Array.isArray(inputValue)) {\n reportInvalidValue(\n onError,\n `Expected value of type \"${type}\" to be an object, found: ${inspect(\n inputValue,\n )}.`,\n path,\n );\n return;\n }\n\n const fieldDefs = type.getFields();\n\n for (const field of Object.values(fieldDefs)) {\n const fieldValue = inputValue[field.name];\n if (fieldValue === undefined) {\n if (isRequiredInputField(field)) {\n reportInvalidValue(\n onError,\n `Expected value of type \"${type}\" to include required field \"${\n field.name\n }\", found: ${inspect(inputValue)}.`,\n path,\n );\n }\n } else {\n validateInputValueImpl(\n fieldValue,\n field.type,\n onError,\n hideSuggestions,\n addPath(path, field.name, type.name),\n );\n }\n }\n\n const fields: Array<string> = [];\n // Ensure every provided field is defined.\n for (const fieldName of Object.keys(inputValue)) {\n if (inputValue[fieldName] === undefined) {\n continue;\n }\n if (!Object.hasOwn(fieldDefs, fieldName)) {\n const suggestion = hideSuggestions\n ? ''\n : didYouMean(suggestionList(fieldName, Object.keys(fieldDefs)));\n reportInvalidValue(\n onError,\n `Expected value of type \"${type}\" not to include unknown field \"${fieldName}\"${\n suggestion ? `.${suggestion} Found` : ', found'\n }: ${inspect(inputValue)}.`,\n path,\n );\n continue;\n }\n fields.push(fieldName);\n }\n\n if (type.isOneOf) {\n if (fields.length !== 1) {\n reportInvalidValue(\n onError,\n getOneOfInputObjectErrorMessage(type),\n path,\n );\n }\n\n const field = fields[0];\n const value = inputValue[field];\n if (value === null) {\n reportInvalidValue(\n onError,\n getOneOfInputObjectErrorMessage(type),\n addPath(path, field, type.name),\n );\n }\n }\n } else {\n assertLeafType(type);\n\n let result;\n let caughtError: unknown;\n\n try {\n result = type.coerceInputValue(inputValue, hideSuggestions);\n } catch (error) {\n if (error instanceof GraphQLError) {\n onError(error, pathToArray(path));\n return;\n }\n caughtError = error;\n }\n\n if (result === undefined) {\n reportInvalidValue(\n onError,\n `Expected value of type \"${type}\"${\n caughtError != null\n ? `, but encountered error \"${getCaughtErrorMessage(caughtError)}\"; found`\n : ', found'\n }: ${inspect(inputValue)}.`,\n path,\n ensureGraphQLError(caughtError),\n );\n }\n }\n}\n\nfunction reportInvalidValue(\n onError: (error: GraphQLError, path: ReadonlyArray<string | number>) => void,\n message: string,\n path: Path | undefined,\n originalError?: GraphQLError,\n): void {\n onError(new GraphQLError(message, { originalError }), pathToArray(path));\n}\n\n/**\n * Validate that the provided input literal is allowed for this type, collecting\n * all errors via a callback function.\n *\n * If variable values are not provided, the literal is validated statically\n * (not assuming that those variables are missing runtime values).\n * @param valueNode - GraphQL value AST node to validate.\n * @param type - GraphQL input type to validate the literal against.\n * @param onError - Callback invoked for each validation error and path.\n * @param variables - Operation variable values returned by getVariableValues.\n * @param fragmentVariableValues - Fragment variable values for the current fragment scope.\n * @param hideSuggestions - Whether suggestion text should be omitted from errors.\n * @returns Nothing.\n * @example\n * ```ts\n * // Validate literal input values and collect literal paths.\n * import { parseValue } from 'graphql/language';\n * import {\n * GraphQLInputObjectType,\n * GraphQLInt,\n * GraphQLNonNull,\n * } from 'graphql/type';\n * import { validateInputLiteral } from 'graphql/utilities';\n *\n * const ReviewInput = new GraphQLInputObjectType({\n * name: 'ReviewInput',\n * fields: {\n * stars: { type: new GraphQLNonNull(GraphQLInt) },\n * },\n * });\n * const errors = [];\n *\n * validateInputLiteral(\n * parseValue('{ stars: \"bad\" }'),\n * ReviewInput,\n * (error, path) => {\n * errors.push({ message: error.message, path });\n * },\n * );\n *\n * errors; // => [ { message: 'Expected value of type \"Int\", found: \"bad\".', path: ['stars'] } ]\n * ```\n * @example\n * ```ts\n * // This variant resolves variable references using VariableValues from getVariableValues().\n * import assert from 'node:assert';\n * import { parse, parseValue } from 'graphql/language';\n * import { GraphQLInt } from 'graphql/type';\n * import { getVariableValues } from 'graphql/execution';\n * import { buildSchema, validateInputLiteral } from 'graphql/utilities';\n *\n * const schema = buildSchema(`\n * type Query {\n * review(stars: Int): String\n * }\n * `);\n * const document = parse('query ($stars: Int = 5) { review(stars: $stars) }');\n * const operation = document.definitions[0];\n * const result = getVariableValues(schema, operation.variableDefinitions, {\n * stars: '4',\n * });\n *\n * assert('variableValues' in result);\n *\n * const errors = [];\n * validateInputLiteral(\n * parseValue('$stars'),\n * GraphQLInt,\n * (error) => errors.push(error.message),\n * result.variableValues,\n * undefined,\n * true,\n * );\n *\n * errors; // => []\n * ```\n */\n// eslint-disable-next-line max-params\nexport function validateInputLiteral(\n valueNode: ValueNode,\n type: GraphQLInputType,\n onError: (error: GraphQLError, path: ReadonlyArray<string | number>) => void,\n variables?: Maybe<VariableValues>,\n fragmentVariableValues?: Maybe<FragmentVariableValues>,\n hideSuggestions?: Maybe<boolean>,\n): void {\n const context: ValidationContext = {\n static: !variables && !fragmentVariableValues,\n onError,\n variables,\n fragmentVariableValues,\n };\n return validateInputLiteralImpl(\n context,\n valueNode,\n type,\n hideSuggestions,\n undefined,\n );\n}\n\ninterface ValidationContext {\n static: boolean;\n onError: (error: GraphQLError, path: ReadonlyArray<string | number>) => void;\n variables?: Maybe<VariableValues>;\n fragmentVariableValues?: Maybe<FragmentVariableValues>;\n}\n\nfunction validateInputLiteralImpl(\n context: ValidationContext,\n valueNode: ValueNode,\n type: GraphQLInputType,\n hideSuggestions: Maybe<boolean>,\n path: Path | undefined,\n): void {\n if (valueNode.kind === Kind.VARIABLE) {\n if (context.static) {\n // If no variable values are provided, this is being validated statically,\n // and cannot yet produce any validation errors for variables.\n return;\n }\n const scopedVariableValues = getScopedVariableValues(context, valueNode);\n const value = scopedVariableValues?.coerced[valueNode.name.value];\n if (isNonNullType(type)) {\n if (value === undefined) {\n reportInvalidLiteral(\n context.onError,\n `Expected variable \"$${valueNode.name.value}\" provided to type \"${type}\" to provide a runtime value.`,\n valueNode,\n path,\n );\n } else if (value === null) {\n reportInvalidLiteral(\n context.onError,\n `Expected variable \"$${valueNode.name.value}\" provided to non-null type \"${type}\" not to be null.`,\n valueNode,\n path,\n );\n }\n }\n // Note: This does no further checking that this variable is correct.\n // This assumes this variable usage has already been validated.\n return;\n }\n\n if (isNonNullType(type)) {\n if (valueNode.kind === Kind.NULL) {\n reportInvalidLiteral(\n context.onError,\n `Expected value of non-null type \"${type}\" not to be null.`,\n valueNode,\n path,\n );\n return;\n }\n return validateInputLiteralImpl(\n context,\n valueNode,\n type.ofType,\n hideSuggestions,\n path,\n );\n }\n\n if (valueNode.kind === Kind.NULL) {\n return;\n }\n\n if (isListType(type)) {\n if (valueNode.kind !== Kind.LIST) {\n // Lists accept a non-list value as a list of one.\n validateInputLiteralImpl(\n context,\n valueNode,\n type.ofType,\n hideSuggestions,\n path,\n );\n } else {\n let index = 0;\n for (const itemNode of valueNode.values) {\n validateInputLiteralImpl(\n context,\n itemNode,\n type.ofType,\n hideSuggestions,\n addPath(path, index++, undefined),\n );\n }\n }\n } else if (isInputObjectType(type)) {\n if (valueNode.kind !== Kind.OBJECT) {\n reportInvalidLiteral(\n context.onError,\n `Expected value of type \"${type}\" to be an object, found: ${print(\n valueNode,\n )}.`,\n valueNode,\n path,\n );\n return;\n }\n\n const fieldDefs = type.getFields();\n const fieldNodes = keyMap(valueNode.fields, (field) => field.name.value);\n\n for (const field of Object.values(fieldDefs)) {\n const fieldNode = fieldNodes[field.name];\n if (fieldNode === undefined) {\n if (isRequiredInputField(field)) {\n reportInvalidLiteral(\n context.onError,\n `Expected value of type \"${type}\" to include required field \"${\n field.name\n }\", found: ${print(valueNode)}.`,\n valueNode,\n path,\n );\n }\n } else {\n const fieldValueNode = fieldNode.value;\n if (fieldValueNode.kind === Kind.VARIABLE && !context.static) {\n const scopedVariableValues = getScopedVariableValues(\n context,\n fieldValueNode,\n );\n const variableName = fieldValueNode.name.value;\n const value = scopedVariableValues?.coerced[variableName];\n if (type.isOneOf) {\n if (value === undefined) {\n reportInvalidLiteral(\n context.onError,\n `Expected variable \"$${variableName}\" provided to field \"${field.name}\" for OneOf Input Object type \"${type}\" to provide a runtime value.`,\n valueNode,\n path,\n );\n } else if (value === null) {\n reportInvalidLiteral(\n context.onError,\n `Expected variable \"$${variableName}\" provided to field \"${field.name}\" for OneOf Input Object type \"${type}\" not to be null.`,\n valueNode,\n path,\n );\n }\n } else if (value === undefined && !isRequiredInputField(field)) {\n continue;\n }\n }\n\n validateInputLiteralImpl(\n context,\n fieldValueNode,\n field.type,\n hideSuggestions,\n addPath(path, field.name, type.name),\n );\n }\n }\n\n const fields = valueNode.fields;\n const knownFields: Array<(typeof fields)[number]> = [];\n // Ensure every provided field is defined.\n for (const fieldNode of fields) {\n const fieldName = fieldNode.name.value;\n if (!Object.hasOwn(fieldDefs, fieldName)) {\n const suggestion = hideSuggestions\n ? ''\n : didYouMean(suggestionList(fieldName, Object.keys(fieldDefs)));\n reportInvalidLiteral(\n context.onError,\n `Expected value of type \"${type}\" not to include unknown field \"${fieldName}\"${\n suggestion ? `.${suggestion} Found` : ', found'\n }: ${print(valueNode)}.`,\n fieldNode,\n path,\n );\n } else {\n knownFields.push(fieldNode);\n }\n }\n\n if (type.isOneOf) {\n const isNotExactlyOneField = knownFields.length !== 1;\n if (isNotExactlyOneField) {\n reportInvalidLiteral(\n context.onError,\n getOneOfInputObjectErrorMessage(type),\n valueNode,\n path,\n );\n return;\n }\n\n const fieldValueNode = knownFields[0].value;\n if (fieldValueNode.kind === Kind.NULL) {\n const fieldName = knownFields[0].name.value;\n reportInvalidLiteral(\n context.onError,\n getOneOfInputObjectErrorMessage(type),\n valueNode,\n addPath(path, fieldName, undefined),\n );\n }\n }\n } else {\n assertLeafType(type);\n\n let result;\n let caughtError: unknown;\n try {\n result = type.coerceInputLiteral\n ? type.coerceInputLiteral(\n replaceVariables(\n valueNode,\n context.variables,\n context.fragmentVariableValues,\n ),\n hideSuggestions,\n )\n : type.parseLiteral(valueNode, undefined, hideSuggestions);\n } catch (error) {\n if (error instanceof GraphQLError) {\n context.onError(error, pathToArray(path));\n return;\n }\n caughtError = error;\n }\n\n if (result === undefined) {\n reportInvalidLiteral(\n context.onError,\n `Expected value of type \"${type}\"${\n caughtError != null\n ? `, but encountered error \"${getCaughtErrorMessage(caughtError)}\"; found`\n : ', found'\n }: ${print(valueNode)}.`,\n valueNode,\n path,\n ensureGraphQLError(caughtError),\n );\n }\n }\n}\n\nfunction getScopedVariableValues(\n context: ValidationContext,\n valueNode: VariableNode,\n): Maybe<VariableValues> {\n const variableName = valueNode.name.value;\n const { fragmentVariableValues, variables } = context;\n return fragmentVariableValues?.sources[variableName]\n ? fragmentVariableValues\n : variables;\n}\n\nfunction reportInvalidLiteral(\n onError: (error: GraphQLError, path: ReadonlyArray<string | number>) => void,\n message: string,\n valueNode: ASTNode,\n path: Path | undefined,\n originalError?: GraphQLError,\n): void {\n onError(\n new GraphQLError(message, {\n nodes: valueNode,\n originalError,\n }),\n pathToArray(path),\n );\n}\n\nfunction getCaughtErrorMessage(caughtError: unknown): string {\n if (isObjectLike(caughtError)) {\n const message = caughtError.message;\n if (typeof message === 'string' && message !== '') {\n return message;\n }\n }\n\n return String(caughtError);\n}\n\nfunction getOneOfInputObjectErrorMessage(type: GraphQLInputType): string {\n return `Within OneOf Input Object type \"${type}\", exactly one field must be specified, and the value for that field must be non-null.`;\n}\n"]}
|