UNPKG

graphql

Version:

A Query Language and Runtime which can target any service.

1 lines 6.15 kB
{"version":3,"file":"schemaCoordinateLexer.js","sourceRoot":"","sources":["../../src/language/schemaCoordinateLexer.ts"],"names":[],"mappings":"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","sourcesContent":["import { syntaxError } from '../error/syntaxError.ts';\n\nimport { Token } from './ast.ts';\nimport { isNameStart } from './characterClasses.ts';\nimport type { LexerInterface } from './lexer.ts';\nimport { createToken, printCodePointAt, readName } from './lexer.ts';\nimport type { Source } from './source.ts';\nimport { TokenKind } from './tokenKind.ts';\n\n/**\n * Given a Source schema coordinate, creates a Lexer for that source.\n * A SchemaCoordinateLexer 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 *\n * @internal\n */\nexport class SchemaCoordinateLexer implements LexerInterface {\n source: Source;\n\n /**\n * The previously focused non-ignored token.\n *\n * @internal\n */\n lastToken: Token;\n\n /**\n * The currently focused non-ignored token.\n *\n * @internal\n */\n token: Token;\n\n /**\n * The (1-indexed) line containing the current token.\n * Since a schema coordinate may not contain newline, this value is always 1.\n *\n * @internal\n */\n line: 1 = 1 as const;\n\n /**\n * The character offset at which the current line begins.\n * Since a schema coordinate may not contain newline, this value is always 0.\n *\n * @internal\n */\n lineStart: 0 = 0 as const;\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 }\n\n get [Symbol.toStringTag](): string {\n return 'SchemaCoordinateLexer';\n }\n\n /**\n * Advances the token stream to the next non-ignored token.\n *\n * @internal\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 current Lexer token.\n *\n * @internal\n */\n lookahead(): Token {\n let token = this.token;\n if (token.kind !== TokenKind.EOF) {\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 return token;\n }\n}\n\n/**\n * Gets the next token from the source starting at the given position.\n *\n * @internal\n */\nfunction readNextToken(lexer: SchemaCoordinateLexer, start: number): Token {\n const body = lexer.source.body;\n const bodyLength = body.length;\n const position = start;\n\n if (position < bodyLength) {\n const code = body.charCodeAt(position);\n\n switch (code) {\n case 0x002e: // .\n return createToken(lexer, TokenKind.DOT, 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 0x003a: // :\n return createToken(lexer, TokenKind.COLON, position, position + 1);\n case 0x0040: // @\n return createToken(lexer, TokenKind.AT, position, position + 1);\n }\n\n // Name\n if (isNameStart(code)) {\n return readName(lexer, position);\n }\n\n throw syntaxError(\n lexer.source,\n position,\n `Invalid character: ${printCodePointAt(lexer, position)}.`,\n );\n }\n\n return createToken(lexer, TokenKind.EOF, bodyLength, bodyLength);\n}\n"]}