graphql 16.13.2 → 16.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/error/GraphQLError.d.ts +151 -15
- package/error/GraphQLError.js +143 -12
- package/error/GraphQLError.mjs +143 -12
- package/error/index.d.ts +6 -0
- package/error/index.mjs +6 -0
- package/error/locatedError.d.ts +20 -0
- package/error/locatedError.js +21 -0
- package/error/locatedError.mjs +20 -0
- package/error/syntaxError.d.ts +15 -0
- package/error/syntaxError.js +16 -0
- package/error/syntaxError.mjs +15 -0
- package/execution/collectFields.js +6 -0
- package/execution/collectFields.mjs +6 -0
- package/execution/execute.d.ts +211 -12
- package/execution/execute.js +214 -23
- package/execution/execute.mjs +213 -23
- package/execution/index.d.ts +6 -0
- package/execution/index.mjs +6 -0
- package/execution/mapAsyncIterator.d.ts +2 -0
- package/execution/mapAsyncIterator.js +2 -0
- package/execution/mapAsyncIterator.mjs +2 -0
- package/execution/subscribe.d.ts +195 -5
- package/execution/subscribe.js +154 -11
- package/execution/subscribe.mjs +153 -11
- package/execution/values.d.ts +167 -10
- package/execution/values.js +149 -5
- package/execution/values.mjs +148 -5
- package/graphql.d.ts +163 -41
- package/graphql.js +126 -4
- package/graphql.mjs +131 -41
- package/index.d.ts +12 -17
- package/index.mjs +13 -19
- package/jsutils/Maybe.d.ts +5 -1
- package/jsutils/ObjMap.d.ts +4 -0
- package/jsutils/Path.d.ts +30 -0
- package/jsutils/Path.js +29 -0
- package/jsutils/Path.mjs +29 -0
- package/jsutils/PromiseOrValue.d.ts +1 -0
- package/jsutils/devAssert.d.ts +1 -0
- package/jsutils/devAssert.js +1 -0
- package/jsutils/devAssert.mjs +1 -0
- package/jsutils/didYouMean.d.ts +4 -1
- package/jsutils/didYouMean.js +4 -1
- package/jsutils/didYouMean.mjs +4 -1
- package/jsutils/groupBy.d.ts +2 -0
- package/jsutils/groupBy.js +2 -0
- package/jsutils/groupBy.mjs +2 -0
- package/jsutils/identityFunc.d.ts +2 -0
- package/jsutils/identityFunc.js +2 -0
- package/jsutils/identityFunc.mjs +2 -0
- package/jsutils/inspect.d.ts +2 -0
- package/jsutils/inspect.js +2 -0
- package/jsutils/inspect.mjs +2 -0
- package/jsutils/instanceOf.d.ts +2 -0
- package/jsutils/instanceOf.js +2 -0
- package/jsutils/instanceOf.mjs +2 -0
- package/jsutils/invariant.d.ts +1 -0
- package/jsutils/invariant.js +1 -0
- package/jsutils/invariant.mjs +1 -0
- package/jsutils/isAsyncIterable.d.ts +2 -0
- package/jsutils/isAsyncIterable.js +2 -0
- package/jsutils/isAsyncIterable.mjs +2 -0
- package/jsutils/isIterableObject.d.ts +6 -5
- package/jsutils/isIterableObject.js +6 -5
- package/jsutils/isIterableObject.mjs +6 -5
- package/jsutils/isObjectLike.d.ts +2 -0
- package/jsutils/isObjectLike.js +2 -0
- package/jsutils/isObjectLike.mjs +2 -0
- package/jsutils/isPromise.d.ts +2 -0
- package/jsutils/isPromise.js +2 -0
- package/jsutils/isPromise.mjs +2 -0
- package/jsutils/keyMap.d.ts +7 -14
- package/jsutils/keyMap.js +7 -14
- package/jsutils/keyMap.mjs +7 -14
- package/jsutils/keyValMap.d.ts +9 -6
- package/jsutils/keyValMap.js +9 -6
- package/jsutils/keyValMap.mjs +9 -6
- package/jsutils/mapValue.d.ts +2 -0
- package/jsutils/mapValue.js +2 -0
- package/jsutils/mapValue.mjs +2 -0
- package/jsutils/memoize3.d.ts +2 -0
- package/jsutils/memoize3.js +2 -0
- package/jsutils/memoize3.mjs +2 -0
- package/jsutils/naturalCompare.d.ts +2 -0
- package/jsutils/naturalCompare.js +2 -0
- package/jsutils/naturalCompare.mjs +2 -0
- package/jsutils/printPathArray.d.ts +2 -0
- package/jsutils/printPathArray.js +2 -0
- package/jsutils/printPathArray.mjs +2 -0
- package/jsutils/promiseForObject.d.ts +2 -0
- package/jsutils/promiseForObject.js +2 -0
- package/jsutils/promiseForObject.mjs +2 -0
- package/jsutils/promiseReduce.d.ts +2 -0
- package/jsutils/promiseReduce.js +2 -0
- package/jsutils/promiseReduce.mjs +2 -0
- package/jsutils/suggestionList.d.ts +2 -0
- package/jsutils/suggestionList.js +4 -0
- package/jsutils/suggestionList.mjs +4 -0
- package/jsutils/toError.d.ts +2 -0
- package/jsutils/toError.js +2 -0
- package/jsutils/toError.mjs +2 -0
- package/jsutils/toObjMap.d.ts +1 -0
- package/jsutils/toObjMap.js +1 -0
- package/jsutils/toObjMap.mjs +1 -0
- package/language/ast.d.ts +422 -55
- package/language/ast.js +103 -39
- package/language/ast.mjs +103 -39
- package/language/blockString.d.ts +1 -3
- package/language/blockString.js +1 -3
- package/language/blockString.mjs +1 -3
- package/language/directiveLocation.d.ts +29 -8
- package/language/directiveLocation.js +10 -6
- package/language/directiveLocation.mjs +10 -6
- package/language/index.d.ts +7 -0
- package/language/index.mjs +6 -0
- package/language/kinds.d.ts +58 -18
- package/language/kinds.js +10 -6
- package/language/kinds.mjs +10 -6
- package/language/lexer.d.ts +47 -14
- package/language/lexer.js +71 -13
- package/language/lexer.mjs +70 -13
- package/language/location.d.ts +16 -3
- package/language/location.js +14 -3
- package/language/location.mjs +14 -3
- package/language/parser.d.ts +248 -11
- package/language/parser.js +257 -0
- package/language/parser.mjs +257 -3
- package/language/predicates.d.ts +169 -0
- package/language/predicates.js +173 -1
- package/language/predicates.mjs +185 -1
- package/language/printLocation.d.ts +28 -0
- package/language/printLocation.js +29 -0
- package/language/printLocation.mjs +28 -0
- package/language/printString.d.ts +2 -0
- package/language/printString.js +5 -1
- package/language/printString.mjs +5 -1
- package/language/printer.d.ts +12 -0
- package/language/printer.js +32 -1
- package/language/printer.mjs +31 -1
- package/language/schemaCoordinateLexer.d.ts +8 -6
- package/language/schemaCoordinateLexer.js +10 -6
- package/language/schemaCoordinateLexer.mjs +10 -6
- package/language/source.d.ts +28 -0
- package/language/source.js +32 -0
- package/language/source.mjs +31 -0
- package/language/tokenKind.d.ts +30 -3
- package/language/tokenKind.js +8 -3
- package/language/tokenKind.mjs +8 -3
- package/language/visitor.d.ts +200 -72
- package/language/visitor.js +122 -50
- package/language/visitor.mjs +122 -54
- package/package.json +1 -1
- package/subscription/index.d.ts +9 -3
- package/subscription/index.mjs +9 -3
- package/type/assertName.d.ts +18 -1
- package/type/assertName.js +19 -1
- package/type/assertName.mjs +18 -1
- package/type/definition.d.ts +2540 -79
- package/type/definition.js +2214 -61
- package/type/definition.mjs +2241 -60
- package/type/directives.d.ts +202 -19
- package/type/directives.js +206 -20
- package/type/directives.mjs +206 -20
- package/type/index.d.ts +6 -0
- package/type/index.mjs +6 -0
- package/type/introspection.d.ts +36 -0
- package/type/introspection.js +57 -1
- package/type/introspection.mjs +65 -1
- package/type/scalars.d.ts +29 -2
- package/type/scalars.js +37 -2
- package/type/scalars.mjs +36 -2
- package/type/schema.d.ts +490 -28
- package/type/schema.js +484 -26
- package/type/schema.mjs +484 -26
- package/type/validate.d.ts +31 -0
- package/type/validate.js +32 -0
- package/type/validate.mjs +31 -0
- package/utilities/TypeInfo.d.ts +441 -1
- package/utilities/TypeInfo.js +444 -1
- package/utilities/TypeInfo.mjs +443 -1
- package/utilities/assertValidName.d.ts +27 -2
- package/utilities/assertValidName.js +28 -2
- package/utilities/assertValidName.mjs +27 -2
- package/utilities/astFromValue.d.ts +33 -3
- package/utilities/astFromValue.js +36 -3
- package/utilities/astFromValue.mjs +35 -3
- package/utilities/buildASTSchema.d.ts +65 -6
- package/utilities/buildASTSchema.js +69 -6
- package/utilities/buildASTSchema.mjs +69 -6
- package/utilities/buildClientSchema.d.ts +15 -0
- package/utilities/buildClientSchema.js +17 -0
- package/utilities/buildClientSchema.mjs +16 -0
- package/utilities/coerceInputValue.d.ts +46 -0
- package/utilities/coerceInputValue.js +47 -0
- package/utilities/coerceInputValue.mjs +46 -0
- package/utilities/concatAST.d.ts +12 -0
- package/utilities/concatAST.js +13 -0
- package/utilities/concatAST.mjs +12 -0
- package/utilities/extendSchema.d.ts +56 -3
- package/utilities/extendSchema.js +121 -6
- package/utilities/extendSchema.mjs +120 -6
- package/utilities/findBreakingChanges.d.ts +95 -0
- package/utilities/findBreakingChanges.js +68 -0
- package/utilities/findBreakingChanges.mjs +70 -0
- package/utilities/getIntrospectionQuery.d.ts +148 -0
- package/utilities/getIntrospectionQuery.js +72 -38
- package/utilities/getIntrospectionQuery.mjs +72 -38
- package/utilities/getOperationAST.d.ts +15 -0
- package/utilities/getOperationAST.js +16 -0
- package/utilities/getOperationAST.mjs +15 -0
- package/utilities/getOperationRootType.d.ts +18 -1
- package/utilities/getOperationRootType.js +19 -1
- package/utilities/getOperationRootType.mjs +18 -1
- package/utilities/index.d.ts +7 -0
- package/utilities/index.mjs +7 -0
- package/utilities/introspectionFromSchema.d.ts +54 -0
- package/utilities/introspectionFromSchema.js +56 -0
- package/utilities/introspectionFromSchema.mjs +55 -0
- package/utilities/lexicographicSortSchema.d.ts +35 -0
- package/utilities/lexicographicSortSchema.js +36 -0
- package/utilities/lexicographicSortSchema.mjs +35 -0
- package/utilities/printSchema.d.ts +63 -0
- package/utilities/printSchema.js +67 -0
- package/utilities/printSchema.mjs +68 -0
- package/utilities/resolveSchemaCoordinate.d.ts +62 -0
- package/utilities/resolveSchemaCoordinate.js +64 -0
- package/utilities/resolveSchemaCoordinate.mjs +63 -0
- package/utilities/separateOperations.d.ts +30 -0
- package/utilities/separateOperations.js +31 -0
- package/utilities/separateOperations.mjs +30 -0
- package/utilities/stripIgnoredCharacters.d.ts +13 -6
- package/utilities/stripIgnoredCharacters.js +16 -6
- package/utilities/stripIgnoredCharacters.mjs +15 -6
- package/utilities/typeComparators.d.ts +84 -0
- package/utilities/typeComparators.js +85 -0
- package/utilities/typeComparators.mjs +84 -0
- package/utilities/typeFromAST.d.ts +86 -0
- package/utilities/typeFromAST.js +3 -0
- package/utilities/typeFromAST.mjs +3 -0
- package/utilities/typedQueryDocumentNode.d.ts +4 -0
- package/utilities/valueFromAST.d.ts +38 -0
- package/utilities/valueFromAST.js +51 -2
- package/utilities/valueFromAST.mjs +50 -2
- package/utilities/valueFromASTUntyped.d.ts +15 -2
- package/utilities/valueFromASTUntyped.js +16 -2
- package/utilities/valueFromASTUntyped.mjs +15 -2
- package/validation/ValidationContext.d.ts +399 -0
- package/validation/ValidationContext.js +400 -0
- package/validation/ValidationContext.mjs +401 -0
- package/validation/index.d.ts +6 -0
- package/validation/index.mjs +6 -0
- package/validation/rules/ExecutableDefinitionsRule.d.ts +28 -0
- package/validation/rules/ExecutableDefinitionsRule.js +29 -0
- package/validation/rules/ExecutableDefinitionsRule.mjs +28 -0
- package/validation/rules/FieldsOnCorrectTypeRule.d.ts +28 -0
- package/validation/rules/FieldsOnCorrectTypeRule.js +33 -0
- package/validation/rules/FieldsOnCorrectTypeRule.mjs +32 -0
- package/validation/rules/FragmentsOnCompositeTypesRule.d.ts +28 -0
- package/validation/rules/FragmentsOnCompositeTypesRule.js +29 -0
- package/validation/rules/FragmentsOnCompositeTypesRule.mjs +28 -0
- package/validation/rules/KnownArgumentNamesRule.d.ts +29 -3
- package/validation/rules/KnownArgumentNamesRule.js +30 -3
- package/validation/rules/KnownArgumentNamesRule.mjs +29 -3
- package/validation/rules/KnownDirectivesRule.d.ts +28 -0
- package/validation/rules/KnownDirectivesRule.js +33 -0
- package/validation/rules/KnownDirectivesRule.mjs +32 -0
- package/validation/rules/KnownFragmentNamesRule.d.ts +28 -0
- package/validation/rules/KnownFragmentNamesRule.js +29 -0
- package/validation/rules/KnownFragmentNamesRule.mjs +28 -0
- package/validation/rules/KnownTypeNamesRule.d.ts +28 -0
- package/validation/rules/KnownTypeNamesRule.js +29 -0
- package/validation/rules/KnownTypeNamesRule.mjs +28 -0
- package/validation/rules/LoneAnonymousOperationRule.d.ts +28 -0
- package/validation/rules/LoneAnonymousOperationRule.js +29 -0
- package/validation/rules/LoneAnonymousOperationRule.mjs +28 -0
- package/validation/rules/LoneSchemaDefinitionRule.d.ts +21 -0
- package/validation/rules/LoneSchemaDefinitionRule.js +22 -0
- package/validation/rules/LoneSchemaDefinitionRule.mjs +21 -0
- package/validation/rules/MaxIntrospectionDepthRule.d.ts +31 -0
- package/validation/rules/MaxIntrospectionDepthRule.js +33 -0
- package/validation/rules/MaxIntrospectionDepthRule.mjs +34 -0
- package/validation/rules/NoFragmentCyclesRule.d.ts +28 -0
- package/validation/rules/NoFragmentCyclesRule.js +29 -0
- package/validation/rules/NoFragmentCyclesRule.mjs +28 -0
- package/validation/rules/NoUndefinedVariablesRule.d.ts +28 -0
- package/validation/rules/NoUndefinedVariablesRule.js +29 -0
- package/validation/rules/NoUndefinedVariablesRule.mjs +28 -0
- package/validation/rules/NoUnusedFragmentsRule.d.ts +28 -0
- package/validation/rules/NoUnusedFragmentsRule.js +29 -0
- package/validation/rules/NoUnusedFragmentsRule.mjs +28 -0
- package/validation/rules/NoUnusedVariablesRule.d.ts +29 -0
- package/validation/rules/NoUnusedVariablesRule.js +30 -0
- package/validation/rules/NoUnusedVariablesRule.mjs +29 -0
- package/validation/rules/OverlappingFieldsCanBeMergedRule.d.ts +33 -0
- package/validation/rules/OverlappingFieldsCanBeMergedRule.js +45 -6
- package/validation/rules/OverlappingFieldsCanBeMergedRule.mjs +45 -6
- package/validation/rules/PossibleFragmentSpreadsRule.d.ts +36 -0
- package/validation/rules/PossibleFragmentSpreadsRule.js +37 -0
- package/validation/rules/PossibleFragmentSpreadsRule.mjs +36 -0
- package/validation/rules/PossibleTypeExtensionsRule.d.ts +21 -0
- package/validation/rules/PossibleTypeExtensionsRule.js +22 -0
- package/validation/rules/PossibleTypeExtensionsRule.mjs +21 -0
- package/validation/rules/ProvidedRequiredArgumentsRule.d.ts +29 -3
- package/validation/rules/ProvidedRequiredArgumentsRule.js +30 -3
- package/validation/rules/ProvidedRequiredArgumentsRule.mjs +29 -3
- package/validation/rules/ScalarLeafsRule.d.ts +28 -0
- package/validation/rules/ScalarLeafsRule.js +29 -0
- package/validation/rules/ScalarLeafsRule.mjs +28 -0
- package/validation/rules/SingleFieldSubscriptionsRule.d.ts +33 -0
- package/validation/rules/SingleFieldSubscriptionsRule.js +34 -0
- package/validation/rules/SingleFieldSubscriptionsRule.mjs +33 -0
- package/validation/rules/UniqueArgumentDefinitionNamesRule.d.ts +21 -0
- package/validation/rules/UniqueArgumentDefinitionNamesRule.js +22 -0
- package/validation/rules/UniqueArgumentDefinitionNamesRule.mjs +21 -0
- package/validation/rules/UniqueArgumentNamesRule.d.ts +28 -0
- package/validation/rules/UniqueArgumentNamesRule.js +29 -0
- package/validation/rules/UniqueArgumentNamesRule.mjs +28 -0
- package/validation/rules/UniqueDirectiveNamesRule.d.ts +21 -0
- package/validation/rules/UniqueDirectiveNamesRule.js +22 -0
- package/validation/rules/UniqueDirectiveNamesRule.mjs +21 -0
- package/validation/rules/UniqueDirectivesPerLocationRule.d.ts +28 -0
- package/validation/rules/UniqueDirectivesPerLocationRule.js +41 -0
- package/validation/rules/UniqueDirectivesPerLocationRule.mjs +40 -0
- package/validation/rules/UniqueEnumValueNamesRule.d.ts +21 -0
- package/validation/rules/UniqueEnumValueNamesRule.js +22 -0
- package/validation/rules/UniqueEnumValueNamesRule.mjs +21 -0
- package/validation/rules/UniqueFieldDefinitionNamesRule.d.ts +21 -0
- package/validation/rules/UniqueFieldDefinitionNamesRule.js +22 -0
- package/validation/rules/UniqueFieldDefinitionNamesRule.mjs +21 -0
- package/validation/rules/UniqueFragmentNamesRule.d.ts +28 -0
- package/validation/rules/UniqueFragmentNamesRule.js +29 -0
- package/validation/rules/UniqueFragmentNamesRule.mjs +28 -0
- package/validation/rules/UniqueInputFieldNamesRule.d.ts +32 -0
- package/validation/rules/UniqueInputFieldNamesRule.js +33 -0
- package/validation/rules/UniqueInputFieldNamesRule.mjs +32 -0
- package/validation/rules/UniqueOperationNamesRule.d.ts +28 -0
- package/validation/rules/UniqueOperationNamesRule.js +29 -0
- package/validation/rules/UniqueOperationNamesRule.mjs +28 -0
- package/validation/rules/UniqueOperationTypesRule.d.ts +21 -0
- package/validation/rules/UniqueOperationTypesRule.js +22 -0
- package/validation/rules/UniqueOperationTypesRule.mjs +21 -0
- package/validation/rules/UniqueTypeNamesRule.d.ts +21 -0
- package/validation/rules/UniqueTypeNamesRule.js +22 -0
- package/validation/rules/UniqueTypeNamesRule.mjs +21 -0
- package/validation/rules/UniqueVariableNamesRule.d.ts +28 -0
- package/validation/rules/UniqueVariableNamesRule.js +29 -0
- package/validation/rules/UniqueVariableNamesRule.mjs +28 -0
- package/validation/rules/ValuesOfCorrectTypeRule.d.ts +28 -0
- package/validation/rules/ValuesOfCorrectTypeRule.js +31 -0
- package/validation/rules/ValuesOfCorrectTypeRule.mjs +30 -0
- package/validation/rules/VariablesAreInputTypesRule.d.ts +32 -0
- package/validation/rules/VariablesAreInputTypesRule.js +33 -0
- package/validation/rules/VariablesAreInputTypesRule.mjs +32 -0
- package/validation/rules/VariablesInAllowedPositionRule.d.ts +28 -0
- package/validation/rules/VariablesInAllowedPositionRule.js +35 -1
- package/validation/rules/VariablesInAllowedPositionRule.mjs +34 -1
- package/validation/rules/custom/NoDeprecatedCustomRule.d.ts +41 -0
- package/validation/rules/custom/NoDeprecatedCustomRule.js +42 -0
- package/validation/rules/custom/NoDeprecatedCustomRule.mjs +41 -0
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.d.ts +28 -0
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.js +29 -0
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.mjs +28 -0
- package/validation/specifiedRules.d.ts +2 -3
- package/validation/specifiedRules.js +2 -3
- package/validation/specifiedRules.mjs +2 -3
- package/validation/validate.d.ts +70 -9
- package/validation/validate.js +63 -7
- package/validation/validate.mjs +63 -7
- package/version.d.ts +3 -6
- package/version.js +7 -9
- package/version.mjs +6 -9
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** @category Schema Construction */
|
|
1
2
|
import { devAssert } from '../jsutils/devAssert.mjs';
|
|
2
3
|
import { inspect } from '../jsutils/inspect.mjs';
|
|
3
4
|
import { invariant } from '../jsutils/invariant.mjs';
|
|
@@ -56,6 +57,60 @@ import { valueFromAST } from './valueFromAST.mjs';
|
|
|
56
57
|
*
|
|
57
58
|
* This algorithm copies the provided schema, applying extensions while
|
|
58
59
|
* producing the copy. The original schema remains unaltered.
|
|
60
|
+
* @param schema - GraphQL schema to use.
|
|
61
|
+
* @param documentAST - The parsed GraphQL document AST.
|
|
62
|
+
* @param options - Optional configuration for this operation.
|
|
63
|
+
* @returns A new schema with the extensions and definitions applied.
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* // Extend a schema with new fields and types.
|
|
67
|
+
* import { parse } from 'graphql/language';
|
|
68
|
+
* import { buildSchema, extendSchema } from 'graphql/utilities';
|
|
69
|
+
*
|
|
70
|
+
* const schema = buildSchema(`
|
|
71
|
+
* type Query {
|
|
72
|
+
* greeting: String
|
|
73
|
+
* }
|
|
74
|
+
* `);
|
|
75
|
+
* const extensionAST = parse(`
|
|
76
|
+
* extend type Query {
|
|
77
|
+
* farewell: String
|
|
78
|
+
* }
|
|
79
|
+
*
|
|
80
|
+
* type Review {
|
|
81
|
+
* body: String
|
|
82
|
+
* }
|
|
83
|
+
* `);
|
|
84
|
+
*
|
|
85
|
+
* const extendedSchema = extendSchema(schema, extensionAST);
|
|
86
|
+
*
|
|
87
|
+
* schema.getType('Review'); // => undefined
|
|
88
|
+
* extendedSchema.getType('Review')?.name; // => 'Review'
|
|
89
|
+
* Object.keys(extendedSchema.getQueryType().getFields()); // => ['greeting', 'farewell']
|
|
90
|
+
* ```
|
|
91
|
+
* @example
|
|
92
|
+
* ```ts
|
|
93
|
+
* // This variant bypasses validation for an otherwise invalid extension.
|
|
94
|
+
* import { parse } from 'graphql/language';
|
|
95
|
+
* import { buildSchema, extendSchema } from 'graphql/utilities';
|
|
96
|
+
*
|
|
97
|
+
* const schema = buildSchema(`
|
|
98
|
+
* type Query {
|
|
99
|
+
* greeting: String
|
|
100
|
+
* }
|
|
101
|
+
* `);
|
|
102
|
+
* const invalidExtension = parse(`
|
|
103
|
+
* extend type Missing {
|
|
104
|
+
* field: String
|
|
105
|
+
* }
|
|
106
|
+
* `);
|
|
107
|
+
*
|
|
108
|
+
* extendSchema(schema, invalidExtension); // throws an error
|
|
109
|
+
* extendSchema(schema, invalidExtension, {
|
|
110
|
+
* assumeValid: true,
|
|
111
|
+
* assumeValidSDL: true,
|
|
112
|
+
* }); // does not throw
|
|
113
|
+
* ```
|
|
59
114
|
*/
|
|
60
115
|
export function extendSchema(schema, documentAST, options) {
|
|
61
116
|
assertSchema(schema);
|
|
@@ -78,16 +133,15 @@ export function extendSchema(schema, documentAST, options) {
|
|
|
78
133
|
? schema
|
|
79
134
|
: new GraphQLSchema(extendedConfig);
|
|
80
135
|
}
|
|
81
|
-
/**
|
|
82
|
-
* @internal
|
|
83
|
-
*/
|
|
136
|
+
/** @internal */
|
|
84
137
|
|
|
85
138
|
export function extendSchemaImpl(schemaConfig, documentAST, options) {
|
|
86
139
|
var _schemaDef, _schemaDef$descriptio, _schemaDef2, _options$assumeValid;
|
|
87
140
|
|
|
88
141
|
// Collect the type definitions and extensions found in the document.
|
|
89
142
|
const typeDefs = [];
|
|
90
|
-
const typeExtensionsMap = Object.create(null);
|
|
143
|
+
const typeExtensionsMap = Object.create(null);
|
|
144
|
+
const directiveExtensionsMap = Object.create(null); // New directives and types are separate because a directives and types can
|
|
91
145
|
// have the same name. For example, a type named "skip".
|
|
92
146
|
|
|
93
147
|
const directiveDefs = [];
|
|
@@ -110,6 +164,14 @@ export function extendSchemaImpl(schemaConfig, documentAST, options) {
|
|
|
110
164
|
: [def];
|
|
111
165
|
} else if (def.kind === Kind.DIRECTIVE_DEFINITION) {
|
|
112
166
|
directiveDefs.push(def);
|
|
167
|
+
} else if (def.kind === Kind.DIRECTIVE_EXTENSION) {
|
|
168
|
+
const extendedDirectiveName = def.name.value;
|
|
169
|
+
const existingDirectiveExtensions =
|
|
170
|
+
directiveExtensionsMap[extendedDirectiveName];
|
|
171
|
+
directiveExtensionsMap[extendedDirectiveName] =
|
|
172
|
+
existingDirectiveExtensions
|
|
173
|
+
? existingDirectiveExtensions.concat([def])
|
|
174
|
+
: [def];
|
|
113
175
|
}
|
|
114
176
|
} // If this document contains no new types, extensions, or directives then
|
|
115
177
|
// return the same unmodified GraphQLSchema instance.
|
|
@@ -117,6 +179,7 @@ export function extendSchemaImpl(schemaConfig, documentAST, options) {
|
|
|
117
179
|
if (
|
|
118
180
|
Object.keys(typeExtensionsMap).length === 0 &&
|
|
119
181
|
typeDefs.length === 0 &&
|
|
182
|
+
Object.keys(directiveExtensionsMap).length === 0 &&
|
|
120
183
|
directiveDefs.length === 0 &&
|
|
121
184
|
schemaExtensions.length === 0 &&
|
|
122
185
|
schemaDef == null
|
|
@@ -141,6 +204,12 @@ export function extendSchemaImpl(schemaConfig, documentAST, options) {
|
|
|
141
204
|
: buildType(typeNode);
|
|
142
205
|
}
|
|
143
206
|
|
|
207
|
+
const directiveMap = Object.create(null);
|
|
208
|
+
|
|
209
|
+
for (const existingDirective of schemaConfig.directives) {
|
|
210
|
+
directiveMap[existingDirective.name] = extendDirective(existingDirective);
|
|
211
|
+
}
|
|
212
|
+
|
|
144
213
|
const operationTypes = {
|
|
145
214
|
// Get the extended root operation types.
|
|
146
215
|
query: schemaConfig.query && replaceNamedType(schemaConfig.query),
|
|
@@ -152,6 +221,8 @@ export function extendSchemaImpl(schemaConfig, documentAST, options) {
|
|
|
152
221
|
...getOperationTypes(schemaExtensions),
|
|
153
222
|
}; // Then produce and return a Schema config with these types.
|
|
154
223
|
|
|
224
|
+
const directives = Object.values(directiveMap); // will be `Array<GraphQLDirective>`
|
|
225
|
+
|
|
155
226
|
return {
|
|
156
227
|
description:
|
|
157
228
|
(_schemaDef = schemaDef) === null || _schemaDef === void 0
|
|
@@ -163,7 +234,7 @@ export function extendSchemaImpl(schemaConfig, documentAST, options) {
|
|
|
163
234
|
...operationTypes,
|
|
164
235
|
types: Object.values(typeMap),
|
|
165
236
|
directives: [
|
|
166
|
-
...
|
|
237
|
+
...directives.map(replaceDirective),
|
|
167
238
|
...directiveDefs.map(buildDirective),
|
|
168
239
|
],
|
|
169
240
|
extensions: Object.create(null),
|
|
@@ -415,6 +486,29 @@ export function extendSchemaImpl(schemaConfig, documentAST, options) {
|
|
|
415
486
|
return opTypes;
|
|
416
487
|
}
|
|
417
488
|
|
|
489
|
+
function extendDirective(directive) {
|
|
490
|
+
var _directiveExtensionsM, _config$deprecationRe;
|
|
491
|
+
|
|
492
|
+
const config = directive.toConfig();
|
|
493
|
+
const extensions =
|
|
494
|
+
(_directiveExtensionsM = directiveExtensionsMap[config.name]) !== null &&
|
|
495
|
+
_directiveExtensionsM !== void 0
|
|
496
|
+
? _directiveExtensionsM
|
|
497
|
+
: [];
|
|
498
|
+
const deprecationReason =
|
|
499
|
+
(_config$deprecationRe = config.deprecationReason) !== null &&
|
|
500
|
+
_config$deprecationRe !== void 0
|
|
501
|
+
? _config$deprecationRe
|
|
502
|
+
: extensions
|
|
503
|
+
.map((ext) => getDeprecationReason(ext))
|
|
504
|
+
.find((reason) => reason != null);
|
|
505
|
+
return new GraphQLDirective({
|
|
506
|
+
...config,
|
|
507
|
+
deprecationReason,
|
|
508
|
+
extensionASTNodes: config.extensionASTNodes.concat(extensions),
|
|
509
|
+
});
|
|
510
|
+
}
|
|
511
|
+
|
|
418
512
|
function getNamedType(node) {
|
|
419
513
|
var _stdTypeMap$name2;
|
|
420
514
|
|
|
@@ -445,8 +539,20 @@ export function extendSchemaImpl(schemaConfig, documentAST, options) {
|
|
|
445
539
|
}
|
|
446
540
|
|
|
447
541
|
function buildDirective(node) {
|
|
448
|
-
var _node$description;
|
|
542
|
+
var _directiveExtensionsM2, _getDeprecationReason, _node$description;
|
|
449
543
|
|
|
544
|
+
const extensions =
|
|
545
|
+
(_directiveExtensionsM2 = directiveExtensionsMap[node.name.value]) !==
|
|
546
|
+
null && _directiveExtensionsM2 !== void 0
|
|
547
|
+
? _directiveExtensionsM2
|
|
548
|
+
: [];
|
|
549
|
+
const deprecationReason =
|
|
550
|
+
(_getDeprecationReason = getDeprecationReason(node)) !== null &&
|
|
551
|
+
_getDeprecationReason !== void 0
|
|
552
|
+
? _getDeprecationReason
|
|
553
|
+
: extensions
|
|
554
|
+
.map((ext) => getDeprecationReason(ext))
|
|
555
|
+
.find((reason) => reason != null);
|
|
450
556
|
return new GraphQLDirective({
|
|
451
557
|
name: node.name.value,
|
|
452
558
|
description:
|
|
@@ -458,7 +564,9 @@ export function extendSchemaImpl(schemaConfig, documentAST, options) {
|
|
|
458
564
|
locations: node.locations.map(({ value }) => value),
|
|
459
565
|
isRepeatable: node.repeatable,
|
|
460
566
|
args: buildArgumentMap(node.arguments),
|
|
567
|
+
deprecationReason,
|
|
461
568
|
astNode: node,
|
|
569
|
+
extensionASTNodes: extensions,
|
|
462
570
|
});
|
|
463
571
|
}
|
|
464
572
|
|
|
@@ -769,6 +877,8 @@ const stdTypeMap = keyMap(
|
|
|
769
877
|
/**
|
|
770
878
|
* Given a field or enum value node, returns the string value for the
|
|
771
879
|
* deprecation reason.
|
|
880
|
+
*
|
|
881
|
+
* @internal
|
|
772
882
|
*/
|
|
773
883
|
|
|
774
884
|
function getDeprecationReason(node) {
|
|
@@ -780,6 +890,8 @@ function getDeprecationReason(node) {
|
|
|
780
890
|
}
|
|
781
891
|
/**
|
|
782
892
|
* Given a scalar node, returns the string value for the specifiedByURL.
|
|
893
|
+
*
|
|
894
|
+
* @internal
|
|
783
895
|
*/
|
|
784
896
|
|
|
785
897
|
function getSpecifiedByURL(node) {
|
|
@@ -791,6 +903,8 @@ function getSpecifiedByURL(node) {
|
|
|
791
903
|
}
|
|
792
904
|
/**
|
|
793
905
|
* Given an input object node, returns if the node should be OneOf.
|
|
906
|
+
*
|
|
907
|
+
* @internal
|
|
794
908
|
*/
|
|
795
909
|
|
|
796
910
|
function isOneOf(node) {
|
|
@@ -1,43 +1,106 @@
|
|
|
1
|
+
/** @category Schema Changes */
|
|
1
2
|
import type { GraphQLSchema } from '../type/schema';
|
|
3
|
+
/** Categories of schema changes that may break existing operations. */
|
|
2
4
|
declare enum BreakingChangeType {
|
|
5
|
+
/** Breaking change code for type removed. */
|
|
3
6
|
TYPE_REMOVED = 'TYPE_REMOVED',
|
|
7
|
+
/** Breaking change code for type changed kind. */
|
|
4
8
|
TYPE_CHANGED_KIND = 'TYPE_CHANGED_KIND',
|
|
9
|
+
/** Breaking change code for type removed from union. */
|
|
5
10
|
TYPE_REMOVED_FROM_UNION = 'TYPE_REMOVED_FROM_UNION',
|
|
11
|
+
/** Breaking change code for value removed from enum. */
|
|
6
12
|
VALUE_REMOVED_FROM_ENUM = 'VALUE_REMOVED_FROM_ENUM',
|
|
13
|
+
/** Breaking change code for required input field added. */
|
|
7
14
|
REQUIRED_INPUT_FIELD_ADDED = 'REQUIRED_INPUT_FIELD_ADDED',
|
|
15
|
+
/** Breaking change code for implemented interface removed. */
|
|
8
16
|
IMPLEMENTED_INTERFACE_REMOVED = 'IMPLEMENTED_INTERFACE_REMOVED',
|
|
17
|
+
/** Breaking change code for field removed. */
|
|
9
18
|
FIELD_REMOVED = 'FIELD_REMOVED',
|
|
19
|
+
/** Breaking change code for field changed kind. */
|
|
10
20
|
FIELD_CHANGED_KIND = 'FIELD_CHANGED_KIND',
|
|
21
|
+
/** Breaking change code for required arg added. */
|
|
11
22
|
REQUIRED_ARG_ADDED = 'REQUIRED_ARG_ADDED',
|
|
23
|
+
/** Breaking change code for arg removed. */
|
|
12
24
|
ARG_REMOVED = 'ARG_REMOVED',
|
|
25
|
+
/** Breaking change code for arg changed kind. */
|
|
13
26
|
ARG_CHANGED_KIND = 'ARG_CHANGED_KIND',
|
|
27
|
+
/** Breaking change code for directive removed. */
|
|
14
28
|
DIRECTIVE_REMOVED = 'DIRECTIVE_REMOVED',
|
|
29
|
+
/** Breaking change code for directive arg removed. */
|
|
15
30
|
DIRECTIVE_ARG_REMOVED = 'DIRECTIVE_ARG_REMOVED',
|
|
31
|
+
/** Breaking change code for required directive arg added. */
|
|
16
32
|
REQUIRED_DIRECTIVE_ARG_ADDED = 'REQUIRED_DIRECTIVE_ARG_ADDED',
|
|
33
|
+
/** Breaking change code for directive repeatable removed. */
|
|
17
34
|
DIRECTIVE_REPEATABLE_REMOVED = 'DIRECTIVE_REPEATABLE_REMOVED',
|
|
35
|
+
/** Breaking change code for directive location removed. */
|
|
18
36
|
DIRECTIVE_LOCATION_REMOVED = 'DIRECTIVE_LOCATION_REMOVED',
|
|
19
37
|
}
|
|
20
38
|
export { BreakingChangeType };
|
|
39
|
+
/** Categories of schema changes that may be dangerous for existing operations. */
|
|
21
40
|
declare enum DangerousChangeType {
|
|
41
|
+
/** Dangerous change code for value added to enum. */
|
|
22
42
|
VALUE_ADDED_TO_ENUM = 'VALUE_ADDED_TO_ENUM',
|
|
43
|
+
/** Dangerous change code for type added to union. */
|
|
23
44
|
TYPE_ADDED_TO_UNION = 'TYPE_ADDED_TO_UNION',
|
|
45
|
+
/** Dangerous change code for optional input field added. */
|
|
24
46
|
OPTIONAL_INPUT_FIELD_ADDED = 'OPTIONAL_INPUT_FIELD_ADDED',
|
|
47
|
+
/** Dangerous change code for optional arg added. */
|
|
25
48
|
OPTIONAL_ARG_ADDED = 'OPTIONAL_ARG_ADDED',
|
|
49
|
+
/** Dangerous change code for implemented interface added. */
|
|
26
50
|
IMPLEMENTED_INTERFACE_ADDED = 'IMPLEMENTED_INTERFACE_ADDED',
|
|
51
|
+
/** Dangerous change code for arg default value change. */
|
|
27
52
|
ARG_DEFAULT_VALUE_CHANGE = 'ARG_DEFAULT_VALUE_CHANGE',
|
|
28
53
|
}
|
|
29
54
|
export { DangerousChangeType };
|
|
55
|
+
/** Description of a schema change that may break existing operations. */
|
|
30
56
|
export interface BreakingChange {
|
|
57
|
+
/** Specific kind of breaking schema change. */
|
|
31
58
|
type: BreakingChangeType;
|
|
59
|
+
/** Human-readable description of the breaking schema change. */
|
|
32
60
|
description: string;
|
|
33
61
|
}
|
|
62
|
+
/** Description of a schema change that may be dangerous for existing operations. */
|
|
34
63
|
export interface DangerousChange {
|
|
64
|
+
/** Specific kind of dangerous schema change. */
|
|
35
65
|
type: DangerousChangeType;
|
|
66
|
+
/** Human-readable description of the dangerous schema change. */
|
|
36
67
|
description: string;
|
|
37
68
|
}
|
|
38
69
|
/**
|
|
39
70
|
* Given two schemas, returns an Array containing descriptions of all the types
|
|
40
71
|
* of breaking changes covered by the other functions down below.
|
|
72
|
+
* @param oldSchema - Schema before the change.
|
|
73
|
+
* @param newSchema - Schema after the change.
|
|
74
|
+
* @returns Breaking changes between the two schemas.
|
|
75
|
+
* @example
|
|
76
|
+
* ```ts
|
|
77
|
+
* import { buildSchema, findBreakingChanges } from 'graphql/utilities';
|
|
78
|
+
*
|
|
79
|
+
* const oldSchema = buildSchema(`
|
|
80
|
+
* type User {
|
|
81
|
+
* id: ID!
|
|
82
|
+
* name: String
|
|
83
|
+
* }
|
|
84
|
+
*
|
|
85
|
+
* type Query {
|
|
86
|
+
* viewer: User
|
|
87
|
+
* }
|
|
88
|
+
* `);
|
|
89
|
+
* const newSchema = buildSchema(`
|
|
90
|
+
* type User {
|
|
91
|
+
* id: ID!
|
|
92
|
+
* }
|
|
93
|
+
*
|
|
94
|
+
* type Query {
|
|
95
|
+
* viewer: User
|
|
96
|
+
* }
|
|
97
|
+
* `);
|
|
98
|
+
*
|
|
99
|
+
* const changes = findBreakingChanges(oldSchema, newSchema);
|
|
100
|
+
*
|
|
101
|
+
* changes[0].type; // => 'FIELD_REMOVED'
|
|
102
|
+
* changes[0].description; // matches /User.name was removed/
|
|
103
|
+
* ```
|
|
41
104
|
*/
|
|
42
105
|
export declare function findBreakingChanges(
|
|
43
106
|
oldSchema: GraphQLSchema,
|
|
@@ -46,6 +109,38 @@ export declare function findBreakingChanges(
|
|
|
46
109
|
/**
|
|
47
110
|
* Given two schemas, returns an Array containing descriptions of all the types
|
|
48
111
|
* of potentially dangerous changes covered by the other functions down below.
|
|
112
|
+
* @param oldSchema - Schema before the change.
|
|
113
|
+
* @param newSchema - Schema after the change.
|
|
114
|
+
* @returns Dangerous changes between the two schemas.
|
|
115
|
+
* @example
|
|
116
|
+
* ```ts
|
|
117
|
+
* import { buildSchema, findDangerousChanges } from 'graphql/utilities';
|
|
118
|
+
*
|
|
119
|
+
* const oldSchema = buildSchema(`
|
|
120
|
+
* enum Episode {
|
|
121
|
+
* NEW_HOPE
|
|
122
|
+
* }
|
|
123
|
+
*
|
|
124
|
+
* type Query {
|
|
125
|
+
* episode: Episode
|
|
126
|
+
* }
|
|
127
|
+
* `);
|
|
128
|
+
* const newSchema = buildSchema(`
|
|
129
|
+
* enum Episode {
|
|
130
|
+
* NEW_HOPE
|
|
131
|
+
* EMPIRE
|
|
132
|
+
* }
|
|
133
|
+
*
|
|
134
|
+
* type Query {
|
|
135
|
+
* episode: Episode
|
|
136
|
+
* }
|
|
137
|
+
* `);
|
|
138
|
+
*
|
|
139
|
+
* const changes = findDangerousChanges(oldSchema, newSchema);
|
|
140
|
+
*
|
|
141
|
+
* changes[0].type; // => 'VALUE_ADDED_TO_ENUM'
|
|
142
|
+
* changes[0].description; // matches /EMPIRE was added/
|
|
143
|
+
* ```
|
|
49
144
|
*/
|
|
50
145
|
export declare function findDangerousChanges(
|
|
51
146
|
oldSchema: GraphQLSchema,
|
|
@@ -23,6 +23,9 @@ var _astFromValue = require('./astFromValue.js');
|
|
|
23
23
|
|
|
24
24
|
var _sortValueNode = require('./sortValueNode.js');
|
|
25
25
|
|
|
26
|
+
/** @category Schema Changes */
|
|
27
|
+
|
|
28
|
+
/** Categories of schema changes that may break existing operations. */
|
|
26
29
|
var BreakingChangeType;
|
|
27
30
|
exports.BreakingChangeType = BreakingChangeType;
|
|
28
31
|
|
|
@@ -52,6 +55,7 @@ exports.BreakingChangeType = BreakingChangeType;
|
|
|
52
55
|
BreakingChangeType || (exports.BreakingChangeType = BreakingChangeType = {}),
|
|
53
56
|
);
|
|
54
57
|
|
|
58
|
+
/** Categories of schema changes that may be dangerous for existing operations. */
|
|
55
59
|
var DangerousChangeType;
|
|
56
60
|
exports.DangerousChangeType = DangerousChangeType;
|
|
57
61
|
|
|
@@ -72,6 +76,38 @@ exports.DangerousChangeType = DangerousChangeType;
|
|
|
72
76
|
/**
|
|
73
77
|
* Given two schemas, returns an Array containing descriptions of all the types
|
|
74
78
|
* of breaking changes covered by the other functions down below.
|
|
79
|
+
* @param oldSchema - Schema before the change.
|
|
80
|
+
* @param newSchema - Schema after the change.
|
|
81
|
+
* @returns Breaking changes between the two schemas.
|
|
82
|
+
* @example
|
|
83
|
+
* ```ts
|
|
84
|
+
* import { buildSchema, findBreakingChanges } from 'graphql/utilities';
|
|
85
|
+
*
|
|
86
|
+
* const oldSchema = buildSchema(`
|
|
87
|
+
* type User {
|
|
88
|
+
* id: ID!
|
|
89
|
+
* name: String
|
|
90
|
+
* }
|
|
91
|
+
*
|
|
92
|
+
* type Query {
|
|
93
|
+
* viewer: User
|
|
94
|
+
* }
|
|
95
|
+
* `);
|
|
96
|
+
* const newSchema = buildSchema(`
|
|
97
|
+
* type User {
|
|
98
|
+
* id: ID!
|
|
99
|
+
* }
|
|
100
|
+
*
|
|
101
|
+
* type Query {
|
|
102
|
+
* viewer: User
|
|
103
|
+
* }
|
|
104
|
+
* `);
|
|
105
|
+
*
|
|
106
|
+
* const changes = findBreakingChanges(oldSchema, newSchema);
|
|
107
|
+
*
|
|
108
|
+
* changes[0].type; // => 'FIELD_REMOVED'
|
|
109
|
+
* changes[0].description; // matches /User.name was removed/
|
|
110
|
+
* ```
|
|
75
111
|
*/
|
|
76
112
|
function findBreakingChanges(oldSchema, newSchema) {
|
|
77
113
|
// @ts-expect-error
|
|
@@ -82,6 +118,38 @@ function findBreakingChanges(oldSchema, newSchema) {
|
|
|
82
118
|
/**
|
|
83
119
|
* Given two schemas, returns an Array containing descriptions of all the types
|
|
84
120
|
* of potentially dangerous changes covered by the other functions down below.
|
|
121
|
+
* @param oldSchema - Schema before the change.
|
|
122
|
+
* @param newSchema - Schema after the change.
|
|
123
|
+
* @returns Dangerous changes between the two schemas.
|
|
124
|
+
* @example
|
|
125
|
+
* ```ts
|
|
126
|
+
* import { buildSchema, findDangerousChanges } from 'graphql/utilities';
|
|
127
|
+
*
|
|
128
|
+
* const oldSchema = buildSchema(`
|
|
129
|
+
* enum Episode {
|
|
130
|
+
* NEW_HOPE
|
|
131
|
+
* }
|
|
132
|
+
*
|
|
133
|
+
* type Query {
|
|
134
|
+
* episode: Episode
|
|
135
|
+
* }
|
|
136
|
+
* `);
|
|
137
|
+
* const newSchema = buildSchema(`
|
|
138
|
+
* enum Episode {
|
|
139
|
+
* NEW_HOPE
|
|
140
|
+
* EMPIRE
|
|
141
|
+
* }
|
|
142
|
+
*
|
|
143
|
+
* type Query {
|
|
144
|
+
* episode: Episode
|
|
145
|
+
* }
|
|
146
|
+
* `);
|
|
147
|
+
*
|
|
148
|
+
* const changes = findDangerousChanges(oldSchema, newSchema);
|
|
149
|
+
*
|
|
150
|
+
* changes[0].type; // => 'VALUE_ADDED_TO_ENUM'
|
|
151
|
+
* changes[0].description; // matches /EMPIRE was added/
|
|
152
|
+
* ```
|
|
85
153
|
*/
|
|
86
154
|
|
|
87
155
|
function findDangerousChanges(oldSchema, newSchema) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** @category Schema Changes */
|
|
1
2
|
import { inspect } from '../jsutils/inspect.mjs';
|
|
2
3
|
import { invariant } from '../jsutils/invariant.mjs';
|
|
3
4
|
import { keyMap } from '../jsutils/keyMap.mjs';
|
|
@@ -18,6 +19,8 @@ import {
|
|
|
18
19
|
import { isSpecifiedScalarType } from '../type/scalars.mjs';
|
|
19
20
|
import { astFromValue } from './astFromValue.mjs';
|
|
20
21
|
import { sortValueNode } from './sortValueNode.mjs';
|
|
22
|
+
/** Categories of schema changes that may break existing operations. */
|
|
23
|
+
|
|
21
24
|
var BreakingChangeType;
|
|
22
25
|
|
|
23
26
|
(function (BreakingChangeType) {
|
|
@@ -45,6 +48,8 @@ var BreakingChangeType;
|
|
|
45
48
|
})(BreakingChangeType || (BreakingChangeType = {}));
|
|
46
49
|
|
|
47
50
|
export { BreakingChangeType };
|
|
51
|
+
/** Categories of schema changes that may be dangerous for existing operations. */
|
|
52
|
+
|
|
48
53
|
var DangerousChangeType;
|
|
49
54
|
|
|
50
55
|
(function (DangerousChangeType) {
|
|
@@ -59,10 +64,43 @@ var DangerousChangeType;
|
|
|
59
64
|
})(DangerousChangeType || (DangerousChangeType = {}));
|
|
60
65
|
|
|
61
66
|
export { DangerousChangeType };
|
|
67
|
+
/** Description of a schema change that may break existing operations. */
|
|
62
68
|
|
|
63
69
|
/**
|
|
64
70
|
* Given two schemas, returns an Array containing descriptions of all the types
|
|
65
71
|
* of breaking changes covered by the other functions down below.
|
|
72
|
+
* @param oldSchema - Schema before the change.
|
|
73
|
+
* @param newSchema - Schema after the change.
|
|
74
|
+
* @returns Breaking changes between the two schemas.
|
|
75
|
+
* @example
|
|
76
|
+
* ```ts
|
|
77
|
+
* import { buildSchema, findBreakingChanges } from 'graphql/utilities';
|
|
78
|
+
*
|
|
79
|
+
* const oldSchema = buildSchema(`
|
|
80
|
+
* type User {
|
|
81
|
+
* id: ID!
|
|
82
|
+
* name: String
|
|
83
|
+
* }
|
|
84
|
+
*
|
|
85
|
+
* type Query {
|
|
86
|
+
* viewer: User
|
|
87
|
+
* }
|
|
88
|
+
* `);
|
|
89
|
+
* const newSchema = buildSchema(`
|
|
90
|
+
* type User {
|
|
91
|
+
* id: ID!
|
|
92
|
+
* }
|
|
93
|
+
*
|
|
94
|
+
* type Query {
|
|
95
|
+
* viewer: User
|
|
96
|
+
* }
|
|
97
|
+
* `);
|
|
98
|
+
*
|
|
99
|
+
* const changes = findBreakingChanges(oldSchema, newSchema);
|
|
100
|
+
*
|
|
101
|
+
* changes[0].type; // => 'FIELD_REMOVED'
|
|
102
|
+
* changes[0].description; // matches /User.name was removed/
|
|
103
|
+
* ```
|
|
66
104
|
*/
|
|
67
105
|
export function findBreakingChanges(oldSchema, newSchema) {
|
|
68
106
|
// @ts-expect-error
|
|
@@ -73,6 +111,38 @@ export function findBreakingChanges(oldSchema, newSchema) {
|
|
|
73
111
|
/**
|
|
74
112
|
* Given two schemas, returns an Array containing descriptions of all the types
|
|
75
113
|
* of potentially dangerous changes covered by the other functions down below.
|
|
114
|
+
* @param oldSchema - Schema before the change.
|
|
115
|
+
* @param newSchema - Schema after the change.
|
|
116
|
+
* @returns Dangerous changes between the two schemas.
|
|
117
|
+
* @example
|
|
118
|
+
* ```ts
|
|
119
|
+
* import { buildSchema, findDangerousChanges } from 'graphql/utilities';
|
|
120
|
+
*
|
|
121
|
+
* const oldSchema = buildSchema(`
|
|
122
|
+
* enum Episode {
|
|
123
|
+
* NEW_HOPE
|
|
124
|
+
* }
|
|
125
|
+
*
|
|
126
|
+
* type Query {
|
|
127
|
+
* episode: Episode
|
|
128
|
+
* }
|
|
129
|
+
* `);
|
|
130
|
+
* const newSchema = buildSchema(`
|
|
131
|
+
* enum Episode {
|
|
132
|
+
* NEW_HOPE
|
|
133
|
+
* EMPIRE
|
|
134
|
+
* }
|
|
135
|
+
*
|
|
136
|
+
* type Query {
|
|
137
|
+
* episode: Episode
|
|
138
|
+
* }
|
|
139
|
+
* `);
|
|
140
|
+
*
|
|
141
|
+
* const changes = findDangerousChanges(oldSchema, newSchema);
|
|
142
|
+
*
|
|
143
|
+
* changes[0].type; // => 'VALUE_ADDED_TO_ENUM'
|
|
144
|
+
* changes[0].description; // matches /EMPIRE was added/
|
|
145
|
+
* ```
|
|
76
146
|
*/
|
|
77
147
|
|
|
78
148
|
export function findDangerousChanges(oldSchema, newSchema) {
|