123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import { getLocation } from '../language/location';
- /**
- * Render a helpful description of the location in the GraphQL Source document.
- */
- export function printLocation(location) {
- return printSourceLocation(location.source, getLocation(location.source, location.start));
- }
- /**
- * Render a helpful description of the location in the GraphQL Source document.
- */
- export function printSourceLocation(source, sourceLocation) {
- var firstLineColumnOffset = source.locationOffset.column - 1;
- var body = whitespace(firstLineColumnOffset) + source.body;
- var lineIndex = sourceLocation.line - 1;
- var lineOffset = source.locationOffset.line - 1;
- var lineNum = sourceLocation.line + lineOffset;
- var columnOffset = sourceLocation.line === 1 ? firstLineColumnOffset : 0;
- var columnNum = sourceLocation.column + columnOffset;
- var locationStr = "".concat(source.name, ":").concat(lineNum, ":").concat(columnNum, "\n");
- var lines = body.split(/\r\n|[\n\r]/g);
- var locationLine = lines[lineIndex]; // Special case for minified documents
- if (locationLine.length > 120) {
- var sublineIndex = Math.floor(columnNum / 80);
- var sublineColumnNum = columnNum % 80;
- var sublines = [];
- for (var i = 0; i < locationLine.length; i += 80) {
- sublines.push(locationLine.slice(i, i + 80));
- }
- return locationStr + printPrefixedLines([["".concat(lineNum), sublines[0]]].concat(sublines.slice(1, sublineIndex + 1).map(function (subline) {
- return ['', subline];
- }), [[' ', whitespace(sublineColumnNum - 1) + '^'], ['', sublines[sublineIndex + 1]]]));
- }
- return locationStr + printPrefixedLines([// Lines specified like this: ["prefix", "string"],
- ["".concat(lineNum - 1), lines[lineIndex - 1]], ["".concat(lineNum), locationLine], ['', whitespace(columnNum - 1) + '^'], ["".concat(lineNum + 1), lines[lineIndex + 1]]]);
- }
- function printPrefixedLines(lines) {
- var existingLines = lines.filter(function (_ref) {
- var _ = _ref[0],
- line = _ref[1];
- return line !== undefined;
- });
- var padLen = Math.max.apply(Math, existingLines.map(function (_ref2) {
- var prefix = _ref2[0];
- return prefix.length;
- }));
- return existingLines.map(function (_ref3) {
- var prefix = _ref3[0],
- line = _ref3[1];
- return lpad(padLen, prefix) + (line ? ' | ' + line : ' |');
- }).join('\n');
- }
- function whitespace(len) {
- return Array(len + 1).join(' ');
- }
- function lpad(len, str) {
- return whitespace(len - str.length) + str;
- }
|