clear-router 2.7.6 → 2.7.7

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 (107) hide show
  1. package/dist/ClearRequest.cjs +23 -0
  2. package/dist/ClearRequest.d.cts +28 -0
  3. package/dist/ClearRequest.d.mts +28 -0
  4. package/dist/ClearRequest.mjs +22 -0
  5. package/dist/Contracts.d.cts +12 -0
  6. package/dist/Contracts.d.mts +12 -0
  7. package/dist/Controller.cjs +12 -0
  8. package/dist/Controller.d.cts +14 -0
  9. package/dist/Controller.d.mts +14 -0
  10. package/dist/Controller.mjs +11 -0
  11. package/dist/{Request-DKXwa_W0.d.mts → Request-BhTJDR_5.d.mts} +5 -5
  12. package/dist/Route.cjs +58 -0
  13. package/dist/Route.d.cts +35 -0
  14. package/dist/Route.d.mts +35 -0
  15. package/dist/Route.mjs +57 -0
  16. package/dist/core/Request.cjs +35 -0
  17. package/dist/core/Request.d.cts +25 -0
  18. package/dist/core/Request.d.mts +25 -0
  19. package/dist/core/Request.mjs +35 -0
  20. package/dist/core/Response.cjs +59 -0
  21. package/dist/core/Response.d.cts +24 -0
  22. package/dist/core/Response.d.mts +24 -0
  23. package/dist/core/Response.mjs +58 -0
  24. package/dist/{bindings-CLsZjOEy.cjs → core/bindings.cjs} +10 -160
  25. package/dist/{bindings-CNL7bpz5.d.mts → core/bindings.d.cts} +1 -1
  26. package/dist/{bindings-CxvtC8XS.d.cts → core/bindings.d.mts} +1 -1
  27. package/dist/{bindings-XLDXFpHZ.mjs → core/bindings.mjs} +3 -110
  28. package/dist/core/index.cjs +4 -20
  29. package/dist/core/index.d.cts +4 -1
  30. package/dist/core/index.d.mts +4 -1
  31. package/dist/core/index.mjs +4 -14
  32. package/dist/core/plugins.cjs +14 -0
  33. package/dist/core/plugins.d.cts +109 -0
  34. package/dist/core/plugins.d.mts +109 -0
  35. package/dist/core/plugins.mjs +13 -0
  36. package/dist/{responses-Bvnk0uvc.cjs → core/responses.cjs} +5 -20
  37. package/dist/{responses-BvETUeDL.mjs → core/responses.mjs} +2 -2
  38. package/dist/{router-C6W-k6sS.cjs → core/router.cjs} +11 -69
  39. package/dist/core/router.d.cts +274 -0
  40. package/dist/core/router.d.mts +274 -0
  41. package/dist/{router-Dc9w86Wn.mjs → core/router.mjs} +5 -58
  42. package/dist/decorators/index.cjs +1 -1
  43. package/dist/decorators/index.d.cts +1 -1
  44. package/dist/decorators/index.d.mts +1 -1
  45. package/dist/decorators/index.mjs +1 -1
  46. package/dist/decorators/setup.cjs +2 -2
  47. package/dist/decorators/setup.d.cts +1 -1
  48. package/dist/decorators/setup.d.mts +1 -1
  49. package/dist/decorators/setup.mjs +2 -2
  50. package/dist/express/index.cjs +2 -265
  51. package/dist/express/index.d.cts +1 -127
  52. package/dist/express/index.d.mts +1 -127
  53. package/dist/express/index.mjs +1 -264
  54. package/dist/express/router.cjs +265 -0
  55. package/dist/express/router.d.cts +131 -0
  56. package/dist/express/router.d.mts +131 -0
  57. package/dist/express/router.mjs +265 -0
  58. package/dist/fastify/index.cjs +2 -254
  59. package/dist/fastify/index.d.cts +1 -125
  60. package/dist/fastify/index.d.mts +1 -125
  61. package/dist/fastify/index.mjs +1 -253
  62. package/dist/fastify/router.cjs +254 -0
  63. package/dist/fastify/router.d.cts +129 -0
  64. package/dist/fastify/router.d.mts +129 -0
  65. package/dist/fastify/router.mjs +254 -0
  66. package/dist/h3/index.cjs +2 -260
  67. package/dist/h3/index.d.cts +1 -128
  68. package/dist/h3/index.d.mts +1 -128
  69. package/dist/h3/index.mjs +1 -259
  70. package/dist/h3/router.cjs +260 -0
  71. package/dist/h3/router.d.cts +132 -0
  72. package/dist/h3/router.d.mts +132 -0
  73. package/dist/h3/router.mjs +260 -0
  74. package/dist/hono/index.cjs +2 -251
  75. package/dist/hono/index.d.cts +1 -130
  76. package/dist/hono/index.d.mts +1 -130
  77. package/dist/hono/index.mjs +1 -250
  78. package/dist/hono/router.cjs +251 -0
  79. package/dist/hono/router.d.cts +134 -0
  80. package/dist/hono/router.d.mts +134 -0
  81. package/dist/hono/router.mjs +251 -0
  82. package/dist/index.cjs +16 -1097
  83. package/dist/index.d.cts +9 -563
  84. package/dist/index.d.mts +9 -563
  85. package/dist/index.mjs +8 -1089
  86. package/dist/koa/index.cjs +2 -261
  87. package/dist/koa/index.d.cts +1 -131
  88. package/dist/koa/index.d.mts +1 -131
  89. package/dist/koa/index.mjs +1 -260
  90. package/dist/koa/router.cjs +261 -0
  91. package/dist/koa/router.d.cts +135 -0
  92. package/dist/koa/router.d.mts +135 -0
  93. package/dist/koa/router.mjs +261 -0
  94. package/dist/types/basic.d.cts +43 -0
  95. package/dist/types/express.d.cts +44 -0
  96. package/dist/types/express.d.mts +4 -2
  97. package/dist/types/fastify.d.cts +23 -0
  98. package/dist/types/fastify.d.mts +4 -2
  99. package/dist/types/h3.d.cts +41 -0
  100. package/dist/types/h3.d.mts +4 -4
  101. package/dist/types/hono.d.cts +21 -0
  102. package/dist/types/hono.d.mts +4 -3
  103. package/dist/types/koa.d.cts +25 -0
  104. package/dist/types/koa.d.mts +4 -3
  105. package/package.json +1 -1
  106. package/dist/router-BEgAxp5A.d.cts +0 -649
  107. package/dist/router-DKKYx23P.d.mts +0 -649
