graphql 0.0.1-test.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/LICENSE +21 -0
- package/NotSupportedTSVersion.d.ts +1 -0
- package/README.md +158 -0
- package/error/GraphQLError.d.ts +142 -0
- package/error/GraphQLError.js +267 -0
- package/error/GraphQLError.mjs +253 -0
- package/error/index.d.ts +7 -0
- package/error/index.js +41 -0
- package/error/index.mjs +3 -0
- package/error/locatedError.d.ts +13 -0
- package/error/locatedError.js +40 -0
- package/error/locatedError.mjs +32 -0
- package/error/syntaxError.d.ts +11 -0
- package/error/syntaxError.js +21 -0
- package/error/syntaxError.mjs +11 -0
- package/execution/collectFields.d.ts +45 -0
- package/execution/collectFields.js +229 -0
- package/execution/collectFields.mjs +213 -0
- package/execution/execute.d.ts +185 -0
- package/execution/execute.js +1016 -0
- package/execution/execute.mjs +988 -0
- package/execution/index.d.ts +14 -0
- package/execution/index.js +67 -0
- package/execution/index.mjs +9 -0
- package/execution/mapAsyncIterator.d.ts +9 -0
- package/execution/mapAsyncIterator.js +68 -0
- package/execution/mapAsyncIterator.mjs +61 -0
- package/execution/subscribe.d.ts +68 -0
- package/execution/subscribe.js +261 -0
- package/execution/subscribe.mjs +239 -0
- package/execution/values.d.ts +81 -0
- package/execution/values.js +292 -0
- package/execution/values.mjs +255 -0
- package/graphql.d.ts +67 -0
- package/graphql.js +96 -0
- package/graphql.mjs +122 -0
- package/index.d.ts +411 -0
- package/index.js +1263 -0
- package/index.mjs +254 -0
- package/jsutils/Maybe.d.ts +2 -0
- package/jsutils/Maybe.js +5 -0
- package/jsutils/Maybe.mjs +1 -0
- package/jsutils/ObjMap.d.ts +16 -0
- package/jsutils/ObjMap.js +5 -0
- package/jsutils/ObjMap.mjs +1 -0
- package/jsutils/Path.d.ts +20 -0
- package/jsutils/Path.js +33 -0
- package/jsutils/Path.mjs +25 -0
- package/jsutils/PromiseOrValue.d.ts +1 -0
- package/jsutils/PromiseOrValue.js +5 -0
- package/jsutils/PromiseOrValue.mjs +1 -0
- package/jsutils/devAssert.d.ts +1 -0
- package/jsutils/devAssert.js +14 -0
- package/jsutils/devAssert.mjs +7 -0
- package/jsutils/didYouMean.d.ts +8 -0
- package/jsutils/didYouMean.js +38 -0
- package/jsutils/didYouMean.mjs +32 -0
- package/jsutils/groupBy.d.ts +7 -0
- package/jsutils/groupBy.js +26 -0
- package/jsutils/groupBy.mjs +19 -0
- package/jsutils/identityFunc.d.ts +4 -0
- package/jsutils/identityFunc.js +13 -0
- package/jsutils/identityFunc.mjs +6 -0
- package/jsutils/inspect.d.ts +4 -0
- package/jsutils/inspect.js +121 -0
- package/jsutils/inspect.mjs +115 -0
- package/jsutils/instanceOf.d.ts +16 -0
- package/jsutils/instanceOf.js +60 -0
- package/jsutils/instanceOf.mjs +52 -0
- package/jsutils/invariant.d.ts +4 -0
- package/jsutils/invariant.js +16 -0
- package/jsutils/invariant.mjs +9 -0
- package/jsutils/isAsyncIterable.d.ts +7 -0
- package/jsutils/isAsyncIterable.js +18 -0
- package/jsutils/isAsyncIterable.mjs +11 -0
- package/jsutils/isIterableObject.d.ts +20 -0
- package/jsutils/isIterableObject.js +32 -0
- package/jsutils/isIterableObject.mjs +25 -0
- package/jsutils/isObjectLike.d.ts +7 -0
- package/jsutils/isObjectLike.js +14 -0
- package/jsutils/isObjectLike.mjs +7 -0
- package/jsutils/isPromise.d.ts +5 -0
- package/jsutils/isPromise.js +17 -0
- package/jsutils/isPromise.mjs +10 -0
- package/jsutils/keyMap.d.ts +32 -0
- package/jsutils/keyMap.js +43 -0
- package/jsutils/keyMap.mjs +36 -0
- package/jsutils/keyValMap.d.ts +23 -0
- package/jsutils/keyValMap.js +33 -0
- package/jsutils/keyValMap.mjs +26 -0
- package/jsutils/mapValue.d.ts +9 -0
- package/jsutils/mapValue.js +20 -0
- package/jsutils/mapValue.mjs +13 -0
- package/jsutils/memoize3.d.ts +9 -0
- package/jsutils/memoize3.js +41 -0
- package/jsutils/memoize3.mjs +34 -0
- package/jsutils/naturalCompare.d.ts +8 -0
- package/jsutils/naturalCompare.js +69 -0
- package/jsutils/naturalCompare.mjs +61 -0
- package/jsutils/printPathArray.d.ts +6 -0
- package/jsutils/printPathArray.js +17 -0
- package/jsutils/printPathArray.mjs +10 -0
- package/jsutils/promiseForObject.d.ts +11 -0
- package/jsutils/promiseForObject.js +25 -0
- package/jsutils/promiseForObject.mjs +18 -0
- package/jsutils/promiseReduce.d.ts +13 -0
- package/jsutils/promiseReduce.js +27 -0
- package/jsutils/promiseReduce.mjs +20 -0
- package/jsutils/suggestionList.d.ts +8 -0
- package/jsutils/suggestionList.js +139 -0
- package/jsutils/suggestionList.mjs +130 -0
- package/jsutils/toError.d.ts +4 -0
- package/jsutils/toError.js +25 -0
- package/jsutils/toError.mjs +18 -0
- package/jsutils/toObjMap.d.ts +5 -0
- package/jsutils/toObjMap.js +24 -0
- package/jsutils/toObjMap.mjs +17 -0
- package/language/ast.d.ts +536 -0
- package/language/ast.js +224 -0
- package/language/ast.mjs +206 -0
- package/language/blockString.d.ts +28 -0
- package/language/blockString.js +195 -0
- package/language/blockString.mjs +178 -0
- package/language/characterClasses.d.ts +47 -0
- package/language/characterClasses.js +75 -0
- package/language/characterClasses.mjs +64 -0
- package/language/directiveLocation.d.ts +32 -0
- package/language/directiveLocation.js +40 -0
- package/language/directiveLocation.mjs +31 -0
- package/language/index.d.ts +97 -0
- package/language/index.js +215 -0
- package/language/index.mjs +29 -0
- package/language/kinds.d.ts +65 -0
- package/language/kinds.js +64 -0
- package/language/kinds.mjs +55 -0
- package/language/lexer.d.ts +45 -0
- package/language/lexer.js +1006 -0
- package/language/lexer.mjs +902 -0
- package/language/location.d.ts +16 -0
- package/language/location.js +38 -0
- package/language/location.mjs +30 -0
- package/language/parser.d.ts +554 -0
- package/language/parser.js +1567 -0
- package/language/parser.mjs +1524 -0
- package/language/predicates.d.ts +33 -0
- package/language/predicates.js +109 -0
- package/language/predicates.mjs +81 -0
- package/language/printLocation.d.ts +14 -0
- package/language/printLocation.js +74 -0
- package/language/printLocation.mjs +66 -0
- package/language/printString.d.ts +5 -0
- package/language/printString.js +183 -0
- package/language/printString.mjs +176 -0
- package/language/printer.d.ts +6 -0
- package/language/printer.js +351 -0
- package/language/printer.mjs +339 -0
- package/language/source.d.ts +25 -0
- package/language/source.js +65 -0
- package/language/source.mjs +50 -0
- package/language/tokenKind.d.ts +34 -0
- package/language/tokenKind.js +44 -0
- package/language/tokenKind.mjs +35 -0
- package/language/visitor.d.ts +194 -0
- package/language/visitor.js +377 -0
- package/language/visitor.mjs +361 -0
- package/package.json +40 -0
- package/subscription/index.d.ts +19 -0
- package/subscription/index.js +19 -0
- package/subscription/index.mjs +19 -0
- package/type/assertName.d.ts +10 -0
- package/type/assertName.js +59 -0
- package/type/assertName.mjs +44 -0
- package/type/definition.d.ts +917 -0
- package/type/definition.js +1329 -0
- package/type/definition.mjs +1167 -0
- package/type/directives.d.ts +86 -0
- package/type/directives.js +224 -0
- package/type/directives.mjs +190 -0
- package/type/index.d.ts +150 -0
- package/type/index.js +547 -0
- package/type/index.mjs +103 -0
- package/type/introspection.d.ts +29 -0
- package/type/introspection.js +617 -0
- package/type/introspection.mjs +550 -0
- package/type/scalars.d.ts +19 -0
- package/type/scalars.js +359 -0
- package/type/scalars.mjs +299 -0
- package/type/schema.d.ts +170 -0
- package/type/schema.js +402 -0
- package/type/schema.mjs +381 -0
- package/type/validate.d.ts +17 -0
- package/type/validate.js +672 -0
- package/type/validate.mjs +647 -0
- package/utilities/TypeInfo.d.ts +67 -0
- package/utilities/TypeInfo.js +418 -0
- package/utilities/TypeInfo.mjs +395 -0
- package/utilities/assertValidName.d.ts +13 -0
- package/utilities/assertValidName.js +51 -0
- package/utilities/assertValidName.mjs +40 -0
- package/utilities/astFromValue.d.ts +28 -0
- package/utilities/astFromValue.js +190 -0
- package/utilities/astFromValue.mjs +177 -0
- package/utilities/buildASTSchema.d.ts +35 -0
- package/utilities/buildASTSchema.js +115 -0
- package/utilities/buildASTSchema.mjs +97 -0
- package/utilities/buildClientSchema.d.ts +19 -0
- package/utilities/buildClientSchema.js +386 -0
- package/utilities/buildClientSchema.mjs +363 -0
- package/utilities/coerceInputValue.d.ts +16 -0
- package/utilities/coerceInputValue.js +191 -0
- package/utilities/coerceInputValue.mjs +172 -0
- package/utilities/concatAST.d.ts +9 -0
- package/utilities/concatAST.js +26 -0
- package/utilities/concatAST.mjs +19 -0
- package/utilities/extendSchema.d.ts +40 -0
- package/utilities/extendSchema.js +798 -0
- package/utilities/extendSchema.mjs +789 -0
- package/utilities/findBreakingChanges.d.ts +51 -0
- package/utilities/findBreakingChanges.js +547 -0
- package/utilities/findBreakingChanges.mjs +516 -0
- package/utilities/getIntrospectionQuery.d.ts +182 -0
- package/utilities/getIntrospectionQuery.js +134 -0
- package/utilities/getIntrospectionQuery.mjs +127 -0
- package/utilities/getOperationAST.d.ts +11 -0
- package/utilities/getOperationAST.js +43 -0
- package/utilities/getOperationAST.mjs +36 -0
- package/utilities/getOperationRootType.d.ts +15 -0
- package/utilities/getOperationRootType.js +59 -0
- package/utilities/getOperationRootType.mjs +52 -0
- package/utilities/index.d.ts +61 -0
- package/utilities/index.js +233 -0
- package/utilities/index.mjs +55 -0
- package/utilities/introspectionFromSchema.d.ts +18 -0
- package/utilities/introspectionFromSchema.js +42 -0
- package/utilities/introspectionFromSchema.mjs +30 -0
- package/utilities/lexicographicSortSchema.d.ts +9 -0
- package/utilities/lexicographicSortSchema.js +177 -0
- package/utilities/lexicographicSortSchema.mjs +172 -0
- package/utilities/printSchema.d.ts +5 -0
- package/utilities/printSchema.js +333 -0
- package/utilities/printSchema.mjs +309 -0
- package/utilities/separateOperations.d.ts +11 -0
- package/utilities/separateOperations.js +88 -0
- package/utilities/separateOperations.mjs +80 -0
- package/utilities/sortValueNode.d.ts +9 -0
- package/utilities/sortValueNode.js +47 -0
- package/utilities/sortValueNode.mjs +39 -0
- package/utilities/stripIgnoredCharacters.d.ts +62 -0
- package/utilities/stripIgnoredCharacters.js +121 -0
- package/utilities/stripIgnoredCharacters.mjs +104 -0
- package/utilities/typeComparators.d.ts +32 -0
- package/utilities/typeComparators.js +116 -0
- package/utilities/typeComparators.mjs +106 -0
- package/utilities/typeFromAST.d.ts +32 -0
- package/utilities/typeFromAST.js +27 -0
- package/utilities/typeFromAST.mjs +18 -0
- package/utilities/typedQueryDocumentNode.d.ts +22 -0
- package/utilities/typedQueryDocumentNode.js +5 -0
- package/utilities/typedQueryDocumentNode.mjs +1 -0
- package/utilities/valueFromAST.d.ts +29 -0
- package/utilities/valueFromAST.js +185 -0
- package/utilities/valueFromAST.mjs +172 -0
- package/utilities/valueFromASTUntyped.d.ts +23 -0
- package/utilities/valueFromASTUntyped.js +61 -0
- package/utilities/valueFromASTUntyped.mjs +53 -0
- package/validation/ValidationContext.d.ts +95 -0
- package/validation/ValidationContext.js +232 -0
- package/validation/ValidationContext.mjs +212 -0
- package/validation/index.d.ts +40 -0
- package/validation/index.js +317 -0
- package/validation/index.mjs +68 -0
- package/validation/rules/ExecutableDefinitionsRule.d.ts +13 -0
- package/validation/rules/ExecutableDefinitionsRule.js +44 -0
- package/validation/rules/ExecutableDefinitionsRule.mjs +35 -0
- package/validation/rules/FieldsOnCorrectTypeRule.d.ts +13 -0
- package/validation/rules/FieldsOnCorrectTypeRule.js +143 -0
- package/validation/rules/FieldsOnCorrectTypeRule.mjs +125 -0
- package/validation/rules/FragmentsOnCompositeTypesRule.d.ts +14 -0
- package/validation/rules/FragmentsOnCompositeTypesRule.js +65 -0
- package/validation/rules/FragmentsOnCompositeTypesRule.mjs +49 -0
- package/validation/rules/KnownArgumentNamesRule.d.ts +23 -0
- package/validation/rules/KnownArgumentNamesRule.js +116 -0
- package/validation/rules/KnownArgumentNamesRule.mjs +98 -0
- package/validation/rules/KnownDirectivesRule.d.ts +16 -0
- package/validation/rules/KnownDirectivesRule.js +163 -0
- package/validation/rules/KnownDirectivesRule.mjs +146 -0
- package/validation/rules/KnownFragmentNamesRule.d.ts +13 -0
- package/validation/rules/KnownFragmentNamesRule.js +34 -0
- package/validation/rules/KnownFragmentNamesRule.mjs +24 -0
- package/validation/rules/KnownTypeNamesRule.d.ts +16 -0
- package/validation/rules/KnownTypeNamesRule.js +87 -0
- package/validation/rules/KnownTypeNamesRule.mjs +75 -0
- package/validation/rules/LoneAnonymousOperationRule.d.ts +13 -0
- package/validation/rules/LoneAnonymousOperationRule.js +40 -0
- package/validation/rules/LoneAnonymousOperationRule.mjs +32 -0
- package/validation/rules/LoneSchemaDefinitionRule.d.ts +10 -0
- package/validation/rules/LoneSchemaDefinitionRule.js +63 -0
- package/validation/rules/LoneSchemaDefinitionRule.mjs +53 -0
- package/validation/rules/NoFragmentCyclesRule.d.ts +13 -0
- package/validation/rules/NoFragmentCyclesRule.js +83 -0
- package/validation/rules/NoFragmentCyclesRule.mjs +76 -0
- package/validation/rules/NoUndefinedVariablesRule.d.ts +13 -0
- package/validation/rules/NoUndefinedVariablesRule.js +50 -0
- package/validation/rules/NoUndefinedVariablesRule.mjs +43 -0
- package/validation/rules/NoUnusedFragmentsRule.d.ts +13 -0
- package/validation/rules/NoUnusedFragmentsRule.js +59 -0
- package/validation/rules/NoUnusedFragmentsRule.mjs +52 -0
- package/validation/rules/NoUnusedVariablesRule.d.ts +13 -0
- package/validation/rules/NoUnusedVariablesRule.js +55 -0
- package/validation/rules/NoUnusedVariablesRule.mjs +48 -0
- package/validation/rules/OverlappingFieldsCanBeMergedRule-old.js +805 -0
- package/validation/rules/OverlappingFieldsCanBeMergedRule-old.mjs +788 -0
- package/validation/rules/OverlappingFieldsCanBeMergedRule.d.ts +14 -0
- package/validation/rules/OverlappingFieldsCanBeMergedRule.js +805 -0
- package/validation/rules/OverlappingFieldsCanBeMergedRule.mjs +788 -0
- package/validation/rules/PossibleFragmentSpreadsRule.d.ts +12 -0
- package/validation/rules/PossibleFragmentSpreadsRule.js +91 -0
- package/validation/rules/PossibleFragmentSpreadsRule.mjs +69 -0
- package/validation/rules/PossibleTypeExtensionsRule.d.ts +10 -0
- package/validation/rules/PossibleTypeExtensionsRule.js +167 -0
- package/validation/rules/PossibleTypeExtensionsRule.mjs +147 -0
- package/validation/rules/ProvidedRequiredArgumentsRule.d.ts +20 -0
- package/validation/rules/ProvidedRequiredArgumentsRule.js +158 -0
- package/validation/rules/ProvidedRequiredArgumentsRule.mjs +138 -0
- package/validation/rules/ScalarLeafsRule.d.ts +9 -0
- package/validation/rules/ScalarLeafsRule.js +51 -0
- package/validation/rules/ScalarLeafsRule.mjs +42 -0
- package/validation/rules/SingleFieldSubscriptionsRule.d.ts +13 -0
- package/validation/rules/SingleFieldSubscriptionsRule.js +82 -0
- package/validation/rules/SingleFieldSubscriptionsRule.mjs +73 -0
- package/validation/rules/UniqueArgumentDefinitionNamesRule.d.ts +11 -0
- package/validation/rules/UniqueArgumentDefinitionNamesRule.js +90 -0
- package/validation/rules/UniqueArgumentDefinitionNamesRule.mjs +79 -0
- package/validation/rules/UniqueArgumentNamesRule.d.ts +13 -0
- package/validation/rules/UniqueArgumentNamesRule.js +53 -0
- package/validation/rules/UniqueArgumentNamesRule.mjs +42 -0
- package/validation/rules/UniqueDirectiveNamesRule.d.ts +10 -0
- package/validation/rules/UniqueDirectiveNamesRule.js +50 -0
- package/validation/rules/UniqueDirectiveNamesRule.mjs +43 -0
- package/validation/rules/UniqueDirectivesPerLocationRule.d.ts +16 -0
- package/validation/rules/UniqueDirectivesPerLocationRule.js +93 -0
- package/validation/rules/UniqueDirectivesPerLocationRule.mjs +83 -0
- package/validation/rules/UniqueEnumValueNamesRule.d.ts +10 -0
- package/validation/rules/UniqueEnumValueNamesRule.js +71 -0
- package/validation/rules/UniqueEnumValueNamesRule.mjs +60 -0
- package/validation/rules/UniqueFieldDefinitionNamesRule.d.ts +10 -0
- package/validation/rules/UniqueFieldDefinitionNamesRule.js +83 -0
- package/validation/rules/UniqueFieldDefinitionNamesRule.mjs +75 -0
- package/validation/rules/UniqueFragmentNamesRule.d.ts +12 -0
- package/validation/rules/UniqueFragmentNamesRule.js +39 -0
- package/validation/rules/UniqueFragmentNamesRule.mjs +32 -0
- package/validation/rules/UniqueInputFieldNamesRule.d.ts +13 -0
- package/validation/rules/UniqueInputFieldNamesRule.js +52 -0
- package/validation/rules/UniqueInputFieldNamesRule.mjs +44 -0
- package/validation/rules/UniqueOperationNamesRule.d.ts +12 -0
- package/validation/rules/UniqueOperationNamesRule.js +41 -0
- package/validation/rules/UniqueOperationNamesRule.mjs +34 -0
- package/validation/rules/UniqueOperationTypesRule.d.ts +10 -0
- package/validation/rules/UniqueOperationTypesRule.js +67 -0
- package/validation/rules/UniqueOperationTypesRule.mjs +60 -0
- package/validation/rules/UniqueTypeNamesRule.d.ts +10 -0
- package/validation/rules/UniqueTypeNamesRule.js +53 -0
- package/validation/rules/UniqueTypeNamesRule.mjs +46 -0
- package/validation/rules/UniqueVariableNamesRule.d.ts +10 -0
- package/validation/rules/UniqueVariableNamesRule.js +47 -0
- package/validation/rules/UniqueVariableNamesRule.mjs +39 -0
- package/validation/rules/ValuesOfCorrectTypeRule.d.ts +13 -0
- package/validation/rules/ValuesOfCorrectTypeRule.js +183 -0
- package/validation/rules/ValuesOfCorrectTypeRule.mjs +164 -0
- package/validation/rules/VariablesAreInputTypesRule.d.ts +13 -0
- package/validation/rules/VariablesAreInputTypesRule.js +44 -0
- package/validation/rules/VariablesAreInputTypesRule.mjs +31 -0
- package/validation/rules/VariablesInAllowedPositionRule.d.ts +12 -0
- package/validation/rules/VariablesInAllowedPositionRule.js +114 -0
- package/validation/rules/VariablesInAllowedPositionRule.mjs +95 -0
- package/validation/rules/custom/NoDeprecatedCustomRule.d.ts +15 -0
- package/validation/rules/custom/NoDeprecatedCustomRule.js +121 -0
- package/validation/rules/custom/NoDeprecatedCustomRule.mjs +107 -0
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.d.ts +15 -0
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.js +39 -0
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.mjs +30 -0
- package/validation/specifiedRules.d.ts +12 -0
- package/validation/specifiedRules.js +160 -0
- package/validation/specifiedRules.mjs +123 -0
- package/validation/validate.d.ts +61 -0
- package/validation/validate.js +151 -0
- package/validation/validate.mjs +133 -0
- package/version.d.ts +13 -0
- package/version.js +25 -0
- package/version.mjs +17 -0
|
@@ -0,0 +1,516 @@
|
|
|
1
|
+
import { inspect } from '../jsutils/inspect.mjs';
|
|
2
|
+
import { invariant } from '../jsutils/invariant.mjs';
|
|
3
|
+
import { keyMap } from '../jsutils/keyMap.mjs';
|
|
4
|
+
import { print } from '../language/printer.mjs';
|
|
5
|
+
import {
|
|
6
|
+
isEnumType,
|
|
7
|
+
isInputObjectType,
|
|
8
|
+
isInterfaceType,
|
|
9
|
+
isListType,
|
|
10
|
+
isNamedType,
|
|
11
|
+
isNonNullType,
|
|
12
|
+
isObjectType,
|
|
13
|
+
isRequiredArgument,
|
|
14
|
+
isRequiredInputField,
|
|
15
|
+
isScalarType,
|
|
16
|
+
isUnionType,
|
|
17
|
+
} from '../type/definition.mjs';
|
|
18
|
+
import { isSpecifiedScalarType } from '../type/scalars.mjs';
|
|
19
|
+
import { astFromValue } from './astFromValue.mjs';
|
|
20
|
+
import { sortValueNode } from './sortValueNode.mjs';
|
|
21
|
+
export let BreakingChangeType;
|
|
22
|
+
|
|
23
|
+
(function (BreakingChangeType) {
|
|
24
|
+
BreakingChangeType['TYPE_REMOVED'] = 'TYPE_REMOVED';
|
|
25
|
+
BreakingChangeType['TYPE_CHANGED_KIND'] = 'TYPE_CHANGED_KIND';
|
|
26
|
+
BreakingChangeType['TYPE_REMOVED_FROM_UNION'] = 'TYPE_REMOVED_FROM_UNION';
|
|
27
|
+
BreakingChangeType['VALUE_REMOVED_FROM_ENUM'] = 'VALUE_REMOVED_FROM_ENUM';
|
|
28
|
+
BreakingChangeType['REQUIRED_INPUT_FIELD_ADDED'] =
|
|
29
|
+
'REQUIRED_INPUT_FIELD_ADDED';
|
|
30
|
+
BreakingChangeType['IMPLEMENTED_INTERFACE_REMOVED'] =
|
|
31
|
+
'IMPLEMENTED_INTERFACE_REMOVED';
|
|
32
|
+
BreakingChangeType['FIELD_REMOVED'] = 'FIELD_REMOVED';
|
|
33
|
+
BreakingChangeType['FIELD_CHANGED_KIND'] = 'FIELD_CHANGED_KIND';
|
|
34
|
+
BreakingChangeType['REQUIRED_ARG_ADDED'] = 'REQUIRED_ARG_ADDED';
|
|
35
|
+
BreakingChangeType['ARG_REMOVED'] = 'ARG_REMOVED';
|
|
36
|
+
BreakingChangeType['ARG_CHANGED_KIND'] = 'ARG_CHANGED_KIND';
|
|
37
|
+
BreakingChangeType['DIRECTIVE_REMOVED'] = 'DIRECTIVE_REMOVED';
|
|
38
|
+
BreakingChangeType['DIRECTIVE_ARG_REMOVED'] = 'DIRECTIVE_ARG_REMOVED';
|
|
39
|
+
BreakingChangeType['REQUIRED_DIRECTIVE_ARG_ADDED'] =
|
|
40
|
+
'REQUIRED_DIRECTIVE_ARG_ADDED';
|
|
41
|
+
BreakingChangeType['DIRECTIVE_REPEATABLE_REMOVED'] =
|
|
42
|
+
'DIRECTIVE_REPEATABLE_REMOVED';
|
|
43
|
+
BreakingChangeType['DIRECTIVE_LOCATION_REMOVED'] =
|
|
44
|
+
'DIRECTIVE_LOCATION_REMOVED';
|
|
45
|
+
})(BreakingChangeType || (BreakingChangeType = {}));
|
|
46
|
+
|
|
47
|
+
export let DangerousChangeType;
|
|
48
|
+
|
|
49
|
+
(function (DangerousChangeType) {
|
|
50
|
+
DangerousChangeType['VALUE_ADDED_TO_ENUM'] = 'VALUE_ADDED_TO_ENUM';
|
|
51
|
+
DangerousChangeType['TYPE_ADDED_TO_UNION'] = 'TYPE_ADDED_TO_UNION';
|
|
52
|
+
DangerousChangeType['OPTIONAL_INPUT_FIELD_ADDED'] =
|
|
53
|
+
'OPTIONAL_INPUT_FIELD_ADDED';
|
|
54
|
+
DangerousChangeType['OPTIONAL_ARG_ADDED'] = 'OPTIONAL_ARG_ADDED';
|
|
55
|
+
DangerousChangeType['IMPLEMENTED_INTERFACE_ADDED'] =
|
|
56
|
+
'IMPLEMENTED_INTERFACE_ADDED';
|
|
57
|
+
DangerousChangeType['ARG_DEFAULT_VALUE_CHANGE'] = 'ARG_DEFAULT_VALUE_CHANGE';
|
|
58
|
+
})(DangerousChangeType || (DangerousChangeType = {}));
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Given two schemas, returns an Array containing descriptions of all the types
|
|
62
|
+
* of breaking changes covered by the other functions down below.
|
|
63
|
+
*/
|
|
64
|
+
export function findBreakingChanges(oldSchema, newSchema) {
|
|
65
|
+
// @ts-expect-error
|
|
66
|
+
return findSchemaChanges(oldSchema, newSchema).filter(
|
|
67
|
+
(change) => change.type in BreakingChangeType,
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Given two schemas, returns an Array containing descriptions of all the types
|
|
72
|
+
* of potentially dangerous changes covered by the other functions down below.
|
|
73
|
+
*/
|
|
74
|
+
|
|
75
|
+
export function findDangerousChanges(oldSchema, newSchema) {
|
|
76
|
+
// @ts-expect-error
|
|
77
|
+
return findSchemaChanges(oldSchema, newSchema).filter(
|
|
78
|
+
(change) => change.type in DangerousChangeType,
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function findSchemaChanges(oldSchema, newSchema) {
|
|
83
|
+
return [
|
|
84
|
+
...findTypeChanges(oldSchema, newSchema),
|
|
85
|
+
...findDirectiveChanges(oldSchema, newSchema),
|
|
86
|
+
];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function findDirectiveChanges(oldSchema, newSchema) {
|
|
90
|
+
const schemaChanges = [];
|
|
91
|
+
const directivesDiff = diff(
|
|
92
|
+
oldSchema.getDirectives(),
|
|
93
|
+
newSchema.getDirectives(),
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
for (const oldDirective of directivesDiff.removed) {
|
|
97
|
+
schemaChanges.push({
|
|
98
|
+
type: BreakingChangeType.DIRECTIVE_REMOVED,
|
|
99
|
+
description: `${oldDirective.name} was removed.`,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
for (const [oldDirective, newDirective] of directivesDiff.persisted) {
|
|
104
|
+
const argsDiff = diff(oldDirective.args, newDirective.args);
|
|
105
|
+
|
|
106
|
+
for (const newArg of argsDiff.added) {
|
|
107
|
+
if (isRequiredArgument(newArg)) {
|
|
108
|
+
schemaChanges.push({
|
|
109
|
+
type: BreakingChangeType.REQUIRED_DIRECTIVE_ARG_ADDED,
|
|
110
|
+
description: `A required arg ${newArg.name} on directive ${oldDirective.name} was added.`,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
for (const oldArg of argsDiff.removed) {
|
|
116
|
+
schemaChanges.push({
|
|
117
|
+
type: BreakingChangeType.DIRECTIVE_ARG_REMOVED,
|
|
118
|
+
description: `${oldArg.name} was removed from ${oldDirective.name}.`,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (oldDirective.isRepeatable && !newDirective.isRepeatable) {
|
|
123
|
+
schemaChanges.push({
|
|
124
|
+
type: BreakingChangeType.DIRECTIVE_REPEATABLE_REMOVED,
|
|
125
|
+
description: `Repeatable flag was removed from ${oldDirective.name}.`,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
for (const location of oldDirective.locations) {
|
|
130
|
+
if (!newDirective.locations.includes(location)) {
|
|
131
|
+
schemaChanges.push({
|
|
132
|
+
type: BreakingChangeType.DIRECTIVE_LOCATION_REMOVED,
|
|
133
|
+
description: `${location} was removed from ${oldDirective.name}.`,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return schemaChanges;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function findTypeChanges(oldSchema, newSchema) {
|
|
143
|
+
const schemaChanges = [];
|
|
144
|
+
const typesDiff = diff(
|
|
145
|
+
Object.values(oldSchema.getTypeMap()),
|
|
146
|
+
Object.values(newSchema.getTypeMap()),
|
|
147
|
+
);
|
|
148
|
+
|
|
149
|
+
for (const oldType of typesDiff.removed) {
|
|
150
|
+
schemaChanges.push({
|
|
151
|
+
type: BreakingChangeType.TYPE_REMOVED,
|
|
152
|
+
description: isSpecifiedScalarType(oldType)
|
|
153
|
+
? `Standard scalar ${oldType.name} was removed because it is not referenced anymore.`
|
|
154
|
+
: `${oldType.name} was removed.`,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
for (const [oldType, newType] of typesDiff.persisted) {
|
|
159
|
+
if (isEnumType(oldType) && isEnumType(newType)) {
|
|
160
|
+
schemaChanges.push(...findEnumTypeChanges(oldType, newType));
|
|
161
|
+
} else if (isUnionType(oldType) && isUnionType(newType)) {
|
|
162
|
+
schemaChanges.push(...findUnionTypeChanges(oldType, newType));
|
|
163
|
+
} else if (isInputObjectType(oldType) && isInputObjectType(newType)) {
|
|
164
|
+
schemaChanges.push(...findInputObjectTypeChanges(oldType, newType));
|
|
165
|
+
} else if (isObjectType(oldType) && isObjectType(newType)) {
|
|
166
|
+
schemaChanges.push(
|
|
167
|
+
...findFieldChanges(oldType, newType),
|
|
168
|
+
...findImplementedInterfacesChanges(oldType, newType),
|
|
169
|
+
);
|
|
170
|
+
} else if (isInterfaceType(oldType) && isInterfaceType(newType)) {
|
|
171
|
+
schemaChanges.push(
|
|
172
|
+
...findFieldChanges(oldType, newType),
|
|
173
|
+
...findImplementedInterfacesChanges(oldType, newType),
|
|
174
|
+
);
|
|
175
|
+
} else if (oldType.constructor !== newType.constructor) {
|
|
176
|
+
schemaChanges.push({
|
|
177
|
+
type: BreakingChangeType.TYPE_CHANGED_KIND,
|
|
178
|
+
description:
|
|
179
|
+
`${oldType.name} changed from ` +
|
|
180
|
+
`${typeKindName(oldType)} to ${typeKindName(newType)}.`,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
return schemaChanges;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
function findInputObjectTypeChanges(oldType, newType) {
|
|
189
|
+
const schemaChanges = [];
|
|
190
|
+
const fieldsDiff = diff(
|
|
191
|
+
Object.values(oldType.getFields()),
|
|
192
|
+
Object.values(newType.getFields()),
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
for (const newField of fieldsDiff.added) {
|
|
196
|
+
if (isRequiredInputField(newField)) {
|
|
197
|
+
schemaChanges.push({
|
|
198
|
+
type: BreakingChangeType.REQUIRED_INPUT_FIELD_ADDED,
|
|
199
|
+
description: `A required field ${newField.name} on input type ${oldType.name} was added.`,
|
|
200
|
+
});
|
|
201
|
+
} else {
|
|
202
|
+
schemaChanges.push({
|
|
203
|
+
type: DangerousChangeType.OPTIONAL_INPUT_FIELD_ADDED,
|
|
204
|
+
description: `An optional field ${newField.name} on input type ${oldType.name} was added.`,
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
for (const oldField of fieldsDiff.removed) {
|
|
210
|
+
schemaChanges.push({
|
|
211
|
+
type: BreakingChangeType.FIELD_REMOVED,
|
|
212
|
+
description: `${oldType.name}.${oldField.name} was removed.`,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
for (const [oldField, newField] of fieldsDiff.persisted) {
|
|
217
|
+
const isSafe = isChangeSafeForInputObjectFieldOrFieldArg(
|
|
218
|
+
oldField.type,
|
|
219
|
+
newField.type,
|
|
220
|
+
);
|
|
221
|
+
|
|
222
|
+
if (!isSafe) {
|
|
223
|
+
schemaChanges.push({
|
|
224
|
+
type: BreakingChangeType.FIELD_CHANGED_KIND,
|
|
225
|
+
description:
|
|
226
|
+
`${oldType.name}.${oldField.name} changed type from ` +
|
|
227
|
+
`${String(oldField.type)} to ${String(newField.type)}.`,
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
return schemaChanges;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
function findUnionTypeChanges(oldType, newType) {
|
|
236
|
+
const schemaChanges = [];
|
|
237
|
+
const possibleTypesDiff = diff(oldType.getTypes(), newType.getTypes());
|
|
238
|
+
|
|
239
|
+
for (const newPossibleType of possibleTypesDiff.added) {
|
|
240
|
+
schemaChanges.push({
|
|
241
|
+
type: DangerousChangeType.TYPE_ADDED_TO_UNION,
|
|
242
|
+
description: `${newPossibleType.name} was added to union type ${oldType.name}.`,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
for (const oldPossibleType of possibleTypesDiff.removed) {
|
|
247
|
+
schemaChanges.push({
|
|
248
|
+
type: BreakingChangeType.TYPE_REMOVED_FROM_UNION,
|
|
249
|
+
description: `${oldPossibleType.name} was removed from union type ${oldType.name}.`,
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
return schemaChanges;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
function findEnumTypeChanges(oldType, newType) {
|
|
257
|
+
const schemaChanges = [];
|
|
258
|
+
const valuesDiff = diff(oldType.getValues(), newType.getValues());
|
|
259
|
+
|
|
260
|
+
for (const newValue of valuesDiff.added) {
|
|
261
|
+
schemaChanges.push({
|
|
262
|
+
type: DangerousChangeType.VALUE_ADDED_TO_ENUM,
|
|
263
|
+
description: `${newValue.name} was added to enum type ${oldType.name}.`,
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
for (const oldValue of valuesDiff.removed) {
|
|
268
|
+
schemaChanges.push({
|
|
269
|
+
type: BreakingChangeType.VALUE_REMOVED_FROM_ENUM,
|
|
270
|
+
description: `${oldValue.name} was removed from enum type ${oldType.name}.`,
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
return schemaChanges;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
function findImplementedInterfacesChanges(oldType, newType) {
|
|
278
|
+
const schemaChanges = [];
|
|
279
|
+
const interfacesDiff = diff(oldType.getInterfaces(), newType.getInterfaces());
|
|
280
|
+
|
|
281
|
+
for (const newInterface of interfacesDiff.added) {
|
|
282
|
+
schemaChanges.push({
|
|
283
|
+
type: DangerousChangeType.IMPLEMENTED_INTERFACE_ADDED,
|
|
284
|
+
description: `${newInterface.name} added to interfaces implemented by ${oldType.name}.`,
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
for (const oldInterface of interfacesDiff.removed) {
|
|
289
|
+
schemaChanges.push({
|
|
290
|
+
type: BreakingChangeType.IMPLEMENTED_INTERFACE_REMOVED,
|
|
291
|
+
description: `${oldType.name} no longer implements interface ${oldInterface.name}.`,
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
return schemaChanges;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
function findFieldChanges(oldType, newType) {
|
|
299
|
+
const schemaChanges = [];
|
|
300
|
+
const fieldsDiff = diff(
|
|
301
|
+
Object.values(oldType.getFields()),
|
|
302
|
+
Object.values(newType.getFields()),
|
|
303
|
+
);
|
|
304
|
+
|
|
305
|
+
for (const oldField of fieldsDiff.removed) {
|
|
306
|
+
schemaChanges.push({
|
|
307
|
+
type: BreakingChangeType.FIELD_REMOVED,
|
|
308
|
+
description: `${oldType.name}.${oldField.name} was removed.`,
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
for (const [oldField, newField] of fieldsDiff.persisted) {
|
|
313
|
+
schemaChanges.push(...findArgChanges(oldType, oldField, newField));
|
|
314
|
+
const isSafe = isChangeSafeForObjectOrInterfaceField(
|
|
315
|
+
oldField.type,
|
|
316
|
+
newField.type,
|
|
317
|
+
);
|
|
318
|
+
|
|
319
|
+
if (!isSafe) {
|
|
320
|
+
schemaChanges.push({
|
|
321
|
+
type: BreakingChangeType.FIELD_CHANGED_KIND,
|
|
322
|
+
description:
|
|
323
|
+
`${oldType.name}.${oldField.name} changed type from ` +
|
|
324
|
+
`${String(oldField.type)} to ${String(newField.type)}.`,
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
return schemaChanges;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
function findArgChanges(oldType, oldField, newField) {
|
|
333
|
+
const schemaChanges = [];
|
|
334
|
+
const argsDiff = diff(oldField.args, newField.args);
|
|
335
|
+
|
|
336
|
+
for (const oldArg of argsDiff.removed) {
|
|
337
|
+
schemaChanges.push({
|
|
338
|
+
type: BreakingChangeType.ARG_REMOVED,
|
|
339
|
+
description: `${oldType.name}.${oldField.name} arg ${oldArg.name} was removed.`,
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
for (const [oldArg, newArg] of argsDiff.persisted) {
|
|
344
|
+
const isSafe = isChangeSafeForInputObjectFieldOrFieldArg(
|
|
345
|
+
oldArg.type,
|
|
346
|
+
newArg.type,
|
|
347
|
+
);
|
|
348
|
+
|
|
349
|
+
if (!isSafe) {
|
|
350
|
+
schemaChanges.push({
|
|
351
|
+
type: BreakingChangeType.ARG_CHANGED_KIND,
|
|
352
|
+
description:
|
|
353
|
+
`${oldType.name}.${oldField.name} arg ${oldArg.name} has changed type from ` +
|
|
354
|
+
`${String(oldArg.type)} to ${String(newArg.type)}.`,
|
|
355
|
+
});
|
|
356
|
+
} else if (oldArg.defaultValue !== undefined) {
|
|
357
|
+
if (newArg.defaultValue === undefined) {
|
|
358
|
+
schemaChanges.push({
|
|
359
|
+
type: DangerousChangeType.ARG_DEFAULT_VALUE_CHANGE,
|
|
360
|
+
description: `${oldType.name}.${oldField.name} arg ${oldArg.name} defaultValue was removed.`,
|
|
361
|
+
});
|
|
362
|
+
} else {
|
|
363
|
+
// Since we looking only for client's observable changes we should
|
|
364
|
+
// compare default values in the same representation as they are
|
|
365
|
+
// represented inside introspection.
|
|
366
|
+
const oldValueStr = stringifyValue(oldArg.defaultValue, oldArg.type);
|
|
367
|
+
const newValueStr = stringifyValue(newArg.defaultValue, newArg.type);
|
|
368
|
+
|
|
369
|
+
if (oldValueStr !== newValueStr) {
|
|
370
|
+
schemaChanges.push({
|
|
371
|
+
type: DangerousChangeType.ARG_DEFAULT_VALUE_CHANGE,
|
|
372
|
+
description: `${oldType.name}.${oldField.name} arg ${oldArg.name} has changed defaultValue from ${oldValueStr} to ${newValueStr}.`,
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
for (const newArg of argsDiff.added) {
|
|
380
|
+
if (isRequiredArgument(newArg)) {
|
|
381
|
+
schemaChanges.push({
|
|
382
|
+
type: BreakingChangeType.REQUIRED_ARG_ADDED,
|
|
383
|
+
description: `A required arg ${newArg.name} on ${oldType.name}.${oldField.name} was added.`,
|
|
384
|
+
});
|
|
385
|
+
} else {
|
|
386
|
+
schemaChanges.push({
|
|
387
|
+
type: DangerousChangeType.OPTIONAL_ARG_ADDED,
|
|
388
|
+
description: `An optional arg ${newArg.name} on ${oldType.name}.${oldField.name} was added.`,
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
return schemaChanges;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
function isChangeSafeForObjectOrInterfaceField(oldType, newType) {
|
|
397
|
+
if (isListType(oldType)) {
|
|
398
|
+
return (
|
|
399
|
+
// if they're both lists, make sure the underlying types are compatible
|
|
400
|
+
(isListType(newType) &&
|
|
401
|
+
isChangeSafeForObjectOrInterfaceField(
|
|
402
|
+
oldType.ofType,
|
|
403
|
+
newType.ofType,
|
|
404
|
+
)) || // moving from nullable to non-null of the same underlying type is safe
|
|
405
|
+
(isNonNullType(newType) &&
|
|
406
|
+
isChangeSafeForObjectOrInterfaceField(oldType, newType.ofType))
|
|
407
|
+
);
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
if (isNonNullType(oldType)) {
|
|
411
|
+
// if they're both non-null, make sure the underlying types are compatible
|
|
412
|
+
return (
|
|
413
|
+
isNonNullType(newType) &&
|
|
414
|
+
isChangeSafeForObjectOrInterfaceField(oldType.ofType, newType.ofType)
|
|
415
|
+
);
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
return (
|
|
419
|
+
// if they're both named types, see if their names are equivalent
|
|
420
|
+
(isNamedType(newType) && oldType.name === newType.name) || // moving from nullable to non-null of the same underlying type is safe
|
|
421
|
+
(isNonNullType(newType) &&
|
|
422
|
+
isChangeSafeForObjectOrInterfaceField(oldType, newType.ofType))
|
|
423
|
+
);
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
function isChangeSafeForInputObjectFieldOrFieldArg(oldType, newType) {
|
|
427
|
+
if (isListType(oldType)) {
|
|
428
|
+
// if they're both lists, make sure the underlying types are compatible
|
|
429
|
+
return (
|
|
430
|
+
isListType(newType) &&
|
|
431
|
+
isChangeSafeForInputObjectFieldOrFieldArg(oldType.ofType, newType.ofType)
|
|
432
|
+
);
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
if (isNonNullType(oldType)) {
|
|
436
|
+
return (
|
|
437
|
+
// if they're both non-null, make sure the underlying types are
|
|
438
|
+
// compatible
|
|
439
|
+
(isNonNullType(newType) &&
|
|
440
|
+
isChangeSafeForInputObjectFieldOrFieldArg(
|
|
441
|
+
oldType.ofType,
|
|
442
|
+
newType.ofType,
|
|
443
|
+
)) || // moving from non-null to nullable of the same underlying type is safe
|
|
444
|
+
(!isNonNullType(newType) &&
|
|
445
|
+
isChangeSafeForInputObjectFieldOrFieldArg(oldType.ofType, newType))
|
|
446
|
+
);
|
|
447
|
+
} // if they're both named types, see if their names are equivalent
|
|
448
|
+
|
|
449
|
+
return isNamedType(newType) && oldType.name === newType.name;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
function typeKindName(type) {
|
|
453
|
+
if (isScalarType(type)) {
|
|
454
|
+
return 'a Scalar type';
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
if (isObjectType(type)) {
|
|
458
|
+
return 'an Object type';
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
if (isInterfaceType(type)) {
|
|
462
|
+
return 'an Interface type';
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
if (isUnionType(type)) {
|
|
466
|
+
return 'a Union type';
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
if (isEnumType(type)) {
|
|
470
|
+
return 'an Enum type';
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
if (isInputObjectType(type)) {
|
|
474
|
+
return 'an Input type';
|
|
475
|
+
}
|
|
476
|
+
/* c8 ignore next 3 */
|
|
477
|
+
// Not reachable, all possible types have been considered.
|
|
478
|
+
|
|
479
|
+
false || invariant(false, 'Unexpected type: ' + inspect(type));
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
function stringifyValue(value, type) {
|
|
483
|
+
const ast = astFromValue(value, type);
|
|
484
|
+
ast != null || invariant(false);
|
|
485
|
+
return print(sortValueNode(ast));
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
function diff(oldArray, newArray) {
|
|
489
|
+
const added = [];
|
|
490
|
+
const removed = [];
|
|
491
|
+
const persisted = [];
|
|
492
|
+
const oldMap = keyMap(oldArray, ({ name }) => name);
|
|
493
|
+
const newMap = keyMap(newArray, ({ name }) => name);
|
|
494
|
+
|
|
495
|
+
for (const oldItem of oldArray) {
|
|
496
|
+
const newItem = newMap[oldItem.name];
|
|
497
|
+
|
|
498
|
+
if (newItem === undefined) {
|
|
499
|
+
removed.push(oldItem);
|
|
500
|
+
} else {
|
|
501
|
+
persisted.push([oldItem, newItem]);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
for (const newItem of newArray) {
|
|
506
|
+
if (oldMap[newItem.name] === undefined) {
|
|
507
|
+
added.push(newItem);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
return {
|
|
512
|
+
added,
|
|
513
|
+
persisted,
|
|
514
|
+
removed,
|
|
515
|
+
};
|
|
516
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import type { Maybe } from '../jsutils/Maybe';
|
|
2
|
+
import type { DirectiveLocation } from '../language/directiveLocation';
|
|
3
|
+
export interface IntrospectionOptions {
|
|
4
|
+
/**
|
|
5
|
+
* Whether to include descriptions in the introspection result.
|
|
6
|
+
* Default: true
|
|
7
|
+
*/
|
|
8
|
+
descriptions?: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Whether to include `specifiedByURL` in the introspection result.
|
|
11
|
+
* Default: false
|
|
12
|
+
*/
|
|
13
|
+
specifiedByUrl?: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Whether to include `isRepeatable` flag on directives.
|
|
16
|
+
* Default: false
|
|
17
|
+
*/
|
|
18
|
+
directiveIsRepeatable?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Whether to include `description` field on schema.
|
|
21
|
+
* Default: false
|
|
22
|
+
*/
|
|
23
|
+
schemaDescription?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Whether target GraphQL server support deprecation of input values.
|
|
26
|
+
* Default: false
|
|
27
|
+
*/
|
|
28
|
+
inputValueDeprecation?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Produce the GraphQL query recommended for a full schema introspection.
|
|
32
|
+
* Accepts optional IntrospectionOptions.
|
|
33
|
+
*/
|
|
34
|
+
export declare function getIntrospectionQuery(
|
|
35
|
+
options?: IntrospectionOptions,
|
|
36
|
+
): string;
|
|
37
|
+
export interface IntrospectionQuery {
|
|
38
|
+
readonly __schema: IntrospectionSchema;
|
|
39
|
+
}
|
|
40
|
+
export interface IntrospectionSchema {
|
|
41
|
+
readonly description?: Maybe<string>;
|
|
42
|
+
readonly queryType: IntrospectionNamedTypeRef<IntrospectionObjectType>;
|
|
43
|
+
readonly mutationType: Maybe<
|
|
44
|
+
IntrospectionNamedTypeRef<IntrospectionObjectType>
|
|
45
|
+
>;
|
|
46
|
+
readonly subscriptionType: Maybe<
|
|
47
|
+
IntrospectionNamedTypeRef<IntrospectionObjectType>
|
|
48
|
+
>;
|
|
49
|
+
readonly types: ReadonlyArray<IntrospectionType>;
|
|
50
|
+
readonly directives: ReadonlyArray<IntrospectionDirective>;
|
|
51
|
+
}
|
|
52
|
+
export declare type IntrospectionType =
|
|
53
|
+
| IntrospectionScalarType
|
|
54
|
+
| IntrospectionObjectType
|
|
55
|
+
| IntrospectionInterfaceType
|
|
56
|
+
| IntrospectionUnionType
|
|
57
|
+
| IntrospectionEnumType
|
|
58
|
+
| IntrospectionInputObjectType;
|
|
59
|
+
export declare type IntrospectionOutputType =
|
|
60
|
+
| IntrospectionScalarType
|
|
61
|
+
| IntrospectionObjectType
|
|
62
|
+
| IntrospectionInterfaceType
|
|
63
|
+
| IntrospectionUnionType
|
|
64
|
+
| IntrospectionEnumType;
|
|
65
|
+
export declare type IntrospectionInputType =
|
|
66
|
+
| IntrospectionScalarType
|
|
67
|
+
| IntrospectionEnumType
|
|
68
|
+
| IntrospectionInputObjectType;
|
|
69
|
+
export interface IntrospectionScalarType {
|
|
70
|
+
readonly kind: 'SCALAR';
|
|
71
|
+
readonly name: string;
|
|
72
|
+
readonly description?: Maybe<string>;
|
|
73
|
+
readonly specifiedByURL?: Maybe<string>;
|
|
74
|
+
}
|
|
75
|
+
export interface IntrospectionObjectType {
|
|
76
|
+
readonly kind: 'OBJECT';
|
|
77
|
+
readonly name: string;
|
|
78
|
+
readonly description?: Maybe<string>;
|
|
79
|
+
readonly fields: ReadonlyArray<IntrospectionField>;
|
|
80
|
+
readonly interfaces: ReadonlyArray<
|
|
81
|
+
IntrospectionNamedTypeRef<IntrospectionInterfaceType>
|
|
82
|
+
>;
|
|
83
|
+
}
|
|
84
|
+
export interface IntrospectionInterfaceType {
|
|
85
|
+
readonly kind: 'INTERFACE';
|
|
86
|
+
readonly name: string;
|
|
87
|
+
readonly description?: Maybe<string>;
|
|
88
|
+
readonly fields: ReadonlyArray<IntrospectionField>;
|
|
89
|
+
readonly interfaces: ReadonlyArray<
|
|
90
|
+
IntrospectionNamedTypeRef<IntrospectionInterfaceType>
|
|
91
|
+
>;
|
|
92
|
+
readonly possibleTypes: ReadonlyArray<
|
|
93
|
+
IntrospectionNamedTypeRef<IntrospectionObjectType>
|
|
94
|
+
>;
|
|
95
|
+
}
|
|
96
|
+
export interface IntrospectionUnionType {
|
|
97
|
+
readonly kind: 'UNION';
|
|
98
|
+
readonly name: string;
|
|
99
|
+
readonly description?: Maybe<string>;
|
|
100
|
+
readonly possibleTypes: ReadonlyArray<
|
|
101
|
+
IntrospectionNamedTypeRef<IntrospectionObjectType>
|
|
102
|
+
>;
|
|
103
|
+
}
|
|
104
|
+
export interface IntrospectionEnumType {
|
|
105
|
+
readonly kind: 'ENUM';
|
|
106
|
+
readonly name: string;
|
|
107
|
+
readonly description?: Maybe<string>;
|
|
108
|
+
readonly enumValues: ReadonlyArray<IntrospectionEnumValue>;
|
|
109
|
+
}
|
|
110
|
+
export interface IntrospectionInputObjectType {
|
|
111
|
+
readonly kind: 'INPUT_OBJECT';
|
|
112
|
+
readonly name: string;
|
|
113
|
+
readonly description?: Maybe<string>;
|
|
114
|
+
readonly inputFields: ReadonlyArray<IntrospectionInputValue>;
|
|
115
|
+
}
|
|
116
|
+
export interface IntrospectionListTypeRef<
|
|
117
|
+
T extends IntrospectionTypeRef = IntrospectionTypeRef,
|
|
118
|
+
> {
|
|
119
|
+
readonly kind: 'LIST';
|
|
120
|
+
readonly ofType: T;
|
|
121
|
+
}
|
|
122
|
+
export interface IntrospectionNonNullTypeRef<
|
|
123
|
+
T extends IntrospectionTypeRef = IntrospectionTypeRef,
|
|
124
|
+
> {
|
|
125
|
+
readonly kind: 'NON_NULL';
|
|
126
|
+
readonly ofType: T;
|
|
127
|
+
}
|
|
128
|
+
export declare type IntrospectionTypeRef =
|
|
129
|
+
| IntrospectionNamedTypeRef
|
|
130
|
+
| IntrospectionListTypeRef
|
|
131
|
+
| IntrospectionNonNullTypeRef<
|
|
132
|
+
IntrospectionNamedTypeRef | IntrospectionListTypeRef
|
|
133
|
+
>;
|
|
134
|
+
export declare type IntrospectionOutputTypeRef =
|
|
135
|
+
| IntrospectionNamedTypeRef<IntrospectionOutputType>
|
|
136
|
+
| IntrospectionListTypeRef<IntrospectionOutputTypeRef>
|
|
137
|
+
| IntrospectionNonNullTypeRef<
|
|
138
|
+
| IntrospectionNamedTypeRef<IntrospectionOutputType>
|
|
139
|
+
| IntrospectionListTypeRef<IntrospectionOutputTypeRef>
|
|
140
|
+
>;
|
|
141
|
+
export declare type IntrospectionInputTypeRef =
|
|
142
|
+
| IntrospectionNamedTypeRef<IntrospectionInputType>
|
|
143
|
+
| IntrospectionListTypeRef<IntrospectionInputTypeRef>
|
|
144
|
+
| IntrospectionNonNullTypeRef<
|
|
145
|
+
| IntrospectionNamedTypeRef<IntrospectionInputType>
|
|
146
|
+
| IntrospectionListTypeRef<IntrospectionInputTypeRef>
|
|
147
|
+
>;
|
|
148
|
+
export interface IntrospectionNamedTypeRef<
|
|
149
|
+
T extends IntrospectionType = IntrospectionType,
|
|
150
|
+
> {
|
|
151
|
+
readonly kind: T['kind'];
|
|
152
|
+
readonly name: string;
|
|
153
|
+
}
|
|
154
|
+
export interface IntrospectionField {
|
|
155
|
+
readonly name: string;
|
|
156
|
+
readonly description?: Maybe<string>;
|
|
157
|
+
readonly args: ReadonlyArray<IntrospectionInputValue>;
|
|
158
|
+
readonly type: IntrospectionOutputTypeRef;
|
|
159
|
+
readonly isDeprecated: boolean;
|
|
160
|
+
readonly deprecationReason: Maybe<string>;
|
|
161
|
+
}
|
|
162
|
+
export interface IntrospectionInputValue {
|
|
163
|
+
readonly name: string;
|
|
164
|
+
readonly description?: Maybe<string>;
|
|
165
|
+
readonly type: IntrospectionInputTypeRef;
|
|
166
|
+
readonly defaultValue: Maybe<string>;
|
|
167
|
+
readonly isDeprecated?: boolean;
|
|
168
|
+
readonly deprecationReason?: Maybe<string>;
|
|
169
|
+
}
|
|
170
|
+
export interface IntrospectionEnumValue {
|
|
171
|
+
readonly name: string;
|
|
172
|
+
readonly description?: Maybe<string>;
|
|
173
|
+
readonly isDeprecated: boolean;
|
|
174
|
+
readonly deprecationReason: Maybe<string>;
|
|
175
|
+
}
|
|
176
|
+
export interface IntrospectionDirective {
|
|
177
|
+
readonly name: string;
|
|
178
|
+
readonly description?: Maybe<string>;
|
|
179
|
+
readonly isRepeatable?: boolean;
|
|
180
|
+
readonly locations: ReadonlyArray<DirectiveLocation>;
|
|
181
|
+
readonly args: ReadonlyArray<IntrospectionInputValue>;
|
|
182
|
+
}
|