UNPKG

parjs

Version:

A parser-combinator library for JavaScript.

45 lines (44 loc) 1.9 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const helpers_1 = require("./functions/helpers"); const repeat_1 = __importDefault(require("lodash/repeat")); const defaults_1 = __importDefault(require("lodash/defaults")); const defaultArgs = { lineNumbers: true, linesBefore: 1 }; function newTraceVisualizer(pAgs) { let args = defaults_1.default(pAgs, defaultArgs); let visualizer = (trace) => { let rows = trace.input.split(/\r\n|\n|\r/g); let locRow = trace.location.line; let around = args.linesBefore; let firstRow = Math.max(0, locRow - around); let linesAround = rows.slice(firstRow, locRow + 1); let prefixLength = 0; if (args.lineNumbers) { let numLength = Math.floor(1 + Math.log(locRow + 1) / Math.log(10)); let rowNumberPrefixer = (n) => `${helpers_1.NumHelpers.padInt(firstRow + n, numLength, " ")} | `; prefixLength = numLength + 3; linesAround = linesAround.map((row, i) => `${rowNumberPrefixer(i + 1)}${row}`); } let errorMarked = `${repeat_1.default(" ", prefixLength + trace.location.column)}^${trace.reason}`; linesAround.push(errorMarked); let linesVisualization = linesAround.join("\n"); let fullVisualization = `${trace.kind} failure at Ln ${trace.location.line + 1} Col ${trace.location.column + 1} ${linesVisualization} Stack: ${trace.stackTrace.map(x => x.type).filter(x => x).join(" < ")} `; return fullVisualization; }; visualizer.configure = newTraceVisualizer; return visualizer; } /** * Visualizes a Parjs failure. */ exports.visualizeTrace = newTraceVisualizer(defaultArgs); //# sourceMappingURL=trace-visualizer.js.map