UNPKG

graphql

Version:

A Query Language and Runtime which can target any service.

1 lines 44.1 kB
{"version":3,"file":"lexer.js","sourceRoot":"","sources":["../../src/language/lexer.ts"],"names":[],"mappings":"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","sourcesContent":["/** @category Lexing */\n\nimport { syntaxError } from '../error/syntaxError.ts';\n\nimport { Token } from './ast.ts';\nimport { dedentBlockStringLines } from './blockString.ts';\nimport { isDigit, isNameContinue, isNameStart } from './characterClasses.ts';\nimport type { Source } from './source.ts';\nimport { TokenKind } from './tokenKind.ts';\n\n/**\n * A Lexer interface which provides common properties and methods required for\n * lexing GraphQL source.\n *\n * @internal\n */\nexport interface LexerInterface {\n source: Source;\n lastToken: Token;\n token: Token;\n line: number;\n lineStart: number;\n advance: () => Token;\n lookahead: () => Token;\n}\n\n/**\n * Given a Source object, creates a Lexer for that source.\n * A Lexer is a stateful stream generator in that every time\n * it is advanced, it returns the next token in the Source. Assuming the\n * source lexes, the final Token emitted by the lexer will be of kind\n * EOF, after which the lexer will repeatedly return the same EOF token\n * whenever called.\n */\nexport class Lexer implements LexerInterface {\n /** Source document used to derive error locations. */\n source: Source;\n\n /** Most recent non-ignored token returned by the lexer. */\n lastToken: Token;\n\n /** Current non-ignored token at the lexer cursor. */\n token: Token;\n\n /** The (1-indexed) line containing the current token. */\n line: number;\n\n /** Character offset where the current line starts. */\n lineStart: number;\n\n /**\n * Creates a Lexer instance.\n * @param source - Source document used to derive error locations.\n * @example\n * ```ts\n * import { Lexer, Source, TokenKind } from 'graphql/language';\n *\n * const lexer = new Lexer(new Source('{ hello }'));\n *\n * lexer.token.kind; // => TokenKind.SOF\n * lexer.advance().kind; // => TokenKind.BRACE_L\n * lexer.advance().value; // => 'hello'\n * lexer.advance().kind; // => TokenKind.BRACE_R\n * ```\n */\n constructor(source: Source) {\n const startOfFileToken = new Token(TokenKind.SOF, 0, 0, 0, 0);\n\n this.source = source;\n this.lastToken = startOfFileToken;\n this.token = startOfFileToken;\n this.line = 1;\n this.lineStart = 0;\n }\n\n /**\n * Returns the value used by `Object.prototype.toString`.\n * @returns The built-in string tag for this object.\n */\n get [Symbol.toStringTag](): string {\n return 'Lexer';\n }\n\n /**\n * Advances the token stream to the next non-ignored token.\n * @returns The next non-ignored token.\n * @example\n * ```ts\n * import { Lexer, Source } from 'graphql/language';\n *\n * const lexer = new Lexer(new Source('{ hello }'));\n * const token = lexer.advance();\n *\n * token.kind; // => '{'\n * lexer.token; // => token\n * ```\n */\n advance(): Token {\n this.lastToken = this.token;\n const token = (this.token = this.lookahead());\n return token;\n }\n\n /**\n * Looks ahead and returns the next non-ignored token, but does not change\n * the state of Lexer.\n * @returns The next non-ignored token without advancing the lexer.\n * @example\n * ```ts\n * import { Lexer, Source } from 'graphql/language';\n *\n * const lexer = new Lexer(new Source('{ hello }'));\n * const token = lexer.lookahead();\n *\n * token.kind; // => '{'\n * lexer.token.kind; // => '<SOF>'\n * ```\n */\n lookahead(): Token {\n let token = this.token;\n if (token.kind !== TokenKind.EOF) {\n do {\n if (token.next) {\n token = token.next;\n } else {\n // Read the next token and form a link in the token linked-list.\n const nextToken = readNextToken(this, token.end);\n // @ts-expect-error next is only mutable during parsing.\n token.next = nextToken;\n // @ts-expect-error prev is only mutable during parsing.\n nextToken.prev = token;\n token = nextToken;\n }\n } while (token.kind === TokenKind.COMMENT);\n }\n return token;\n }\n}\n\n/** @internal */\nexport function isPunctuatorTokenKind(kind: TokenKind): boolean {\n return (\n kind === TokenKind.BANG ||\n kind === TokenKind.DOLLAR ||\n kind === TokenKind.AMP ||\n kind === TokenKind.PAREN_L ||\n kind === TokenKind.PAREN_R ||\n kind === TokenKind.DOT ||\n kind === TokenKind.SPREAD ||\n kind === TokenKind.COLON ||\n kind === TokenKind.EQUALS ||\n kind === TokenKind.AT ||\n kind === TokenKind.BRACKET_L ||\n kind === TokenKind.BRACKET_R ||\n kind === TokenKind.BRACE_L ||\n kind === TokenKind.PIPE ||\n kind === TokenKind.BRACE_R\n );\n}\n\n/**\n * A Unicode scalar value is any Unicode code point except surrogate code\n * points. In other words, the inclusive ranges of values 0x0000 to 0xD7FF and\n * 0xE000 to 0x10FFFF.\n *\n * SourceCharacter ::\n * - \"Any Unicode scalar value\"\n *\n * @internal\n */\nfunction isUnicodeScalarValue(code: number): boolean {\n return (\n (code >= 0x0000 && code <= 0xd7ff) || (code >= 0xe000 && code <= 0x10ffff)\n );\n}\n\n/**\n * The GraphQL specification defines source text as a sequence of unicode scalar\n * values (which Unicode defines to exclude surrogate code points). However\n * JavaScript defines strings as a sequence of UTF-16 code units which may\n * include surrogates. A surrogate pair is a valid source character as it\n * encodes a supplementary code point (above U+FFFF), but unpaired surrogate\n * code points are not valid source characters.\n *\n * @internal\n */\nfunction isSupplementaryCodePoint(body: string, location: number): boolean {\n return (\n isLeadingSurrogate(body.charCodeAt(location)) &&\n isTrailingSurrogate(body.charCodeAt(location + 1))\n );\n}\n\nfunction isLeadingSurrogate(code: number): boolean {\n return code >= 0xd800 && code <= 0xdbff;\n}\n\nfunction isTrailingSurrogate(code: number): boolean {\n return code >= 0xdc00 && code <= 0xdfff;\n}\n\n/**\n * Prints the code point (or end of file reference) at a given location in a\n * source for use in error messages.\n *\n * Printable ASCII is printed quoted, while other points are printed in Unicode\n * code point form (ie. U+1234).\n *\n * @internal\n */\nexport function printCodePointAt(\n lexer: LexerInterface,\n location: number,\n): string {\n const code = lexer.source.body.codePointAt(location);\n\n if (code === undefined) {\n return TokenKind.EOF;\n } else if (code >= 0x0020 && code <= 0x007e) {\n // Printable ASCII\n const char = String.fromCodePoint(code);\n return char === '\"' ? \"'\\\"'\" : `\"${char}\"`;\n }\n\n // Unicode code point\n return 'U+' + code.toString(16).toUpperCase().padStart(4, '0');\n}\n\n/**\n * Create a token with line and column location information.\n *\n * @internal\n */\nexport function createToken(\n lexer: LexerInterface,\n kind: TokenKind,\n start: number,\n end: number,\n value?: string,\n): Token {\n const line = lexer.line;\n const col = 1 + start - lexer.lineStart;\n return new Token(kind, start, end, line, col, value);\n}\n\n/**\n * Gets the next token from the source starting at the given position.\n *\n * This skips over whitespace until it finds the next lexable token, then lexes\n * punctuators immediately or calls the appropriate helper function for more\n * complicated tokens.\n *\n * @internal\n */\nfunction readNextToken(lexer: Lexer, start: number): Token {\n const body = lexer.source.body;\n const bodyLength = body.length;\n let position = start;\n\n while (position < bodyLength) {\n const code = body.charCodeAt(position);\n\n // SourceCharacter\n switch (code) {\n // Ignored ::\n // - UnicodeBOM\n // - WhiteSpace\n // - LineTerminator\n // - Comment\n // - Comma\n //\n // UnicodeBOM :: \"Byte Order Mark (U+FEFF)\"\n //\n // WhiteSpace ::\n // - \"Horizontal Tab (U+0009)\"\n // - \"Space (U+0020)\"\n //\n // Comma :: ,\n case 0xfeff: // <BOM>\n case 0x0009: // \\t\n case 0x0020: // <space>\n case 0x002c: // ,\n ++position;\n continue;\n // LineTerminator ::\n // - \"New Line (U+000A)\"\n // - \"Carriage Return (U+000D)\" [lookahead != \"New Line (U+000A)\"]\n // - \"Carriage Return (U+000D)\" \"New Line (U+000A)\"\n case 0x000a: // \\n\n ++position;\n ++lexer.line;\n lexer.lineStart = position;\n continue;\n case 0x000d: // \\r\n if (body.charCodeAt(position + 1) === 0x000a) {\n position += 2;\n } else {\n ++position;\n }\n ++lexer.line;\n lexer.lineStart = position;\n continue;\n // Comment\n case 0x0023: // #\n return readComment(lexer, position);\n // Token ::\n // - Punctuator\n // - Name\n // - IntValue\n // - FloatValue\n // - StringValue\n //\n // Punctuator :: one of ! $ & ( ) ... : = @ [ ] { | }\n case 0x0021: // !\n return createToken(lexer, TokenKind.BANG, position, position + 1);\n case 0x0024: // $\n return createToken(lexer, TokenKind.DOLLAR, position, position + 1);\n case 0x0026: // &\n return createToken(lexer, TokenKind.AMP, position, position + 1);\n case 0x0028: // (\n return createToken(lexer, TokenKind.PAREN_L, position, position + 1);\n case 0x0029: // )\n return createToken(lexer, TokenKind.PAREN_R, position, position + 1);\n case 0x002e: {\n // .\n const nextCode = body.charCodeAt(position + 1);\n if (nextCode === 0x002e && body.charCodeAt(position + 2) === 0x002e) {\n return createToken(lexer, TokenKind.SPREAD, position, position + 3);\n }\n if (nextCode === 0x002e) {\n throw syntaxError(\n lexer.source,\n position,\n 'Unexpected \"..\", did you mean \"...\"?',\n );\n } else if (isDigit(nextCode)) {\n const digits = lexer.source.body.slice(\n position + 1,\n readDigits(lexer, position + 1, nextCode),\n );\n throw syntaxError(\n lexer.source,\n position,\n `Invalid number, expected digit before \".\", did you mean \"0.${digits}\"?`,\n );\n }\n break;\n }\n case 0x003a: // :\n return createToken(lexer, TokenKind.COLON, position, position + 1);\n case 0x003d: // =\n return createToken(lexer, TokenKind.EQUALS, position, position + 1);\n case 0x0040: // @\n return createToken(lexer, TokenKind.AT, position, position + 1);\n case 0x005b: // [\n return createToken(lexer, TokenKind.BRACKET_L, position, position + 1);\n case 0x005d: // ]\n return createToken(lexer, TokenKind.BRACKET_R, position, position + 1);\n case 0x007b: // {\n return createToken(lexer, TokenKind.BRACE_L, position, position + 1);\n case 0x007c: // |\n return createToken(lexer, TokenKind.PIPE, position, position + 1);\n case 0x007d: // }\n return createToken(lexer, TokenKind.BRACE_R, position, position + 1);\n // StringValue\n case 0x0022: // \"\n if (\n body.charCodeAt(position + 1) === 0x0022 &&\n body.charCodeAt(position + 2) === 0x0022\n ) {\n return readBlockString(lexer, position);\n }\n return readString(lexer, position);\n }\n\n // IntValue | FloatValue (Digit | -)\n if (isDigit(code) || code === 0x002d) {\n return readNumber(lexer, position, code);\n }\n\n // Name\n if (isNameStart(code)) {\n return readName(lexer, position);\n }\n\n throw syntaxError(\n lexer.source,\n position,\n code === 0x0027\n ? 'Unexpected single quote character (\\'), did you mean to use a double quote (\")?'\n : isUnicodeScalarValue(code) || isSupplementaryCodePoint(body, position)\n ? `Unexpected character: ${printCodePointAt(lexer, position)}.`\n : `Invalid character: ${printCodePointAt(lexer, position)}.`,\n );\n }\n\n return createToken(lexer, TokenKind.EOF, bodyLength, bodyLength);\n}\n\n/**\n * Reads a comment token from the source file.\n *\n * ```\n * Comment :: # CommentChar* [lookahead != CommentChar]\n *\n * CommentChar :: SourceCharacter but not LineTerminator\n * ```\n *\n * @internal\n */\nfunction readComment(lexer: Lexer, start: number): Token {\n const body = lexer.source.body;\n const bodyLength = body.length;\n let position = start + 1;\n\n while (position < bodyLength) {\n const code = body.charCodeAt(position);\n\n // LineTerminator (\\n | \\r)\n if (code === 0x000a || code === 0x000d) {\n break;\n }\n\n // SourceCharacter\n if (isUnicodeScalarValue(code)) {\n ++position;\n } else if (isSupplementaryCodePoint(body, position)) {\n position += 2;\n } else {\n break;\n }\n }\n\n return createToken(\n lexer,\n TokenKind.COMMENT,\n start,\n position,\n body.slice(start + 1, position),\n );\n}\n\n/**\n * Reads a number token from the source file, either a FloatValue or an IntValue\n * depending on whether a FractionalPart or ExponentPart is encountered.\n *\n * ```\n * IntValue :: IntegerPart [lookahead != {Digit, `.`, NameStart}]\n *\n * IntegerPart ::\n * - NegativeSign? 0\n * - NegativeSign? NonZeroDigit Digit*\n *\n * NegativeSign :: -\n *\n * NonZeroDigit :: Digit but not `0`\n *\n * FloatValue ::\n * - IntegerPart FractionalPart ExponentPart [lookahead != {Digit, `.`, NameStart}]\n * - IntegerPart FractionalPart [lookahead != {Digit, `.`, NameStart}]\n * - IntegerPart ExponentPart [lookahead != {Digit, `.`, NameStart}]\n *\n * FractionalPart :: . Digit+\n *\n * ExponentPart :: ExponentIndicator Sign? Digit+\n *\n * ExponentIndicator :: one of `e` `E`\n *\n * Sign :: one of + -\n * ```\n *\n * @internal\n */\nfunction readNumber(lexer: Lexer, start: number, firstCode: number): Token {\n const body = lexer.source.body;\n let position = start;\n let code = firstCode;\n let isFloat = false;\n\n // NegativeSign (-)\n if (code === 0x002d) {\n code = body.charCodeAt(++position);\n }\n\n // Zero (0)\n if (code === 0x0030) {\n code = body.charCodeAt(++position);\n if (isDigit(code)) {\n throw syntaxError(\n lexer.source,\n position,\n `Invalid number, unexpected digit after 0: ${printCodePointAt(\n lexer,\n position,\n )}.`,\n );\n }\n } else {\n position = readDigits(lexer, position, code);\n code = body.charCodeAt(position);\n }\n\n // Full stop (.)\n if (code === 0x002e) {\n isFloat = true;\n\n code = body.charCodeAt(++position);\n position = readDigits(lexer, position, code);\n code = body.charCodeAt(position);\n }\n\n // E e\n if (code === 0x0045 || code === 0x0065) {\n isFloat = true;\n\n code = body.charCodeAt(++position);\n // + -\n if (code === 0x002b || code === 0x002d) {\n code = body.charCodeAt(++position);\n }\n position = readDigits(lexer, position, code);\n code = body.charCodeAt(position);\n }\n\n // Numbers cannot be followed by . or NameStart\n if (code === 0x002e || isNameStart(code)) {\n throw syntaxError(\n lexer.source,\n position,\n `Invalid number, expected digit but got: ${printCodePointAt(\n lexer,\n position,\n )}.`,\n );\n }\n\n return createToken(\n lexer,\n isFloat ? TokenKind.FLOAT : TokenKind.INT,\n start,\n position,\n body.slice(start, position),\n );\n}\n\n/**\n * Returns the new position in the source after reading one or more digits.\n *\n * @internal\n */\nfunction readDigits(lexer: Lexer, start: number, firstCode: number): number {\n if (!isDigit(firstCode)) {\n throw syntaxError(\n lexer.source,\n start,\n `Invalid number, expected digit but got: ${printCodePointAt(\n lexer,\n start,\n )}.`,\n );\n }\n\n const body = lexer.source.body;\n let position = start + 1; // +1 to skip first firstCode\n\n while (isDigit(body.charCodeAt(position))) {\n ++position;\n }\n\n return position;\n}\n\n/**\n * Reads a single-quote string token from the source file.\n *\n * ```\n * StringValue ::\n * - `\"\"` [lookahead != `\"`]\n * - `\"` StringCharacter+ `\"`\n *\n * StringCharacter ::\n * - SourceCharacter but not `\"` or `\\` or LineTerminator\n * - `\\u` EscapedUnicode\n * - `\\` EscapedCharacter\n *\n * EscapedUnicode ::\n * - `{` HexDigit+ `}`\n * - HexDigit HexDigit HexDigit HexDigit\n *\n * EscapedCharacter :: one of `\"` `\\` `/` `b` `f` `n` `r` `t`\n * ```\n *\n * @internal\n */\nfunction readString(lexer: Lexer, start: number): Token {\n const body = lexer.source.body;\n const bodyLength = body.length;\n let position = start + 1;\n let chunkStart = position;\n let value = '';\n\n while (position < bodyLength) {\n const code = body.charCodeAt(position);\n\n // Closing Quote (\")\n if (code === 0x0022) {\n value += body.slice(chunkStart, position);\n return createToken(lexer, TokenKind.STRING, start, position + 1, value);\n }\n\n // Escape Sequence (\\)\n if (code === 0x005c) {\n value += body.slice(chunkStart, position);\n const escape =\n body.charCodeAt(position + 1) === 0x0075 // u\n ? body.charCodeAt(position + 2) === 0x007b // {\n ? readEscapedUnicodeVariableWidth(lexer, position)\n : readEscapedUnicodeFixedWidth(lexer, position)\n : readEscapedCharacter(lexer, position);\n value += escape.value;\n position += escape.size;\n chunkStart = position;\n continue;\n }\n\n // LineTerminator (\\n | \\r)\n if (code === 0x000a || code === 0x000d) {\n break;\n }\n\n // SourceCharacter\n if (isUnicodeScalarValue(code)) {\n ++position;\n } else if (isSupplementaryCodePoint(body, position)) {\n position += 2;\n } else {\n throw syntaxError(\n lexer.source,\n position,\n `Invalid character within String: ${printCodePointAt(\n lexer,\n position,\n )}.`,\n );\n }\n }\n\n throw syntaxError(lexer.source, position, 'Unterminated string.');\n}\n\n// The string value and lexed size of an escape sequence.\ninterface EscapeSequence {\n value: string;\n size: number;\n}\n\nfunction readEscapedUnicodeVariableWidth(\n lexer: Lexer,\n position: number,\n): EscapeSequence {\n const body = lexer.source.body;\n let point = 0;\n let size = 3;\n // Cannot be larger than 12 chars (\\u{00000000}).\n while (size < 12) {\n const code = body.charCodeAt(position + size++);\n // Closing Brace (})\n if (code === 0x007d) {\n // Must be at least 5 chars (\\u{0}) and encode a Unicode scalar value.\n if (size < 5 || !isUnicodeScalarValue(point)) {\n break;\n }\n return { value: String.fromCodePoint(point), size };\n }\n // Append this hex digit to the code point.\n point = (point << 4) | readHexDigit(code);\n if (point < 0) {\n break;\n }\n }\n\n throw syntaxError(\n lexer.source,\n position,\n `Invalid Unicode escape sequence: \"${body.slice(\n position,\n position + size,\n )}\".`,\n );\n}\n\nfunction readEscapedUnicodeFixedWidth(\n lexer: Lexer,\n position: number,\n): EscapeSequence {\n const body = lexer.source.body;\n const code = read16BitHexCode(body, position + 2);\n\n if (isUnicodeScalarValue(code)) {\n return { value: String.fromCodePoint(code), size: 6 };\n }\n\n // GraphQL allows JSON-style surrogate pair escape sequences, but only when\n // a valid pair is formed.\n if (isLeadingSurrogate(code)) {\n // \\u\n if (\n body.charCodeAt(position + 6) === 0x005c &&\n body.charCodeAt(position + 7) === 0x0075\n ) {\n const trailingCode = read16BitHexCode(body, position + 8);\n if (isTrailingSurrogate(trailingCode)) {\n // JavaScript defines strings as a sequence of UTF-16 code units and\n // encodes Unicode code points above U+FFFF using a surrogate pair of\n // code units. Since this is a surrogate pair escape sequence, just\n // include both codes into the JavaScript string value. Had JavaScript\n // not been internally based on UTF-16, then this surrogate pair would\n // be decoded to retrieve the supplementary code point.\n return { value: String.fromCodePoint(code, trailingCode), size: 12 };\n }\n }\n }\n\n throw syntaxError(\n lexer.source,\n position,\n `Invalid Unicode escape sequence: \"${body.slice(position, position + 6)}\".`,\n );\n}\n\n/**\n * Reads four hexadecimal characters and returns the positive integer that 16bit\n * hexadecimal string represents. For example, \"000f\" will return 15, and \"dead\"\n * will return 57005.\n *\n * Returns a negative number if any char was not a valid hexadecimal digit.\n *\n * @internal\n */\nfunction read16BitHexCode(body: string, position: number): number {\n // readHexDigit() returns -1 on error. ORing a negative value with any other\n // value always produces a negative value.\n return (\n (readHexDigit(body.charCodeAt(position)) << 12) |\n (readHexDigit(body.charCodeAt(position + 1)) << 8) |\n (readHexDigit(body.charCodeAt(position + 2)) << 4) |\n readHexDigit(body.charCodeAt(position + 3))\n );\n}\n\n/**\n * Reads a hexadecimal character and returns its positive integer value (0-15).\n *\n * '0' becomes 0, '9' becomes 9\n * 'A' becomes 10, 'F' becomes 15\n * 'a' becomes 10, 'f' becomes 15\n *\n * Returns -1 if the provided character code was not a valid hexadecimal digit.\n *\n * HexDigit :: one of\n * - `0` `1` `2` `3` `4` `5` `6` `7` `8` `9`\n * - `A` `B` `C` `D` `E` `F`\n * - `a` `b` `c` `d` `e` `f`\n *\n * @internal\n */\nfunction readHexDigit(code: number): number {\n return code >= 0x0030 && code <= 0x0039 // 0-9\n ? code - 0x0030\n : code >= 0x0041 && code <= 0x0046 // A-F\n ? code - 0x0037\n : code >= 0x0061 && code <= 0x0066 // a-f\n ? code - 0x0057\n : -1;\n}\n\n/**\n * | Escaped Character | Code Point | Character Name |\n * | ----------------- | ---------- | ---------------------------- |\n * | `\"` | U+0022 | double quote |\n * | `\\` | U+005C | reverse solidus (back slash) |\n * | `/` | U+002F | solidus (forward slash) |\n * | `b` | U+0008 | backspace |\n * | `f` | U+000C | form feed |\n * | `n` | U+000A | line feed (new line) |\n * | `r` | U+000D | carriage return |\n * | `t` | U+0009 | horizontal tab |\n *\n * @internal\n */\nfunction readEscapedCharacter(lexer: Lexer, position: number): EscapeSequence {\n const body = lexer.source.body;\n const code = body.charCodeAt(position + 1);\n switch (code) {\n case 0x0022: // \"\n return { value: '\\u0022', size: 2 };\n case 0x005c: // \\\n return { value: '\\u005c', size: 2 };\n case 0x002f: // /\n return { value: '\\u002f', size: 2 };\n case 0x0062: // b\n return { value: '\\u0008', size: 2 };\n case 0x0066: // f\n return { value: '\\u000c', size: 2 };\n case 0x006e: // n\n return { value: '\\u000a', size: 2 };\n case 0x0072: // r\n return { value: '\\u000d', size: 2 };\n case 0x0074: // t\n return { value: '\\u0009', size: 2 };\n }\n throw syntaxError(\n lexer.source,\n position,\n `Invalid character escape sequence: \"${body.slice(\n position,\n position + 2,\n )}\".`,\n );\n}\n\n/**\n * Reads a block string token from the source file.\n *\n * ```\n * StringValue ::\n * - `\"\"\"` BlockStringCharacter* `\"\"\"`\n *\n * BlockStringCharacter ::\n * - SourceCharacter but not `\"\"\"` or `\\\"\"\"`\n * - `\\\"\"\"`\n * ```\n *\n * @internal\n */\nfunction readBlockString(lexer: Lexer, start: number): Token {\n const body = lexer.source.body;\n const bodyLength = body.length;\n let lineStart = lexer.lineStart;\n\n let position = start + 3;\n let chunkStart = position;\n let currentLine = '';\n\n const blockLines = [];\n while (position < bodyLength) {\n const code = body.charCodeAt(position);\n\n // Closing Triple-Quote (\"\"\")\n if (\n code === 0x0022 &&\n body.charCodeAt(position + 1) === 0x0022 &&\n body.charCodeAt(position + 2) === 0x0022\n ) {\n currentLine += body.slice(chunkStart, position);\n blockLines.push(currentLine);\n\n const token = createToken(\n lexer,\n TokenKind.BLOCK_STRING,\n start,\n position + 3,\n // Return a string of the lines joined with U+000A.\n dedentBlockStringLines(blockLines).join('\\n'),\n );\n\n lexer.line += blockLines.length - 1;\n lexer.lineStart = lineStart;\n return token;\n }\n\n // Escaped Triple-Quote (\\\"\"\")\n if (\n code === 0x005c &&\n body.charCodeAt(position + 1) === 0x0022 &&\n body.charCodeAt(position + 2) === 0x0022 &&\n body.charCodeAt(position + 3) === 0x0022\n ) {\n currentLine += body.slice(chunkStart, position);\n chunkStart = position + 1; // skip only slash\n position += 4;\n continue;\n }\n\n // LineTerminator\n if (code === 0x000a || code === 0x000d) {\n currentLine += body.slice(chunkStart, position);\n blockLines.push(currentLine);\n\n if (code === 0x000d && body.charCodeAt(position + 1) === 0x000a) {\n position += 2;\n } else {\n ++position;\n }\n\n currentLine = '';\n chunkStart = position;\n lineStart = position;\n continue;\n }\n\n // SourceCharacter\n if (isUnicodeScalarValue(code)) {\n ++position;\n } else if (isSupplementaryCodePoint(body, position)) {\n position += 2;\n } else {\n throw syntaxError(\n lexer.source,\n position,\n `Invalid character within String: ${printCodePointAt(\n lexer,\n position,\n )}.`,\n );\n }\n }\n\n throw syntaxError(lexer.source, position, 'Unterminated string.');\n}\n\n/**\n * Reads an alphanumeric + underscore name from the source.\n *\n * ```\n * Name ::\n * - NameStart NameContinue* [lookahead != NameContinue]\n * ```\n *\n * @internal\n */\nexport function readName(lexer: LexerInterface, start: number): Token {\n const body = lexer.source.body;\n const bodyLength = body.length;\n let position = start + 1;\n\n while (position < bodyLength) {\n const code = body.charCodeAt(position);\n if (isNameContinue(code)) {\n ++position;\n } else {\n break;\n }\n }\n\n return createToken(\n lexer,\n TokenKind.NAME,\n start,\n position,\n body.slice(start, position),\n );\n}\n"]}