UNPKG

graphql

Version:

A Query Language and Runtime which can target any service.

1 lines 6.25 kB
{"version":3,"file":"printLocation.js","sourceRoot":"","sources":["../../src/language/printLocation.ts"],"names":[],"mappings":"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","sourcesContent":["/** @category Source */\n\nimport type { Location } from './ast.ts';\nimport type { SourceLocation } from './location.ts';\nimport { getLocation } from './location.ts';\nimport type { Source } from './source.ts';\n\n/**\n * Render a helpful description of the location in the GraphQL Source document.\n * @param location - The AST location to print.\n * @returns A formatted source excerpt with line and column information.\n * @example\n * ```ts\n * import { parse, printLocation } from 'graphql/language';\n *\n * const document = parse('type Query { hello: String }');\n * const location = document.definitions[0].loc;\n *\n * if (location) {\n * const printed = printLocation(location);\n *\n * printed; // => 'GraphQL request:1:1\\n1 | type Query { hello: String }\\n | ^'\n * }\n * ```\n */\nexport function printLocation(location: Location): string {\n return printSourceLocation(\n location.source,\n getLocation(location.source, location.start),\n );\n}\n\n/**\n * Render a helpful description of the location in the GraphQL Source document.\n * @param source - The source document that contains the location.\n * @param sourceLocation - The 1-indexed line and column to print.\n * @returns A formatted source excerpt with line and column information.\n * @example\n * ```ts\n * import { Source, printSourceLocation } from 'graphql/language';\n *\n * const source = new Source('type Query { hello: String }');\n * const printed = printSourceLocation(source, { line: 1, column: 14 });\n *\n * printed; // => 'GraphQL request:1:14\\n1 | type Query { hello: String }\\n | ^'\n * ```\n */\nexport function printSourceLocation(\n source: Source,\n sourceLocation: SourceLocation,\n): string {\n const firstLineColumnOffset = source.locationOffset.column - 1;\n const body = ''.padStart(firstLineColumnOffset) + source.body;\n\n const lineIndex = sourceLocation.line - 1;\n const lineOffset = source.locationOffset.line - 1;\n const lineNum = sourceLocation.line + lineOffset;\n\n const columnOffset = sourceLocation.line === 1 ? firstLineColumnOffset : 0;\n const columnNum = sourceLocation.column + columnOffset;\n const locationStr = `${source.name}:${lineNum}:${columnNum}\\n`;\n\n const lines = body.split(/\\r\\n|[\\n\\r]/g);\n const locationLine = lines[lineIndex];\n\n // Special case for minified documents\n if (locationLine.length > 120) {\n const subLineIndex = Math.floor(columnNum / 80);\n const subLineColumnNum = columnNum % 80;\n const subLines: Array<string> = [];\n for (let i = 0; i < locationLine.length; i += 80) {\n subLines.push(locationLine.slice(i, i + 80));\n }\n\n return (\n locationStr +\n printPrefixedLines([\n [`${lineNum} |`, subLines[0]],\n ...subLines\n .slice(1, subLineIndex + 1)\n .map((subLine) => ['|', subLine] as const),\n ['|', '^'.padStart(subLineColumnNum)],\n ['|', subLines[subLineIndex + 1]],\n ])\n );\n }\n\n return (\n locationStr +\n printPrefixedLines([\n // Lines specified like this: [\"prefix\", \"string\"],\n [`${lineNum - 1} |`, lines[lineIndex - 1]],\n [`${lineNum} |`, locationLine],\n ['|', '^'.padStart(columnNum)],\n [`${lineNum + 1} |`, lines[lineIndex + 1]],\n ])\n );\n}\n\nfunction printPrefixedLines(\n lines: ReadonlyArray<readonly [string, string]>,\n): string {\n const existingLines = lines.filter(([_, line]) => line !== undefined);\n\n const padLen = Math.max(...existingLines.map(([prefix]) => prefix.length));\n return existingLines\n .map(([prefix, line]) => prefix.padStart(padLen) + (line ? ' ' + line : ''))\n .join('\\n');\n}\n"]}