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/lexer.js
CHANGED
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.createLexer = createLexer;
|
|
7
|
+
exports.isPunctuatorToken = isPunctuatorToken;
|
|
7
8
|
exports.getTokenDesc = getTokenDesc;
|
|
8
9
|
exports.TokenKind = void 0;
|
|
9
10
|
|
|
@@ -11,12 +12,12 @@ var _defineToJSON = _interopRequireDefault(require("../jsutils/defineToJSON"));
|
|
|
11
12
|
|
|
12
13
|
var _error = require("../error");
|
|
13
14
|
|
|
14
|
-
var
|
|
15
|
+
var _blockString = require("./blockString");
|
|
15
16
|
|
|
16
17
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
|
-
* Copyright (c)
|
|
20
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
20
21
|
*
|
|
21
22
|
* This source code is licensed under the MIT license found in the
|
|
22
23
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -104,20 +105,25 @@ var TokenKind = Object.freeze({
|
|
|
104
105
|
|
|
105
106
|
exports.TokenKind = TokenKind;
|
|
106
107
|
|
|
108
|
+
// @internal
|
|
109
|
+
function isPunctuatorToken(token) {
|
|
110
|
+
var kind = token.kind;
|
|
111
|
+
return kind === TokenKind.BANG || kind === TokenKind.DOLLAR || kind === TokenKind.AMP || kind === TokenKind.PAREN_L || kind === TokenKind.PAREN_R || kind === TokenKind.SPREAD || kind === TokenKind.COLON || kind === TokenKind.EQUALS || kind === TokenKind.AT || kind === TokenKind.BRACKET_L || kind === TokenKind.BRACKET_R || kind === TokenKind.BRACE_L || kind === TokenKind.PIPE || kind === TokenKind.BRACE_R;
|
|
112
|
+
}
|
|
107
113
|
/**
|
|
108
114
|
* A helper function to describe a token as a string for debugging
|
|
109
115
|
*/
|
|
116
|
+
|
|
117
|
+
|
|
110
118
|
function getTokenDesc(token) {
|
|
111
119
|
var value = token.value;
|
|
112
120
|
return value ? "".concat(token.kind, " \"").concat(value, "\"") : token.kind;
|
|
113
121
|
}
|
|
114
|
-
|
|
115
|
-
var charCodeAt = String.prototype.charCodeAt;
|
|
116
|
-
var slice = String.prototype.slice;
|
|
117
122
|
/**
|
|
118
123
|
* Helper function for constructing the Token object.
|
|
119
124
|
*/
|
|
120
125
|
|
|
126
|
+
|
|
121
127
|
function Tok(kind, start, end, line, column, prev, value) {
|
|
122
128
|
this.kind = kind;
|
|
123
129
|
this.start = start;
|
|
@@ -167,7 +173,7 @@ function readToken(lexer, prev) {
|
|
|
167
173
|
return new Tok(TokenKind.EOF, bodyLength, bodyLength, line, col, prev);
|
|
168
174
|
}
|
|
169
175
|
|
|
170
|
-
var code = charCodeAt
|
|
176
|
+
var code = body.charCodeAt(pos); // SourceCharacter
|
|
171
177
|
|
|
172
178
|
switch (code) {
|
|
173
179
|
// !
|
|
@@ -196,7 +202,7 @@ function readToken(lexer, prev) {
|
|
|
196
202
|
// .
|
|
197
203
|
|
|
198
204
|
case 46:
|
|
199
|
-
if (charCodeAt
|
|
205
|
+
if (body.charCodeAt(pos + 1) === 46 && body.charCodeAt(pos + 2) === 46) {
|
|
200
206
|
return new Tok(TokenKind.SPREAD, pos, pos + 3, line, col, prev);
|
|
201
207
|
}
|
|
202
208
|
|
|
@@ -306,7 +312,7 @@ function readToken(lexer, prev) {
|
|
|
306
312
|
// "
|
|
307
313
|
|
|
308
314
|
case 34:
|
|
309
|
-
if (charCodeAt
|
|
315
|
+
if (body.charCodeAt(pos + 1) === 34 && body.charCodeAt(pos + 2) === 34) {
|
|
310
316
|
return readBlockString(source, pos, line, col, prev, lexer);
|
|
311
317
|
}
|
|
312
318
|
|
|
@@ -343,7 +349,7 @@ function positionAfterWhitespace(body, startPosition, lexer) {
|
|
|
343
349
|
var position = startPosition;
|
|
344
350
|
|
|
345
351
|
while (position < bodyLength) {
|
|
346
|
-
var code = charCodeAt
|
|
352
|
+
var code = body.charCodeAt(position); // tab | space | comma | BOM
|
|
347
353
|
|
|
348
354
|
if (code === 9 || code === 32 || code === 44 || code === 0xfeff) {
|
|
349
355
|
++position;
|
|
@@ -354,7 +360,7 @@ function positionAfterWhitespace(body, startPosition, lexer) {
|
|
|
354
360
|
lexer.lineStart = position;
|
|
355
361
|
} else if (code === 13) {
|
|
356
362
|
// carriage return
|
|
357
|
-
if (charCodeAt
|
|
363
|
+
if (body.charCodeAt(position + 1) === 10) {
|
|
358
364
|
position += 2;
|
|
359
365
|
} else {
|
|
360
366
|
++position;
|
|
@@ -382,11 +388,11 @@ function readComment(source, start, line, col, prev) {
|
|
|
382
388
|
var position = start;
|
|
383
389
|
|
|
384
390
|
do {
|
|
385
|
-
code = charCodeAt
|
|
386
|
-
} while (code
|
|
391
|
+
code = body.charCodeAt(++position);
|
|
392
|
+
} while (!isNaN(code) && ( // SourceCharacter but not LineTerminator
|
|
387
393
|
code > 0x001f || code === 0x0009));
|
|
388
394
|
|
|
389
|
-
return new Tok(TokenKind.COMMENT, start, position, line, col, prev, slice
|
|
395
|
+
return new Tok(TokenKind.COMMENT, start, position, line, col, prev, body.slice(start + 1, position));
|
|
390
396
|
}
|
|
391
397
|
/**
|
|
392
398
|
* Reads a number token from the source file, either a float
|
|
@@ -405,43 +411,43 @@ function readNumber(source, start, firstCode, line, col, prev) {
|
|
|
405
411
|
|
|
406
412
|
if (code === 45) {
|
|
407
413
|
// -
|
|
408
|
-
code = charCodeAt
|
|
414
|
+
code = body.charCodeAt(++position);
|
|
409
415
|
}
|
|
410
416
|
|
|
411
417
|
if (code === 48) {
|
|
412
418
|
// 0
|
|
413
|
-
code = charCodeAt
|
|
419
|
+
code = body.charCodeAt(++position);
|
|
414
420
|
|
|
415
421
|
if (code >= 48 && code <= 57) {
|
|
416
422
|
throw (0, _error.syntaxError)(source, position, "Invalid number, unexpected digit after 0: ".concat(printCharCode(code), "."));
|
|
417
423
|
}
|
|
418
424
|
} else {
|
|
419
425
|
position = readDigits(source, position, code);
|
|
420
|
-
code = charCodeAt
|
|
426
|
+
code = body.charCodeAt(position);
|
|
421
427
|
}
|
|
422
428
|
|
|
423
429
|
if (code === 46) {
|
|
424
430
|
// .
|
|
425
431
|
isFloat = true;
|
|
426
|
-
code = charCodeAt
|
|
432
|
+
code = body.charCodeAt(++position);
|
|
427
433
|
position = readDigits(source, position, code);
|
|
428
|
-
code = charCodeAt
|
|
434
|
+
code = body.charCodeAt(position);
|
|
429
435
|
}
|
|
430
436
|
|
|
431
437
|
if (code === 69 || code === 101) {
|
|
432
438
|
// E e
|
|
433
439
|
isFloat = true;
|
|
434
|
-
code = charCodeAt
|
|
440
|
+
code = body.charCodeAt(++position);
|
|
435
441
|
|
|
436
442
|
if (code === 43 || code === 45) {
|
|
437
443
|
// + -
|
|
438
|
-
code = charCodeAt
|
|
444
|
+
code = body.charCodeAt(++position);
|
|
439
445
|
}
|
|
440
446
|
|
|
441
447
|
position = readDigits(source, position, code);
|
|
442
448
|
}
|
|
443
449
|
|
|
444
|
-
return new Tok(isFloat ? TokenKind.FLOAT : TokenKind.INT, start, position, line, col, prev, slice
|
|
450
|
+
return new Tok(isFloat ? TokenKind.FLOAT : TokenKind.INT, start, position, line, col, prev, body.slice(start, position));
|
|
445
451
|
}
|
|
446
452
|
/**
|
|
447
453
|
* Returns the new position in the source after reading digits.
|
|
@@ -456,7 +462,7 @@ function readDigits(source, start, firstCode) {
|
|
|
456
462
|
if (code >= 48 && code <= 57) {
|
|
457
463
|
// 0 - 9
|
|
458
464
|
do {
|
|
459
|
-
code = charCodeAt
|
|
465
|
+
code = body.charCodeAt(++position);
|
|
460
466
|
} while (code >= 48 && code <= 57); // 0 - 9
|
|
461
467
|
|
|
462
468
|
|
|
@@ -479,11 +485,11 @@ function readString(source, start, line, col, prev) {
|
|
|
479
485
|
var code = 0;
|
|
480
486
|
var value = '';
|
|
481
487
|
|
|
482
|
-
while (position < body.length && (code = charCodeAt
|
|
488
|
+
while (position < body.length && !isNaN(code = body.charCodeAt(position)) && // not LineTerminator
|
|
483
489
|
code !== 0x000a && code !== 0x000d) {
|
|
484
490
|
// Closing Quote (")
|
|
485
491
|
if (code === 34) {
|
|
486
|
-
value += slice
|
|
492
|
+
value += body.slice(chunkStart, position);
|
|
487
493
|
return new Tok(TokenKind.STRING, start, position + 1, line, col, prev, value);
|
|
488
494
|
} // SourceCharacter
|
|
489
495
|
|
|
@@ -496,8 +502,8 @@ function readString(source, start, line, col, prev) {
|
|
|
496
502
|
|
|
497
503
|
if (code === 92) {
|
|
498
504
|
// \
|
|
499
|
-
value += slice
|
|
500
|
-
code = charCodeAt
|
|
505
|
+
value += body.slice(chunkStart, position - 1);
|
|
506
|
+
code = body.charCodeAt(position);
|
|
501
507
|
|
|
502
508
|
switch (code) {
|
|
503
509
|
case 34:
|
|
@@ -533,16 +539,18 @@ function readString(source, start, line, col, prev) {
|
|
|
533
539
|
break;
|
|
534
540
|
|
|
535
541
|
case 117:
|
|
536
|
-
|
|
537
|
-
|
|
542
|
+
{
|
|
543
|
+
// uXXXX
|
|
544
|
+
var charCode = uniCharCode(body.charCodeAt(position + 1), body.charCodeAt(position + 2), body.charCodeAt(position + 3), body.charCodeAt(position + 4));
|
|
538
545
|
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
546
|
+
if (charCode < 0) {
|
|
547
|
+
throw (0, _error.syntaxError)(source, position, 'Invalid character escape sequence: ' + "\\u".concat(body.slice(position + 1, position + 5), "."));
|
|
548
|
+
}
|
|
542
549
|
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
550
|
+
value += String.fromCharCode(charCode);
|
|
551
|
+
position += 4;
|
|
552
|
+
break;
|
|
553
|
+
}
|
|
546
554
|
|
|
547
555
|
default:
|
|
548
556
|
throw (0, _error.syntaxError)(source, position, "Invalid character escape sequence: \\".concat(String.fromCharCode(code), "."));
|
|
@@ -569,11 +577,11 @@ function readBlockString(source, start, line, col, prev, lexer) {
|
|
|
569
577
|
var code = 0;
|
|
570
578
|
var rawValue = '';
|
|
571
579
|
|
|
572
|
-
while (position < body.length && (code = charCodeAt
|
|
580
|
+
while (position < body.length && !isNaN(code = body.charCodeAt(position))) {
|
|
573
581
|
// Closing Triple-Quote (""")
|
|
574
|
-
if (code === 34 && charCodeAt
|
|
575
|
-
rawValue += slice
|
|
576
|
-
return new Tok(TokenKind.BLOCK_STRING, start, position + 3, line, col, prev, (0,
|
|
582
|
+
if (code === 34 && body.charCodeAt(position + 1) === 34 && body.charCodeAt(position + 2) === 34) {
|
|
583
|
+
rawValue += body.slice(chunkStart, position);
|
|
584
|
+
return new Tok(TokenKind.BLOCK_STRING, start, position + 3, line, col, prev, (0, _blockString.dedentBlockStringValue)(rawValue));
|
|
577
585
|
} // SourceCharacter
|
|
578
586
|
|
|
579
587
|
|
|
@@ -588,7 +596,7 @@ function readBlockString(source, start, line, col, prev, lexer) {
|
|
|
588
596
|
lexer.lineStart = position;
|
|
589
597
|
} else if (code === 13) {
|
|
590
598
|
// carriage return
|
|
591
|
-
if (charCodeAt
|
|
599
|
+
if (body.charCodeAt(position + 1) === 10) {
|
|
592
600
|
position += 2;
|
|
593
601
|
} else {
|
|
594
602
|
++position;
|
|
@@ -597,8 +605,8 @@ function readBlockString(source, start, line, col, prev, lexer) {
|
|
|
597
605
|
++lexer.line;
|
|
598
606
|
lexer.lineStart = position;
|
|
599
607
|
} else if ( // Escape Triple-Quote (\""")
|
|
600
|
-
code === 92 && charCodeAt
|
|
601
|
-
rawValue += slice
|
|
608
|
+
code === 92 && body.charCodeAt(position + 1) === 34 && body.charCodeAt(position + 2) === 34 && body.charCodeAt(position + 3) === 34) {
|
|
609
|
+
rawValue += body.slice(chunkStart, position) + '"""';
|
|
602
610
|
position += 4;
|
|
603
611
|
chunkStart = position;
|
|
604
612
|
} else {
|
|
@@ -652,7 +660,7 @@ function readName(source, start, line, col, prev) {
|
|
|
652
660
|
var position = start + 1;
|
|
653
661
|
var code = 0;
|
|
654
662
|
|
|
655
|
-
while (position !== bodyLength && (code = charCodeAt
|
|
663
|
+
while (position !== bodyLength && !isNaN(code = body.charCodeAt(position)) && (code === 95 || // _
|
|
656
664
|
code >= 48 && code <= 57 || // 0-9
|
|
657
665
|
code >= 65 && code <= 90 || // A-Z
|
|
658
666
|
code >= 97 && code <= 122) // a-z
|
|
@@ -660,5 +668,5 @@ function readName(source, start, line, col, prev) {
|
|
|
660
668
|
++position;
|
|
661
669
|
}
|
|
662
670
|
|
|
663
|
-
return new Tok(TokenKind.NAME, start, position, line, col, prev, slice
|
|
664
|
-
}
|
|
671
|
+
return new Tok(TokenKind.NAME, start, position, line, col, prev, body.slice(start, position));
|
|
672
|
+
}
|
package/language/lexer.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,10 +8,10 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import defineToJSON from '../jsutils/defineToJSON';
|
|
11
|
-
import type
|
|
12
|
-
import type
|
|
11
|
+
import { type Token } from './ast';
|
|
12
|
+
import { type Source } from './source';
|
|
13
13
|
import { syntaxError } from '../error';
|
|
14
|
-
import
|
|
14
|
+
import { dedentBlockStringValue } from './blockString';
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* Given a Source object, this returns a Lexer for that source.
|
|
@@ -129,6 +129,27 @@ export const TokenKind = Object.freeze({
|
|
|
129
129
|
*/
|
|
130
130
|
export type TokenKindEnum = $Values<typeof TokenKind>;
|
|
131
131
|
|
|
132
|
+
// @internal
|
|
133
|
+
export function isPunctuatorToken(token: Token) {
|
|
134
|
+
const kind = token.kind;
|
|
135
|
+
return (
|
|
136
|
+
kind === TokenKind.BANG ||
|
|
137
|
+
kind === TokenKind.DOLLAR ||
|
|
138
|
+
kind === TokenKind.AMP ||
|
|
139
|
+
kind === TokenKind.PAREN_L ||
|
|
140
|
+
kind === TokenKind.PAREN_R ||
|
|
141
|
+
kind === TokenKind.SPREAD ||
|
|
142
|
+
kind === TokenKind.COLON ||
|
|
143
|
+
kind === TokenKind.EQUALS ||
|
|
144
|
+
kind === TokenKind.AT ||
|
|
145
|
+
kind === TokenKind.BRACKET_L ||
|
|
146
|
+
kind === TokenKind.BRACKET_R ||
|
|
147
|
+
kind === TokenKind.BRACE_L ||
|
|
148
|
+
kind === TokenKind.PIPE ||
|
|
149
|
+
kind === TokenKind.BRACE_R
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
|
|
132
153
|
/**
|
|
133
154
|
* A helper function to describe a token as a string for debugging
|
|
134
155
|
*/
|
|
@@ -137,9 +158,6 @@ export function getTokenDesc(token: Token): string {
|
|
|
137
158
|
return value ? `${token.kind} "${value}"` : token.kind;
|
|
138
159
|
}
|
|
139
160
|
|
|
140
|
-
const charCodeAt = String.prototype.charCodeAt;
|
|
141
|
-
const slice = String.prototype.slice;
|
|
142
|
-
|
|
143
161
|
/**
|
|
144
162
|
* Helper function for constructing the Token object.
|
|
145
163
|
*/
|
|
@@ -205,7 +223,7 @@ function readToken(lexer: Lexer<*>, prev: Token): Token {
|
|
|
205
223
|
return new Tok(TokenKind.EOF, bodyLength, bodyLength, line, col, prev);
|
|
206
224
|
}
|
|
207
225
|
|
|
208
|
-
const code = charCodeAt
|
|
226
|
+
const code = body.charCodeAt(pos);
|
|
209
227
|
|
|
210
228
|
// SourceCharacter
|
|
211
229
|
switch (code) {
|
|
@@ -229,10 +247,7 @@ function readToken(lexer: Lexer<*>, prev: Token): Token {
|
|
|
229
247
|
return new Tok(TokenKind.PAREN_R, pos, pos + 1, line, col, prev);
|
|
230
248
|
// .
|
|
231
249
|
case 46:
|
|
232
|
-
if (
|
|
233
|
-
charCodeAt.call(body, pos + 1) === 46 &&
|
|
234
|
-
charCodeAt.call(body, pos + 2) === 46
|
|
235
|
-
) {
|
|
250
|
+
if (body.charCodeAt(pos + 1) === 46 && body.charCodeAt(pos + 2) === 46) {
|
|
236
251
|
return new Tok(TokenKind.SPREAD, pos, pos + 3, line, col, prev);
|
|
237
252
|
}
|
|
238
253
|
break;
|
|
@@ -330,10 +345,7 @@ function readToken(lexer: Lexer<*>, prev: Token): Token {
|
|
|
330
345
|
return readNumber(source, pos, code, line, col, prev);
|
|
331
346
|
// "
|
|
332
347
|
case 34:
|
|
333
|
-
if (
|
|
334
|
-
charCodeAt.call(body, pos + 1) === 34 &&
|
|
335
|
-
charCodeAt.call(body, pos + 2) === 34
|
|
336
|
-
) {
|
|
348
|
+
if (body.charCodeAt(pos + 1) === 34 && body.charCodeAt(pos + 2) === 34) {
|
|
337
349
|
return readBlockString(source, pos, line, col, prev, lexer);
|
|
338
350
|
}
|
|
339
351
|
return readString(source, pos, line, col, prev);
|
|
@@ -373,7 +385,7 @@ function positionAfterWhitespace(
|
|
|
373
385
|
const bodyLength = body.length;
|
|
374
386
|
let position = startPosition;
|
|
375
387
|
while (position < bodyLength) {
|
|
376
|
-
const code = charCodeAt
|
|
388
|
+
const code = body.charCodeAt(position);
|
|
377
389
|
// tab | space | comma | BOM
|
|
378
390
|
if (code === 9 || code === 32 || code === 44 || code === 0xfeff) {
|
|
379
391
|
++position;
|
|
@@ -384,7 +396,7 @@ function positionAfterWhitespace(
|
|
|
384
396
|
lexer.lineStart = position;
|
|
385
397
|
} else if (code === 13) {
|
|
386
398
|
// carriage return
|
|
387
|
-
if (charCodeAt
|
|
399
|
+
if (body.charCodeAt(position + 1) === 10) {
|
|
388
400
|
position += 2;
|
|
389
401
|
} else {
|
|
390
402
|
++position;
|
|
@@ -409,9 +421,9 @@ function readComment(source, start, line, col, prev): Token {
|
|
|
409
421
|
let position = start;
|
|
410
422
|
|
|
411
423
|
do {
|
|
412
|
-
code = charCodeAt
|
|
424
|
+
code = body.charCodeAt(++position);
|
|
413
425
|
} while (
|
|
414
|
-
code
|
|
426
|
+
!isNaN(code) &&
|
|
415
427
|
// SourceCharacter but not LineTerminator
|
|
416
428
|
(code > 0x001f || code === 0x0009)
|
|
417
429
|
);
|
|
@@ -423,7 +435,7 @@ function readComment(source, start, line, col, prev): Token {
|
|
|
423
435
|
line,
|
|
424
436
|
col,
|
|
425
437
|
prev,
|
|
426
|
-
slice
|
|
438
|
+
body.slice(start + 1, position),
|
|
427
439
|
);
|
|
428
440
|
}
|
|
429
441
|
|
|
@@ -442,12 +454,12 @@ function readNumber(source, start, firstCode, line, col, prev): Token {
|
|
|
442
454
|
|
|
443
455
|
if (code === 45) {
|
|
444
456
|
// -
|
|
445
|
-
code = charCodeAt
|
|
457
|
+
code = body.charCodeAt(++position);
|
|
446
458
|
}
|
|
447
459
|
|
|
448
460
|
if (code === 48) {
|
|
449
461
|
// 0
|
|
450
|
-
code = charCodeAt
|
|
462
|
+
code = body.charCodeAt(++position);
|
|
451
463
|
if (code >= 48 && code <= 57) {
|
|
452
464
|
throw syntaxError(
|
|
453
465
|
source,
|
|
@@ -457,26 +469,26 @@ function readNumber(source, start, firstCode, line, col, prev): Token {
|
|
|
457
469
|
}
|
|
458
470
|
} else {
|
|
459
471
|
position = readDigits(source, position, code);
|
|
460
|
-
code = charCodeAt
|
|
472
|
+
code = body.charCodeAt(position);
|
|
461
473
|
}
|
|
462
474
|
|
|
463
475
|
if (code === 46) {
|
|
464
476
|
// .
|
|
465
477
|
isFloat = true;
|
|
466
478
|
|
|
467
|
-
code = charCodeAt
|
|
479
|
+
code = body.charCodeAt(++position);
|
|
468
480
|
position = readDigits(source, position, code);
|
|
469
|
-
code = charCodeAt
|
|
481
|
+
code = body.charCodeAt(position);
|
|
470
482
|
}
|
|
471
483
|
|
|
472
484
|
if (code === 69 || code === 101) {
|
|
473
485
|
// E e
|
|
474
486
|
isFloat = true;
|
|
475
487
|
|
|
476
|
-
code = charCodeAt
|
|
488
|
+
code = body.charCodeAt(++position);
|
|
477
489
|
if (code === 43 || code === 45) {
|
|
478
490
|
// + -
|
|
479
|
-
code = charCodeAt
|
|
491
|
+
code = body.charCodeAt(++position);
|
|
480
492
|
}
|
|
481
493
|
position = readDigits(source, position, code);
|
|
482
494
|
}
|
|
@@ -488,7 +500,7 @@ function readNumber(source, start, firstCode, line, col, prev): Token {
|
|
|
488
500
|
line,
|
|
489
501
|
col,
|
|
490
502
|
prev,
|
|
491
|
-
slice
|
|
503
|
+
body.slice(start, position),
|
|
492
504
|
);
|
|
493
505
|
}
|
|
494
506
|
|
|
@@ -502,7 +514,7 @@ function readDigits(source, start, firstCode) {
|
|
|
502
514
|
if (code >= 48 && code <= 57) {
|
|
503
515
|
// 0 - 9
|
|
504
516
|
do {
|
|
505
|
-
code = charCodeAt
|
|
517
|
+
code = body.charCodeAt(++position);
|
|
506
518
|
} while (code >= 48 && code <= 57); // 0 - 9
|
|
507
519
|
return position;
|
|
508
520
|
}
|
|
@@ -527,14 +539,14 @@ function readString(source, start, line, col, prev): Token {
|
|
|
527
539
|
|
|
528
540
|
while (
|
|
529
541
|
position < body.length &&
|
|
530
|
-
(code = charCodeAt
|
|
542
|
+
!isNaN((code = body.charCodeAt(position))) &&
|
|
531
543
|
// not LineTerminator
|
|
532
544
|
code !== 0x000a &&
|
|
533
545
|
code !== 0x000d
|
|
534
546
|
) {
|
|
535
547
|
// Closing Quote (")
|
|
536
548
|
if (code === 34) {
|
|
537
|
-
value += slice
|
|
549
|
+
value += body.slice(chunkStart, position);
|
|
538
550
|
return new Tok(
|
|
539
551
|
TokenKind.STRING,
|
|
540
552
|
start,
|
|
@@ -558,8 +570,8 @@ function readString(source, start, line, col, prev): Token {
|
|
|
558
570
|
++position;
|
|
559
571
|
if (code === 92) {
|
|
560
572
|
// \
|
|
561
|
-
value += slice
|
|
562
|
-
code = charCodeAt
|
|
573
|
+
value += body.slice(chunkStart, position - 1);
|
|
574
|
+
code = body.charCodeAt(position);
|
|
563
575
|
switch (code) {
|
|
564
576
|
case 34:
|
|
565
577
|
value += '"';
|
|
@@ -585,12 +597,13 @@ function readString(source, start, line, col, prev): Token {
|
|
|
585
597
|
case 116:
|
|
586
598
|
value += '\t';
|
|
587
599
|
break;
|
|
588
|
-
case 117:
|
|
600
|
+
case 117: {
|
|
601
|
+
// uXXXX
|
|
589
602
|
const charCode = uniCharCode(
|
|
590
|
-
charCodeAt
|
|
591
|
-
charCodeAt
|
|
592
|
-
charCodeAt
|
|
593
|
-
charCodeAt
|
|
603
|
+
body.charCodeAt(position + 1),
|
|
604
|
+
body.charCodeAt(position + 2),
|
|
605
|
+
body.charCodeAt(position + 3),
|
|
606
|
+
body.charCodeAt(position + 4),
|
|
594
607
|
);
|
|
595
608
|
if (charCode < 0) {
|
|
596
609
|
throw syntaxError(
|
|
@@ -603,6 +616,7 @@ function readString(source, start, line, col, prev): Token {
|
|
|
603
616
|
value += String.fromCharCode(charCode);
|
|
604
617
|
position += 4;
|
|
605
618
|
break;
|
|
619
|
+
}
|
|
606
620
|
default:
|
|
607
621
|
throw syntaxError(
|
|
608
622
|
source,
|
|
@@ -632,17 +646,14 @@ function readBlockString(source, start, line, col, prev, lexer): Token {
|
|
|
632
646
|
let code = 0;
|
|
633
647
|
let rawValue = '';
|
|
634
648
|
|
|
635
|
-
while (
|
|
636
|
-
position < body.length &&
|
|
637
|
-
(code = charCodeAt.call(body, position)) !== null
|
|
638
|
-
) {
|
|
649
|
+
while (position < body.length && !isNaN((code = body.charCodeAt(position)))) {
|
|
639
650
|
// Closing Triple-Quote (""")
|
|
640
651
|
if (
|
|
641
652
|
code === 34 &&
|
|
642
|
-
charCodeAt
|
|
643
|
-
charCodeAt
|
|
653
|
+
body.charCodeAt(position + 1) === 34 &&
|
|
654
|
+
body.charCodeAt(position + 2) === 34
|
|
644
655
|
) {
|
|
645
|
-
rawValue += slice
|
|
656
|
+
rawValue += body.slice(chunkStart, position);
|
|
646
657
|
return new Tok(
|
|
647
658
|
TokenKind.BLOCK_STRING,
|
|
648
659
|
start,
|
|
@@ -650,7 +661,7 @@ function readBlockString(source, start, line, col, prev, lexer): Token {
|
|
|
650
661
|
line,
|
|
651
662
|
col,
|
|
652
663
|
prev,
|
|
653
|
-
|
|
664
|
+
dedentBlockStringValue(rawValue),
|
|
654
665
|
);
|
|
655
666
|
}
|
|
656
667
|
|
|
@@ -675,7 +686,7 @@ function readBlockString(source, start, line, col, prev, lexer): Token {
|
|
|
675
686
|
lexer.lineStart = position;
|
|
676
687
|
} else if (code === 13) {
|
|
677
688
|
// carriage return
|
|
678
|
-
if (charCodeAt
|
|
689
|
+
if (body.charCodeAt(position + 1) === 10) {
|
|
679
690
|
position += 2;
|
|
680
691
|
} else {
|
|
681
692
|
++position;
|
|
@@ -685,11 +696,11 @@ function readBlockString(source, start, line, col, prev, lexer): Token {
|
|
|
685
696
|
} else if (
|
|
686
697
|
// Escape Triple-Quote (\""")
|
|
687
698
|
code === 92 &&
|
|
688
|
-
charCodeAt
|
|
689
|
-
charCodeAt
|
|
690
|
-
charCodeAt
|
|
699
|
+
body.charCodeAt(position + 1) === 34 &&
|
|
700
|
+
body.charCodeAt(position + 2) === 34 &&
|
|
701
|
+
body.charCodeAt(position + 3) === 34
|
|
691
702
|
) {
|
|
692
|
-
rawValue += slice
|
|
703
|
+
rawValue += body.slice(chunkStart, position) + '"""';
|
|
693
704
|
position += 4;
|
|
694
705
|
chunkStart = position;
|
|
695
706
|
} else {
|
|
@@ -746,7 +757,7 @@ function readName(source, start, line, col, prev): Token {
|
|
|
746
757
|
let code = 0;
|
|
747
758
|
while (
|
|
748
759
|
position !== bodyLength &&
|
|
749
|
-
(code = charCodeAt
|
|
760
|
+
!isNaN((code = body.charCodeAt(position))) &&
|
|
750
761
|
(code === 95 || // _
|
|
751
762
|
(code >= 48 && code <= 57) || // 0-9
|
|
752
763
|
(code >= 65 && code <= 90) || // A-Z
|
|
@@ -761,6 +772,6 @@ function readName(source, start, line, col, prev): Token {
|
|
|
761
772
|
line,
|
|
762
773
|
col,
|
|
763
774
|
prev,
|
|
764
|
-
slice
|
|
775
|
+
body.slice(start, position),
|
|
765
776
|
);
|
|
766
777
|
}
|