@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.
Files changed (90) hide show
  1. package/README.md +302 -0
  2. package/dist/adapters/BaseAdapter.d.ts +63 -0
  3. package/dist/adapters/BaseAdapter.d.ts.map +1 -0
  4. package/dist/adapters/BaseAdapter.js +17 -0
  5. package/dist/adapters/BaseAdapter.js.map +1 -0
  6. package/dist/adapters/ExpressAdapter.d.ts +44 -0
  7. package/dist/adapters/ExpressAdapter.d.ts.map +1 -0
  8. package/dist/adapters/ExpressAdapter.js +73 -0
  9. package/dist/adapters/ExpressAdapter.js.map +1 -0
  10. package/dist/adapters/FastifyAdapter.d.ts +61 -0
  11. package/dist/adapters/FastifyAdapter.d.ts.map +1 -0
  12. package/dist/adapters/FastifyAdapter.js +132 -0
  13. package/dist/adapters/FastifyAdapter.js.map +1 -0
  14. package/dist/cookie/CookieSetter.d.ts +74 -0
  15. package/dist/cookie/CookieSetter.d.ts.map +1 -0
  16. package/dist/cookie/CookieSetter.js +89 -0
  17. package/dist/cookie/CookieSetter.js.map +1 -0
  18. package/dist/core/Logger.d.ts +36 -0
  19. package/dist/core/Logger.d.ts.map +1 -0
  20. package/dist/core/Logger.js +53 -0
  21. package/dist/core/Logger.js.map +1 -0
  22. package/dist/core/RouteResolver.d.ts +91 -0
  23. package/dist/core/RouteResolver.d.ts.map +1 -0
  24. package/dist/core/RouteResolver.js +279 -0
  25. package/dist/core/RouteResolver.js.map +1 -0
  26. package/dist/core/RouterKit.d.ts +116 -0
  27. package/dist/core/RouterKit.d.ts.map +1 -0
  28. package/dist/core/RouterKit.js +175 -0
  29. package/dist/core/RouterKit.js.map +1 -0
  30. package/dist/decorators/controller/ReqController.d.ts +29 -0
  31. package/dist/decorators/controller/ReqController.d.ts.map +1 -0
  32. package/dist/decorators/controller/ReqController.js +62 -0
  33. package/dist/decorators/controller/ReqController.js.map +1 -0
  34. package/dist/decorators/mapping/index.d.ts +93 -0
  35. package/dist/decorators/mapping/index.d.ts.map +1 -0
  36. package/dist/decorators/mapping/index.js +128 -0
  37. package/dist/decorators/mapping/index.js.map +1 -0
  38. package/dist/decorators/method/index.d.ts +67 -0
  39. package/dist/decorators/method/index.d.ts.map +1 -0
  40. package/dist/decorators/method/index.js +83 -0
  41. package/dist/decorators/method/index.js.map +1 -0
  42. package/dist/decorators/parameter/index.d.ts +155 -0
  43. package/dist/decorators/parameter/index.d.ts.map +1 -0
  44. package/dist/decorators/parameter/index.js +196 -0
  45. package/dist/decorators/parameter/index.js.map +1 -0
  46. package/dist/exceptions/BadRequestException.d.ts +37 -0
  47. package/dist/exceptions/BadRequestException.d.ts.map +1 -0
  48. package/dist/exceptions/BadRequestException.js +37 -0
  49. package/dist/exceptions/BadRequestException.js.map +1 -0
  50. package/dist/exceptions/BaseException.d.ts +29 -0
  51. package/dist/exceptions/BaseException.d.ts.map +1 -0
  52. package/dist/exceptions/BaseException.js +29 -0
  53. package/dist/exceptions/BaseException.js.map +1 -0
  54. package/dist/exceptions/ConflictException.d.ts +28 -0
  55. package/dist/exceptions/ConflictException.d.ts.map +1 -0
  56. package/dist/exceptions/ConflictException.js +28 -0
  57. package/dist/exceptions/ConflictException.js.map +1 -0
  58. package/dist/exceptions/ForbiddenException.d.ts +26 -0
  59. package/dist/exceptions/ForbiddenException.d.ts.map +1 -0
  60. package/dist/exceptions/ForbiddenException.js +26 -0
  61. package/dist/exceptions/ForbiddenException.js.map +1 -0
  62. package/dist/exceptions/NotFoundException.d.ts +28 -0
  63. package/dist/exceptions/NotFoundException.d.ts.map +1 -0
  64. package/dist/exceptions/NotFoundException.js +28 -0
  65. package/dist/exceptions/NotFoundException.js.map +1 -0
  66. package/dist/exceptions/ServerErrorException.d.ts +33 -0
  67. package/dist/exceptions/ServerErrorException.d.ts.map +1 -0
  68. package/dist/exceptions/ServerErrorException.js +33 -0
  69. package/dist/exceptions/ServerErrorException.js.map +1 -0
  70. package/dist/exceptions/UnauthorizedException.d.ts +28 -0
  71. package/dist/exceptions/UnauthorizedException.d.ts.map +1 -0
  72. package/dist/exceptions/UnauthorizedException.js +28 -0
  73. package/dist/exceptions/UnauthorizedException.js.map +1 -0
  74. package/dist/index.d.ts +15 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +21 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/swagger/SwaggerGenerator.d.ts +63 -0
  79. package/dist/swagger/SwaggerGenerator.d.ts.map +1 -0
  80. package/dist/swagger/SwaggerGenerator.js +266 -0
  81. package/dist/swagger/SwaggerGenerator.js.map +1 -0
  82. package/dist/swagger/SwaggerUI.d.ts +30 -0
  83. package/dist/swagger/SwaggerUI.d.ts.map +1 -0
  84. package/dist/swagger/SwaggerUI.js +52 -0
  85. package/dist/swagger/SwaggerUI.js.map +1 -0
  86. package/dist/types/index.d.ts +255 -0
  87. package/dist/types/index.d.ts.map +1 -0
  88. package/dist/types/index.js +31 -0
  89. package/dist/types/index.js.map +1 -0
  90. package/package.json +52 -0
