@ooneex/exception 1.1.2 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +7 -4
- package/dist/index.js +143 -3
- package/dist/index.js.map +7 -7
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ type ExceptionStackFrameType = {
|
|
|
8
8
|
source: string;
|
|
9
9
|
};
|
|
10
10
|
interface IException {
|
|
11
|
+
readonly key: string | null;
|
|
11
12
|
readonly date: Date;
|
|
12
13
|
readonly status: StatusCodeType;
|
|
13
14
|
readonly data: Readonly<Record<string, unknown>>;
|
|
@@ -18,11 +19,13 @@ interface IException {
|
|
|
18
19
|
stackToJson: () => ExceptionStackFrameType[] | null;
|
|
19
20
|
}
|
|
20
21
|
declare class Exception extends Error implements IException {
|
|
22
|
+
readonly key: string | null;
|
|
21
23
|
readonly date: Date;
|
|
22
24
|
readonly status: StatusCodeType2;
|
|
23
25
|
readonly data: Record<string, unknown>;
|
|
24
26
|
readonly native?: Error;
|
|
25
27
|
constructor(message: string | Error, options?: {
|
|
28
|
+
key?: string | null;
|
|
26
29
|
status?: StatusCodeType2;
|
|
27
30
|
data?: Record<string, unknown>;
|
|
28
31
|
});
|
|
@@ -33,15 +36,15 @@ declare class Exception extends Error implements IException {
|
|
|
33
36
|
stackToJson(): ExceptionStackFrameType[] | null;
|
|
34
37
|
}
|
|
35
38
|
declare class BadRequestException extends Exception {
|
|
36
|
-
constructor(message: string, data?: Record<string, unknown>);
|
|
39
|
+
constructor(message: string, key: string, data?: Record<string, unknown>);
|
|
37
40
|
}
|
|
38
41
|
declare class MethodNotAllowedException extends Exception {
|
|
39
|
-
constructor(message: string, data?: Record<string, unknown>);
|
|
42
|
+
constructor(message: string, key: string, data?: Record<string, unknown>);
|
|
40
43
|
}
|
|
41
44
|
declare class NotFoundException extends Exception {
|
|
42
|
-
constructor(message: string, data?: Record<string, unknown>);
|
|
45
|
+
constructor(message: string, key: string, data?: Record<string, unknown>);
|
|
43
46
|
}
|
|
44
47
|
declare class UnauthorizedException extends Exception {
|
|
45
|
-
constructor(message: string, data?: Record<string, unknown>);
|
|
48
|
+
constructor(message: string, key: string, data?: Record<string, unknown>);
|
|
46
49
|
}
|
|
47
50
|
export { UnauthorizedException, NotFoundException, MethodNotAllowedException, IException, ExceptionStackFrameType, Exception, BadRequestException };
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,144 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
// src/BadRequestException.ts
|
|
2
|
+
import { HttpStatus } from "@ooneex/http-status";
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// src/Exception.ts
|
|
5
|
+
class Exception extends Error {
|
|
6
|
+
key;
|
|
7
|
+
date = new Date;
|
|
8
|
+
status;
|
|
9
|
+
data;
|
|
10
|
+
native;
|
|
11
|
+
constructor(message, options) {
|
|
12
|
+
super(message instanceof Error ? message.message : message);
|
|
13
|
+
this.key = options?.key ?? null;
|
|
14
|
+
this.status = options?.status || 500;
|
|
15
|
+
this.data = options?.data || {};
|
|
16
|
+
if (message instanceof Error) {
|
|
17
|
+
this.native = message;
|
|
18
|
+
}
|
|
19
|
+
this.name = this.constructor.name;
|
|
20
|
+
this.data = Object.freeze(this.data);
|
|
21
|
+
}
|
|
22
|
+
stackToJson() {
|
|
23
|
+
if (!this.stack) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
const stackLines = this.stack.split(`
|
|
27
|
+
`);
|
|
28
|
+
const frames = [];
|
|
29
|
+
for (let i = 1;i < stackLines.length; i++) {
|
|
30
|
+
const line = stackLines[i]?.trim();
|
|
31
|
+
if (!line)
|
|
32
|
+
continue;
|
|
33
|
+
const frame = {
|
|
34
|
+
source: line
|
|
35
|
+
};
|
|
36
|
+
const atMatch = line.match(/^\s*at\s+(.+)$/);
|
|
37
|
+
if (atMatch) {
|
|
38
|
+
const content = atMatch[1];
|
|
39
|
+
const funcWithLocationMatch = content?.match(/^(.+?)\s+\((.+)\)$/);
|
|
40
|
+
if (funcWithLocationMatch) {
|
|
41
|
+
const functionName = funcWithLocationMatch[1];
|
|
42
|
+
const location = funcWithLocationMatch[2];
|
|
43
|
+
if (functionName) {
|
|
44
|
+
frame.functionName = functionName;
|
|
45
|
+
}
|
|
46
|
+
const locationMatch = location?.match(/^(.+):(\d+):(\d+)$/);
|
|
47
|
+
if (locationMatch) {
|
|
48
|
+
const fileName = locationMatch[1];
|
|
49
|
+
const lineNum = locationMatch[2];
|
|
50
|
+
const colNum = locationMatch[3];
|
|
51
|
+
if (fileName) {
|
|
52
|
+
frame.fileName = fileName;
|
|
53
|
+
}
|
|
54
|
+
if (lineNum) {
|
|
55
|
+
frame.lineNumber = Number.parseInt(lineNum, 10);
|
|
56
|
+
}
|
|
57
|
+
if (colNum) {
|
|
58
|
+
frame.columnNumber = Number.parseInt(colNum, 10);
|
|
59
|
+
}
|
|
60
|
+
} else if (location) {
|
|
61
|
+
frame.fileName = location;
|
|
62
|
+
}
|
|
63
|
+
} else {
|
|
64
|
+
const directLocationMatch = content?.match(/^(.+):(\d+):(\d+)$/);
|
|
65
|
+
if (directLocationMatch) {
|
|
66
|
+
const fileName = directLocationMatch[1];
|
|
67
|
+
const lineNum = directLocationMatch[2];
|
|
68
|
+
const colNum = directLocationMatch[3];
|
|
69
|
+
if (fileName) {
|
|
70
|
+
frame.fileName = fileName;
|
|
71
|
+
}
|
|
72
|
+
if (lineNum) {
|
|
73
|
+
frame.lineNumber = Number.parseInt(lineNum, 10);
|
|
74
|
+
}
|
|
75
|
+
if (colNum) {
|
|
76
|
+
frame.columnNumber = Number.parseInt(colNum, 10);
|
|
77
|
+
}
|
|
78
|
+
} else if (content) {
|
|
79
|
+
frame.functionName = content;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
frames.push(frame);
|
|
84
|
+
}
|
|
85
|
+
return frames;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// src/BadRequestException.ts
|
|
90
|
+
class BadRequestException extends Exception {
|
|
91
|
+
constructor(message, key, data = {}) {
|
|
92
|
+
super(message, {
|
|
93
|
+
key,
|
|
94
|
+
status: HttpStatus.Code.BadRequest,
|
|
95
|
+
data
|
|
96
|
+
});
|
|
97
|
+
this.name = "BadRequestException";
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// src/MethodNotAllowedException.ts
|
|
101
|
+
import { HttpStatus as HttpStatus2 } from "@ooneex/http-status";
|
|
102
|
+
class MethodNotAllowedException extends Exception {
|
|
103
|
+
constructor(message, key, data = {}) {
|
|
104
|
+
super(message, {
|
|
105
|
+
key,
|
|
106
|
+
status: HttpStatus2.Code.MethodNotAllowed,
|
|
107
|
+
data
|
|
108
|
+
});
|
|
109
|
+
this.name = "MethodNotAllowedException";
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// src/NotFoundException.ts
|
|
113
|
+
import { HttpStatus as HttpStatus3 } from "@ooneex/http-status";
|
|
114
|
+
class NotFoundException extends Exception {
|
|
115
|
+
constructor(message, key, data = {}) {
|
|
116
|
+
super(message, {
|
|
117
|
+
key,
|
|
118
|
+
status: HttpStatus3.Code.NotFound,
|
|
119
|
+
data
|
|
120
|
+
});
|
|
121
|
+
this.name = "NotFoundException";
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// src/UnauthorizedException.ts
|
|
125
|
+
import { HttpStatus as HttpStatus4 } from "@ooneex/http-status";
|
|
126
|
+
class UnauthorizedException extends Exception {
|
|
127
|
+
constructor(message, key, data = {}) {
|
|
128
|
+
super(message, {
|
|
129
|
+
key,
|
|
130
|
+
status: HttpStatus4.Code.Unauthorized,
|
|
131
|
+
data
|
|
132
|
+
});
|
|
133
|
+
this.name = "UnauthorizedException";
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
export {
|
|
137
|
+
UnauthorizedException,
|
|
138
|
+
NotFoundException,
|
|
139
|
+
MethodNotAllowedException,
|
|
140
|
+
Exception,
|
|
141
|
+
BadRequestException
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
//# debugId=847DEAA4A2C723C464756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["src/BadRequestException.ts", "src/Exception.ts", "src/MethodNotAllowedException.ts", "src/NotFoundException.ts", "src/UnauthorizedException.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import { HttpStatus } from \"@ooneex/http-status\";\nimport { Exception } from \"./Exception\";\n\nexport class BadRequestException extends Exception {\n constructor(message: string, data: Record<string, unknown> = {}) {\n super(message, {\n status: HttpStatus.Code.BadRequest,\n data,\n });\n this.name = \"BadRequestException\";\n }\n}\n",
|
|
6
|
-
"import type { StatusCodeType } from \"@ooneex/http-status\";\nimport type { ExceptionStackFrameType, IException } from \"./types\";\n\nexport class Exception extends Error implements IException {\n public readonly date: Date = new Date();\n public readonly status: StatusCodeType;\n public readonly data: Record<string, unknown>;\n public readonly native?: Error;\n\n constructor(message: string | Error
|
|
7
|
-
"import { HttpStatus } from \"@ooneex/http-status\";\nimport { Exception } from \"./Exception\";\n\nexport class MethodNotAllowedException extends Exception {\n constructor(message: string, data: Record<string, unknown> = {}) {\n super(message, {\n status: HttpStatus.Code.MethodNotAllowed,\n data,\n });\n this.name = \"MethodNotAllowedException\";\n }\n}\n",
|
|
8
|
-
"import { HttpStatus } from \"@ooneex/http-status\";\nimport { Exception } from \"./Exception\";\n\nexport class NotFoundException extends Exception {\n constructor(message: string, data: Record<string, unknown> = {}) {\n super(message, {\n status: HttpStatus.Code.NotFound,\n data,\n });\n this.name = \"NotFoundException\";\n }\n}\n",
|
|
9
|
-
"import { HttpStatus } from \"@ooneex/http-status\";\nimport { Exception } from \"./Exception\";\n\nexport class UnauthorizedException extends Exception {\n constructor(message: string, data: Record<string, unknown> = {}) {\n super(message, {\n status: HttpStatus.Code.Unauthorized,\n data,\n });\n this.name = \"UnauthorizedException\";\n }\n}\n"
|
|
5
|
+
"import { HttpStatus } from \"@ooneex/http-status\";\nimport { Exception } from \"./Exception\";\n\nexport class BadRequestException extends Exception {\n constructor(message: string, key: string, data: Record<string, unknown> = {}) {\n super(message, {\n key,\n status: HttpStatus.Code.BadRequest,\n data,\n });\n this.name = \"BadRequestException\";\n }\n}\n",
|
|
6
|
+
"import type { StatusCodeType } from \"@ooneex/http-status\";\nimport type { ExceptionStackFrameType, IException } from \"./types\";\n\nexport class Exception extends Error implements IException {\n public readonly key: string | null;\n public readonly date: Date = new Date();\n public readonly status: StatusCodeType;\n public readonly data: Record<string, unknown>;\n public readonly native?: Error;\n\n constructor(\n message: string | Error,\n options?: { key?: string | null; status?: StatusCodeType; data?: Record<string, unknown> },\n ) {\n super(message instanceof Error ? (message as Error).message : message);\n\n this.key = options?.key ?? null;\n this.status = options?.status || 500;\n this.data = options?.data || {};\n\n if (message instanceof Error) {\n this.native = message as Error;\n }\n this.name = this.constructor.name;\n this.data = Object.freeze(this.data);\n }\n\n /**\n * Converts the stack trace into a structured JSON object\n * @returns Array of stack frames or null if no stack trace is available\n */\n public stackToJson(): ExceptionStackFrameType[] | null {\n if (!this.stack) {\n return null;\n }\n\n const stackLines = this.stack.split(\"\\n\");\n const frames: ExceptionStackFrameType[] = [];\n\n // Skip the first line (error message) and process stack frames\n for (let i = 1; i < stackLines.length; i++) {\n const line = stackLines[i]?.trim();\n if (!line) continue;\n\n const frame: ExceptionStackFrameType = {\n source: line,\n };\n\n // Parse common stack trace formats\n // Format: \" at functionName (file:line:column)\"\n // Format: \" at file:line:column\"\n // Format: \" at functionName (file)\"\n\n const atMatch = line.match(/^\\s*at\\s+(.+)$/);\n if (atMatch) {\n const content = atMatch[1];\n\n // Check if it has parentheses (function name with location)\n const funcWithLocationMatch = content?.match(/^(.+?)\\s+\\((.+)\\)$/);\n if (funcWithLocationMatch) {\n const functionName = funcWithLocationMatch[1];\n const location = funcWithLocationMatch[2];\n\n if (functionName) {\n frame.functionName = functionName;\n }\n\n // Parse file:line:column\n const locationMatch = location?.match(/^(.+):(\\d+):(\\d+)$/);\n if (locationMatch) {\n const fileName = locationMatch[1];\n const lineNum = locationMatch[2];\n const colNum = locationMatch[3];\n\n if (fileName) {\n frame.fileName = fileName;\n }\n if (lineNum) {\n frame.lineNumber = Number.parseInt(lineNum, 10);\n }\n if (colNum) {\n frame.columnNumber = Number.parseInt(colNum, 10);\n }\n } else if (location) {\n frame.fileName = location;\n }\n } else {\n // Direct file:line:column format\n const directLocationMatch = content?.match(/^(.+):(\\d+):(\\d+)$/);\n if (directLocationMatch) {\n const fileName = directLocationMatch[1];\n const lineNum = directLocationMatch[2];\n const colNum = directLocationMatch[3];\n\n if (fileName) {\n frame.fileName = fileName;\n }\n if (lineNum) {\n frame.lineNumber = Number.parseInt(lineNum, 10);\n }\n if (colNum) {\n frame.columnNumber = Number.parseInt(colNum, 10);\n }\n } else if (content) {\n // Assume it's a function name or location without line numbers\n frame.functionName = content;\n }\n }\n }\n\n frames.push(frame);\n }\n\n return frames;\n }\n}\n",
|
|
7
|
+
"import { HttpStatus } from \"@ooneex/http-status\";\nimport { Exception } from \"./Exception\";\n\nexport class MethodNotAllowedException extends Exception {\n constructor(message: string, key: string, data: Record<string, unknown> = {}) {\n super(message, {\n key,\n status: HttpStatus.Code.MethodNotAllowed,\n data,\n });\n this.name = \"MethodNotAllowedException\";\n }\n}\n",
|
|
8
|
+
"import { HttpStatus } from \"@ooneex/http-status\";\nimport { Exception } from \"./Exception\";\n\nexport class NotFoundException extends Exception {\n constructor(message: string, key: string, data: Record<string, unknown> = {}) {\n super(message, {\n key,\n status: HttpStatus.Code.NotFound,\n data,\n });\n this.name = \"NotFoundException\";\n }\n}\n",
|
|
9
|
+
"import { HttpStatus } from \"@ooneex/http-status\";\nimport { Exception } from \"./Exception\";\n\nexport class UnauthorizedException extends Exception {\n constructor(message: string, key: string, data: Record<string, unknown> = {}) {\n super(message, {\n key,\n status: HttpStatus.Code.Unauthorized,\n data,\n });\n this.name = \"UnauthorizedException\";\n }\n}\n"
|
|
10
10
|
],
|
|
11
|
-
"mappings": "AAAA,
|
|
12
|
-
"debugId": "
|
|
11
|
+
"mappings": "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",
|
|
12
|
+
"debugId": "847DEAA4A2C723C464756E2164756E21",
|
|
13
13
|
"names": []
|
|
14
14
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ooneex/exception",
|
|
3
3
|
"description": "Structured exception handling with HTTP status code mapping, typed error data, and JSON-formatted stack traces for consistent error reporting",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
7
7
|
"dist",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"npm:publish": "bun publish --tolerate-republish --force --production --access public"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@ooneex/http-status": "1.1.
|
|
31
|
+
"@ooneex/http-status": "1.1.3"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {},
|
|
34
34
|
"keywords": [
|