52 lines
1.6 KiB
JavaScript
52 lines
1.6 KiB
JavaScript
|
|
"use strict";
|
||
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
|
exports.XmlError = void 0;
|
||
|
|
/**
|
||
|
|
* An error that occurred while parsing XML.
|
||
|
|
*/
|
||
|
|
class XmlError extends Error {
|
||
|
|
constructor(message, charIndex, xml) {
|
||
|
|
let column = 1;
|
||
|
|
let excerpt = '';
|
||
|
|
let line = 1;
|
||
|
|
// Find the line and column where the error occurred.
|
||
|
|
for (let i = 0; i < charIndex; ++i) {
|
||
|
|
let char = xml[i];
|
||
|
|
if (char === '\n') {
|
||
|
|
column = 1;
|
||
|
|
excerpt = '';
|
||
|
|
line += 1;
|
||
|
|
}
|
||
|
|
else {
|
||
|
|
column += 1;
|
||
|
|
excerpt += char;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
let eol = xml.indexOf('\n', charIndex);
|
||
|
|
excerpt += eol === -1
|
||
|
|
? xml.slice(charIndex)
|
||
|
|
: xml.slice(charIndex, eol);
|
||
|
|
let excerptStart = 0;
|
||
|
|
// Keep the excerpt below 50 chars, but always keep the error position in
|
||
|
|
// view.
|
||
|
|
if (excerpt.length > 50) {
|
||
|
|
if (column < 40) {
|
||
|
|
excerpt = excerpt.slice(0, 50);
|
||
|
|
}
|
||
|
|
else {
|
||
|
|
excerptStart = column - 20;
|
||
|
|
excerpt = excerpt.slice(excerptStart, column + 30);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
super(`${message} (line ${line}, column ${column})\n`
|
||
|
|
+ ` ${excerpt}\n`
|
||
|
|
+ ' '.repeat(column - excerptStart + 1) + '^\n');
|
||
|
|
this.column = column;
|
||
|
|
this.excerpt = excerpt;
|
||
|
|
this.line = line;
|
||
|
|
this.name = 'XmlError';
|
||
|
|
this.pos = charIndex;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
exports.XmlError = XmlError;
|
||
|
|
//# sourceMappingURL=XmlError.js.map
|