graphql 14.1.1 → 14.3.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 +1 -1
- package/README.md +1 -1
- package/error/GraphQLError.js +12 -10
- package/error/GraphQLError.js.flow +11 -6
- package/error/GraphQLError.mjs +20 -3
- package/error/formatError.js +2 -2
- package/error/formatError.js.flow +3 -3
- package/error/formatError.mjs +2 -2
- package/error/index.js +1 -1
- package/error/index.js.flow +5 -2
- package/error/index.mjs +2 -2
- package/error/locatedError.js +2 -2
- package/error/locatedError.js.flow +2 -2
- package/error/locatedError.mjs +2 -2
- package/error/printError.js +2 -2
- package/error/printError.js.flow +4 -5
- package/error/printError.mjs +2 -2
- package/error/syntaxError.js +2 -2
- package/error/syntaxError.js.flow +2 -2
- package/error/syntaxError.mjs +2 -2
- package/execution/execute.js +52 -37
- package/execution/execute.js.flow +66 -51
- package/execution/execute.mjs +50 -38
- package/execution/index.js +7 -1
- package/execution/index.js.flow +9 -4
- package/execution/index.mjs +3 -3
- package/execution/values.js +11 -11
- package/execution/values.js.flow +23 -19
- package/execution/values.mjs +11 -11
- package/graphql.js +13 -9
- package/graphql.js.flow +28 -10
- package/graphql.mjs +10 -9
- package/index.js +83 -53
- package/index.js.flow +60 -47
- package/index.mjs +26 -23
- package/jsutils/ObjMap.js +1 -1
- package/jsutils/ObjMap.js.flow +1 -1
- package/jsutils/ObjMap.mjs +1 -0
- package/jsutils/PromiseOrValue.js +1 -0
- package/jsutils/{MaybePromise.js.flow → PromiseOrValue.js.flow} +2 -2
- package/jsutils/PromiseOrValue.mjs +1 -0
- package/jsutils/dedent.js +2 -2
- package/jsutils/dedent.js.flow +1 -1
- package/jsutils/dedent.mjs +2 -2
- package/jsutils/defineToJSON.js +2 -2
- package/jsutils/defineToJSON.js.flow +1 -1
- package/jsutils/defineToJSON.mjs +2 -2
- package/jsutils/defineToStringTag.js +2 -2
- package/jsutils/defineToStringTag.js.flow +1 -1
- package/jsutils/defineToStringTag.mjs +2 -2
- package/jsutils/inspect.js +94 -19
- package/jsutils/inspect.js.flow +98 -20
- package/jsutils/inspect.mjs +94 -20
- package/jsutils/instanceOf.js +2 -2
- package/jsutils/instanceOf.js.flow +1 -1
- package/jsutils/instanceOf.mjs +2 -2
- package/jsutils/invariant.js +5 -3
- package/jsutils/invariant.js.flow +3 -2
- package/jsutils/invariant.mjs +5 -3
- package/jsutils/isInvalid.js +2 -2
- package/jsutils/isInvalid.js.flow +1 -1
- package/jsutils/isInvalid.mjs +2 -2
- package/jsutils/isNullish.js +2 -2
- package/jsutils/isNullish.js.flow +1 -1
- package/jsutils/isNullish.mjs +2 -2
- package/jsutils/isPromise.js +2 -2
- package/jsutils/isPromise.js.flow +1 -1
- package/jsutils/isPromise.mjs +2 -2
- package/jsutils/keyMap.js +4 -3
- package/jsutils/keyMap.js.flow +6 -6
- package/jsutils/keyMap.mjs +4 -3
- package/jsutils/keyValMap.js +4 -3
- package/jsutils/keyValMap.js.flow +6 -6
- package/jsutils/keyValMap.mjs +4 -3
- package/jsutils/mapValue.js +2 -2
- package/jsutils/mapValue.js.flow +2 -2
- package/jsutils/mapValue.mjs +2 -2
- package/jsutils/memoize3.js +3 -3
- package/jsutils/memoize3.js.flow +2 -2
- package/jsutils/memoize3.mjs +3 -3
- package/jsutils/nodejsCustomInspectSymbol.js +2 -2
- package/jsutils/nodejsCustomInspectSymbol.js.flow +1 -1
- package/jsutils/nodejsCustomInspectSymbol.mjs +2 -2
- package/jsutils/orList.js +2 -2
- package/jsutils/orList.js.flow +1 -1
- package/jsutils/orList.mjs +2 -2
- package/jsutils/promiseForObject.js +2 -2
- package/jsutils/promiseForObject.js.flow +2 -2
- package/jsutils/promiseForObject.mjs +2 -2
- package/jsutils/promiseReduce.js +2 -2
- package/jsutils/promiseReduce.js.flow +5 -5
- package/jsutils/promiseReduce.mjs +2 -2
- package/jsutils/quotedOrList.js +2 -2
- package/jsutils/quotedOrList.js.flow +1 -1
- package/jsutils/quotedOrList.mjs +2 -2
- package/jsutils/suggestionList.js +2 -2
- package/jsutils/suggestionList.js.flow +1 -1
- package/jsutils/suggestionList.mjs +2 -2
- package/language/ast.js +1 -1
- package/language/ast.js.flow +3 -3
- package/language/ast.mjs +1 -0
- package/language/blockString.js +114 -0
- package/language/blockString.js.flow +102 -0
- package/language/blockString.mjs +104 -0
- package/language/directiveLocation.js +2 -2
- package/language/directiveLocation.js.flow +1 -1
- package/language/directiveLocation.mjs +2 -2
- package/language/index.js +9 -9
- package/language/index.js.flow +10 -5
- package/language/index.mjs +3 -3
- package/language/kinds.js +2 -2
- package/language/kinds.js.flow +1 -1
- package/language/kinds.mjs +2 -2
- package/language/lexer.js +52 -44
- package/language/lexer.js.flow +65 -54
- package/language/lexer.mjs +49 -43
- package/language/location.js +2 -2
- package/language/location.js.flow +2 -2
- package/language/location.mjs +2 -2
- package/language/parser.js +75 -67
- package/language/parser.js.flow +138 -127
- package/language/parser.mjs +76 -68
- package/language/predicates.js +2 -2
- package/language/predicates.js.flow +2 -2
- package/language/predicates.mjs +2 -2
- package/language/printer.js +6 -14
- package/language/printer.js.flow +8 -17
- package/language/printer.mjs +5 -14
- package/language/source.js +2 -2
- package/language/source.js.flow +1 -1
- package/language/source.mjs +2 -2
- package/language/visitor.js +4 -6
- package/language/visitor.js.flow +3 -3
- package/language/visitor.mjs +4 -6
- package/package.json +1 -1
- package/polyfills/find.js +2 -2
- package/polyfills/find.js.flow +1 -1
- package/polyfills/find.mjs +2 -2
- package/polyfills/flatMap.js +38 -0
- package/polyfills/flatMap.js.flow +34 -0
- package/polyfills/flatMap.mjs +30 -0
- package/polyfills/isFinite.js +2 -2
- package/polyfills/isFinite.js.flow +1 -1
- package/polyfills/isFinite.mjs +2 -2
- package/polyfills/isInteger.js +2 -2
- package/polyfills/isInteger.js.flow +1 -1
- package/polyfills/isInteger.mjs +2 -2
- package/polyfills/objectEntries.js +2 -2
- package/polyfills/objectEntries.js.flow +2 -2
- package/polyfills/objectEntries.mjs +2 -2
- package/polyfills/objectValues.js +2 -2
- package/polyfills/objectValues.js.flow +2 -2
- package/polyfills/objectValues.mjs +2 -2
- package/subscription/asyncIteratorReject.js +1 -1
- package/subscription/asyncIteratorReject.js.flow +1 -1
- package/subscription/asyncIteratorReject.mjs +2 -2
- package/subscription/index.js +1 -1
- package/subscription/index.js.flow +1 -1
- package/subscription/index.mjs +2 -2
- package/subscription/mapAsyncIterator.js +1 -1
- package/subscription/mapAsyncIterator.js.flow +5 -5
- package/subscription/mapAsyncIterator.mjs +2 -2
- package/subscription/subscribe.js +2 -2
- package/subscription/subscribe.js.flow +6 -6
- package/subscription/subscribe.mjs +2 -2
- package/type/definition.js +138 -22
- package/type/definition.js.flow +184 -36
- package/type/definition.mjs +136 -23
- package/type/directives.js +14 -3
- package/type/directives.js.flow +24 -11
- package/type/directives.mjs +16 -5
- package/type/index.js +7 -7
- package/type/index.js.flow +8 -4
- package/type/index.mjs +10 -6
- package/type/introspection.js +14 -9
- package/type/introspection.js.flow +12 -18
- package/type/introspection.mjs +14 -9
- package/type/scalars.js +5 -4
- package/type/scalars.js.flow +4 -10
- package/type/scalars.mjs +7 -6
- package/type/schema.js +55 -3
- package/type/schema.js.flow +73 -17
- package/type/schema.mjs +56 -4
- package/type/validate.js +19 -47
- package/type/validate.js.flow +17 -29
- package/type/validate.mjs +18 -47
- package/utilities/TypeInfo.js +93 -73
- package/utilities/TypeInfo.js.flow +30 -23
- package/utilities/TypeInfo.mjs +93 -73
- package/utilities/assertValidName.js +2 -2
- package/utilities/assertValidName.js.flow +2 -2
- package/utilities/assertValidName.mjs +2 -2
- package/utilities/astFromValue.js +5 -4
- package/utilities/astFromValue.js.flow +8 -7
- package/utilities/astFromValue.mjs +7 -6
- package/utilities/buildASTSchema.js +63 -62
- package/utilities/buildASTSchema.js.flow +92 -108
- package/utilities/buildASTSchema.mjs +61 -62
- package/utilities/buildClientSchema.js +38 -45
- package/utilities/buildClientSchema.js.flow +66 -79
- package/utilities/buildClientSchema.mjs +37 -44
- package/utilities/coerceValue.js +6 -7
- package/utilities/coerceValue.js.flow +5 -4
- package/utilities/coerceValue.mjs +7 -8
- package/utilities/concatAST.js +9 -13
- package/utilities/concatAST.js.flow +4 -10
- package/utilities/concatAST.mjs +6 -13
- package/utilities/extendSchema.js +219 -511
- package/utilities/extendSchema.js.flow +195 -304
- package/utilities/extendSchema.mjs +218 -512
- package/utilities/findBreakingChanges.js +54 -95
- package/utilities/findBreakingChanges.js.flow +49 -47
- package/utilities/findBreakingChanges.mjs +80 -95
- package/utilities/findDeprecatedUsages.js +4 -4
- package/utilities/findDeprecatedUsages.js.flow +5 -5
- package/utilities/findDeprecatedUsages.mjs +4 -4
- package/utilities/getOperationAST.js +2 -2
- package/utilities/getOperationAST.js.flow +5 -2
- package/utilities/getOperationAST.mjs +2 -2
- package/utilities/getOperationRootType.js +24 -24
- package/utilities/getOperationRootType.js.flow +40 -35
- package/utilities/getOperationRootType.mjs +24 -24
- package/utilities/index.js +9 -1
- package/utilities/index.js.flow +13 -6
- package/utilities/index.mjs +13 -8
- package/utilities/introspectionFromSchema.js +6 -4
- package/utilities/introspectionFromSchema.js.flow +8 -7
- package/utilities/introspectionFromSchema.mjs +6 -5
- package/utilities/introspectionQuery.js +2 -2
- package/utilities/introspectionQuery.js.flow +2 -2
- package/utilities/introspectionQuery.mjs +2 -2
- package/utilities/isValidJSValue.js +4 -2
- package/utilities/isValidJSValue.js.flow +3 -2
- package/utilities/isValidJSValue.mjs +4 -2
- package/utilities/isValidLiteralValue.js +2 -2
- package/utilities/isValidLiteralValue.js.flow +4 -4
- package/utilities/isValidLiteralValue.mjs +2 -2
- package/utilities/lexicographicSortSchema.js +84 -123
- package/utilities/lexicographicSortSchema.js.flow +68 -96
- package/utilities/lexicographicSortSchema.mjs +84 -123
- package/utilities/schemaPrinter.js +47 -73
- package/utilities/schemaPrinter.js.flow +69 -120
- package/utilities/schemaPrinter.mjs +45 -72
- package/utilities/separateOperations.js +8 -12
- package/utilities/separateOperations.js.flow +6 -3
- package/utilities/separateOperations.mjs +8 -12
- package/utilities/stripIgnoredCharacters.js +140 -0
- package/utilities/stripIgnoredCharacters.js.flow +129 -0
- package/utilities/stripIgnoredCharacters.mjs +127 -0
- package/utilities/typeComparators.js +2 -2
- package/utilities/typeComparators.js.flow +4 -3
- package/utilities/typeComparators.mjs +2 -2
- package/utilities/typeFromAST.js +9 -4
- package/utilities/typeFromAST.js.flow +15 -9
- package/utilities/typeFromAST.mjs +6 -4
- package/utilities/valueFromAST.js +7 -4
- package/utilities/valueFromAST.js.flow +7 -5
- package/utilities/valueFromAST.mjs +6 -4
- package/utilities/valueFromASTUntyped.js +11 -6
- package/utilities/valueFromASTUntyped.js.flow +9 -5
- package/utilities/valueFromASTUntyped.mjs +10 -6
- package/validation/ValidationContext.js +1 -1
- package/validation/ValidationContext.js.flow +19 -20
- package/validation/ValidationContext.mjs +2 -2
- package/validation/index.js +1 -1
- package/validation/index.js.flow +2 -1
- package/validation/index.mjs +3 -2
- package/validation/rules/ExecutableDefinitions.js +3 -3
- package/validation/rules/ExecutableDefinitions.js.flow +4 -4
- package/validation/rules/ExecutableDefinitions.mjs +3 -3
- package/validation/rules/FieldsOnCorrectType.js +3 -3
- package/validation/rules/FieldsOnCorrectType.js.flow +7 -7
- package/validation/rules/FieldsOnCorrectType.mjs +3 -3
- package/validation/rules/FragmentsOnCompositeTypes.js +4 -4
- package/validation/rules/FragmentsOnCompositeTypes.js.flow +5 -5
- package/validation/rules/FragmentsOnCompositeTypes.mjs +4 -4
- package/validation/rules/KnownArgumentNames.js +1 -1
- package/validation/rules/KnownArgumentNames.js.flow +5 -5
- package/validation/rules/KnownArgumentNames.mjs +2 -2
- package/validation/rules/KnownDirectives.js +8 -6
- package/validation/rules/KnownDirectives.js.flow +11 -9
- package/validation/rules/KnownDirectives.mjs +8 -6
- package/validation/rules/KnownFragmentNames.js +3 -3
- package/validation/rules/KnownFragmentNames.js.flow +4 -4
- package/validation/rules/KnownFragmentNames.mjs +3 -3
- package/validation/rules/KnownTypeNames.js +2 -2
- package/validation/rules/KnownTypeNames.js.flow +6 -6
- package/validation/rules/KnownTypeNames.mjs +2 -2
- package/validation/rules/LoneAnonymousOperation.js +3 -3
- package/validation/rules/LoneAnonymousOperation.js.flow +4 -4
- package/validation/rules/LoneAnonymousOperation.mjs +3 -3
- package/validation/rules/LoneSchemaDefinition.js +2 -2
- package/validation/rules/LoneSchemaDefinition.js.flow +3 -3
- package/validation/rules/LoneSchemaDefinition.mjs +2 -2
- package/validation/rules/NoFragmentCycles.js +2 -2
- package/validation/rules/NoFragmentCycles.js.flow +4 -4
- package/validation/rules/NoFragmentCycles.mjs +2 -2
- package/validation/rules/NoUndefinedVariables.js +2 -2
- package/validation/rules/NoUndefinedVariables.js.flow +3 -3
- package/validation/rules/NoUndefinedVariables.mjs +2 -2
- package/validation/rules/NoUnusedFragments.js +7 -7
- package/validation/rules/NoUnusedFragments.js.flow +4 -4
- package/validation/rules/NoUnusedFragments.mjs +7 -7
- package/validation/rules/NoUnusedVariables.js +5 -5
- package/validation/rules/NoUnusedVariables.js.flow +6 -5
- package/validation/rules/NoUnusedVariables.mjs +5 -5
- package/validation/rules/OverlappingFieldsCanBeMerged.js +26 -23
- package/validation/rules/OverlappingFieldsCanBeMerged.js.flow +17 -17
- package/validation/rules/OverlappingFieldsCanBeMerged.mjs +26 -23
- package/validation/rules/PossibleFragmentSpreads.js +4 -4
- package/validation/rules/PossibleFragmentSpreads.js.flow +5 -5
- package/validation/rules/PossibleFragmentSpreads.mjs +4 -4
- package/validation/rules/PossibleTypeExtensions.js +3 -3
- package/validation/rules/PossibleTypeExtensions.js.flow +5 -5
- package/validation/rules/PossibleTypeExtensions.mjs +4 -4
- package/validation/rules/ProvidedRequiredArguments.js +6 -8
- package/validation/rules/ProvidedRequiredArguments.js.flow +8 -8
- package/validation/rules/ProvidedRequiredArguments.mjs +7 -9
- package/validation/rules/ScalarLeafs.js +4 -4
- package/validation/rules/ScalarLeafs.js.flow +6 -6
- package/validation/rules/ScalarLeafs.mjs +4 -4
- package/validation/rules/SingleFieldSubscriptions.js +2 -2
- package/validation/rules/SingleFieldSubscriptions.js.flow +4 -4
- package/validation/rules/SingleFieldSubscriptions.mjs +2 -2
- package/validation/rules/UniqueArgumentNames.js +2 -2
- package/validation/rules/UniqueArgumentNames.js.flow +3 -3
- package/validation/rules/UniqueArgumentNames.mjs +2 -2
- package/validation/rules/UniqueDirectiveNames.js +2 -2
- package/validation/rules/UniqueDirectiveNames.js.flow +3 -3
- package/validation/rules/UniqueDirectiveNames.mjs +2 -2
- package/validation/rules/UniqueDirectivesPerLocation.js +3 -2
- package/validation/rules/UniqueDirectivesPerLocation.js.flow +4 -4
- package/validation/rules/UniqueDirectivesPerLocation.mjs +3 -2
- package/validation/rules/UniqueEnumValueNames.js +4 -8
- package/validation/rules/UniqueEnumValueNames.js.flow +6 -8
- package/validation/rules/UniqueEnumValueNames.mjs +4 -8
- package/validation/rules/UniqueFieldDefinitionNames.js +4 -8
- package/validation/rules/UniqueFieldDefinitionNames.js.flow +6 -8
- package/validation/rules/UniqueFieldDefinitionNames.mjs +4 -8
- package/validation/rules/UniqueFragmentNames.js +2 -2
- package/validation/rules/UniqueFragmentNames.js.flow +3 -3
- package/validation/rules/UniqueFragmentNames.mjs +2 -2
- package/validation/rules/UniqueInputFieldNames.js +2 -4
- package/validation/rules/UniqueInputFieldNames.js.flow +3 -4
- package/validation/rules/UniqueInputFieldNames.mjs +2 -4
- package/validation/rules/UniqueOperationNames.js +2 -2
- package/validation/rules/UniqueOperationNames.js.flow +3 -3
- package/validation/rules/UniqueOperationNames.mjs +2 -2
- package/validation/rules/UniqueOperationTypes.js +2 -2
- package/validation/rules/UniqueOperationTypes.js.flow +3 -3
- package/validation/rules/UniqueOperationTypes.mjs +2 -2
- package/validation/rules/UniqueTypeNames.js +2 -2
- package/validation/rules/UniqueTypeNames.js.flow +4 -4
- package/validation/rules/UniqueTypeNames.mjs +2 -2
- package/validation/rules/UniqueVariableNames.js +2 -2
- package/validation/rules/UniqueVariableNames.js.flow +4 -4
- package/validation/rules/UniqueVariableNames.mjs +2 -2
- package/validation/rules/ValuesOfCorrectType.js +2 -2
- package/validation/rules/ValuesOfCorrectType.js.flow +5 -5
- package/validation/rules/ValuesOfCorrectType.mjs +2 -2
- package/validation/rules/VariablesAreInputTypes.js +3 -3
- package/validation/rules/VariablesAreInputTypes.js.flow +5 -5
- package/validation/rules/VariablesAreInputTypes.mjs +3 -3
- package/validation/rules/VariablesInAllowedPosition.js +3 -3
- package/validation/rules/VariablesInAllowedPosition.js.flow +7 -8
- package/validation/rules/VariablesInAllowedPosition.mjs +3 -3
- package/validation/specifiedRules.js +2 -2
- package/validation/specifiedRules.js.flow +13 -6
- package/validation/specifiedRules.mjs +7 -7
- package/validation/validate.js +2 -2
- package/validation/validate.js.flow +10 -6
- package/validation/validate.mjs +2 -2
- package/jsutils/MaybePromise.js +0 -1
- package/jsutils/MaybePromise.mjs +0 -0
- package/language/blockStringValue.js +0 -73
- package/language/blockStringValue.js.flow +0 -64
- package/language/blockStringValue.mjs +0 -66
package/language/parser.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -10,7 +10,7 @@ import inspect from '../jsutils/inspect';
|
|
|
10
10
|
import defineToJSON from '../jsutils/defineToJSON';
|
|
11
11
|
import { Source } from './source';
|
|
12
12
|
import { syntaxError } from '../error';
|
|
13
|
-
import {
|
|
13
|
+
import { TokenKind, getTokenDesc, createLexer } from './lexer';
|
|
14
14
|
import { Kind } from './kinds';
|
|
15
15
|
import { DirectiveLocation } from './directiveLocation';
|
|
16
16
|
/**
|
|
@@ -45,9 +45,9 @@ export function parse(source, options) {
|
|
|
45
45
|
export function parseValue(source, options) {
|
|
46
46
|
var sourceObj = typeof source === 'string' ? new Source(source) : source;
|
|
47
47
|
var lexer = createLexer(sourceObj, options || {});
|
|
48
|
-
|
|
48
|
+
expectToken(lexer, TokenKind.SOF);
|
|
49
49
|
var value = parseValueLiteral(lexer, false);
|
|
50
|
-
|
|
50
|
+
expectToken(lexer, TokenKind.EOF);
|
|
51
51
|
return value;
|
|
52
52
|
}
|
|
53
53
|
/**
|
|
@@ -64,9 +64,9 @@ export function parseValue(source, options) {
|
|
|
64
64
|
export function parseType(source, options) {
|
|
65
65
|
var sourceObj = typeof source === 'string' ? new Source(source) : source;
|
|
66
66
|
var lexer = createLexer(sourceObj, options || {});
|
|
67
|
-
|
|
67
|
+
expectToken(lexer, TokenKind.SOF);
|
|
68
68
|
var type = parseTypeReference(lexer);
|
|
69
|
-
|
|
69
|
+
expectToken(lexer, TokenKind.EOF);
|
|
70
70
|
return type;
|
|
71
71
|
}
|
|
72
72
|
/**
|
|
@@ -74,7 +74,7 @@ export function parseType(source, options) {
|
|
|
74
74
|
*/
|
|
75
75
|
|
|
76
76
|
function parseName(lexer) {
|
|
77
|
-
var token =
|
|
77
|
+
var token = expectToken(lexer, TokenKind.NAME);
|
|
78
78
|
return {
|
|
79
79
|
kind: Kind.NAME,
|
|
80
80
|
value: token.value,
|
|
@@ -203,7 +203,7 @@ function parseOperationDefinition(lexer) {
|
|
|
203
203
|
|
|
204
204
|
|
|
205
205
|
function parseOperationType(lexer) {
|
|
206
|
-
var operationToken =
|
|
206
|
+
var operationToken = expectToken(lexer, TokenKind.NAME);
|
|
207
207
|
|
|
208
208
|
switch (operationToken.value) {
|
|
209
209
|
case 'query':
|
|
@@ -236,8 +236,8 @@ function parseVariableDefinition(lexer) {
|
|
|
236
236
|
return {
|
|
237
237
|
kind: Kind.VARIABLE_DEFINITION,
|
|
238
238
|
variable: parseVariable(lexer),
|
|
239
|
-
type: (
|
|
240
|
-
defaultValue:
|
|
239
|
+
type: (expectToken(lexer, TokenKind.COLON), parseTypeReference(lexer)),
|
|
240
|
+
defaultValue: expectOptionalToken(lexer, TokenKind.EQUALS) ? parseValueLiteral(lexer, true) : undefined,
|
|
241
241
|
directives: parseDirectives(lexer, true),
|
|
242
242
|
loc: loc(lexer, start)
|
|
243
243
|
};
|
|
@@ -249,7 +249,7 @@ function parseVariableDefinition(lexer) {
|
|
|
249
249
|
|
|
250
250
|
function parseVariable(lexer) {
|
|
251
251
|
var start = lexer.token;
|
|
252
|
-
|
|
252
|
+
expectToken(lexer, TokenKind.DOLLAR);
|
|
253
253
|
return {
|
|
254
254
|
kind: Kind.VARIABLE,
|
|
255
255
|
name: parseName(lexer),
|
|
@@ -293,7 +293,7 @@ function parseField(lexer) {
|
|
|
293
293
|
var alias;
|
|
294
294
|
var name;
|
|
295
295
|
|
|
296
|
-
if (
|
|
296
|
+
if (expectOptionalToken(lexer, TokenKind.COLON)) {
|
|
297
297
|
alias = nameOrAlias;
|
|
298
298
|
name = parseName(lexer);
|
|
299
299
|
} else {
|
|
@@ -326,10 +326,12 @@ function parseArguments(lexer, isConst) {
|
|
|
326
326
|
|
|
327
327
|
function parseArgument(lexer) {
|
|
328
328
|
var start = lexer.token;
|
|
329
|
+
var name = parseName(lexer);
|
|
330
|
+
expectToken(lexer, TokenKind.COLON);
|
|
329
331
|
return {
|
|
330
332
|
kind: Kind.ARGUMENT,
|
|
331
|
-
name:
|
|
332
|
-
value:
|
|
333
|
+
name: name,
|
|
334
|
+
value: parseValueLiteral(lexer, false),
|
|
333
335
|
loc: loc(lexer, start)
|
|
334
336
|
};
|
|
335
337
|
}
|
|
@@ -339,7 +341,7 @@ function parseConstArgument(lexer) {
|
|
|
339
341
|
return {
|
|
340
342
|
kind: Kind.ARGUMENT,
|
|
341
343
|
name: parseName(lexer),
|
|
342
|
-
value: (
|
|
344
|
+
value: (expectToken(lexer, TokenKind.COLON), parseConstValue(lexer)),
|
|
343
345
|
loc: loc(lexer, start)
|
|
344
346
|
};
|
|
345
347
|
} // Implements the parsing rules in the Fragments section.
|
|
@@ -355,8 +357,8 @@ function parseConstArgument(lexer) {
|
|
|
355
357
|
|
|
356
358
|
function parseFragment(lexer) {
|
|
357
359
|
var start = lexer.token;
|
|
358
|
-
|
|
359
|
-
var hasTypeCondition =
|
|
360
|
+
expectToken(lexer, TokenKind.SPREAD);
|
|
361
|
+
var hasTypeCondition = expectOptionalKeyword(lexer, 'on');
|
|
360
362
|
|
|
361
363
|
if (!hasTypeCondition && peek(lexer, TokenKind.NAME)) {
|
|
362
364
|
return {
|
|
@@ -550,16 +552,14 @@ function parseList(lexer, isConst) {
|
|
|
550
552
|
|
|
551
553
|
function parseObject(lexer, isConst) {
|
|
552
554
|
var start = lexer.token;
|
|
553
|
-
expect(lexer, TokenKind.BRACE_L);
|
|
554
|
-
var fields = [];
|
|
555
555
|
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
}
|
|
556
|
+
var item = function item() {
|
|
557
|
+
return parseObjectField(lexer, isConst);
|
|
558
|
+
};
|
|
559
559
|
|
|
560
560
|
return {
|
|
561
561
|
kind: Kind.OBJECT,
|
|
562
|
-
fields:
|
|
562
|
+
fields: any(lexer, TokenKind.BRACE_L, item, TokenKind.BRACE_R),
|
|
563
563
|
loc: loc(lexer, start)
|
|
564
564
|
};
|
|
565
565
|
}
|
|
@@ -570,10 +570,12 @@ function parseObject(lexer, isConst) {
|
|
|
570
570
|
|
|
571
571
|
function parseObjectField(lexer, isConst) {
|
|
572
572
|
var start = lexer.token;
|
|
573
|
+
var name = parseName(lexer);
|
|
574
|
+
expectToken(lexer, TokenKind.COLON);
|
|
573
575
|
return {
|
|
574
576
|
kind: Kind.OBJECT_FIELD,
|
|
575
|
-
name:
|
|
576
|
-
value:
|
|
577
|
+
name: name,
|
|
578
|
+
value: parseValueLiteral(lexer, isConst),
|
|
577
579
|
loc: loc(lexer, start)
|
|
578
580
|
};
|
|
579
581
|
} // Implements the parsing rules in the Directives section.
|
|
@@ -599,7 +601,7 @@ function parseDirectives(lexer, isConst) {
|
|
|
599
601
|
|
|
600
602
|
function parseDirective(lexer, isConst) {
|
|
601
603
|
var start = lexer.token;
|
|
602
|
-
|
|
604
|
+
expectToken(lexer, TokenKind.AT);
|
|
603
605
|
return {
|
|
604
606
|
kind: Kind.DIRECTIVE,
|
|
605
607
|
name: parseName(lexer),
|
|
@@ -620,9 +622,9 @@ export function parseTypeReference(lexer) {
|
|
|
620
622
|
var start = lexer.token;
|
|
621
623
|
var type;
|
|
622
624
|
|
|
623
|
-
if (
|
|
625
|
+
if (expectOptionalToken(lexer, TokenKind.BRACKET_L)) {
|
|
624
626
|
type = parseTypeReference(lexer);
|
|
625
|
-
|
|
627
|
+
expectToken(lexer, TokenKind.BRACKET_R);
|
|
626
628
|
type = {
|
|
627
629
|
kind: Kind.LIST_TYPE,
|
|
628
630
|
type: type,
|
|
@@ -632,7 +634,7 @@ export function parseTypeReference(lexer) {
|
|
|
632
634
|
type = parseNamedType(lexer);
|
|
633
635
|
}
|
|
634
636
|
|
|
635
|
-
if (
|
|
637
|
+
if (expectOptionalToken(lexer, TokenKind.BANG)) {
|
|
636
638
|
return {
|
|
637
639
|
kind: Kind.NON_NULL_TYPE,
|
|
638
640
|
type: type,
|
|
@@ -743,7 +745,7 @@ function parseSchemaDefinition(lexer) {
|
|
|
743
745
|
function parseOperationTypeDefinition(lexer) {
|
|
744
746
|
var start = lexer.token;
|
|
745
747
|
var operation = parseOperationType(lexer);
|
|
746
|
-
|
|
748
|
+
expectToken(lexer, TokenKind.COLON);
|
|
747
749
|
var type = parseNamedType(lexer);
|
|
748
750
|
return {
|
|
749
751
|
kind: Kind.OPERATION_TYPE_DEFINITION,
|
|
@@ -806,13 +808,13 @@ function parseObjectTypeDefinition(lexer) {
|
|
|
806
808
|
function parseImplementsInterfaces(lexer) {
|
|
807
809
|
var types = [];
|
|
808
810
|
|
|
809
|
-
if (
|
|
811
|
+
if (expectOptionalKeyword(lexer, 'implements')) {
|
|
810
812
|
// Optional leading ampersand
|
|
811
|
-
|
|
813
|
+
expectOptionalToken(lexer, TokenKind.AMP);
|
|
812
814
|
|
|
813
815
|
do {
|
|
814
816
|
types.push(parseNamedType(lexer));
|
|
815
|
-
} while (
|
|
817
|
+
} while (expectOptionalToken(lexer, TokenKind.AMP) || // Legacy support for the SDL?
|
|
816
818
|
lexer.options.allowLegacySDLImplementsInterfaces && peek(lexer, TokenKind.NAME));
|
|
817
819
|
}
|
|
818
820
|
|
|
@@ -844,7 +846,7 @@ function parseFieldDefinition(lexer) {
|
|
|
844
846
|
var description = parseDescription(lexer);
|
|
845
847
|
var name = parseName(lexer);
|
|
846
848
|
var args = parseArgumentDefs(lexer);
|
|
847
|
-
|
|
849
|
+
expectToken(lexer, TokenKind.COLON);
|
|
848
850
|
var type = parseTypeReference(lexer);
|
|
849
851
|
var directives = parseDirectives(lexer, true);
|
|
850
852
|
return {
|
|
@@ -879,11 +881,11 @@ function parseInputValueDef(lexer) {
|
|
|
879
881
|
var start = lexer.token;
|
|
880
882
|
var description = parseDescription(lexer);
|
|
881
883
|
var name = parseName(lexer);
|
|
882
|
-
|
|
884
|
+
expectToken(lexer, TokenKind.COLON);
|
|
883
885
|
var type = parseTypeReference(lexer);
|
|
884
886
|
var defaultValue;
|
|
885
887
|
|
|
886
|
-
if (
|
|
888
|
+
if (expectOptionalToken(lexer, TokenKind.EQUALS)) {
|
|
887
889
|
defaultValue = parseConstValue(lexer);
|
|
888
890
|
}
|
|
889
891
|
|
|
@@ -952,13 +954,13 @@ function parseUnionTypeDefinition(lexer) {
|
|
|
952
954
|
function parseUnionMemberTypes(lexer) {
|
|
953
955
|
var types = [];
|
|
954
956
|
|
|
955
|
-
if (
|
|
957
|
+
if (expectOptionalToken(lexer, TokenKind.EQUALS)) {
|
|
956
958
|
// Optional leading pipe
|
|
957
|
-
|
|
959
|
+
expectOptionalToken(lexer, TokenKind.PIPE);
|
|
958
960
|
|
|
959
961
|
do {
|
|
960
962
|
types.push(parseNamedType(lexer));
|
|
961
|
-
} while (
|
|
963
|
+
} while (expectOptionalToken(lexer, TokenKind.PIPE));
|
|
962
964
|
}
|
|
963
965
|
|
|
964
966
|
return types;
|
|
@@ -1285,7 +1287,7 @@ function parseDirectiveDefinition(lexer) {
|
|
|
1285
1287
|
var start = lexer.token;
|
|
1286
1288
|
var description = parseDescription(lexer);
|
|
1287
1289
|
expectKeyword(lexer, 'directive');
|
|
1288
|
-
|
|
1290
|
+
expectToken(lexer, TokenKind.AT);
|
|
1289
1291
|
var name = parseName(lexer);
|
|
1290
1292
|
var args = parseArgumentDefs(lexer);
|
|
1291
1293
|
expectKeyword(lexer, 'on');
|
|
@@ -1308,12 +1310,12 @@ function parseDirectiveDefinition(lexer) {
|
|
|
1308
1310
|
|
|
1309
1311
|
function parseDirectiveLocations(lexer) {
|
|
1310
1312
|
// Optional leading pipe
|
|
1311
|
-
|
|
1313
|
+
expectOptionalToken(lexer, TokenKind.PIPE);
|
|
1312
1314
|
var locations = [];
|
|
1313
1315
|
|
|
1314
1316
|
do {
|
|
1315
1317
|
locations.push(parseDirectiveLocation(lexer));
|
|
1316
|
-
} while (
|
|
1318
|
+
} while (expectOptionalToken(lexer, TokenKind.PIPE));
|
|
1317
1319
|
|
|
1318
1320
|
return locations;
|
|
1319
1321
|
}
|
|
@@ -1350,7 +1352,7 @@ function parseDirectiveLocation(lexer) {
|
|
|
1350
1352
|
var start = lexer.token;
|
|
1351
1353
|
var name = parseName(lexer);
|
|
1352
1354
|
|
|
1353
|
-
if (DirectiveLocation
|
|
1355
|
+
if (DirectiveLocation[name.value] !== undefined) {
|
|
1354
1356
|
return name;
|
|
1355
1357
|
}
|
|
1356
1358
|
|
|
@@ -1392,26 +1394,28 @@ function peek(lexer, kind) {
|
|
|
1392
1394
|
return lexer.token.kind === kind;
|
|
1393
1395
|
}
|
|
1394
1396
|
/**
|
|
1395
|
-
* If the next token is of the given kind, return
|
|
1396
|
-
* the lexer. Otherwise, do not change the parser state and
|
|
1397
|
+
* If the next token is of the given kind, return that token after advancing
|
|
1398
|
+
* the lexer. Otherwise, do not change the parser state and throw an error.
|
|
1397
1399
|
*/
|
|
1398
1400
|
|
|
1399
1401
|
|
|
1400
|
-
function
|
|
1401
|
-
|
|
1402
|
+
function expectToken(lexer, kind) {
|
|
1403
|
+
var token = lexer.token;
|
|
1404
|
+
|
|
1405
|
+
if (token.kind === kind) {
|
|
1402
1406
|
lexer.advance();
|
|
1403
|
-
return
|
|
1407
|
+
return token;
|
|
1404
1408
|
}
|
|
1405
1409
|
|
|
1406
|
-
|
|
1410
|
+
throw syntaxError(lexer.source, token.start, "Expected ".concat(kind, ", found ").concat(getTokenDesc(token)));
|
|
1407
1411
|
}
|
|
1408
1412
|
/**
|
|
1409
1413
|
* If the next token is of the given kind, return that token after advancing
|
|
1410
|
-
* the lexer. Otherwise, do not change the parser state and
|
|
1414
|
+
* the lexer. Otherwise, do not change the parser state and return undefined.
|
|
1411
1415
|
*/
|
|
1412
1416
|
|
|
1413
1417
|
|
|
1414
|
-
function
|
|
1418
|
+
function expectOptionalToken(lexer, kind) {
|
|
1415
1419
|
var token = lexer.token;
|
|
1416
1420
|
|
|
1417
1421
|
if (token.kind === kind) {
|
|
@@ -1419,35 +1423,39 @@ function expect(lexer, kind) {
|
|
|
1419
1423
|
return token;
|
|
1420
1424
|
}
|
|
1421
1425
|
|
|
1422
|
-
|
|
1426
|
+
return undefined;
|
|
1423
1427
|
}
|
|
1424
1428
|
/**
|
|
1425
|
-
* If the next token is a
|
|
1426
|
-
* the lexer. Otherwise, do not change the parser state and
|
|
1429
|
+
* If the next token is a given keyword, return that token after advancing
|
|
1430
|
+
* the lexer. Otherwise, do not change the parser state and throw an error.
|
|
1427
1431
|
*/
|
|
1428
1432
|
|
|
1429
1433
|
|
|
1430
|
-
function
|
|
1434
|
+
function expectKeyword(lexer, value) {
|
|
1431
1435
|
var token = lexer.token;
|
|
1432
1436
|
|
|
1433
1437
|
if (token.kind === TokenKind.NAME && token.value === value) {
|
|
1434
1438
|
lexer.advance();
|
|
1435
|
-
return
|
|
1439
|
+
return token;
|
|
1436
1440
|
}
|
|
1437
1441
|
|
|
1438
|
-
|
|
1442
|
+
throw syntaxError(lexer.source, token.start, "Expected \"".concat(value, "\", found ").concat(getTokenDesc(token)));
|
|
1439
1443
|
}
|
|
1440
1444
|
/**
|
|
1441
|
-
* If the next token is a
|
|
1442
|
-
*
|
|
1443
|
-
* an error.
|
|
1445
|
+
* If the next token is a given keyword, return that token after advancing
|
|
1446
|
+
* the lexer. Otherwise, do not change the parser state and return undefined.
|
|
1444
1447
|
*/
|
|
1445
1448
|
|
|
1446
1449
|
|
|
1447
|
-
function
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
+
function expectOptionalKeyword(lexer, value) {
|
|
1451
|
+
var token = lexer.token;
|
|
1452
|
+
|
|
1453
|
+
if (token.kind === TokenKind.NAME && token.value === value) {
|
|
1454
|
+
lexer.advance();
|
|
1455
|
+
return token;
|
|
1450
1456
|
}
|
|
1457
|
+
|
|
1458
|
+
return undefined;
|
|
1451
1459
|
}
|
|
1452
1460
|
/**
|
|
1453
1461
|
* Helper function for creating an error when an unexpected lexed token
|
|
@@ -1468,10 +1476,10 @@ function unexpected(lexer, atToken) {
|
|
|
1468
1476
|
|
|
1469
1477
|
|
|
1470
1478
|
function any(lexer, openKind, parseFn, closeKind) {
|
|
1471
|
-
|
|
1479
|
+
expectToken(lexer, openKind);
|
|
1472
1480
|
var nodes = [];
|
|
1473
1481
|
|
|
1474
|
-
while (!
|
|
1482
|
+
while (!expectOptionalToken(lexer, closeKind)) {
|
|
1475
1483
|
nodes.push(parseFn(lexer));
|
|
1476
1484
|
}
|
|
1477
1485
|
|
|
@@ -1486,12 +1494,12 @@ function any(lexer, openKind, parseFn, closeKind) {
|
|
|
1486
1494
|
|
|
1487
1495
|
|
|
1488
1496
|
function many(lexer, openKind, parseFn, closeKind) {
|
|
1489
|
-
|
|
1497
|
+
expectToken(lexer, openKind);
|
|
1490
1498
|
var nodes = [parseFn(lexer)];
|
|
1491
1499
|
|
|
1492
|
-
while (!
|
|
1500
|
+
while (!expectOptionalToken(lexer, closeKind)) {
|
|
1493
1501
|
nodes.push(parseFn(lexer));
|
|
1494
1502
|
}
|
|
1495
1503
|
|
|
1496
1504
|
return nodes;
|
|
1497
|
-
}
|
|
1505
|
+
}
|
package/language/predicates.js
CHANGED
|
@@ -16,7 +16,7 @@ exports.isTypeExtensionNode = isTypeExtensionNode;
|
|
|
16
16
|
var _kinds = require("./kinds");
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
|
-
* Copyright (c)
|
|
19
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
20
20
|
*
|
|
21
21
|
* This source code is licensed under the MIT license found in the
|
|
22
22
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -57,4 +57,4 @@ function isTypeSystemExtensionNode(node) {
|
|
|
57
57
|
|
|
58
58
|
function isTypeExtensionNode(node) {
|
|
59
59
|
return node.kind === _kinds.Kind.SCALAR_TYPE_EXTENSION || node.kind === _kinds.Kind.OBJECT_TYPE_EXTENSION || node.kind === _kinds.Kind.INTERFACE_TYPE_EXTENSION || node.kind === _kinds.Kind.UNION_TYPE_EXTENSION || node.kind === _kinds.Kind.ENUM_TYPE_EXTENSION || node.kind === _kinds.Kind.INPUT_OBJECT_TYPE_EXTENSION;
|
|
60
|
-
}
|
|
60
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* @flow strict
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import type
|
|
10
|
+
import { type ASTNode } from './ast';
|
|
11
11
|
import { Kind } from './kinds';
|
|
12
12
|
|
|
13
13
|
export function isDefinitionNode(node: ASTNode): boolean %checks {
|
package/language/predicates.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -33,4 +33,4 @@ export function isTypeSystemExtensionNode(node) {
|
|
|
33
33
|
}
|
|
34
34
|
export function isTypeExtensionNode(node) {
|
|
35
35
|
return node.kind === Kind.SCALAR_TYPE_EXTENSION || node.kind === Kind.OBJECT_TYPE_EXTENSION || node.kind === Kind.INTERFACE_TYPE_EXTENSION || node.kind === Kind.UNION_TYPE_EXTENSION || node.kind === Kind.ENUM_TYPE_EXTENSION || node.kind === Kind.INPUT_OBJECT_TYPE_EXTENSION;
|
|
36
|
-
}
|
|
36
|
+
}
|
package/language/printer.js
CHANGED
|
@@ -7,8 +7,10 @@ exports.print = print;
|
|
|
7
7
|
|
|
8
8
|
var _visitor = require("./visitor");
|
|
9
9
|
|
|
10
|
+
var _blockString = require("./blockString");
|
|
11
|
+
|
|
10
12
|
/**
|
|
11
|
-
* Copyright (c)
|
|
13
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
12
14
|
*
|
|
13
15
|
* This source code is licensed under the MIT license found in the
|
|
14
16
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -24,7 +26,8 @@ function print(ast) {
|
|
|
24
26
|
return (0, _visitor.visit)(ast, {
|
|
25
27
|
leave: printDocASTReducer
|
|
26
28
|
});
|
|
27
|
-
}
|
|
29
|
+
} // TODO: provide better type coverage in future
|
|
30
|
+
|
|
28
31
|
|
|
29
32
|
var printDocASTReducer = {
|
|
30
33
|
Name: function Name(node) {
|
|
@@ -106,7 +109,7 @@ var printDocASTReducer = {
|
|
|
106
109
|
StringValue: function StringValue(_ref10, key) {
|
|
107
110
|
var value = _ref10.value,
|
|
108
111
|
isBlockString = _ref10.block;
|
|
109
|
-
return isBlockString ? printBlockString(value, key === 'description') : JSON.stringify(value);
|
|
112
|
+
return isBlockString ? (0, _blockString.printBlockString)(value, key === 'description' ? '' : ' ') : JSON.stringify(value);
|
|
110
113
|
},
|
|
111
114
|
BooleanValue: function BooleanValue(_ref11) {
|
|
112
115
|
var value = _ref11.value;
|
|
@@ -312,14 +315,3 @@ function isMultiline(string) {
|
|
|
312
315
|
function hasMultilineItems(maybeArray) {
|
|
313
316
|
return maybeArray && maybeArray.some(isMultiline);
|
|
314
317
|
}
|
|
315
|
-
/**
|
|
316
|
-
* Print a block string in the indented block form by adding a leading and
|
|
317
|
-
* trailing blank line. However, if a block string starts with whitespace and is
|
|
318
|
-
* a single-line, adding a leading blank line would strip that whitespace.
|
|
319
|
-
*/
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
function printBlockString(value, isDescription) {
|
|
323
|
-
var escaped = value.replace(/"""/g, '\\"""');
|
|
324
|
-
return isMultiline(value) || value[0] !== ' ' && value[0] !== '\t' ? "\"\"\"\n".concat(isDescription ? escaped : indent(escaped), "\n\"\"\"") : "\"\"\"".concat(escaped.replace(/"$/, '"\n'), "\"\"\"");
|
|
325
|
-
}
|
package/language/printer.js.flow
CHANGED
|
@@ -1,23 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*
|
|
7
|
-
* @
|
|
7
|
+
* @flow strict
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
+
import { type ASTNode } from './ast';
|
|
10
11
|
import { visit } from './visitor';
|
|
12
|
+
import { printBlockString } from './blockString';
|
|
11
13
|
|
|
12
14
|
/**
|
|
13
15
|
* Converts an AST into a string, using one set of reasonable
|
|
14
16
|
* formatting rules.
|
|
15
17
|
*/
|
|
16
|
-
export function print(ast) {
|
|
18
|
+
export function print(ast: ASTNode): string {
|
|
17
19
|
return visit(ast, { leave: printDocASTReducer });
|
|
18
20
|
}
|
|
19
21
|
|
|
20
|
-
|
|
22
|
+
// TODO: provide better type coverage in future
|
|
23
|
+
const printDocASTReducer: any = {
|
|
21
24
|
Name: node => node.value,
|
|
22
25
|
Variable: node => '$' + node.name,
|
|
23
26
|
|
|
@@ -88,7 +91,7 @@ const printDocASTReducer = {
|
|
|
88
91
|
FloatValue: ({ value }) => value,
|
|
89
92
|
StringValue: ({ value, block: isBlockString }, key) =>
|
|
90
93
|
isBlockString
|
|
91
|
-
? printBlockString(value, key === 'description')
|
|
94
|
+
? printBlockString(value, key === 'description' ? '' : ' ')
|
|
92
95
|
: JSON.stringify(value),
|
|
93
96
|
BooleanValue: ({ value }) => (value ? 'true' : 'false'),
|
|
94
97
|
NullValue: () => 'null',
|
|
@@ -271,15 +274,3 @@ function isMultiline(string) {
|
|
|
271
274
|
function hasMultilineItems(maybeArray) {
|
|
272
275
|
return maybeArray && maybeArray.some(isMultiline);
|
|
273
276
|
}
|
|
274
|
-
|
|
275
|
-
/**
|
|
276
|
-
* Print a block string in the indented block form by adding a leading and
|
|
277
|
-
* trailing blank line. However, if a block string starts with whitespace and is
|
|
278
|
-
* a single-line, adding a leading blank line would strip that whitespace.
|
|
279
|
-
*/
|
|
280
|
-
function printBlockString(value, isDescription) {
|
|
281
|
-
const escaped = value.replace(/"""/g, '\\"""');
|
|
282
|
-
return isMultiline(value) || (value[0] !== ' ' && value[0] !== '\t')
|
|
283
|
-
? `"""\n${isDescription ? escaped : indent(escaped)}\n"""`
|
|
284
|
-
: `"""${escaped.replace(/"$/, '"\n')}"""`;
|
|
285
|
-
}
|
package/language/printer.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
*/
|
|
9
9
|
import { visit } from './visitor';
|
|
10
|
+
import { printBlockString } from './blockString';
|
|
10
11
|
/**
|
|
11
12
|
* Converts an AST into a string, using one set of reasonable
|
|
12
13
|
* formatting rules.
|
|
@@ -16,7 +17,8 @@ export function print(ast) {
|
|
|
16
17
|
return visit(ast, {
|
|
17
18
|
leave: printDocASTReducer
|
|
18
19
|
});
|
|
19
|
-
}
|
|
20
|
+
} // TODO: provide better type coverage in future
|
|
21
|
+
|
|
20
22
|
var printDocASTReducer = {
|
|
21
23
|
Name: function Name(node) {
|
|
22
24
|
return node.value;
|
|
@@ -97,7 +99,7 @@ var printDocASTReducer = {
|
|
|
97
99
|
StringValue: function StringValue(_ref10, key) {
|
|
98
100
|
var value = _ref10.value,
|
|
99
101
|
isBlockString = _ref10.block;
|
|
100
|
-
return isBlockString ? printBlockString(value, key === 'description') : JSON.stringify(value);
|
|
102
|
+
return isBlockString ? printBlockString(value, key === 'description' ? '' : ' ') : JSON.stringify(value);
|
|
101
103
|
},
|
|
102
104
|
BooleanValue: function BooleanValue(_ref11) {
|
|
103
105
|
var value = _ref11.value;
|
|
@@ -303,14 +305,3 @@ function isMultiline(string) {
|
|
|
303
305
|
function hasMultilineItems(maybeArray) {
|
|
304
306
|
return maybeArray && maybeArray.some(isMultiline);
|
|
305
307
|
}
|
|
306
|
-
/**
|
|
307
|
-
* Print a block string in the indented block form by adding a leading and
|
|
308
|
-
* trailing blank line. However, if a block string starts with whitespace and is
|
|
309
|
-
* a single-line, adding a leading blank line would strip that whitespace.
|
|
310
|
-
*/
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
function printBlockString(value, isDescription) {
|
|
314
|
-
var escaped = value.replace(/"""/g, '\\"""');
|
|
315
|
-
return isMultiline(value) || value[0] !== ' ' && value[0] !== '\t' ? "\"\"\"\n".concat(isDescription ? escaped : indent(escaped), "\n\"\"\"") : "\"\"\"".concat(escaped.replace(/"$/, '"\n'), "\"\"\"");
|
|
316
|
-
}
|
package/language/source.js
CHANGED
|
@@ -12,7 +12,7 @@ var _defineToStringTag = _interopRequireDefault(require("../jsutils/defineToStri
|
|
|
12
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
|
-
* Copyright (c)
|
|
15
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
16
16
|
*
|
|
17
17
|
* This source code is licensed under the MIT license found in the
|
|
18
18
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -41,4 +41,4 @@ var Source = function Source(body, name, locationOffset) {
|
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
exports.Source = Source;
|
|
44
|
-
(0, _defineToStringTag.default)(Source);
|
|
44
|
+
(0, _defineToStringTag.default)(Source);
|
package/language/source.js.flow
CHANGED
package/language/source.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -28,4 +28,4 @@ export var Source = function Source(body, name, locationOffset) {
|
|
|
28
28
|
!(this.locationOffset.column > 0) ? invariant(0, 'column in locationOffset is 1-indexed and must be positive') : void 0;
|
|
29
29
|
}; // Conditionally apply `[Symbol.toStringTag]` if `Symbol`s are supported
|
|
30
30
|
|
|
31
|
-
defineToStringTag(Source);
|
|
31
|
+
defineToStringTag(Source);
|
package/language/visitor.js
CHANGED
|
@@ -14,7 +14,7 @@ var _inspect = _interopRequireDefault(require("../jsutils/inspect"));
|
|
|
14
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
|
-
* Copyright (c)
|
|
17
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
18
18
|
*
|
|
19
19
|
* This source code is licensed under the MIT license found in the
|
|
20
20
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -192,10 +192,8 @@ function visit(root, visitor) {
|
|
|
192
192
|
} else {
|
|
193
193
|
var clone = {};
|
|
194
194
|
|
|
195
|
-
var
|
|
196
|
-
|
|
197
|
-
for (var _i = 0; _i < _arr.length; _i++) {
|
|
198
|
-
var k = _arr[_i];
|
|
195
|
+
for (var _i = 0, _Object$keys = Object.keys(node); _i < _Object$keys.length; _i++) {
|
|
196
|
+
var k = _Object$keys[_i];
|
|
199
197
|
clone[k] = node[k];
|
|
200
198
|
}
|
|
201
199
|
|
|
@@ -448,4 +446,4 @@ function getVisitFn(visitor, kind, isLeaving) {
|
|
|
448
446
|
}
|
|
449
447
|
}
|
|
450
448
|
}
|
|
451
|
-
}
|
|
449
|
+
}
|
package/language/visitor.js.flow
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import inspect from '../jsutils/inspect';
|
|
11
|
-
import type
|
|
12
|
-
import type
|
|
11
|
+
import { type ASTNode, type ASTKindToNode } from './ast';
|
|
12
|
+
import { type TypeInfo } from '../utilities/TypeInfo';
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* A visitor is provided to visit, it contains the collection of
|