@@ -0,0 +1,132 @@
1
+ import { ApiResourceMiddleware, ControllerAction, HttpMethod } from "../types/basic.mjs";
2
+ import { H3App, Handler, HttpContext, Middleware } from "../types/h3.mjs";
3
+ import { Route } from "../Route.mjs";
4
+ import { CoreRouter } from "../core/router.mjs";
5
+ import { H3 } from "h3";
6
+
7
+ //#region src/h3/router.d.ts
8
+ /**
9
+ * @class clear-router H3 Router
10
+ * @description Laravel-style routing system for Express.js and H3 with support for CommonJS, ESM, and TypeScript
11
+ * @author 3m1n3nc3
12
+ * @repository https://github.com/arkstack-tmp/clear-router
13
+ */
14
+ declare class Router extends CoreRouter {
15
+ protected static routerStateNamespace: string;
16
+ private static readonly bodyCache;
17
+ private static toResponse;
18
+ private static readBodyCached;
19
+ /**
20
+ * Adds a new route to the router.
21
+ *
22
+ * @param methods
23
+ * @param path
24
+ * @param handler
25
+ * @param middlewares
26
+ */
27
+ static add(methods: HttpMethod | HttpMethod[], path: string, handler: Handler, middlewares?: Middleware[] | Middleware): Route<HttpContext, Middleware, Handler>;
28
+ /**
29
+ * Define a resourceful API controller with standard CRUD routes
30
+ *
31
+ * @param basePath
32
+ * @param controller
33
+ * @param options
34
+ */
35
+ static apiResource(basePath: string, controller: any, options?: {
36
+ only?: ControllerAction[];
37
+ except?: ControllerAction[];
38
+ middlewares?: ApiResourceMiddleware<Middleware>;
39
+ }): void;
40
+ /**
41
+ * Adds a new GET route to the router with the specified path, handler, and optional middlewares.
42
+ *
43
+ * @param path
44
+ * @param handler
45
+ * @param middlewares
46
+ */
47
+ static get(path: string, handler: Handler, middlewares?: Middleware[] | Middleware): Route<HttpContext, Middleware, Handler>;
48
+ /**
49
+ * Adds a new POST route to the router with the specified path, handler, and optional middlewares.
50
+ *
51
+ * @param path
52
+ * @param handler
53
+ * @param middlewares
54
+ */
55
+ static post(path: string, handler: Handler, middlewares?: Middleware[] | Middleware): Route<HttpContext, Middleware, Handler>;
56
+ /**
57
+ * Adds a new PUT route to the router with the specified path, handler, and optional middlewares.
58
+ *
59
+ * @param path
60
+ * @param handler
61
+ * @param middlewares
62
+ */
63
+ static put(path: string, handler: Handler, middlewares?: Middleware[] | Middleware): Route<HttpContext, Middleware, Handler>;
64
+ /**
65
+ * Adds a new DELETE route to the router with the specified path, handler, and optional middlewares.
66
+ *
67
+ * @param path
68
+ * @param handler
69
+ * @param middlewares
70
+ */
71
+ static delete(path: string, handler: Handler, middlewares?: Middleware[] | Middleware): Route<HttpContext, Middleware, Handler>;
72
+ /**
73
+ * Adds a new PATCH route to the router with the specified path, handler, and optional middlewares.
74
+ *
75
+ * @param path
76
+ * @param handler
77
+ * @param middlewares
78
+ */
79
+ static patch(path: string, handler: Handler, middlewares?: Middleware[] | Middleware): Route<HttpContext, Middleware, Handler>;
80
+ /**
81
+ * Adds a new OPTIONS route to the router with the specified path, handler, and optional middlewares.
82
+ *
83
+ * @param path
84
+ * @param handler
85
+ * @param middlewares
86
+ */
87
+ static options(path: string, handler: Handler, middlewares?: Middleware[] | Middleware): Route<HttpContext, Middleware, Handler>;
88
+ /**
89
+ * Adds a new HEAD route to the router.
90
+ *
91
+ * @param path
92
+ * @param handler
93
+ * @param middlewares
94
+ */
95
+ static head(path: string, handler: Handler, middlewares?: Middleware[] | Middleware): Route<HttpContext, Middleware, Handler>;
96
+ /**
97
+ * Defines a group of routes with a common prefix.
98
+ *
99
+ * @param prefix
100
+ * @param callback
101
+ * @param middlewares
102
+ */
103
+ static group(prefix: string, callback: () => void | Promise<void>, middlewares?: Middleware[]): Promise<void>;
104
+ /**
105
+ * Adds global middlewares to the router, which will be applied to all routes.
106
+ *
107
+ * @param middlewares
108
+ * @param callback
109
+ */
110
+ static middleware(middlewares: Middleware[], callback: () => void): void;
111
+ /**
112
+ * Retrieves all registered routes in the router, optionally organized by path or method
113
+ * for easier access and management.
114
+ *
115
+ * @param type
116
+ */
117
+ static allRoutes(): Array<Route<HttpContext, Middleware, Handler>>;
118
+ static allRoutes(type: 'path'): Record<string, Route<HttpContext, Middleware, Handler>>;
119
+ static allRoutes(type: 'method'): { [method in Uppercase<HttpMethod>]?: Array<Route<HttpContext, Middleware, Handler>> };
120
+ static allRoutes(type: 'name'): Record<string, Route<HttpContext, Middleware, Handler>>;
121
+ static route(name: string): Route<HttpContext, Middleware, Handler> | undefined;
122
+ /**
123
+ * Applies the registered routes to the given H3 application instance, setting up the
124
+ * necessary handlers and middlewares for each route.
125
+ *
126
+ * @param app
127
+ * @returns
128
+ */
129
+ static apply(app: H3): H3App;
130
+ }
131
+ //#endregion
132
+ export { Router };
@@ -0,0 +1,260 @@
1
+ import { CoreRouter } from "../core/router.mjs";
2
+ import { resolveResponseMeta } from "../core/responses.mjs";
3
+ import { HTTPResponse, getQuery, getRouterParams, readBody } from "h3";
4
+
5
+ //#region src/h3/router.ts
6
+ /**
7
+ * @class clear-router H3 Router
8
+ * @description Laravel-style routing system for Express.js and H3 with support for CommonJS, ESM, and TypeScript
9
+ * @author 3m1n3nc3
10
+ * @repository https://github.com/arkstack-tmp/clear-router
11
+ */
12
+ var Router = class Router extends CoreRouter {
13
+ static routerStateNamespace = "clear-router:h3";
14
+ static bodyCache = /* @__PURE__ */ new WeakMap();
15
+ static toResponse(ctx, value, method, path) {
16
+ const meta = resolveResponseMeta(value, {
17
+ headers: ctx.req.headers,
18
+ method,
19
+ path,
20
+ status: typeof ctx.res.status === "number" && ctx.res.status !== 200 ? ctx.res.status : void 0
21
+ });
22
+ if (!meta) return void 0;
23
+ if (meta.isNativeResponse) return meta.body;
24
+ const headers = meta.headers ? {} : meta.contentType ? { "Content-Type": meta.contentType } : void 0;
25
+ meta.headers?.forEach((headerValue, key) => {
26
+ if (headers) headers[key] = headerValue;
27
+ });
28
+ return new HTTPResponse(meta.contentType?.startsWith("application/json") ? JSON.stringify(meta.body) : meta.isEmpty ? null : meta.body, {
29
+ status: meta.status,
30
+ headers
31
+ });
32
+ }
33
+ static async readBodyCached(ctx) {
34
+ if (this.bodyCache.has(ctx)) {
35
+ const cached = this.bodyCache.get(ctx);
36
+ ctx.req.getBody = () => cached;
37
+ return cached;
38
+ }
39
+ let body = {};
40
+ if (ctx.req.headers.get("content-type")?.includes("multipart/form-data")) (await ctx.req.formData()).forEach((value, key) => {
41
+ body[key] = value;
42
+ });
43
+ else body = await readBody(ctx) ?? {};
44
+ ctx.req.getBody = () => body;
45
+ this.bodyCache.set(ctx, body);
46
+ return body;
47
+ }
48
+ /**
49
+ * Adds a new route to the router.
50
+ *
51
+ * @param methods
52
+ * @param path
53
+ * @param handler
54
+ * @param middlewares
55
+ */
56
+ static add(methods, path, handler, middlewares) {
57
+ return super.add(methods, path, handler, middlewares);
58
+ }
59
+ /**
60
+ * Define a resourceful API controller with standard CRUD routes
61
+ *
62
+ * @param basePath
63
+ * @param controller
64
+ * @param options
65
+ */
66
+ static apiResource(basePath, controller, options) {
67
+ super.apiResource(basePath, controller, options);
68
+ }
69
+ /**
70
+ * Adds a new GET route to the router with the specified path, handler, and optional middlewares.
71
+ *
72
+ * @param path
73
+ * @param handler
74
+ * @param middlewares
75
+ */
76
+ static get(path, handler, middlewares) {
77
+ return super.get(path, handler, middlewares);
78
+ }
79
+ /**
80
+ * Adds a new POST route to the router with the specified path, handler, and optional middlewares.
81
+ *
82
+ * @param path
83
+ * @param handler
84
+ * @param middlewares
85
+ */
86
+ static post(path, handler, middlewares) {
87
+ return super.post(path, handler, middlewares);
88
+ }
89
+ /**
90
+ * Adds a new PUT route to the router with the specified path, handler, and optional middlewares.
91
+ *
92
+ * @param path
93
+ * @param handler
94
+ * @param middlewares
95
+ */
96
+ static put(path, handler, middlewares) {
97
+ return super.put(path, handler, middlewares);
98
+ }
99
+ /**
100
+ * Adds a new DELETE route to the router with the specified path, handler, and optional middlewares.
101
+ *
102
+ * @param path
103
+ * @param handler
104
+ * @param middlewares
105
+ */
106
+ static delete(path, handler, middlewares) {
107
+ return super.delete(path, handler, middlewares);
108
+ }
109
+ /**
110
+ * Adds a new PATCH route to the router with the specified path, handler, and optional middlewares.
111
+ *
112
+ * @param path
113
+ * @param handler
114
+ * @param middlewares
115
+ */
116
+ static patch(path, handler, middlewares) {
117
+ return super.patch(path, handler, middlewares);
118
+ }
119
+ /**
120
+ * Adds a new OPTIONS route to the router with the specified path, handler, and optional middlewares.
121
+ *
122
+ * @param path
123
+ * @param handler
124
+ * @param middlewares
125
+ */
126
+ static options(path, handler, middlewares) {
127
+ return super.options(path, handler, middlewares);
128
+ }
129
+ /**
130
+ * Adds a new HEAD route to the router.
131
+ *
132
+ * @param path
133
+ * @param handler
134
+ * @param middlewares
135
+ */
136
+ static head(path, handler, middlewares) {
137
+ return super.head(path, handler, middlewares);
138
+ }
139
+ /**
140
+ * Defines a group of routes with a common prefix.
141
+ *
142
+ * @param prefix
143
+ * @param callback
144
+ * @param middlewares
145
+ */
146
+ static async group(prefix, callback, middlewares) {
147
+ await super.group(prefix, callback, middlewares);
148
+ }
149
+ /**
150
+ * Adds global middlewares to the router, which will be applied to all routes.
151
+ *
152
+ * @param middlewares
153
+ * @param callback
154
+ */
155
+ static middleware(middlewares, callback) {
156
+ super.middleware(middlewares, callback);
157
+ }
158
+ static allRoutes(type) {
159
+ return super.allRoutes(type);
160
+ }
161
+ static route(name) {
162
+ return super.route(name);
163
+ }
164
+ /**
165
+ * Applies the registered routes to the given H3 application instance, setting up the
166
+ * necessary handlers and middlewares for each route.
167
+ *
168
+ * @param app
169
+ * @returns
170
+ */
171
+ static apply(app) {
172
+ for (const route of Array.from(this.routes)) {
173
+ let handlerFunction = null;
174
+ let instance = null;
175
+ let bindingTarget;
176
+ let bindingMethod;
177
+ let bindingHandler;
178
+ let bindingMetadata;
179
+ try {
180
+ const resolved = this.resolveHandler(route);
181
+ handlerFunction = resolved.handlerFunction;
182
+ instance = resolved.instance;
183
+ bindingTarget = resolved.bindingTarget;
184
+ bindingMethod = resolved.bindingMethod;
185
+ bindingHandler = resolved.bindingHandler;
186
+ bindingMetadata = resolved.bindingMetadata;
187
+ } catch (error) {
188
+ console.error(`[ROUTES] Error setting up route ${route.path}:`, error.message);
189
+ throw error;
190
+ }
191
+ if (!handlerFunction) continue;
192
+ for (const method of route.methods) {
193
+ const allowedMethods = [
194
+ "get",
195
+ "post",
196
+ "put",
197
+ "delete",
198
+ "patch",
199
+ "options",
200
+ "head"
201
+ ];
202
+ if (method === "options" && route.methods.length > 1) continue;
203
+ if (!allowedMethods.includes(method)) {
204
+ const error = /* @__PURE__ */ new Error(`Invalid HTTP method: ${method} for route: ${route.path}`);
205
+ console.error("[ROUTES]", error.message);
206
+ throw error;
207
+ }
208
+ for (const registrationPath of route.registrationPaths) app[method](registrationPath, async (event) => {
209
+ try {
210
+ const ctx = event;
211
+ const reqBody = await Router.readBodyCached(ctx);
212
+ const override = Router.resolveMethodOverride(ctx.req.method, ctx.req.headers, reqBody);
213
+ if (method === "post" && override && override !== "post") return;
214
+ const inst = instance ?? route;
215
+ Router.bindRequestToInstance(ctx, inst, route, {
216
+ body: reqBody,
217
+ query: getQuery(ctx),
218
+ params: getRouterParams(ctx, { decode: true }),
219
+ method
220
+ });
221
+ const result = await Router.callHandler(handlerFunction, ctx, bindingTarget, bindingMethod, bindingHandler, bindingMetadata);
222
+ const resolved = await Promise.resolve(result);
223
+ const outgoing = typeof resolved === "undefined" && ctx.clearResponse?.sent ? ctx.clearResponse : resolved;
224
+ return Router.toResponse(ctx, outgoing, method, route.path);
225
+ } catch (error) {
226
+ return error;
227
+ }
228
+ }, { middleware: route.middlewares });
229
+ if ([
230
+ "put",
231
+ "patch",
232
+ "delete"
233
+ ].includes(method)) for (const registrationPath of route.registrationPaths) app.post(registrationPath, async (event) => {
234
+ try {
235
+ const ctx = event;
236
+ const reqBody = await Router.readBodyCached(ctx);
237
+ if (Router.resolveMethodOverride(ctx.req.method, ctx.req.headers, reqBody) !== method) return Symbol.for("h3.notFound");
238
+ const inst = instance ?? route;
239
+ Router.bindRequestToInstance(ctx, inst, route, {
240
+ body: reqBody,
241
+ query: getQuery(ctx),
242
+ params: getRouterParams(ctx, { decode: true }),
243
+ method
244
+ });
245
+ const result = await Router.callHandler(handlerFunction, ctx, bindingTarget, bindingMethod, bindingHandler, bindingMetadata);
246
+ const resolved = await Promise.resolve(result);
247
+ const outgoing = typeof resolved === "undefined" && ctx.clearResponse?.sent ? ctx.clearResponse : resolved;
248
+ return Router.toResponse(ctx, outgoing, method, route.path);
249
+ } catch (error) {
250
+ return error;
251
+ }
252
+ }, { middleware: route.middlewares });
253
+ }
254
+ }
255
+ return app;
256
+ }
257
+ };
258
+
259
+ //#endregion
260
+ export { Router as default };
@@ -1,253 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- require('../bindings-CLsZjOEy.cjs');
3
- const require_router = require('../router-C6W-k6sS.cjs');
4
- const require_responses = require('../responses-Bvnk0uvc.cjs');
2
+ const require_router = require('./router.cjs');
5
3
 
