aboutsummaryrefslogtreecommitdiffstats
path: root/vanilla/node_modules/css-tree/cjs/parser/SyntaxError.cjs
diff options
context:
space:
mode:
Diffstat (limited to 'vanilla/node_modules/css-tree/cjs/parser/SyntaxError.cjs')
-rw-r--r--vanilla/node_modules/css-tree/cjs/parser/SyntaxError.cjs74
1 files changed, 74 insertions, 0 deletions
diff --git a/vanilla/node_modules/css-tree/cjs/parser/SyntaxError.cjs b/vanilla/node_modules/css-tree/cjs/parser/SyntaxError.cjs
new file mode 100644
index 0000000..4de5ab3
--- /dev/null
+++ b/vanilla/node_modules/css-tree/cjs/parser/SyntaxError.cjs
@@ -0,0 +1,74 @@
+'use strict';
+
+const createCustomError = require('../utils/create-custom-error.cjs');
+
+const MAX_LINE_LENGTH = 100;
+const OFFSET_CORRECTION = 60;
+const TAB_REPLACEMENT = ' ';
+
+function sourceFragment({ source, line, column, baseLine, baseColumn }, extraLines) {
+ function processLines(start, end) {
+ return lines
+ .slice(start, end)
+ .map((line, idx) =>
+ String(start + idx + 1).padStart(maxNumLength) + ' |' + line
+ ).join('\n');
+ }
+
+ const prelines = '\n'.repeat(Math.max(baseLine - 1, 0));
+ const precolumns = ' '.repeat(Math.max(baseColumn - 1, 0));
+ const lines = (prelines + precolumns + source).split(/\r\n?|\n|\f/);
+ const startLine = Math.max(1, line - extraLines) - 1;
+ const endLine = Math.min(line + extraLines, lines.length + 1);
+ const maxNumLength = Math.max(4, String(endLine).length) + 1;
+ let cutLeft = 0;
+
+ // column correction according to replaced tab before column
+ column += (TAB_REPLACEMENT.length - 1) * (lines[line - 1].substr(0, column - 1).match(/\t/g) || []).length;
+
+ if (column > MAX_LINE_LENGTH) {
+ cutLeft = column - OFFSET_CORRECTION + 3;
+ column = OFFSET_CORRECTION - 2;
+ }
+
+ for (let i = startLine; i <= endLine; i++) {
+ if (i >= 0 && i < lines.length) {
+ lines[i] = lines[i].replace(/\t/g, TAB_REPLACEMENT);
+ lines[i] =
+ (cutLeft > 0 && lines[i].length > cutLeft ? '\u2026' : '') +
+ lines[i].substr(cutLeft, MAX_LINE_LENGTH - 2) +
+ (lines[i].length > cutLeft + MAX_LINE_LENGTH - 1 ? '\u2026' : '');
+ }
+ }
+
+ return [
+ processLines(startLine, line),
+ new Array(column + maxNumLength + 2).join('-') + '^',
+ processLines(line, endLine)
+ ].filter(Boolean)
+ .join('\n')
+ .replace(/^(\s+\d+\s+\|\n)+/, '')
+ .replace(/\n(\s+\d+\s+\|)+$/, '');
+}
+
+function SyntaxError(message, source, offset, line, column, baseLine = 1, baseColumn = 1) {
+ const error = Object.assign(createCustomError.createCustomError('SyntaxError', message), {
+ source,
+ offset,
+ line,
+ column,
+ sourceFragment(extraLines) {
+ return sourceFragment({ source, line, column, baseLine, baseColumn }, isNaN(extraLines) ? 0 : extraLines);
+ },
+ get formattedMessage() {
+ return (
+ `Parse error: ${message}\n` +
+ sourceFragment({ source, line, column, baseLine, baseColumn }, 2)
+ );
+ }
+ });
+
+ return error;
+}
+
+exports.SyntaxError = SyntaxError;