mirror of https://github.com/sveltejs/svelte
parent
5b130d1b85
commit
af3c2539fa
@ -1,43 +1,71 @@
|
|||||||
import { locate } from 'locate-character';
|
import { locate } from 'locate-character';
|
||||||
import get_code_frame from './get_code_frame';
|
import get_code_frame from './get_code_frame.js';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @extends Error
|
||||||
|
*/
|
||||||
class CompileError extends Error {
|
class CompileError extends Error {
|
||||||
code: string;
|
|
||||||
start: { line: number; column: number };
|
/**
|
||||||
end: { line: number; column: number };
|
* @type {string}
|
||||||
pos: number;
|
*/
|
||||||
filename: string;
|
code = undefined;
|
||||||
frame: string;
|
|
||||||
|
/**
|
||||||
toString() {
|
* @type {{ line: number; column: number }}
|
||||||
return `${this.message} (${this.start.line}:${this.start.column})\n${this.frame}`;
|
*/
|
||||||
}
|
start = undefined;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {{ line: number; column: number }}
|
||||||
|
*/
|
||||||
|
end = undefined;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
pos = undefined;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
filename = undefined;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
frame = undefined;
|
||||||
|
toString() {
|
||||||
|
return `${this.message} (${this.start.line}:${this.start.column})\n${this.frame}`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function error(
|
/**
|
||||||
message: string,
|
* @param {string} message
|
||||||
props: {
|
* @param {{
|
||||||
name: string;
|
* name: string;
|
||||||
code: string;
|
* code: string;
|
||||||
source: string;
|
* source: string;
|
||||||
filename: string;
|
* filename: string;
|
||||||
start: number;
|
* start: number;
|
||||||
end?: number;
|
* end?: number;
|
||||||
}
|
* }} props
|
||||||
): never {
|
* @returns {never}
|
||||||
const error = new CompileError(message);
|
*/
|
||||||
error.name = props.name;
|
export default function error(message, props) {
|
||||||
|
const error = new CompileError(message);
|
||||||
const start = locate(props.source, props.start, { offsetLine: 1 });
|
error.name = props.name;
|
||||||
const end = locate(props.source, props.end || props.start, { offsetLine: 1 });
|
const start = locate(props.source, props.start, { offsetLine: 1 });
|
||||||
|
const end = locate(props.source, props.end || props.start, { offsetLine: 1 });
|
||||||
error.code = props.code;
|
error.code = props.code;
|
||||||
error.start = start;
|
error.start = start;
|
||||||
error.end = end;
|
error.end = end;
|
||||||
error.pos = props.start;
|
error.pos = props.start;
|
||||||
error.filename = props.filename;
|
error.filename = props.filename;
|
||||||
|
error.frame = get_code_frame(props.source, start.line - 1, start.column);
|
||||||
error.frame = get_code_frame(props.source, start.line - 1, start.column);
|
throw error;
|
||||||
|
|
||||||
throw error;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in new issue