6
- //#region src/hono/router.ts
7
- /**
8
- * @class clear-router Hono Router
9
- * @description Laravel-style routing system for Hono using shared clear-router core
10
- * @author 3m1n3nc3
11
- * @repository https://github.com/arkstack-tmp/clear-router
12
- */
13
- var Router = class Router extends require_router.CoreRouter {
14
- static routerStateNamespace = "clear-router:hono";
15
- static bodyCache = /* @__PURE__ */ new WeakMap();
16
- static toResponse(ctx, value, method, path) {
17
- const meta = require_responses.resolveResponseMeta(value, {
18
- headers: ctx.req.header(),
19
- method,
20
- path
21
- });
22
- if (!meta) return void 0;
23
- if (meta.isNativeResponse) return meta.body;
24
- const headers = meta.headers ? {} : meta.contentType ? { "Content-Type": meta.contentType } : void 0;
25
- meta.headers?.forEach((headerValue, key) => {
26
- if (headers) headers[key] = headerValue;
27
- });
28
- if (meta.isEmpty) return ctx.body(null, meta.status, headers);
29
- if (meta.contentType?.startsWith("application/json")) return ctx.body(JSON.stringify(meta.body), meta.status, headers);
30
- return ctx.body(meta.body, meta.status, headers);
31
- }
32
- static getParams(ctx) {
33
- try {
34
- const raw = ctx.req.param?.();
35
- return raw && typeof raw === "object" ? raw : {};
36
- } catch {
37
- return {};
38
- }
39
- }
40
- static async readBodyCached(ctx) {
41
- if (this.bodyCache.has(ctx)) {
42
- const cached = this.bodyCache.get(ctx) || {};
43
- ctx.req.getBody = () => cached;
44
- return cached;
45
- }
46
- let body = {};
47
- const contentType = (ctx.req.header("content-type") || "").toLowerCase();
48
- if (contentType.includes("application/json")) body = await ctx.req.json().catch(() => ({}));
49
- else if (contentType.includes("multipart/form-data") || contentType.includes("application/x-www-form-urlencoded")) body = await ctx.req.parseBody().then((v) => v).catch(() => ({}));
50
- ctx.req.getBody = () => body;
51
- this.bodyCache.set(ctx, body);
52
- return body;
53
- }
54
- /**
55
- * Adds a new route to the router.
56
- *
57
- * @param methods
58
- * @param path
59
- * @param handler
60
- * @param middlewares
61
- */
62
- static add(methods, path, handler, middlewares) {
63
- return super.add(methods, path, handler, middlewares);
64
- }
65
- /**
66
- * Define a resourceful API controller with standard CRUD routes
67
- *
68
- * @param basePath
69
- * @param controller
70
- * @param options
71
- */
72
- static apiResource(basePath, controller, options) {
73
- super.apiResource(basePath, controller, options);
74
- }
75
- /**
76
- * Define a GET route
77
- *
78
- * @param path
79
- * @param handler
80
- * @param middlewares
81
- */
82
- static get(path, handler, middlewares) {
83
- return super.get(path, handler, middlewares);
84
- }
85
- /**
86
- * Define a POST route
87
- *
88
- * @param path
89
- * @param handler
90
- * @param middlewares
91
- */
92
- static post(path, handler, middlewares) {
93
- return super.post(path, handler, middlewares);
94
- }
95
- /**
96
- * Define a PUT route
97
- *
98
- * @param path
99
- * @param handler
100
- * @param middlewares
101
- */
102
- static put(path, handler, middlewares) {
103
- return super.put(path, handler, middlewares);
104
- }
105
- /**
106
- * Define a DELETE route
107
- *
108
- * @param path
109
- * @param handler
110
- * @param middlewares
111
- */
112
- static delete(path, handler, middlewares) {
113
- return super.delete(path, handler, middlewares);
114
- }
115
- /**
116
- * Define a PATCH route
117
- *
118
- * @param path
119
- * @param handler
120
- * @param middlewares
121
- */
122
- static patch(path, handler, middlewares) {
123
- return super.patch(path, handler, middlewares);
124
- }
125
- /**
126
- * Define an OPTIONS route
127
- *
128
- * @param path
129
- * @param handler
130
- * @param middlewares
131
- */
132
- static options(path, handler, middlewares) {
133
- return super.options(path, handler, middlewares);
134
- }
135
- /**
136
- * Define a HEAD route
137
- *
138
- * @param path
139
- * @param handler
140
- * @param middlewares
141
- */
142
- static head(path, handler, middlewares) {
143
- return super.head(path, handler, middlewares);
144
- }
145
- /**
146
- * Defines a group of routes with a common prefix.
147
- *
148
- * @param prefix
149
- * @param callback
150
- * @param middlewares
151
- */
152
- static async group(prefix, callback, middlewares) {
153
- await super.group(prefix, callback, middlewares);
154
- }
155
- /**
156
- * Apply middlewares to a group of routes defined within the callback
157
- *
158
- * @param middlewares - Middleware or array of middlewares to apply
159
- * @param callback - Function that defines the routes to which the middlewares will be applied
160
- */
161
- static middleware(middlewares, callback) {
162
- super.middleware(middlewares, callback);
163
- }
164
- static allRoutes(type) {
165
- return super.allRoutes(type);
166
- }
167
- static route(name) {
168
- return super.route(name);
169
- }
170
- /**
171
- * Apply the defined routes to a Hono application instance
172
- *
173
- * @param app The Hono application instance
174
- * @returns The Hono application instance with the applied routes
175
- */
176
- static apply(app) {
177
- for (const route of Array.from(this.routes)) {
178
- let handlerFunction = null;
179
- let instance = null;
180
- let bindingTarget;
181
- let bindingMethod;
182
- let bindingHandler;
183
- let bindingMetadata;
184
- try {
185
- const resolved = this.resolveHandler(route);
186
- handlerFunction = resolved.handlerFunction;
187
- instance = resolved.instance;
188
- bindingTarget = resolved.bindingTarget;
189
- bindingMethod = resolved.bindingMethod;
190
- bindingHandler = resolved.bindingHandler;
191
- bindingMetadata = resolved.bindingMetadata;
192
- } catch (error) {
193
- console.error(`[ROUTES] Error setting up route ${route.path}:`, error.message);
194
- throw error;
195
- }
196
- if (!handlerFunction) continue;
197
- for (const method of route.methods) {
198
- const allowedMethods = [
199
- "get",
200
- "post",
201
- "put",
202
- "delete",
203
- "patch",
204
- "options",
205
- "head"
206
- ];
207
- if (method === "options" && route.methods.length > 1) continue;
208
- if (!allowedMethods.includes(method)) throw new Error(`Invalid HTTP method: ${method} for route: ${route.path}`);
209
- for (const registrationPath of route.registrationPaths) app[method](registrationPath, ...route.middlewares || [], async (context) => {
210
- const ctx = context;
211
- const reqBody = await Router.readBodyCached(ctx);
212
- const override = Router.resolveMethodOverride(ctx.req.method, ctx.req.header(), reqBody);
213
- if (method === "post" && override && override !== "post") return;
214
- const inst = instance ?? route;
215
- Router.bindRequestToInstance(ctx, inst, route, {
216
- body: reqBody,
217
- query: ctx.req.query(),
218
- params: Router.getParams(ctx),
219
- method
220
- });
221
- const result = await Router.callHandler(handlerFunction, ctx, bindingTarget, bindingMethod, bindingHandler, bindingMetadata);
222
- const resolved = await Promise.resolve(result);
223
- const outgoing = typeof resolved === "undefined" && ctx.clearResponse?.sent ? ctx.clearResponse : resolved;
224
- return Router.toResponse(ctx, outgoing, method, route.path);
225
- });
226
- if ([
227
- "put",
228
- "patch",
229
- "delete"
230
- ].includes(method)) for (const registrationPath of route.registrationPaths) app.post(registrationPath, ...route.middlewares || [], async (context) => {
231
- const ctx = context;
232
- const reqBody = await Router.readBodyCached(ctx);
233
- if (Router.resolveMethodOverride(ctx.req.method, ctx.req.header(), reqBody) !== method) return;
234
- const inst = instance ?? route;
235
- Router.bindRequestToInstance(ctx, inst, route, {
236
- body: reqBody,
237
- query: ctx.req.query(),
238
- params: Router.getParams(ctx),
239
- method
240
- });
241
- const result = await Router.callHandler(handlerFunction, ctx, bindingTarget, bindingMethod, bindingHandler, bindingMetadata);
242
- const resolved = await Promise.resolve(result);
243
- const outgoing = typeof resolved === "undefined" && ctx.clearResponse?.sent ? ctx.clearResponse : resolved;
244
- return Router.toResponse(ctx, outgoing, method, route.path);
245
- });
246
- }
247
- }
248
- return app;
249
- }
250
- };
251
-
252
- //#endregion
253
- exports.Router = Router;
4
+ exports.Router = require_router;