-
Notifications
You must be signed in to change notification settings - Fork 39
Expand file tree
/
Copy patherror.ts
More file actions
110 lines (100 loc) · 2.56 KB
/
error.ts
File metadata and controls
110 lines (100 loc) · 2.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import type { Pos } from './node.js';
export abstract class AiScriptError extends Error {
// name is read by Error.prototype.toString
public name = 'AiScript';
public info: unknown;
public pos?: Pos;
constructor(message: string, info?: unknown) {
super(message);
this.info = info;
// Maintains proper stack trace for where our error was thrown (only available on V8)
if (Error.captureStackTrace) {
Error.captureStackTrace(this, AiScriptError);
}
}
}
/**
* Wrapper for non-AiScript errors.
*/
export class NonAiScriptError extends AiScriptError {
public name = 'Internal';
constructor(error: unknown) {
let message: string;
if (error != null && typeof error === 'object' && 'message' in error) {
message = String(error.message);
} else {
message = String(error);
}
super(message, error);
}
}
/**
* Parse-time errors.
*/
export class AiScriptSyntaxError extends AiScriptError {
public name = 'Syntax';
constructor(message: string, public pos: Pos, info?: unknown) {
super(`${message} (Line ${pos.line}, Column ${pos.column})`, info);
}
}
/**
* Unexpected EOF errors.
*/
export class AiScriptUnexpectedEOFError extends AiScriptSyntaxError {
constructor(pos: Pos, info?: unknown) {
super('unexpected EOF', pos, info);
}
}
/**
* Type validation(parser/plugins/validate-type) errors.
*/
export class AiScriptTypeError extends AiScriptError {
public name = 'Type';
constructor(message: string, public pos: Pos, info?: unknown) {
super(`${message} (Line ${pos.line}, Column ${pos.column})`, info);
}
}
/**
* Namespace collection errors.
*/
export class AiScriptNamespaceError extends AiScriptError {
public name = 'Namespace';
constructor(message: string, public pos: Pos, info?: unknown) {
super(`${message} (Line ${pos.line}, Column ${pos.column})`, info);
}
}
/**
* Interpret-time errors.
*/
export class AiScriptRuntimeError extends AiScriptError {
public name = 'Runtime';
constructor(message: string, info?: unknown) {
super(message, info);
}
}
/**
* RuntimeError for illegal access to arrays.
*/
export class AiScriptIndexOutOfRangeError extends AiScriptRuntimeError {
constructor(message: string, info?: unknown) {
super(message, info);
}
}
/**
* Errors thrown by users.
*/
export class AiScriptUserError extends AiScriptRuntimeError {
public name = '';
constructor(message: string, info?: unknown) {
super(message, info);
}
}
/**
* Host side configuration errors.
*/
export class AiScriptHostsideError extends AiScriptError {
public name = 'Host';
constructor(message: string, info?: unknown) {
super(message, info);
}
}