@alis-kit/routers 1.0.0 → 2.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 +107 -32
- package/dist/cookie/CookieSetter.d.ts +8 -3
- package/dist/cookie/CookieSetter.d.ts.map +1 -1
- package/dist/cookie/CookieSetter.js +8 -3
- package/dist/cookie/CookieSetter.js.map +1 -1
- package/dist/core/RouteResolver.d.ts +4 -4
- package/dist/core/RouteResolver.js +6 -6
- package/dist/core/RouteResolver.js.map +1 -1
- package/dist/decorators/parameter/index.d.ts +19 -141
- package/dist/decorators/parameter/index.d.ts.map +1 -1
- package/dist/decorators/parameter/index.js +19 -182
- package/dist/decorators/parameter/index.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +37 -9
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +17 -10
- package/dist/types/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -37,7 +37,7 @@ No `reflect-metadata` needed — this library uses **TC39 native decorators** (s
|
|
|
37
37
|
|
|
38
38
|
```typescript
|
|
39
39
|
import express from "express";
|
|
40
|
-
import { RouterKit, ReqController, GetMapping
|
|
40
|
+
import { RouterKit, ReqController, GetMapping } from "@alis-kit/routers";
|
|
41
41
|
|
|
42
42
|
@ReqController("/hello")
|
|
43
43
|
class HelloController {
|
|
@@ -63,6 +63,70 @@ app.listen(3000, () => console.log("Server running on port 3000"));
|
|
|
63
63
|
|
|
64
64
|
---
|
|
65
65
|
|
|
66
|
+
## Parameter Injection
|
|
67
|
+
|
|
68
|
+
Parameter injection is configured via `params` in the mapping options. Each entry maps to a method parameter by array index.
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
@ReqController("/users", { authentication: "auth", tag: "User Management" })
|
|
72
|
+
class UserController {
|
|
73
|
+
@GetMapping("/", {
|
|
74
|
+
summary: "Get all users with pagination",
|
|
75
|
+
params: [
|
|
76
|
+
{ type: "query", schema: PaginationSchema },
|
|
77
|
+
],
|
|
78
|
+
})
|
|
79
|
+
async getAll(query: IPagination) {
|
|
80
|
+
return { items: [], page: query.page };
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
@GetMapping("/:id", {
|
|
84
|
+
summary: "Get user by ID",
|
|
85
|
+
params: [
|
|
86
|
+
{ type: "param", key: "id" },
|
|
87
|
+
],
|
|
88
|
+
})
|
|
89
|
+
async getById(id: string) {
|
|
90
|
+
return { id, name: "John Doe" };
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
@PostMapping("/", {
|
|
94
|
+
summary: "Register new user",
|
|
95
|
+
params: [
|
|
96
|
+
{ type: "body", schema: CreateUserSchema },
|
|
97
|
+
],
|
|
98
|
+
})
|
|
99
|
+
@HttpStatus(201)
|
|
100
|
+
async create(body: ICreateUser) {
|
|
101
|
+
return { id: "new-id", ...body };
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
@PutMapping("/:id", {
|
|
105
|
+
summary: "Update user",
|
|
106
|
+
params: [
|
|
107
|
+
{ type: "param", key: "id" },
|
|
108
|
+
{ type: "body", schema: UpdateUserSchema },
|
|
109
|
+
],
|
|
110
|
+
})
|
|
111
|
+
async update(id: string, body: IUpdateUser) {
|
|
112
|
+
return { id, ...body };
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Param Types
|
|
118
|
+
|
|
119
|
+
| Type | Description |
|
|
120
|
+
|---|---|
|
|
121
|
+
| `"body"` | Injects and validates `req.body` (optional Zod schema) |
|
|
122
|
+
| `"query"` | Injects and validates `req.query` (optional Zod schema) |
|
|
123
|
+
| `"param"` | Injects a route parameter by `key` (e.g. `"id"` for `/:id`) |
|
|
124
|
+
| `"req"` | Injects the raw framework request object |
|
|
125
|
+
| `"cookie"` | Injects a `CookieSetter` instance |
|
|
126
|
+
| `"reply"` | Injects the raw framework reply object (FastifyReply / express.Response) |
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
66
130
|
## API Reference
|
|
67
131
|
|
|
68
132
|
### `RouterKit`
|
|
@@ -137,17 +201,7 @@ class UserController { ... }
|
|
|
137
201
|
| `summary` | `string` | Swagger summary |
|
|
138
202
|
| `description` | `string` | Swagger description |
|
|
139
203
|
| `status` | `number` | Default response status code |
|
|
140
|
-
|
|
141
|
-
### Parameter Decorators
|
|
142
|
-
|
|
143
|
-
| Decorator | Description |
|
|
144
|
-
|---|---|
|
|
145
|
-
| `@Body(schema?)` | Injects and validates `req.body` with Zod |
|
|
146
|
-
| `@Query(schema?)` | Injects and validates `req.query` with Zod |
|
|
147
|
-
| `@Param(key)` | Injects a single route parameter |
|
|
148
|
-
| `@Req()` | Injects the raw request object |
|
|
149
|
-
| `@Cookie()` | Injects a `CookieSetter` instance |
|
|
150
|
-
| `@Reply()` | Injects the raw framework reply object (FastifyReply / express.Response) |
|
|
204
|
+
| `params` | `ParamDescriptor[]` | Parameter injection descriptors |
|
|
151
205
|
|
|
152
206
|
### Method Decorators
|
|
153
207
|
|
|
@@ -171,7 +225,7 @@ All exceptions extend `BaseException` and auto-send the appropriate HTTP respons
|
|
|
171
225
|
|
|
172
226
|
### `CookieSetter`
|
|
173
227
|
|
|
174
|
-
Injected via
|
|
228
|
+
Injected via `{ type: "cookie" }` in `params`. Abstracts cookie operations across frameworks.
|
|
175
229
|
|
|
176
230
|
```typescript
|
|
177
231
|
cookie.set(key, value, options?) // Set a cookie
|
|
@@ -190,13 +244,12 @@ import {
|
|
|
190
244
|
RouterKit,
|
|
191
245
|
ReqController,
|
|
192
246
|
GetMapping, PostMapping, PutMapping, DeleteMapping,
|
|
193
|
-
Body, Query, Param, Req, Cookie,
|
|
194
247
|
UseMiddleware, HttpStatus,
|
|
195
248
|
BadRequestException, NotFoundException, ConflictException,
|
|
196
249
|
CookieSetter,
|
|
197
250
|
} from "@alis-kit/routers";
|
|
198
251
|
|
|
199
|
-
//
|
|
252
|
+
// Zod Schemas
|
|
200
253
|
|
|
201
254
|
const CreateUserSchema = z.object({
|
|
202
255
|
firstName: z.string().min(1),
|
|
@@ -211,15 +264,18 @@ const UserQuerySchema = z.object({
|
|
|
211
264
|
search: z.string().optional(),
|
|
212
265
|
});
|
|
213
266
|
|
|
214
|
-
//
|
|
267
|
+
// Controllers
|
|
215
268
|
|
|
216
269
|
@ReqController("/auth", { tag: "Authentication", authentication: false })
|
|
217
270
|
class AuthController {
|
|
218
|
-
@PostMapping("/login", {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
271
|
+
@PostMapping("/login", {
|
|
272
|
+
summary: "Login user",
|
|
273
|
+
params: [
|
|
274
|
+
{ type: "body", schema: z.object({ email: z.string().email(), password: z.string().min(6) }) },
|
|
275
|
+
{ type: "cookie" },
|
|
276
|
+
],
|
|
277
|
+
})
|
|
278
|
+
async login(body: { email: string; password: string }, cookie: CookieSetter) {
|
|
223
279
|
cookie.set("refresh_token", "token-value", { httpOnly: true, secure: true });
|
|
224
280
|
return { accessToken: "jwt-token" };
|
|
225
281
|
}
|
|
@@ -227,34 +283,53 @@ class AuthController {
|
|
|
227
283
|
|
|
228
284
|
@ReqController("/users", { authentication: "auth", tag: "User Management" })
|
|
229
285
|
class UserController {
|
|
230
|
-
@GetMapping("/", {
|
|
231
|
-
|
|
286
|
+
@GetMapping("/", {
|
|
287
|
+
summary: "Get all users with pagination",
|
|
288
|
+
params: [{ type: "query", schema: UserQuerySchema }],
|
|
289
|
+
})
|
|
290
|
+
async getAll(query: { page: number; size: number; search?: string }) {
|
|
232
291
|
// return await UserService.findAll(query);
|
|
233
292
|
}
|
|
234
293
|
|
|
235
|
-
@GetMapping("/:id", {
|
|
236
|
-
|
|
294
|
+
@GetMapping("/:id", {
|
|
295
|
+
summary: "Get user by ID",
|
|
296
|
+
params: [{ type: "param", key: "id" }],
|
|
297
|
+
})
|
|
298
|
+
async getById(id: string) {
|
|
237
299
|
// if (!user) throw new NotFoundException("User not found");
|
|
238
300
|
}
|
|
239
301
|
|
|
240
|
-
@PostMapping("/", {
|
|
302
|
+
@PostMapping("/", {
|
|
303
|
+
authentication: false,
|
|
304
|
+
summary: "Register new user",
|
|
305
|
+
params: [{ type: "body", schema: CreateUserSchema }],
|
|
306
|
+
})
|
|
241
307
|
@HttpStatus(201)
|
|
242
|
-
async create(
|
|
308
|
+
async create(body: { firstName: string; lastName: string; email: string; age: number }) {
|
|
243
309
|
// return await UserService.create(body);
|
|
244
310
|
}
|
|
245
311
|
|
|
246
|
-
@PutMapping("/:id", {
|
|
247
|
-
|
|
312
|
+
@PutMapping("/:id", {
|
|
313
|
+
summary: "Update user",
|
|
314
|
+
params: [
|
|
315
|
+
{ type: "param", key: "id" },
|
|
316
|
+
{ type: "body", schema: CreateUserSchema.partial() },
|
|
317
|
+
],
|
|
318
|
+
})
|
|
319
|
+
async update(id: string, body: Partial<{ firstName: string; lastName: string; email: string; age: number }>) {
|
|
248
320
|
// return await UserService.update(id, body);
|
|
249
321
|
}
|
|
250
322
|
|
|
251
|
-
@DeleteMapping("/:id", {
|
|
252
|
-
|
|
323
|
+
@DeleteMapping("/:id", {
|
|
324
|
+
summary: "Delete user",
|
|
325
|
+
params: [{ type: "param", key: "id" }],
|
|
326
|
+
})
|
|
327
|
+
async delete(id: string) {
|
|
253
328
|
// return await UserService.delete(id);
|
|
254
329
|
}
|
|
255
330
|
}
|
|
256
331
|
|
|
257
|
-
//
|
|
332
|
+
// App Setup
|
|
258
333
|
|
|
259
334
|
const app = express();
|
|
260
335
|
app.use(express.json());
|
|
@@ -4,14 +4,19 @@ import type { BaseAdapter } from "../adapters/BaseAdapter.js";
|
|
|
4
4
|
* Helper class for reading, setting, and deleting cookies.
|
|
5
5
|
*
|
|
6
6
|
* Mengabstraksi operasi cookie antara Express dan Fastify melalui adapter pattern.
|
|
7
|
-
* Di-inject ke controller method via
|
|
7
|
+
* Di-inject ke controller method via `params: [{ type: "cookie" }]` di mapping options.
|
|
8
8
|
*
|
|
9
9
|
* @example
|
|
10
10
|
* ```typescript
|
|
11
11
|
* @ReqController("/auth")
|
|
12
12
|
* class AuthController {
|
|
13
|
-
* @PostMapping("/login"
|
|
14
|
-
*
|
|
13
|
+
* @PostMapping("/login", {
|
|
14
|
+
* params: [
|
|
15
|
+
* { type: "body", schema: LoginSchema },
|
|
16
|
+
* { type: "cookie" },
|
|
17
|
+
* ]
|
|
18
|
+
* })
|
|
19
|
+
* async login(body: ILogin, cookie: CookieSetter) {
|
|
15
20
|
* // Set cookie
|
|
16
21
|
* cookie.set("refresh_token", "jwt-token", {
|
|
17
22
|
* httpOnly: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CookieSetter.d.ts","sourceRoot":"","sources":["../../cookie/CookieSetter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D
|
|
1
|
+
{"version":3,"file":"CookieSetter.d.ts","sourceRoot":"","sources":["../../cookie/CookieSetter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAFH,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,OAAO;IAG/B;;;;;;;;;;;OAWG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAU9D;;;;;;;;;;;OAWG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKpC;;;;;;;;;OASG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAG1B"}
|
|
@@ -2,14 +2,19 @@
|
|
|
2
2
|
* Helper class for reading, setting, and deleting cookies.
|
|
3
3
|
*
|
|
4
4
|
* Mengabstraksi operasi cookie antara Express dan Fastify melalui adapter pattern.
|
|
5
|
-
* Di-inject ke controller method via
|
|
5
|
+
* Di-inject ke controller method via `params: [{ type: "cookie" }]` di mapping options.
|
|
6
6
|
*
|
|
7
7
|
* @example
|
|
8
8
|
* ```typescript
|
|
9
9
|
* @ReqController("/auth")
|
|
10
10
|
* class AuthController {
|
|
11
|
-
* @PostMapping("/login"
|
|
12
|
-
*
|
|
11
|
+
* @PostMapping("/login", {
|
|
12
|
+
* params: [
|
|
13
|
+
* { type: "body", schema: LoginSchema },
|
|
14
|
+
* { type: "cookie" },
|
|
15
|
+
* ]
|
|
16
|
+
* })
|
|
17
|
+
* async login(body: ILogin, cookie: CookieSetter) {
|
|
13
18
|
* // Set cookie
|
|
14
19
|
* cookie.set("refresh_token", "jwt-token", {
|
|
15
20
|
* httpOnly: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CookieSetter.js","sourceRoot":"","sources":["../../cookie/CookieSetter.ts"],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"CookieSetter.js","sourceRoot":"","sources":["../../cookie/CookieSetter.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,OAAO,YAAY;IAEJ;IACA;IACA;IAHnB,YACmB,OAAoB,EACpB,GAAY,EACZ,GAAY;QAFZ,YAAO,GAAP,OAAO,CAAa;QACpB,QAAG,GAAH,GAAG,CAAS;QACZ,QAAG,GAAH,GAAG,CAAS;IAC5B,CAAC;IAEJ;;;;;;;;;;;OAWG;IACH,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,OAAuB;QACrD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;YAC3C,QAAQ,EAAE,OAAO,EAAE,QAAQ,KAAK,KAAK;YACrC,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,KAAK;YACjC,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,GAAG;YAC1B,QAAQ,EAAE,OAAO,EAAE,QAAQ;SAC5B,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;OAWG;IACH,GAAG,CAAC,GAAW;QACb,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;CACF"}
|
|
@@ -2,10 +2,10 @@ import type { MiddlewareFn, ResolvedRoute, Class } from "../types/index.js";
|
|
|
2
2
|
import type { BaseAdapter } from "../adapters/BaseAdapter.js";
|
|
3
3
|
/**
|
|
4
4
|
* Internal engine yang membaca metadata dari TC39 decorators (`Symbol.metadata`)
|
|
5
|
-
*
|
|
5
|
+
* lalu mendaftarkan route ke framework adapter.
|
|
6
6
|
*
|
|
7
|
-
* Semua logic inti ada di sini: parameter injection
|
|
8
|
-
* error handling, response envelope, auth middleware, dan logging.
|
|
7
|
+
* Semua logic inti ada di sini: parameter injection dari MappingOptions.params,
|
|
8
|
+
* Zod validation, error handling, response envelope, auth middleware, dan logging.
|
|
9
9
|
*/
|
|
10
10
|
export declare class RouteResolver {
|
|
11
11
|
private readonly adapter;
|
|
@@ -29,7 +29,7 @@ export declare class RouteResolver {
|
|
|
29
29
|
constructor(adapter: BaseAdapter, loggerConfig?: (boolean | import("../types/index.js").LoggerConfig) | undefined, authMiddleware?: MiddlewareFn | undefined, refreshMiddleware?: MiddlewareFn | undefined, responseEnvelope?: "wrap" | "raw", globalPrefix?: string);
|
|
30
30
|
/**
|
|
31
31
|
* Resolves and registers all routes from a controller class.
|
|
32
|
-
* Membaca metadata dari `Symbol.metadata` (TC39)
|
|
32
|
+
* Membaca metadata dari `Symbol.metadata` (TC39),
|
|
33
33
|
* lalu mendaftarkan setiap route ke adapter.
|
|
34
34
|
*
|
|
35
35
|
* @param Controller - Controller class yang sudah di-decorate dengan @ReqController
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ZodError } from "zod";
|
|
2
|
-
import { META, getClassMeta,
|
|
2
|
+
import { META, getClassMeta, resolveParamDescriptors } from "../types/index.js";
|
|
3
3
|
import { CookieSetter } from "../cookie/CookieSetter.js";
|
|
4
4
|
import { BaseException } from "../exceptions/BaseException.js";
|
|
5
5
|
import { BadRequestException } from "../exceptions/BadRequestException.js";
|
|
@@ -7,10 +7,10 @@ import { ServerErrorException } from "../exceptions/ServerErrorException.js";
|
|
|
7
7
|
import { Logger } from "./Logger.js";
|
|
8
8
|
/**
|
|
9
9
|
* Internal engine yang membaca metadata dari TC39 decorators (`Symbol.metadata`)
|
|
10
|
-
*
|
|
10
|
+
* lalu mendaftarkan route ke framework adapter.
|
|
11
11
|
*
|
|
12
|
-
* Semua logic inti ada di sini: parameter injection
|
|
13
|
-
* error handling, response envelope, auth middleware, dan logging.
|
|
12
|
+
* Semua logic inti ada di sini: parameter injection dari MappingOptions.params,
|
|
13
|
+
* Zod validation, error handling, response envelope, auth middleware, dan logging.
|
|
14
14
|
*/
|
|
15
15
|
export class RouteResolver {
|
|
16
16
|
adapter;
|
|
@@ -41,7 +41,7 @@ export class RouteResolver {
|
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
43
43
|
* Resolves and registers all routes from a controller class.
|
|
44
|
-
* Membaca metadata dari `Symbol.metadata` (TC39)
|
|
44
|
+
* Membaca metadata dari `Symbol.metadata` (TC39),
|
|
45
45
|
* lalu mendaftarkan setiap route ke adapter.
|
|
46
46
|
*
|
|
47
47
|
* @param Controller - Controller class yang sudah di-decorate dengan @ReqController
|
|
@@ -83,7 +83,7 @@ export class RouteResolver {
|
|
|
83
83
|
const middlewaresKey = META.MIDDLEWARES_PREFIX + route.propertyKey;
|
|
84
84
|
const methodMiddlewares = getClassMeta(Controller, middlewaresKey) ?? [];
|
|
85
85
|
const allMiddlewares = [...authMiddlewares, ...methodMiddlewares];
|
|
86
|
-
const params =
|
|
86
|
+
const params = resolveParamDescriptors(route.options.params ?? []);
|
|
87
87
|
const httpStatusKey = META.HTTP_STATUS_PREFIX + route.propertyKey;
|
|
88
88
|
const statusFromDecorator = getClassMeta(Controller, httpStatusKey);
|
|
89
89
|
const statusCode = route.options.status ?? statusFromDecorator ?? 200;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteResolver.js","sourceRoot":"","sources":["../../core/RouteResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAU/B,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"RouteResolver.js","sourceRoot":"","sources":["../../core/RouteResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,155 +1,33 @@
|
|
|
1
|
-
|
|
1
|
+
export {};
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Parameter injection sekarang dikonfigurasi via `MappingOptions.params`
|
|
4
|
+
* di mapping decorators (`@GetMapping`, `@PostMapping`, dll).
|
|
4
5
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* Throw `BadRequestException` jika validasi gagal.
|
|
6
|
+
* Tidak ada lagi parameter decorators — semua menggunakan TC39 native
|
|
7
|
+
* decorator protocol secara konsisten.
|
|
8
8
|
*
|
|
9
9
|
* @example
|
|
10
10
|
* ```typescript
|
|
11
|
-
* const CreateUserSchema = z.object({
|
|
12
|
-
* name: z.string().min(1),
|
|
13
|
-
* email: z.string().email(),
|
|
14
|
-
* });
|
|
15
|
-
*
|
|
16
11
|
* @ReqController("/users")
|
|
17
12
|
* class UserController {
|
|
18
|
-
* @
|
|
19
|
-
*
|
|
20
|
-
*
|
|
13
|
+
* @GetMapping("/", {
|
|
14
|
+
* params: [
|
|
15
|
+
* { type: "query", schema: PaginationSchema }
|
|
16
|
+
* ]
|
|
17
|
+
* })
|
|
18
|
+
* async getAll(query: IPagination) {
|
|
19
|
+
* return { items: [], page: query.page };
|
|
21
20
|
* }
|
|
22
|
-
* }
|
|
23
|
-
* ```
|
|
24
21
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* }
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
export declare function Body(schema?: ZodSchema): (target: Object, propertyKey: string | symbol, parameterIndex: number) => void;
|
|
35
|
-
/**
|
|
36
|
-
* Injects and optionally validates `req.query` using a Zod schema.
|
|
37
|
-
*
|
|
38
|
-
* Gunakan `z.coerce` untuk type conversion (string → number, dll).
|
|
39
|
-
*
|
|
40
|
-
* @param schema - Optional Zod schema for validation
|
|
41
|
-
*
|
|
42
|
-
* @example
|
|
43
|
-
* ```typescript
|
|
44
|
-
* const PaginationSchema = z.object({
|
|
45
|
-
* page: z.coerce.number().default(1),
|
|
46
|
-
* size: z.coerce.number().default(10),
|
|
47
|
-
* });
|
|
48
|
-
*
|
|
49
|
-
* @ReqController("/users")
|
|
50
|
-
* class UserController {
|
|
51
|
-
* @GetMapping("/")
|
|
52
|
-
* async getAll(@Query(PaginationSchema) query: { page: number; size: number }) {
|
|
53
|
-
* // query.page dan query.size otomatis di-coerce ke number
|
|
22
|
+
* @PostMapping("/", {
|
|
23
|
+
* params: [
|
|
24
|
+
* { type: "body", schema: CreateUserSchema }
|
|
25
|
+
* ]
|
|
26
|
+
* })
|
|
27
|
+
* async create(body: ICreateUser) {
|
|
28
|
+
* return { id: "new-id", ...body };
|
|
54
29
|
* }
|
|
55
30
|
* }
|
|
56
31
|
* ```
|
|
57
32
|
*/
|
|
58
|
-
export declare function Query(schema?: ZodSchema): (target: Object, propertyKey: string | symbol, parameterIndex: number) => void;
|
|
59
|
-
/**
|
|
60
|
-
* Injects a single route parameter by key.
|
|
61
|
-
*
|
|
62
|
-
* @param key - Nama route parameter (contoh: "id" untuk route `/:id`)
|
|
63
|
-
*
|
|
64
|
-
* @example
|
|
65
|
-
* ```typescript
|
|
66
|
-
* @ReqController("/users")
|
|
67
|
-
* class UserController {
|
|
68
|
-
* @GetMapping("/:id")
|
|
69
|
-
* async getById(@Param("id") id: string) {
|
|
70
|
-
* // id = "123" untuk request GET /users/123
|
|
71
|
-
* }
|
|
72
|
-
* }
|
|
73
|
-
* ```
|
|
74
|
-
*/
|
|
75
|
-
export declare function Param(key: string): (target: Object, propertyKey: string | symbol, parameterIndex: number) => void;
|
|
76
|
-
/**
|
|
77
|
-
* Injects the raw framework request object.
|
|
78
|
-
*
|
|
79
|
-
* Berguna saat perlu akses ke properti native request
|
|
80
|
-
* seperti headers, raw body stream, atau IP address.
|
|
81
|
-
*
|
|
82
|
-
* @example
|
|
83
|
-
* ```typescript
|
|
84
|
-
* @ReqController("/auth")
|
|
85
|
-
* class AuthController {
|
|
86
|
-
* @PostMapping("/refresh")
|
|
87
|
-
* async refresh(@Req() req: express.Request) {
|
|
88
|
-
* const token = req.headers["authorization"];
|
|
89
|
-
* }
|
|
90
|
-
* }
|
|
91
|
-
* ```
|
|
92
|
-
*
|
|
93
|
-
* @example
|
|
94
|
-
* ```typescript
|
|
95
|
-
* // Dengan Fastify
|
|
96
|
-
* @PostMapping("/webhook")
|
|
97
|
-
* async handle(@Req() req: FastifyRequest) {
|
|
98
|
-
* const sourceIp = req.ip;
|
|
99
|
-
* }
|
|
100
|
-
* ```
|
|
101
|
-
*/
|
|
102
|
-
export declare function Req(): (target: Object, propertyKey: string | symbol, parameterIndex: number) => void;
|
|
103
|
-
/**
|
|
104
|
-
* Injects a CookieSetter instance for reading, setting, and deleting cookies.
|
|
105
|
-
*
|
|
106
|
-
* CookieSetter adalah helper yang mengabstraksi operasi cookie
|
|
107
|
-
* di Express dan Fastify melalui adapter pattern.
|
|
108
|
-
*
|
|
109
|
-
* @example
|
|
110
|
-
* ```typescript
|
|
111
|
-
* @ReqController("/auth")
|
|
112
|
-
* class AuthController {
|
|
113
|
-
* @PostMapping("/login")
|
|
114
|
-
* async login(@Body(LoginSchema) body: ILogin, @Cookie() cookie: CookieSetter) {
|
|
115
|
-
* cookie.set("refresh_token", token, { httpOnly: true, secure: true });
|
|
116
|
-
* const existing = cookie.get("refresh_token");
|
|
117
|
-
* cookie.delete("old_token");
|
|
118
|
-
* }
|
|
119
|
-
* }
|
|
120
|
-
* ```
|
|
121
|
-
*/
|
|
122
|
-
export declare function Cookie(): (target: Object, propertyKey: string | symbol, parameterIndex: number) => void;
|
|
123
|
-
/**
|
|
124
|
-
* Injects the raw framework reply object (FastifyReply / express.Response).
|
|
125
|
-
*
|
|
126
|
-
* Digunakan saat handler perlu kontrol penuh terhadap response:
|
|
127
|
-
* - Set content-type selain JSON (HTML, file stream)
|
|
128
|
-
* - Set custom headers
|
|
129
|
-
* - Return non-JSON response (misal: redirect, HTML page)
|
|
130
|
-
*
|
|
131
|
-
* @example
|
|
132
|
-
* ```typescript
|
|
133
|
-
* @ReqController("/oauth")
|
|
134
|
-
* class OAuthController {
|
|
135
|
-
* @GetMapping("/callback")
|
|
136
|
-
* async callback(@Reply() reply: FastifyReply) {
|
|
137
|
-
* reply.type("text/html").send("<h1>Login berhasil</h1>");
|
|
138
|
-
* return reply; // Wajib return reply agar framework tidak auto-send
|
|
139
|
-
* }
|
|
140
|
-
* }
|
|
141
|
-
* ```
|
|
142
|
-
*
|
|
143
|
-
* @example
|
|
144
|
-
* ```typescript
|
|
145
|
-
* // Express Response — set cookie domain
|
|
146
|
-
* @Get("/download")
|
|
147
|
-
* async download(@Reply() res: express.Response) {
|
|
148
|
-
* res.setHeader("Content-Type", "application/octet-stream");
|
|
149
|
-
* res.status(200).send(Buffer.from("..."));
|
|
150
|
-
* return res;
|
|
151
|
-
* }
|
|
152
|
-
* ```
|
|
153
|
-
*/
|
|
154
|
-
export declare function Reply(): (target: Object, propertyKey: string | symbol, parameterIndex: number) => void;
|
|
155
33
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../decorators/parameter/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../decorators/parameter/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG"}
|
|
@@ -1,196 +1,33 @@
|
|
|
1
|
-
|
|
1
|
+
export {};
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Parameter injection sekarang dikonfigurasi via `MappingOptions.params`
|
|
4
|
+
* di mapping decorators (`@GetMapping`, `@PostMapping`, dll).
|
|
4
5
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
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.
|
|
6
|
+
* Tidak ada lagi parameter decorators — semua menggunakan TC39 native
|
|
7
|
+
* decorator protocol secara konsisten.
|
|
25
8
|
*
|
|
26
9
|
* @example
|
|
27
10
|
* ```typescript
|
|
28
|
-
* const CreateUserSchema = z.object({
|
|
29
|
-
* name: z.string().min(1),
|
|
30
|
-
* email: z.string().email(),
|
|
31
|
-
* });
|
|
32
|
-
*
|
|
33
11
|
* @ReqController("/users")
|
|
34
12
|
* class UserController {
|
|
35
|
-
* @
|
|
36
|
-
*
|
|
37
|
-
*
|
|
13
|
+
* @GetMapping("/", {
|
|
14
|
+
* params: [
|
|
15
|
+
* { type: "query", schema: PaginationSchema }
|
|
16
|
+
* ]
|
|
17
|
+
* })
|
|
18
|
+
* async getAll(query: IPagination) {
|
|
19
|
+
* return { items: [], page: query.page };
|
|
38
20
|
* }
|
|
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
21
|
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
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
|
|
22
|
+
* @PostMapping("/", {
|
|
23
|
+
* params: [
|
|
24
|
+
* { type: "body", schema: CreateUserSchema }
|
|
25
|
+
* ]
|
|
26
|
+
* })
|
|
27
|
+
* async create(body: ICreateUser) {
|
|
28
|
+
* return { id: "new-id", ...body };
|
|
75
29
|
* }
|
|
76
30
|
* }
|
|
77
31
|
* ```
|
|
78
32
|
*/
|
|
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
33
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../decorators/parameter/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../decorators/parameter/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export { RouterKit } from "./core/RouterKit.js";
|
|
2
2
|
export { ReqController } from "./decorators/controller/ReqController.js";
|
|
3
3
|
export { GetMapping, PostMapping, PutMapping, PatchMapping, DeleteMapping, } from "./decorators/mapping/index.js";
|
|
4
|
-
export { Body, Query, Param, Req, Cookie, Reply } from "./decorators/parameter/index.js";
|
|
5
4
|
export { UseMiddleware, HttpStatus } from "./decorators/method/index.js";
|
|
6
5
|
export { BaseException } from "./exceptions/BaseException.js";
|
|
7
6
|
export { BadRequestException } from "./exceptions/BadRequestException.js";
|
|
@@ -11,5 +10,5 @@ export { NotFoundException } from "./exceptions/NotFoundException.js";
|
|
|
11
10
|
export { ConflictException } from "./exceptions/ConflictException.js";
|
|
12
11
|
export { ServerErrorException } from "./exceptions/ServerErrorException.js";
|
|
13
12
|
export { CookieSetter } from "./cookie/CookieSetter.js";
|
|
14
|
-
export type { Framework, AuthType, HttpMethod, MiddlewareFn, HandlerFn, Class, CookieOptions, SwaggerConfig, LoggerConfig, RouterKitConfig, ControllerOptions, MappingOptions, } from "./types/index.js";
|
|
13
|
+
export type { Framework, AuthType, HttpMethod, MiddlewareFn, HandlerFn, Class, CookieOptions, SwaggerConfig, LoggerConfig, RouterKitConfig, ControllerOptions, MappingOptions, ParamDescriptor, } from "./types/index.js";
|
|
15
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGhD,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAGzE,OAAO,EACL,UAAU,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGhD,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAGzE,OAAO,EACL,UAAU,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAGzE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAG5E,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGxD,YAAY,EACV,SAAS,EACT,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,SAAS,EACT,KAAK,EACL,aAAa,EACb,aAAa,EACb,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,eAAe,GAChB,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,8 +4,6 @@ export { RouterKit } from "./core/RouterKit.js";
|
|
|
4
4
|
export { ReqController } from "./decorators/controller/ReqController.js";
|
|
5
5
|
// ── Decorators: Mapping ───────────────────────────────────────────
|
|
6
6
|
export { GetMapping, PostMapping, PutMapping, PatchMapping, DeleteMapping, } from "./decorators/mapping/index.js";
|
|
7
|
-
// ── Decorators: Parameter ─────────────────────────────────────────
|
|
8
|
-
export { Body, Query, Param, Req, Cookie, Reply } from "./decorators/parameter/index.js";
|
|
9
7
|
// ── Decorators: Method ────────────────────────────────────────────
|
|
10
8
|
export { UseMiddleware, HttpStatus } from "./decorators/method/index.js";
|
|
11
9
|
// ── Exceptions ────────────────────────────────────────────────────
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,qEAAqE;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAEzE,qEAAqE;AACrE,OAAO,EACL,UAAU,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,+BAA+B,CAAC;AAEvC,qEAAqE;AACrE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,qEAAqE;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAEzE,qEAAqE;AACrE,OAAO,EACL,UAAU,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,+BAA+B,CAAC;AAEvC,qEAAqE;AACrE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAEzE,qEAAqE;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAE5E,qEAAqE;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -110,6 +110,28 @@ export interface ControllerOptions {
|
|
|
110
110
|
/** Whether to include in Swagger docs (default: true) */
|
|
111
111
|
swagger?: boolean;
|
|
112
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* Deskripsi satu parameter injection untuk sebuah method.
|
|
115
|
+
*
|
|
116
|
+
* Array index = parameter index di method signature.
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```typescript
|
|
120
|
+
* // Param 0 = body, param 1 = query
|
|
121
|
+
* params: [
|
|
122
|
+
* { type: "body", schema: CreateSchema },
|
|
123
|
+
* { type: "query", schema: PaginationSchema },
|
|
124
|
+
* ]
|
|
125
|
+
* ```
|
|
126
|
+
*/
|
|
127
|
+
export interface ParamDescriptor {
|
|
128
|
+
/** Tipe injection: body, query, param (route), req, cookie, reply */
|
|
129
|
+
type: ParamType;
|
|
130
|
+
/** Zod schema untuk validasi (opsional, untuk body dan query) */
|
|
131
|
+
schema?: ZodSchema;
|
|
132
|
+
/** Nama route parameter (wajib jika type = "param", contoh: "id" untuk /:id) */
|
|
133
|
+
key?: string;
|
|
134
|
+
}
|
|
113
135
|
/** Options untuk mapping decorators (`@GetMapping`, `@PostMapping`, dll) */
|
|
114
136
|
export interface MappingOptions {
|
|
115
137
|
/** Override authentication level untuk route ini */
|
|
@@ -124,6 +146,12 @@ export interface MappingOptions {
|
|
|
124
146
|
description?: string;
|
|
125
147
|
/** Default HTTP response status code (override @HttpStatus) */
|
|
126
148
|
status?: number;
|
|
149
|
+
/**
|
|
150
|
+
* Parameter injection descriptors.
|
|
151
|
+
* Array index = parameter index di method signature.
|
|
152
|
+
* RouteResolver akan resolve dan inject sebagai method arguments.
|
|
153
|
+
*/
|
|
154
|
+
params?: ParamDescriptor[];
|
|
127
155
|
}
|
|
128
156
|
/** Stored metadata untuk controller class — ditulis oleh `@ReqController` */
|
|
129
157
|
export interface ControllerMetadata {
|
|
@@ -141,7 +169,7 @@ export interface RouteMetadata {
|
|
|
141
169
|
}
|
|
142
170
|
/** Tipe parameter injection yang didukung */
|
|
143
171
|
export type ParamType = "body" | "query" | "param" | "req" | "cookie" | "reply";
|
|
144
|
-
/** Stored metadata untuk satu parameter —
|
|
172
|
+
/** Stored metadata untuk satu parameter — resolved dari ParamDescriptor */
|
|
145
173
|
export interface ParamMetadata {
|
|
146
174
|
type: ParamType;
|
|
147
175
|
index: number;
|
|
@@ -151,8 +179,8 @@ export interface ParamMetadata {
|
|
|
151
179
|
/**
|
|
152
180
|
* Metadata keys untuk TC39 native decorators.
|
|
153
181
|
* Disimpan sebagai Symbol agar tidak konflik dengan metadata lain.
|
|
154
|
-
* Parameter
|
|
155
|
-
*
|
|
182
|
+
* Parameter injection dikonfigurasi via MappingOptions.params
|
|
183
|
+
* dan di-resolve oleh RouteResolver — tidak ada parameter decorator.
|
|
156
184
|
*/
|
|
157
185
|
export declare const META: {
|
|
158
186
|
/** Key untuk controller metadata (class-level) */
|
|
@@ -164,15 +192,15 @@ export declare const META: {
|
|
|
164
192
|
/** Prefix key untuk method-level http status */
|
|
165
193
|
readonly HTTP_STATUS_PREFIX: "routerkit:httpstatus:";
|
|
166
194
|
};
|
|
195
|
+
export declare function getClassMeta<T = unknown>(Controller: Class, key: symbol | string): T | undefined;
|
|
167
196
|
/**
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
* metadata parameter di WeakMap ini.
|
|
197
|
+
* Converts ParamDescriptor array (from MappingOptions) into ParamMetadata array.
|
|
198
|
+
* Array index dari descriptors digunakan sebagai parameter index.
|
|
171
199
|
*
|
|
172
|
-
*
|
|
200
|
+
* @param descriptors - ParamDescriptor[] dari MappingOptions.params
|
|
201
|
+
* @returns ParamMetadata[] siap pakai oleh RouteResolver
|
|
173
202
|
*/
|
|
174
|
-
export declare
|
|
175
|
-
export declare function getClassMeta<T = unknown>(Controller: Class, key: symbol | string): T | undefined;
|
|
203
|
+
export declare function resolveParamDescriptors(descriptors: ParamDescriptor[]): ParamMetadata[];
|
|
176
204
|
/** OpenAPI path item — mapping from path to operations */
|
|
177
205
|
export interface OpenAPIPathItem {
|
|
178
206
|
[method: string]: OpenAPIOperation;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../types/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../types/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Metadata keys untuk TC39 native decorators.
|
|
4
4
|
* Disimpan sebagai Symbol agar tidak konflik dengan metadata lain.
|
|
5
|
-
* Parameter
|
|
6
|
-
*
|
|
5
|
+
* Parameter injection dikonfigurasi via MappingOptions.params
|
|
6
|
+
* dan di-resolve oleh RouteResolver — tidak ada parameter decorator.
|
|
7
7
|
*/
|
|
8
8
|
export const META = {
|
|
9
9
|
/** Key untuk controller metadata (class-level) */
|
|
@@ -15,17 +15,24 @@ export const META = {
|
|
|
15
15
|
/** Prefix key untuk method-level http status */
|
|
16
16
|
HTTP_STATUS_PREFIX: "routerkit:httpstatus:",
|
|
17
17
|
};
|
|
18
|
-
/**
|
|
19
|
-
* WeakMap storage untuk parameter decorators metadata.
|
|
20
|
-
* TC39 tidak mendukung parameter decorators, jadi kita simpan
|
|
21
|
-
* metadata parameter di WeakMap ini.
|
|
22
|
-
*
|
|
23
|
-
* Struktur: WeakMap<ControllerClass, Map<methodName, ParamMetadata[]>>
|
|
24
|
-
*/
|
|
25
|
-
export const paramMetaStore = new WeakMap();
|
|
26
18
|
export function getClassMeta(Controller, key) {
|
|
27
19
|
const container = Controller;
|
|
28
20
|
const meta = container[Symbol.metadata];
|
|
29
21
|
return meta?.[key];
|
|
30
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Converts ParamDescriptor array (from MappingOptions) into ParamMetadata array.
|
|
25
|
+
* Array index dari descriptors digunakan sebagai parameter index.
|
|
26
|
+
*
|
|
27
|
+
* @param descriptors - ParamDescriptor[] dari MappingOptions.params
|
|
28
|
+
* @returns ParamMetadata[] siap pakai oleh RouteResolver
|
|
29
|
+
*/
|
|
30
|
+
export function resolveParamDescriptors(descriptors) {
|
|
31
|
+
return descriptors.map((desc, index) => ({
|
|
32
|
+
type: desc.type,
|
|
33
|
+
index,
|
|
34
|
+
schema: desc.schema,
|
|
35
|
+
key: desc.key,
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
31
38
|
//# sourceMappingURL=index.js.map
|
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../types/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../types/index.ts"],"names":[],"mappings":"AA+MA,qEAAqE;AAErE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC,sBAAsB,CAAC;IAC1C,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC,kBAAkB,CAAC;IAClC,gDAAgD;IAChD,kBAAkB,EAAE,wBAAwB;IAC5C,gDAAgD;IAChD,kBAAkB,EAAE,uBAAuB;CACnC,CAAC;AAoBX,MAAM,UAAU,YAAY,CAAc,UAAiB,EAAE,GAAoB;IAC/E,MAAM,SAAS,GAAG,UAAsC,CAAC;IACzD,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,QAAkB,CAA8B,CAAC;IAC/E,OAAO,IAAI,EAAE,CAAC,GAAG,CAAkB,CAAC;AACtC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,WAA8B;IACpE,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACvC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK;QACL,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,GAAG,EAAE,IAAI,CAAC,GAAG;KACd,CAAC,CAAC,CAAC;AACN,CAAC"}
|
package/package.json
CHANGED