@@ -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 class UnauthorizedException extends BaseException {
25
+ status = 401;
26
+ code = "UNAUTHORIZED";
27
+ }
28
+ //# sourceMappingURL=UnauthorizedException.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnauthorizedException.js","sourceRoot":"","sources":["../../exceptions/UnauthorizedException.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,OAAO,qBAAsB,SAAQ,aAAa;IAC7C,MAAM,GAAG,GAAG,CAAC;IACb,IAAI,GAAG,cAAc,CAAC;CAChC"}
@@ -0,0 +1,15 @@
1
+ export { RouterKit } from "./core/RouterKit.js";
2
+ export { ReqController } from "./decorators/controller/ReqController.js";
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
+ export { UseMiddleware, HttpStatus } from "./decorators/method/index.js";
6
+ export { BaseException } from "./exceptions/BaseException.js";
7
+ export { BadRequestException } from "./exceptions/BadRequestException.js";
8
+ export { UnauthorizedException } from "./exceptions/UnauthorizedException.js";
9
+ export { ForbiddenException } from "./exceptions/ForbiddenException.js";
10
+ export { NotFoundException } from "./exceptions/NotFoundException.js";
11
+ export { ConflictException } from "./exceptions/ConflictException.js";
12
+ export { ServerErrorException } from "./exceptions/ServerErrorException.js";
13
+ 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";
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAGzF,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,GACf,MAAM,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,21 @@
1
+ // ── Core ──────────────────────────────────────────────────────────
2
+ export { RouterKit } from "./core/RouterKit.js";
3
+ // ── Decorators: Controller ────────────────────────────────────────
4
+ export { ReqController } from "./decorators/controller/ReqController.js";
5
+ // ── Decorators: Mapping ───────────────────────────────────────────
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
+ // ── Decorators: Method ────────────────────────────────────────────
10
+ export { UseMiddleware, HttpStatus } from "./decorators/method/index.js";
11
+ // ── Exceptions ────────────────────────────────────────────────────
12
+ export { BaseException } from "./exceptions/BaseException.js";
13
+ export { BadRequestException } from "./exceptions/BadRequestException.js";
14
+ export { UnauthorizedException } from "./exceptions/UnauthorizedException.js";
15
+ export { ForbiddenException } from "./exceptions/ForbiddenException.js";
16
+ export { NotFoundException } from "./exceptions/NotFoundException.js";
17
+ export { ConflictException } from "./exceptions/ConflictException.js";
18
+ export { ServerErrorException } from "./exceptions/ServerErrorException.js";
19
+ // ── Cookie ────────────────────────────────────────────────────────
20
+ export { CookieSetter } from "./cookie/CookieSetter.js";
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAEzF,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"}
@@ -0,0 +1,63 @@
1
+ import type { ZodSchema } from "zod";
2
+ import type { OpenAPISpec, OpenAPISchema, ResolvedRoute, SwaggerConfig } from "../types/index.js";
3
+ /**
4
+ * Generates an OpenAPI 3.0 specification dari resolved route metadata.
5
+ *
6
+ * Mengkonversi decorator metadata + Zod schemas menjadi spec OpenAPI
7
+ * yang bisa disajikan lewat Swagger UI. Mendukung grouping by tag,
8
+ * sorting, dan extract parameter dari Zod schemas.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { SwaggerGenerator } from "@alis-kit/routers";
13
+ *
14
+ * const spec = SwaggerGenerator.generate(resolvedRoutes, {
15
+ * title: "My API",
16
+ * version: "1.0.0",
17
+ * sortBy: "path",
18
+ * });
19
+ *
20
+ * console.log(spec); // OpenAPI 3.0 spec object
21
+ * ```
22
+ */
23
+ export declare class SwaggerGenerator {
24
+ /**
25
+ * Generates a complete OpenAPI 3.0 spec from resolved routes.
26
+ *
27
+ * @param routes - Array of resolved route information dari RouteResolver
28
+ * @param config - Swagger configuration (title, version, sort order, search)
29
+ * @returns Complete OpenAPI specification object
30
+ */
31
+ static generate(routes: ResolvedRoute[], config: SwaggerConfig): OpenAPISpec;
32
+ /**
33
+ * Builds an OpenAPI operation object from a single resolved route.
34
+ * Includes parameter definitions, request body (from Zod), and responses.
35
+ */
36
+ private static buildOperation;
37
+ /**
38
+ * Converts a Zod schema to an array of OpenAPI query parameters.
39
+ * Mengekstrak setiap field dari Zod Object jadi parameter individual.
40
+ */
41
+ private static zodToQueryParams;
42
+ /**
43
+ * Converts a Zod object schema to an OpenAPI schema object.
44
+ * Public karena dipakai juga oleh SwaggerUI untuk body schema.
45
+ */
46
+ static zodToOpenAPI(schema: ZodSchema): OpenAPISchema;
47
+ /**
48
+ * Converts an individual Zod field type to OpenAPI schema representation.
49
+ * Handles: optional, nullable, default, string, number, boolean, array, object, enum.
50
+ */
51
+ private static zodFieldToOpenAPI;
52
+ /**
53
+ * Attempts to extract the shape object from a Zod schema.
54
+ * Supports both ZodObject and ZodEffects (coerce) wrapping.
55
+ */
56
+ private static getZodShape;
57
+ /**
58
+ * Checks if a Zod field is optional or has a default value.
59
+ * Used to determine `required` in OpenAPI parameter definitions.
60
+ */
61
+ private static isOptional;
62
+ }
63
+ //# sourceMappingURL=SwaggerGenerator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwaggerGenerator.d.ts","sourceRoot":"","sources":["../../swagger/SwaggerGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAkF,MAAM,KAAK,CAAC;AACrH,OAAO,KAAK,EACV,WAAW,EAKX,aAAa,EACb,aAAa,EACb,aAAa,EACd,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,gBAAgB;IAC3B;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,aAAa,GAAG,WAAW;IAwC5E;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAyE7B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAwB/B;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,aAAa;IA4BrD;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAmDhC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAW1B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;CAS1B"}
@@ -0,0 +1,266 @@
1
+ /**
2
+ * Generates an OpenAPI 3.0 specification dari resolved route metadata.
3
+ *
4
+ * Mengkonversi decorator metadata + Zod schemas menjadi spec OpenAPI
5
+ * yang bisa disajikan lewat Swagger UI. Mendukung grouping by tag,
6
+ * sorting, dan extract parameter dari Zod schemas.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { SwaggerGenerator } from "@alis-kit/routers";
11
+ *
12
+ * const spec = SwaggerGenerator.generate(resolvedRoutes, {
13
+ * title: "My API",
14
+ * version: "1.0.0",
15
+ * sortBy: "path",
16
+ * });
17
+ *
18
+ * console.log(spec); // OpenAPI 3.0 spec object
19
+ * ```
20
+ */
21
+ export class SwaggerGenerator {
22
+ /**
23
+ * Generates a complete OpenAPI 3.0 spec from resolved routes.
24
+ *
25
+ * @param routes - Array of resolved route information dari RouteResolver
26
+ * @param config - Swagger configuration (title, version, sort order, search)
27
+ * @returns Complete OpenAPI specification object
28
+ */
29
+ static generate(routes, config) {
30
+ const paths = {};
31
+ const tagSet = new Set();
32
+ const swaggerRoutes = routes.filter((r) => r.swagger !== false);
33
+ const sortedRoutes = [...swaggerRoutes].sort((a, b) => {
34
+ if (config.sortBy === "method") {
35
+ return a.method.localeCompare(b.method) || a.fullPath.localeCompare(b.fullPath);
36
+ }
37
+ return a.fullPath.localeCompare(b.fullPath) || a.method.localeCompare(b.method);
38
+ });
39
+ for (const route of sortedRoutes) {
40
+ const tag = route.routeOptions.tag ?? route.controllerTag;
41
+ tagSet.add(tag);
42
+ const openApiPath = route.fullPath.replace(/:(\w+)/g, "{$1}");
43
+ if (!paths[openApiPath]) {
44
+ paths[openApiPath] = {};
45
+ }
46
+ const operation = SwaggerGenerator.buildOperation(route, tag);
47
+ paths[openApiPath][route.method] = operation;
48
+ }
49
+ const tags = [...tagSet].sort().map((name) => ({ name }));
50
+ return {
51
+ openapi: "3.0.0",
52
+ info: {
53
+ title: config.title ?? "API Documentation",
54
+ version: config.version ?? "1.0.0",
55
+ },
56
+ paths,
57
+ tags,
58
+ };
59
+ }
60
+ /**
61
+ * Builds an OpenAPI operation object from a single resolved route.
62
+ * Includes parameter definitions, request body (from Zod), and responses.
63
+ */
64
+ static buildOperation(route, tag) {
65
+ const operation = {
66
+ tags: [tag],
67
+ summary: route.routeOptions.summary,
68
+ description: route.routeOptions.description,
69
+ responses: {
70
+ [String(route.statusCode)]: {
71
+ description: "Successful response",
72
+ content: {
73
+ "application/json": {
74
+ schema: {
75
+ type: "object",
76
+ properties: {
77
+ message: { type: "string" },
78
+ data: { type: "object" },
79
+ },
80
+ },
81
+ },
82
+ },
83
+ },
84
+ "400": { description: "Bad Request" },
85
+ "500": { description: "Internal Server Error" },
86
+ },
87
+ };
88
+ const parameters = [];
89
+ let requestBody;
90
+ for (const param of route.params) {
91
+ switch (param.type) {
92
+ case "body":
93
+ if (param.schema) {
94
+ requestBody = {
95
+ required: true,
96
+ content: {
97
+ "application/json": {
98
+ schema: SwaggerGenerator.zodToOpenAPI(param.schema),
99
+ },
100
+ },
101
+ };
102
+ }
103
+ break;
104
+ case "query":
105
+ if (param.schema) {
106
+ const queryParams = SwaggerGenerator.zodToQueryParams(param.schema);
107
+ parameters.push(...queryParams);
108
+ }
109
+ break;
110
+ case "param":
111
+ if (param.key) {
112
+ parameters.push({
113
+ name: param.key,
114
+ in: "path",
115
+ required: true,
116
+ schema: { type: "string" },
117
+ });
118
+ }
119
+ break;
120
+ }
121
+ }
122
+ if (parameters.length > 0) {
123
+ operation.parameters = parameters;
124
+ }
125
+ if (requestBody) {
126
+ operation.requestBody = requestBody;
127
+ }
128
+ return operation;
129
+ }
130
+ /**
131
+ * Converts a Zod schema to an array of OpenAPI query parameters.
132
+ * Mengekstrak setiap field dari Zod Object jadi parameter individual.
133
+ */
134
+ static zodToQueryParams(schema) {
135
+ const params = [];
136
+ try {
137
+ const shape = SwaggerGenerator.getZodShape(schema);
138
+ if (shape) {
139
+ for (const [key, fieldSchema] of Object.entries(shape)) {
140
+ const zodField = fieldSchema;
141
+ const isOptional = SwaggerGenerator.isOptional(zodField);
142
+ params.push({
143
+ name: key,
144
+ in: "query",
145
+ required: !isOptional,
146
+ schema: SwaggerGenerator.zodFieldToOpenAPI(zodField),
147
+ });
148
+ }
149
+ }
150
+ }
151
+ catch {
152
+ // Silently skip unparseable schemas
153
+ }
154
+ return params;
155
+ }
156
+ /**
157
+ * Converts a Zod object schema to an OpenAPI schema object.
158
+ * Public karena dipakai juga oleh SwaggerUI untuk body schema.
159
+ */
160
+ static zodToOpenAPI(schema) {
161
+ try {
162
+ const shape = SwaggerGenerator.getZodShape(schema);
163
+ if (shape) {
164
+ const properties = {};
165
+ const required = [];
166
+ for (const [key, fieldSchema] of Object.entries(shape)) {
167
+ const zodField = fieldSchema;
168
+ properties[key] = SwaggerGenerator.zodFieldToOpenAPI(zodField);
169
+ if (!SwaggerGenerator.isOptional(zodField)) {
170
+ required.push(key);
171
+ }
172
+ }
173
+ return {
174
+ type: "object",
175
+ properties,
176
+ ...(required.length > 0 ? { required } : {}),
177
+ };
178
+ }
179
+ }
180
+ catch {
181
+ // Fallback
182
+ }
183
+ return { type: "object" };
184
+ }
185
+ /**
186
+ * Converts an individual Zod field type to OpenAPI schema representation.
187
+ * Handles: optional, nullable, default, string, number, boolean, array, object, enum.
188
+ */
189
+ static zodFieldToOpenAPI(schema) {
190
+ const def = schema._def;
191
+ const typeName = def?.typeName;
192
+ if (typeName === "ZodOptional") {
193
+ const innerDef = def;
194
+ return SwaggerGenerator.zodFieldToOpenAPI(innerDef.innerType);
195
+ }
196
+ if (typeName === "ZodNullable") {
197
+ const innerDef = def;
198
+ const inner = SwaggerGenerator.zodFieldToOpenAPI(innerDef.innerType);
199
+ return { ...inner, nullable: true };
200
+ }
201
+ if (typeName === "ZodDefault") {
202
+ const innerDef = def;
203
+ const inner = SwaggerGenerator.zodFieldToOpenAPI(innerDef.innerType);
204
+ return { ...inner, default: def._def.defaultValue() };
205
+ }
206
+ if (typeName === "ZodEffects") {
207
+ const innerSchema = def.schema;
208
+ if (innerSchema) {
209
+ return SwaggerGenerator.zodFieldToOpenAPI(innerSchema);
210
+ }
211
+ }
212
+ switch (typeName) {
213
+ case "ZodString":
214
+ return { type: "string" };
215
+ case "ZodNumber":
216
+ return { type: "number" };
217
+ case "ZodBoolean":
218
+ return { type: "boolean" };
219
+ case "ZodArray": {
220
+ const arrayDef = def;
221
+ return {
222
+ type: "array",
223
+ items: SwaggerGenerator.zodFieldToOpenAPI(arrayDef.type),
224
+ };
225
+ }
226
+ case "ZodObject": {
227
+ return SwaggerGenerator.zodToOpenAPI(schema);
228
+ }
229
+ case "ZodEnum": {
230
+ const enumValues = def.values;
231
+ return { type: "string", enum: enumValues };
232
+ }
233
+ default:
234
+ return { type: "string" };
235
+ }
236
+ }
237
+ /**
238
+ * Attempts to extract the shape object from a Zod schema.
239
+ * Supports both ZodObject and ZodEffects (coerce) wrapping.
240
+ */
241
+ static getZodShape(schema) {
242
+ const zodObj = schema;
243
+ if (zodObj?.shape && typeof zodObj.shape === "object") {
244
+ return zodObj.shape;
245
+ }
246
+ if (zodObj?._def?.shape && typeof zodObj._def.shape === "function") {
247
+ return zodObj._def.shape();
248
+ }
249
+ return null;
250
+ }
251
+ /**
252
+ * Checks if a Zod field is optional or has a default value.
253
+ * Used to determine `required` in OpenAPI parameter definitions.
254
+ */
255
+ static isOptional(schema) {
256
+ const typeName = schema._def?.typeName;
257
+ if (typeName === "ZodOptional" || typeName === "ZodDefault")
258
+ return true;
259
+ if (typeName === "ZodNullable") {
260
+ const innerDef = schema._def;
261
+ return SwaggerGenerator.isOptional(innerDef.innerType);
262
+ }
263
+ return false;
264
+ }
265
+ }
266
+ //# sourceMappingURL=SwaggerGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwaggerGenerator.js","sourceRoot":"","sources":["../../swagger/SwaggerGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { OpenAPISpec, SwaggerConfig } from "../types/index.js";
2
+ /**
3
+ * Serves Swagger UI for the generated OpenAPI specification.
4
+ *
5
+ * Saat ini mendukung Express via `swagger-ui-express`.
6
+ * Untuk Fastify, disarankan menggunakan `@fastify/swagger-ui` plugin terpisah.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { SwaggerUI } from "@alis-kit/routers";
11
+ *
12
+ * // Biasanya tidak dipanggil langsung — RouterKit.handleSwagger() yang handle.
13
+ * SwaggerUI.serve(expressApp, openApiSpec, { enabled: true, path: "/api/docs" });
14
+ * // Swagger UI available at /api/docs
15
+ * ```
16
+ */
17
+ export declare class SwaggerUI {
18
+ /**
19
+ * Mounts Swagger UI on the given Express app at the configured path.
20
+ *
21
+ * Menggunakan dynamic `require()` agar `swagger-ui-express` tidak perlu
22
+ * diinstall jika Swagger tidak dipakai.
23
+ *
24
+ * @param app - The Express application instance
25
+ * @param spec - The OpenAPI specification object (dari SwaggerGenerator)
26
+ * @param config - Swagger configuration (path, sort options, search)
27
+ */
28
+ static serve(app: unknown, spec: OpenAPISpec, config: SwaggerConfig): void;
29
+ }
30
+ //# sourceMappingURL=SwaggerUI.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwaggerUI.d.ts","sourceRoot":"","sources":["../../swagger/SwaggerUI.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAOpE;;;;;;;;;;;;;;GAcG;AACH,qBAAa,SAAS;IACpB;;;;;;;;;OASG;IACH,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI;CA8B3E"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Serves Swagger UI for the generated OpenAPI specification.
3
+ *
4
+ * Saat ini mendukung Express via `swagger-ui-express`.
5
+ * Untuk Fastify, disarankan menggunakan `@fastify/swagger-ui` plugin terpisah.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { SwaggerUI } from "@alis-kit/routers";
10
+ *
11
+ * // Biasanya tidak dipanggil langsung — RouterKit.handleSwagger() yang handle.
12
+ * SwaggerUI.serve(expressApp, openApiSpec, { enabled: true, path: "/api/docs" });
13
+ * // Swagger UI available at /api/docs
14
+ * ```
15
+ */
16
+ export class SwaggerUI {
17
+ /**
18
+ * Mounts Swagger UI on the given Express app at the configured path.
19
+ *
20
+ * Menggunakan dynamic `require()` agar `swagger-ui-express` tidak perlu
21
+ * diinstall jika Swagger tidak dipakai.
22
+ *
23
+ * @param app - The Express application instance
24
+ * @param spec - The OpenAPI specification object (dari SwaggerGenerator)
25
+ * @param config - Swagger configuration (path, sort options, search)
26
+ */
27
+ static serve(app, spec, config) {
28
+ const path = config.path ?? "/api/docs";
29
+ try {
30
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
31
+ const swaggerUi = require("swagger-ui-express");
32
+ const swaggerApp = app;
33
+ const options = {
34
+ explorer: true,
35
+ swaggerOptions: {
36
+ docExpansion: "none",
37
+ filter: true,
38
+ showRequestDuration: true,
39
+ tagsSorter: "alpha",
40
+ operationsSorter: config.sortBy === "method" ? "method" : "alpha",
41
+ },
42
+ };
43
+ swaggerApp.use(path, swaggerUi.serve, swaggerUi.setup(spec, options));
44
+ console.log(`Swagger UI available at ${path}`);
45
+ }
46
+ catch {
47
+ console.warn("swagger-ui-express is not installed. Install it to enable Swagger UI:\n" +
48
+ " npm install swagger-ui-express");
49
+ }
50
+ }
51
+ }
52
+ //# sourceMappingURL=SwaggerUI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwaggerUI.js","sourceRoot":"","sources":["../../swagger/SwaggerUI.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,SAAS;IACpB;;;;;;;;;OASG;IACH,MAAM,CAAC,KAAK,CAAC,GAAY,EAAE,IAAiB,EAAE,MAAqB;QACjE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,WAAW,CAAC;QAExC,IAAI,CAAC;YACH,iEAAiE;YACjE,MAAM,SAAS,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;YAEhD,MAAM,UAAU,GAAG,GAAiB,CAAC;YAErC,MAAM,OAAO,GAAG;gBACd,QAAQ,EAAE,IAAI;gBACd,cAAc,EAAE;oBACd,YAAY,EAAE,MAAM;oBACpB,MAAM,EAAE,IAAI;oBACZ,mBAAmB,EAAE,IAAI;oBACzB,UAAU,EAAE,OAAO;oBACnB,gBAAgB,EAAE,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO;iBAClE;aACF,CAAC;YAEF,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;YAEtE,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CACV,yEAAyE;gBACvE,mCAAmC,CACtC,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}