@alis-kit/routers 1.0.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/README.md +302 -0
- package/dist/adapters/BaseAdapter.d.ts +63 -0
- package/dist/adapters/BaseAdapter.d.ts.map +1 -0
- package/dist/adapters/BaseAdapter.js +17 -0
- package/dist/adapters/BaseAdapter.js.map +1 -0
- package/dist/adapters/ExpressAdapter.d.ts +44 -0
- package/dist/adapters/ExpressAdapter.d.ts.map +1 -0
- package/dist/adapters/ExpressAdapter.js +73 -0
- package/dist/adapters/ExpressAdapter.js.map +1 -0
- package/dist/adapters/FastifyAdapter.d.ts +61 -0
- package/dist/adapters/FastifyAdapter.d.ts.map +1 -0
- package/dist/adapters/FastifyAdapter.js +132 -0
- package/dist/adapters/FastifyAdapter.js.map +1 -0
- package/dist/cookie/CookieSetter.d.ts +74 -0
- package/dist/cookie/CookieSetter.d.ts.map +1 -0
- package/dist/cookie/CookieSetter.js +89 -0
- package/dist/cookie/CookieSetter.js.map +1 -0
- package/dist/core/Logger.d.ts +36 -0
- package/dist/core/Logger.d.ts.map +1 -0
- package/dist/core/Logger.js +53 -0
- package/dist/core/Logger.js.map +1 -0
- package/dist/core/RouteResolver.d.ts +91 -0
- package/dist/core/RouteResolver.d.ts.map +1 -0
- package/dist/core/RouteResolver.js +279 -0
- package/dist/core/RouteResolver.js.map +1 -0
- package/dist/core/RouterKit.d.ts +116 -0
- package/dist/core/RouterKit.d.ts.map +1 -0
- package/dist/core/RouterKit.js +175 -0
- package/dist/core/RouterKit.js.map +1 -0
- package/dist/decorators/controller/ReqController.d.ts +29 -0
- package/dist/decorators/controller/ReqController.d.ts.map +1 -0
- package/dist/decorators/controller/ReqController.js +62 -0
- package/dist/decorators/controller/ReqController.js.map +1 -0
- package/dist/decorators/mapping/index.d.ts +93 -0
- package/dist/decorators/mapping/index.d.ts.map +1 -0
- package/dist/decorators/mapping/index.js +128 -0
- package/dist/decorators/mapping/index.js.map +1 -0
- package/dist/decorators/method/index.d.ts +67 -0
- package/dist/decorators/method/index.d.ts.map +1 -0
- package/dist/decorators/method/index.js +83 -0
- package/dist/decorators/method/index.js.map +1 -0
- package/dist/decorators/parameter/index.d.ts +155 -0
- package/dist/decorators/parameter/index.d.ts.map +1 -0
- package/dist/decorators/parameter/index.js +196 -0
- package/dist/decorators/parameter/index.js.map +1 -0
- package/dist/exceptions/BadRequestException.d.ts +37 -0
- package/dist/exceptions/BadRequestException.d.ts.map +1 -0
- package/dist/exceptions/BadRequestException.js +37 -0
- package/dist/exceptions/BadRequestException.js.map +1 -0
- package/dist/exceptions/BaseException.d.ts +29 -0
- package/dist/exceptions/BaseException.d.ts.map +1 -0
- package/dist/exceptions/BaseException.js +29 -0
- package/dist/exceptions/BaseException.js.map +1 -0
- package/dist/exceptions/ConflictException.d.ts +28 -0
- package/dist/exceptions/ConflictException.d.ts.map +1 -0
- package/dist/exceptions/ConflictException.js +28 -0
- package/dist/exceptions/ConflictException.js.map +1 -0
- package/dist/exceptions/ForbiddenException.d.ts +26 -0
- package/dist/exceptions/ForbiddenException.d.ts.map +1 -0
- package/dist/exceptions/ForbiddenException.js +26 -0
- package/dist/exceptions/ForbiddenException.js.map +1 -0
- package/dist/exceptions/NotFoundException.d.ts +28 -0
- package/dist/exceptions/NotFoundException.d.ts.map +1 -0
- package/dist/exceptions/NotFoundException.js +28 -0
- package/dist/exceptions/NotFoundException.js.map +1 -0
- package/dist/exceptions/ServerErrorException.d.ts +33 -0
- package/dist/exceptions/ServerErrorException.d.ts.map +1 -0
- package/dist/exceptions/ServerErrorException.js +33 -0
- package/dist/exceptions/ServerErrorException.js.map +1 -0
- package/dist/exceptions/UnauthorizedException.d.ts +28 -0
- package/dist/exceptions/UnauthorizedException.d.ts.map +1 -0
- package/dist/exceptions/UnauthorizedException.js +28 -0
- package/dist/exceptions/UnauthorizedException.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/swagger/SwaggerGenerator.d.ts +63 -0
- package/dist/swagger/SwaggerGenerator.d.ts.map +1 -0
- package/dist/swagger/SwaggerGenerator.js +266 -0
- package/dist/swagger/SwaggerGenerator.js.map +1 -0
- package/dist/swagger/SwaggerUI.d.ts +30 -0
- package/dist/swagger/SwaggerUI.d.ts.map +1 -0
- package/dist/swagger/SwaggerUI.js +52 -0
- package/dist/swagger/SwaggerUI.js.map +1 -0
- package/dist/types/index.d.ts +255 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +31 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { paramMetaStore } from "../../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Internal helper for registering parameter metadata on a method.
|
|
4
|
+
*
|
|
5
|
+
* TC39 decorators tidak mendukung parameter decorators, jadi metadata
|
|
6
|
+
* parameter disimpan di WeakMap (`paramMetaStore`) dan dibaca langsung
|
|
7
|
+
* oleh RouteResolver tanpa Reflect API.
|
|
8
|
+
*
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
function addParamMetadata(target, propertyKey, parameterIndex, metadata) {
|
|
12
|
+
const methodMap = paramMetaStore.get(target.constructor) ?? new Map();
|
|
13
|
+
const key = String(propertyKey);
|
|
14
|
+
const existing = methodMap.get(key) ?? [];
|
|
15
|
+
existing.push({ ...metadata, index: parameterIndex });
|
|
16
|
+
methodMap.set(key, existing);
|
|
17
|
+
paramMetaStore.set(target.constructor, methodMap);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Injects and optionally validates `req.body` using a Zod schema.
|
|
21
|
+
*
|
|
22
|
+
* @param schema - Optional Zod schema for validation. Jika diberikan,
|
|
23
|
+
* request body akan di-parse dan divalidasi otomatis.
|
|
24
|
+
* Throw `BadRequestException` jika validasi gagal.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const CreateUserSchema = z.object({
|
|
29
|
+
* name: z.string().min(1),
|
|
30
|
+
* email: z.string().email(),
|
|
31
|
+
* });
|
|
32
|
+
*
|
|
33
|
+
* @ReqController("/users")
|
|
34
|
+
* class UserController {
|
|
35
|
+
* @PostMapping("/")
|
|
36
|
+
* async create(@Body(CreateUserSchema) body: { name: string; email: string }) {
|
|
37
|
+
* // body sudah tervalidasi dan typed
|
|
38
|
+
* }
|
|
39
|
+
* }
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* // Tanpa schema — body dikirim raw
|
|
45
|
+
* @PostMapping("/webhook")
|
|
46
|
+
* async handleWebhook(@Body() body: unknown) {
|
|
47
|
+
* // validasi manual
|
|
48
|
+
* }
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export function Body(schema) {
|
|
52
|
+
return function (target, propertyKey, parameterIndex) {
|
|
53
|
+
addParamMetadata(target, propertyKey, parameterIndex, { type: "body", schema });
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Injects and optionally validates `req.query` using a Zod schema.
|
|
58
|
+
*
|
|
59
|
+
* Gunakan `z.coerce` untuk type conversion (string → number, dll).
|
|
60
|
+
*
|
|
61
|
+
* @param schema - Optional Zod schema for validation
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```typescript
|
|
65
|
+
* const PaginationSchema = z.object({
|
|
66
|
+
* page: z.coerce.number().default(1),
|
|
67
|
+
* size: z.coerce.number().default(10),
|
|
68
|
+
* });
|
|
69
|
+
*
|
|
70
|
+
* @ReqController("/users")
|
|
71
|
+
* class UserController {
|
|
72
|
+
* @GetMapping("/")
|
|
73
|
+
* async getAll(@Query(PaginationSchema) query: { page: number; size: number }) {
|
|
74
|
+
* // query.page dan query.size otomatis di-coerce ke number
|
|
75
|
+
* }
|
|
76
|
+
* }
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export function Query(schema) {
|
|
80
|
+
return function (target, propertyKey, parameterIndex) {
|
|
81
|
+
addParamMetadata(target, propertyKey, parameterIndex, { type: "query", schema });
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Injects a single route parameter by key.
|
|
86
|
+
*
|
|
87
|
+
* @param key - Nama route parameter (contoh: "id" untuk route `/:id`)
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```typescript
|
|
91
|
+
* @ReqController("/users")
|
|
92
|
+
* class UserController {
|
|
93
|
+
* @GetMapping("/:id")
|
|
94
|
+
* async getById(@Param("id") id: string) {
|
|
95
|
+
* // id = "123" untuk request GET /users/123
|
|
96
|
+
* }
|
|
97
|
+
* }
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
export function Param(key) {
|
|
101
|
+
return function (target, propertyKey, parameterIndex) {
|
|
102
|
+
addParamMetadata(target, propertyKey, parameterIndex, { type: "param", key });
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Injects the raw framework request object.
|
|
107
|
+
*
|
|
108
|
+
* Berguna saat perlu akses ke properti native request
|
|
109
|
+
* seperti headers, raw body stream, atau IP address.
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* ```typescript
|
|
113
|
+
* @ReqController("/auth")
|
|
114
|
+
* class AuthController {
|
|
115
|
+
* @PostMapping("/refresh")
|
|
116
|
+
* async refresh(@Req() req: express.Request) {
|
|
117
|
+
* const token = req.headers["authorization"];
|
|
118
|
+
* }
|
|
119
|
+
* }
|
|
120
|
+
* ```
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```typescript
|
|
124
|
+
* // Dengan Fastify
|
|
125
|
+
* @PostMapping("/webhook")
|
|
126
|
+
* async handle(@Req() req: FastifyRequest) {
|
|
127
|
+
* const sourceIp = req.ip;
|
|
128
|
+
* }
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
export function Req() {
|
|
132
|
+
return function (target, propertyKey, parameterIndex) {
|
|
133
|
+
addParamMetadata(target, propertyKey, parameterIndex, { type: "req" });
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Injects a CookieSetter instance for reading, setting, and deleting cookies.
|
|
138
|
+
*
|
|
139
|
+
* CookieSetter adalah helper yang mengabstraksi operasi cookie
|
|
140
|
+
* di Express dan Fastify melalui adapter pattern.
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* ```typescript
|
|
144
|
+
* @ReqController("/auth")
|
|
145
|
+
* class AuthController {
|
|
146
|
+
* @PostMapping("/login")
|
|
147
|
+
* async login(@Body(LoginSchema) body: ILogin, @Cookie() cookie: CookieSetter) {
|
|
148
|
+
* cookie.set("refresh_token", token, { httpOnly: true, secure: true });
|
|
149
|
+
* const existing = cookie.get("refresh_token");
|
|
150
|
+
* cookie.delete("old_token");
|
|
151
|
+
* }
|
|
152
|
+
* }
|
|
153
|
+
* ```
|
|
154
|
+
*/
|
|
155
|
+
export function Cookie() {
|
|
156
|
+
return function (target, propertyKey, parameterIndex) {
|
|
157
|
+
addParamMetadata(target, propertyKey, parameterIndex, { type: "cookie" });
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Injects the raw framework reply object (FastifyReply / express.Response).
|
|
162
|
+
*
|
|
163
|
+
* Digunakan saat handler perlu kontrol penuh terhadap response:
|
|
164
|
+
* - Set content-type selain JSON (HTML, file stream)
|
|
165
|
+
* - Set custom headers
|
|
166
|
+
* - Return non-JSON response (misal: redirect, HTML page)
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* ```typescript
|
|
170
|
+
* @ReqController("/oauth")
|
|
171
|
+
* class OAuthController {
|
|
172
|
+
* @GetMapping("/callback")
|
|
173
|
+
* async callback(@Reply() reply: FastifyReply) {
|
|
174
|
+
* reply.type("text/html").send("<h1>Login berhasil</h1>");
|
|
175
|
+
* return reply; // Wajib return reply agar framework tidak auto-send
|
|
176
|
+
* }
|
|
177
|
+
* }
|
|
178
|
+
* ```
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```typescript
|
|
182
|
+
* // Express Response — set cookie domain
|
|
183
|
+
* @Get("/download")
|
|
184
|
+
* async download(@Reply() res: express.Response) {
|
|
185
|
+
* res.setHeader("Content-Type", "application/octet-stream");
|
|
186
|
+
* res.status(200).send(Buffer.from("..."));
|
|
187
|
+
* return res;
|
|
188
|
+
* }
|
|
189
|
+
* ```
|
|
190
|
+
*/
|
|
191
|
+
export function Reply() {
|
|
192
|
+
return function (target, propertyKey, parameterIndex) {
|
|
193
|
+
addParamMetadata(target, propertyKey, parameterIndex, { type: "reply" });
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../decorators/parameter/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;;;;;;GAQG;AACH,SAAS,gBAAgB,CACvB,MAAc,EACd,WAA4B,EAC5B,cAAsB,EACtB,QAAsC;IAEtC,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,IAAI,GAAG,EAA2B,CAAC;IAC/F,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;IACtD,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC7B,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,UAAU,IAAI,CAAC,MAAkB;IACrC,OAAO,UAAU,MAAc,EAAE,WAA4B,EAAE,cAAsB;QACnF,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAClF,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,KAAK,CAAC,MAAkB;IACtC,OAAO,UAAU,MAAc,EAAE,WAA4B,EAAE,cAAsB;QACnF,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACnF,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,OAAO,UAAU,MAAc,EAAE,WAA4B,EAAE,cAAsB;QACnF,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAChF,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,GAAG;IACjB,OAAO,UAAU,MAAc,EAAE,WAA4B,EAAE,cAAsB;QACnF,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACzE,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,MAAM;IACpB,OAAO,UAAU,MAAc,EAAE,WAA4B,EAAE,cAAsB;QACnF,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5E,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,KAAK;IACnB,OAAO,UAAU,MAAc,EAAE,WAA4B,EAAE,cAAsB;QACnF,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3E,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { BaseException } from "./BaseException.js";
|
|
2
|
+
/**
|
|
3
|
+
* Exception for 400 Bad Request responses.
|
|
4
|
+
*
|
|
5
|
+
* Digunakan ketika request validation gagal atau input tidak valid.
|
|
6
|
+
* RouteResolver otomatis mengirim response 400 dengan field-level errors.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { z } from "zod";
|
|
11
|
+
* import { BadRequestException } from "@alis-kit/routers";
|
|
12
|
+
*
|
|
13
|
+
* const schema = z.object({ email: z.string().email() });
|
|
14
|
+
* const result = schema.safeParse(input);
|
|
15
|
+
* if (!result.success) {
|
|
16
|
+
* throw new BadRequestException("Validation failed", {
|
|
17
|
+
* errors: result.error.errors.map(e => ({
|
|
18
|
+
* field: e.path.join("."),
|
|
19
|
+
* message: e.message,
|
|
20
|
+
* })),
|
|
21
|
+
* });
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* // Simple usage
|
|
28
|
+
* if (!req.file) {
|
|
29
|
+
* throw new BadRequestException("File is required");
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare class BadRequestException extends BaseException {
|
|
34
|
+
readonly status = 400;
|
|
35
|
+
readonly code = "BAD_REQUEST";
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=BadRequestException.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BadRequestException.d.ts","sourceRoot":"","sources":["../../exceptions/BadRequestException.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,mBAAoB,SAAQ,aAAa;IACpD,QAAQ,CAAC,MAAM,OAAO;IACtB,QAAQ,CAAC,IAAI,iBAAiB;CAC/B"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { BaseException } from "./BaseException.js";
|
|
2
|
+
/**
|
|
3
|
+
* Exception for 400 Bad Request responses.
|
|
4
|
+
*
|
|
5
|
+
* Digunakan ketika request validation gagal atau input tidak valid.
|
|
6
|
+
* RouteResolver otomatis mengirim response 400 dengan field-level errors.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { z } from "zod";
|
|
11
|
+
* import { BadRequestException } from "@alis-kit/routers";
|
|
12
|
+
*
|
|
13
|
+
* const schema = z.object({ email: z.string().email() });
|
|
14
|
+
* const result = schema.safeParse(input);
|
|
15
|
+
* if (!result.success) {
|
|
16
|
+
* throw new BadRequestException("Validation failed", {
|
|
17
|
+
* errors: result.error.errors.map(e => ({
|
|
18
|
+
* field: e.path.join("."),
|
|
19
|
+
* message: e.message,
|
|
20
|
+
* })),
|
|
21
|
+
* });
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* // Simple usage
|
|
28
|
+
* if (!req.file) {
|
|
29
|
+
* throw new BadRequestException("File is required");
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export class BadRequestException extends BaseException {
|
|
34
|
+
status = 400;
|
|
35
|
+
code = "BAD_REQUEST";
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=BadRequestException.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BadRequestException.js","sourceRoot":"","sources":["../../exceptions/BadRequestException.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IAC3C,MAAM,GAAG,GAAG,CAAC;IACb,IAAI,GAAG,aAAa,CAAC;CAC/B"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base exception class for all HTTP exceptions.
|
|
3
|
+
*
|
|
4
|
+
* Semua exception di library ini extend dari class ini.
|
|
5
|
+
* RouteResolver otomatis menangkap BaseException dan mengirim
|
|
6
|
+
* response JSON yang sesuai dengan status code + error code.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* class PaymentRequiredException extends BaseException {
|
|
11
|
+
* readonly status = 402;
|
|
12
|
+
* readonly code = "PAYMENT_REQUIRED";
|
|
13
|
+
* }
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export declare abstract class BaseException extends Error {
|
|
17
|
+
/** HTTP status code (contoh: 400, 401, 404, 500) */
|
|
18
|
+
abstract readonly status: number;
|
|
19
|
+
/** Machine-readable error code (contoh: "BAD_REQUEST", "NOT_FOUND") */
|
|
20
|
+
abstract readonly code: string;
|
|
21
|
+
/** Optional additional data payload (contoh: field-level validation errors) */
|
|
22
|
+
data?: unknown;
|
|
23
|
+
/**
|
|
24
|
+
* @param message - Human-readable error message
|
|
25
|
+
* @param data - Optional data payload (akan dikirim di `details` response)
|
|
26
|
+
*/
|
|
27
|
+
constructor(message: string, data?: unknown);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=BaseException.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseException.d.ts","sourceRoot":"","sources":["../../exceptions/BaseException.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,8BAAsB,aAAc,SAAQ,KAAK;IAC/C,oDAAoD;IACpD,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAEjC,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAE/B,+EAA+E;IAC/E,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;;OAGG;gBACS,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO;CAK5C"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base exception class for all HTTP exceptions.
|
|
3
|
+
*
|
|
4
|
+
* Semua exception di library ini extend dari class ini.
|
|
5
|
+
* RouteResolver otomatis menangkap BaseException dan mengirim
|
|
6
|
+
* response JSON yang sesuai dengan status code + error code.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* class PaymentRequiredException extends BaseException {
|
|
11
|
+
* readonly status = 402;
|
|
12
|
+
* readonly code = "PAYMENT_REQUIRED";
|
|
13
|
+
* }
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export class BaseException extends Error {
|
|
17
|
+
/** Optional additional data payload (contoh: field-level validation errors) */
|
|
18
|
+
data;
|
|
19
|
+
/**
|
|
20
|
+
* @param message - Human-readable error message
|
|
21
|
+
* @param data - Optional data payload (akan dikirim di `details` response)
|
|
22
|
+
*/
|
|
23
|
+
constructor(message, data) {
|
|
24
|
+
super(message);
|
|
25
|
+
this.name = this.constructor.name;
|
|
26
|
+
this.data = data ?? null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=BaseException.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseException.js","sourceRoot":"","sources":["../../exceptions/BaseException.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAgB,aAAc,SAAQ,KAAK;IAO/C,+EAA+E;IAC/E,IAAI,CAAW;IAEf;;;OAGG;IACH,YAAY,OAAe,EAAE,IAAc;QACzC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { BaseException } from "./BaseException.js";
|
|
2
|
+
/**
|
|
3
|
+
* Exception for 409 Conflict responses.
|
|
4
|
+
*
|
|
5
|
+
* Digunakan ketika request bertentangan dengan state resource saat ini.
|
|
6
|
+
* Contoh umum: email sudah terdaftar, duplicate entry, atau conflict version.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { ConflictException } from "@alis-kit/routers";
|
|
11
|
+
*
|
|
12
|
+
* class UserController {
|
|
13
|
+
* @PostMapping("/")
|
|
14
|
+
* async create(@Body(CreateUserSchema) body: ICreateUser) {
|
|
15
|
+
* const existing = await UserService.findByEmail(body.email);
|
|
16
|
+
* if (existing) {
|
|
17
|
+
* throw new ConflictException("Email already registered");
|
|
18
|
+
* }
|
|
19
|
+
* return await UserService.create(body);
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare class ConflictException extends BaseException {
|
|
25
|
+
readonly status = 409;
|
|
26
|
+
readonly code = "CONFLICT";
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=ConflictException.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConflictException.d.ts","sourceRoot":"","sources":["../../exceptions/ConflictException.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,QAAQ,CAAC,MAAM,OAAO;IACtB,QAAQ,CAAC,IAAI,cAAc;CAC5B"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { BaseException } from "./BaseException.js";
|
|
2
|
+
/**
|
|
3
|
+
* Exception for 409 Conflict responses.
|
|
4
|
+
*
|
|
5
|
+
* Digunakan ketika request bertentangan dengan state resource saat ini.
|
|
6
|
+
* Contoh umum: email sudah terdaftar, duplicate entry, atau conflict version.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { ConflictException } from "@alis-kit/routers";
|
|
11
|
+
*
|
|
12
|
+
* class UserController {
|
|
13
|
+
* @PostMapping("/")
|
|
14
|
+
* async create(@Body(CreateUserSchema) body: ICreateUser) {
|
|
15
|
+
* const existing = await UserService.findByEmail(body.email);
|
|
16
|
+
* if (existing) {
|
|
17
|
+
* throw new ConflictException("Email already registered");
|
|
18
|
+
* }
|
|
19
|
+
* return await UserService.create(body);
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export class ConflictException extends BaseException {
|
|
25
|
+
status = 409;
|
|
26
|
+
code = "CONFLICT";
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=ConflictException.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConflictException.js","sourceRoot":"","sources":["../../exceptions/ConflictException.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,OAAO,iBAAkB,SAAQ,aAAa;IACzC,MAAM,GAAG,GAAG,CAAC;IACb,IAAI,GAAG,UAAU,CAAC;CAC5B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BaseException } from "./BaseException.js";
|
|
2
|
+
/**
|
|
3
|
+
* Exception for 403 Forbidden responses.
|
|
4
|
+
*
|
|
5
|
+
* Digunakan ketika user sudah terautentikasi (401 bukan masalahnya),
|
|
6
|
+
* tapi tidak memiliki permission/role yang diperlukan untuk mengakses resource.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { ForbiddenException } from "@alis-kit/routers";
|
|
11
|
+
*
|
|
12
|
+
* class AdminController {
|
|
13
|
+
* @DeleteMapping("/users/:id")
|
|
14
|
+
* async deleteUser(@Param("id") id: string, @Req() req: express.Request) {
|
|
15
|
+
* if (req.user.role !== "admin") {
|
|
16
|
+
* throw new ForbiddenException("Only admins can delete users");
|
|
17
|
+
* }
|
|
18
|
+
* }
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare class ForbiddenException extends BaseException {
|
|
23
|
+
readonly status = 403;
|
|
24
|
+
readonly code = "FORBIDDEN";
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=ForbiddenException.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ForbiddenException.d.ts","sourceRoot":"","sources":["../../exceptions/ForbiddenException.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,kBAAmB,SAAQ,aAAa;IACnD,QAAQ,CAAC,MAAM,OAAO;IACtB,QAAQ,CAAC,IAAI,eAAe;CAC7B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BaseException } from "./BaseException.js";
|
|
2
|
+
/**
|
|
3
|
+
* Exception for 403 Forbidden responses.
|
|
4
|
+
*
|
|
5
|
+
* Digunakan ketika user sudah terautentikasi (401 bukan masalahnya),
|
|
6
|
+
* tapi tidak memiliki permission/role yang diperlukan untuk mengakses resource.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { ForbiddenException } from "@alis-kit/routers";
|
|
11
|
+
*
|
|
12
|
+
* class AdminController {
|
|
13
|
+
* @DeleteMapping("/users/:id")
|
|
14
|
+
* async deleteUser(@Param("id") id: string, @Req() req: express.Request) {
|
|
15
|
+
* if (req.user.role !== "admin") {
|
|
16
|
+
* throw new ForbiddenException("Only admins can delete users");
|
|
17
|
+
* }
|
|
18
|
+
* }
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export class ForbiddenException extends BaseException {
|
|
23
|
+
status = 403;
|
|
24
|
+
code = "FORBIDDEN";
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=ForbiddenException.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ForbiddenException.js","sourceRoot":"","sources":["../../exceptions/ForbiddenException.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,kBAAmB,SAAQ,aAAa;IAC1C,MAAM,GAAG,GAAG,CAAC;IACb,IAAI,GAAG,WAAW,CAAC;CAC7B"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { BaseException } from "./BaseException.js";
|
|
2
|
+
/**
|
|
3
|
+
* Exception for 404 Not Found responses.
|
|
4
|
+
*
|
|
5
|
+
* Digunakan ketika resource yang diminta tidak ditemukan.
|
|
6
|
+
* Paling sering dipakai di endpoint GET /:id, PUT /:id, DELETE /:id.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { NotFoundException } from "@alis-kit/routers";
|
|
11
|
+
*
|
|
12
|
+
* class UserController {
|
|
13
|
+
* @GetMapping("/:id")
|
|
14
|
+
* async getById(@Param("id") id: string) {
|
|
15
|
+
* const user = await UserService.findById(id);
|
|
16
|
+
* if (!user) {
|
|
17
|
+
* throw new NotFoundException("User not found");
|
|
18
|
+
* }
|
|
19
|
+
* return user;
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare class NotFoundException extends BaseException {
|
|
25
|
+
readonly status = 404;
|
|
26
|
+
readonly code = "NOT_FOUND";
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=NotFoundException.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotFoundException.d.ts","sourceRoot":"","sources":["../../exceptions/NotFoundException.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,QAAQ,CAAC,MAAM,OAAO;IACtB,QAAQ,CAAC,IAAI,eAAe;CAC7B"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { BaseException } from "./BaseException.js";
|
|
2
|
+
/**
|
|
3
|
+
* Exception for 404 Not Found responses.
|
|
4
|
+
*
|
|
5
|
+
* Digunakan ketika resource yang diminta tidak ditemukan.
|
|
6
|
+
* Paling sering dipakai di endpoint GET /:id, PUT /:id, DELETE /:id.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { NotFoundException } from "@alis-kit/routers";
|
|
11
|
+
*
|
|
12
|
+
* class UserController {
|
|
13
|
+
* @GetMapping("/:id")
|
|
14
|
+
* async getById(@Param("id") id: string) {
|
|
15
|
+
* const user = await UserService.findById(id);
|
|
16
|
+
* if (!user) {
|
|
17
|
+
* throw new NotFoundException("User not found");
|
|
18
|
+
* }
|
|
19
|
+
* return user;
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export class NotFoundException extends BaseException {
|
|
25
|
+
status = 404;
|
|
26
|
+
code = "NOT_FOUND";
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=NotFoundException.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotFoundException.js","sourceRoot":"","sources":["../../exceptions/NotFoundException.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,OAAO,iBAAkB,SAAQ,aAAa;IACzC,MAAM,GAAG,GAAG,CAAC;IACb,IAAI,GAAG,WAAW,CAAC;CAC7B"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { BaseException } from "./BaseException.js";
|
|
2
|
+
/**
|
|
3
|
+
* Exception for 500 Internal Server Error responses.
|
|
4
|
+
*
|
|
5
|
+
* Digunakan ketika terjadi error yang tidak terduga di server.
|
|
6
|
+
* RouteResolver otomatis membungkus error yang tidak dikenal
|
|
7
|
+
* sebagai ServerErrorException — tidak perlu di-throw manual.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { ServerErrorException } from "@alis-kit/routers";
|
|
12
|
+
*
|
|
13
|
+
* // Biasanya tidak perlu di-throw manual:
|
|
14
|
+
* // RouteResolver otomatis wrap unknown error jadi 500.
|
|
15
|
+
*
|
|
16
|
+
* // Tapi bisa dipakai explicit untuk kasus tertentu:
|
|
17
|
+
* class PaymentController {
|
|
18
|
+
* @PostMapping("/charge")
|
|
19
|
+
* async charge(@Body() body: unknown) {
|
|
20
|
+
* try {
|
|
21
|
+
* return await paymentGateway.charge(body);
|
|
22
|
+
* } catch (error) {
|
|
23
|
+
* throw new ServerErrorException("Payment service unavailable");
|
|
24
|
+
* }
|
|
25
|
+
* }
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare class ServerErrorException extends BaseException {
|
|
30
|
+
readonly status = 500;
|
|
31
|
+
readonly code = "INTERNAL_SERVER_ERROR";
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=ServerErrorException.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServerErrorException.d.ts","sourceRoot":"","sources":["../../exceptions/ServerErrorException.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,oBAAqB,SAAQ,aAAa;IACrD,QAAQ,CAAC,MAAM,OAAO;IACtB,QAAQ,CAAC,IAAI,2BAA2B;CACzC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { BaseException } from "./BaseException.js";
|
|
2
|
+
/**
|
|
3
|
+
* Exception for 500 Internal Server Error responses.
|
|
4
|
+
*
|
|
5
|
+
* Digunakan ketika terjadi error yang tidak terduga di server.
|
|
6
|
+
* RouteResolver otomatis membungkus error yang tidak dikenal
|
|
7
|
+
* sebagai ServerErrorException — tidak perlu di-throw manual.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { ServerErrorException } from "@alis-kit/routers";
|
|
12
|
+
*
|
|
13
|
+
* // Biasanya tidak perlu di-throw manual:
|
|
14
|
+
* // RouteResolver otomatis wrap unknown error jadi 500.
|
|
15
|
+
*
|
|
16
|
+
* // Tapi bisa dipakai explicit untuk kasus tertentu:
|
|
17
|
+
* class PaymentController {
|
|
18
|
+
* @PostMapping("/charge")
|
|
19
|
+
* async charge(@Body() body: unknown) {
|
|
20
|
+
* try {
|
|
21
|
+
* return await paymentGateway.charge(body);
|
|
22
|
+
* } catch (error) {
|
|
23
|
+
* throw new ServerErrorException("Payment service unavailable");
|
|
24
|
+
* }
|
|
25
|
+
* }
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export class ServerErrorException extends BaseException {
|
|
30
|
+
status = 500;
|
|
31
|
+
code = "INTERNAL_SERVER_ERROR";
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=ServerErrorException.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServerErrorException.js","sourceRoot":"","sources":["../../exceptions/ServerErrorException.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,OAAO,oBAAqB,SAAQ,aAAa;IAC5C,MAAM,GAAG,GAAG,CAAC;IACb,IAAI,GAAG,uBAAuB,CAAC;CACzC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { BaseException } from "./BaseException.js";
|
|
2
|
+
/**
|
|
3
|
+
* Exception for 401 Unauthorized responses.
|
|
4
|
+
*
|
|
5
|
+
* Digunakan ketika authentication diperlukan tapi tidak disertakan
|
|
6
|
+
* atau token tidak valid. Berbeda dengan ForbiddenException (403)
|
|
7
|
+
* yang berarti user sudah terautentikasi tapi tidak punya akses.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { UnauthorizedException } from "@alis-kit/routers";
|
|
12
|
+
*
|
|
13
|
+
* class AuthController {
|
|
14
|
+
* @PostMapping("/refresh")
|
|
15
|
+
* async refresh(@Req() req: express.Request) {
|
|
16
|
+
* const token = req.headers["authorization"];
|
|
17
|
+
* if (!token) {
|
|
18
|
+
* throw new UnauthorizedException("Access token is required");
|
|
19
|
+
* }
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare class UnauthorizedException extends BaseException {
|
|
25
|
+
readonly status = 401;
|
|
26
|
+
readonly code = "UNAUTHORIZED";
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=UnauthorizedException.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnauthorizedException.d.ts","sourceRoot":"","sources":["../../exceptions/UnauthorizedException.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,qBAAsB,SAAQ,aAAa;IACtD,QAAQ,CAAC,MAAM,OAAO;IACtB,QAAQ,CAAC,IAAI,kBAAkB;CAChC"}
|