@stacksjs/bun-router 0.0.15 → 0.0.17

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 (83) hide show
  1. package/dist/auth.d.ts +22 -8
  2. package/dist/chunk-1ahs68ys.js +18 -0
  3. package/dist/{chunk-j0e7z7hd.js → chunk-cgptvjdf.js} +153 -75
  4. package/dist/chunk-g3ybefhg.js +1923 -0
  5. package/dist/cli.js +13 -11
  6. package/dist/container/container.d.ts +1 -0
  7. package/dist/container/contextual-binding.d.ts +0 -1
  8. package/dist/container/decorators.d.ts +2 -5
  9. package/dist/container/index.d.ts +16 -0
  10. package/dist/container/index.js +322 -0
  11. package/dist/file-serving/static-files.d.ts +16 -0
  12. package/dist/index.d.ts +17 -1
  13. package/dist/index.js +1086 -1270
  14. package/dist/middleware/cors.d.ts +9 -0
  15. package/dist/middleware/csrf.d.ts +7 -0
  16. package/dist/middleware/ddos_protection.d.ts +16 -1
  17. package/dist/middleware/rate_limit.d.ts +7 -1
  18. package/dist/middleware/request_tracer.d.ts +15 -9
  19. package/dist/middleware/response_cache.d.ts +2 -1
  20. package/dist/request/context.d.ts +12 -1
  21. package/dist/request/macros.d.ts +40 -2
  22. package/dist/response/macros.d.ts +3 -3
  23. package/dist/router/fluent-routing.d.ts +50 -13
  24. package/dist/router/handler-resolver.d.ts +8 -0
  25. package/dist/router/index.d.ts +2 -0
  26. package/dist/router/route-compiler.d.ts +8 -10
  27. package/dist/router/route-trie.d.ts +7 -1
  28. package/dist/router/router.d.ts +13 -2
  29. package/dist/router/validation-integration.d.ts +10 -4
  30. package/dist/types/middleware-types.d.ts +1 -1
  31. package/dist/types/route-inference.d.ts +9 -2
  32. package/dist/types.d.ts +62 -9
  33. package/dist/utils.d.ts +1 -1
  34. package/package.json +11 -1
  35. package/src/auth.ts +32 -12
  36. package/src/container/container.ts +58 -12
  37. package/src/container/contextual-binding.ts +4 -1
  38. package/src/container/decorators.ts +16 -7
  39. package/src/container/index.ts +49 -0
  40. package/src/errors/circuit-breaker.ts +3 -2
  41. package/src/errors/graceful-degradation.ts +2 -0
  42. package/src/file-serving/static-files.ts +144 -7
  43. package/src/index.ts +53 -1
  44. package/src/middleware/cors.ts +76 -8
  45. package/src/middleware/csrf.ts +80 -22
  46. package/src/middleware/ddos_protection.ts +27 -3
  47. package/src/middleware/input_validation.ts +10 -6
  48. package/src/middleware/performance_alerting.ts +2 -0
  49. package/src/middleware/performance_monitor.ts +2 -0
  50. package/src/middleware/rate_limit.ts +7 -1
  51. package/src/middleware/request_signing.ts +2 -0
  52. package/src/middleware/request_tracer.ts +34 -17
  53. package/src/middleware/response_cache.ts +48 -13
  54. package/src/middleware/session.ts +3 -3
  55. package/src/observability/metrics.ts +1 -1
  56. package/src/request/context.ts +50 -3
  57. package/src/request/enhanced-request.ts +20 -1
  58. package/src/request/macros.ts +183 -49
  59. package/src/response/macros.ts +3 -3
  60. package/src/router/file-based-routing.ts +17 -10
  61. package/src/router/fluent-routing.ts +117 -48
  62. package/src/router/group-organization.ts +17 -1
  63. package/src/router/handler-resolver.ts +36 -0
  64. package/src/router/http-methods.ts +33 -3
  65. package/src/router/index.ts +6 -0
  66. package/src/router/middleware.ts +3 -0
  67. package/src/router/optimized-route-matching.ts +58 -9
  68. package/src/router/route-compiler.ts +62 -73
  69. package/src/router/route-matching.ts +19 -0
  70. package/src/router/route-trie.ts +34 -48
  71. package/src/router/router.ts +72 -60
  72. package/src/router/server.ts +361 -139
  73. package/src/router/validation-integration.ts +11 -5
  74. package/src/testing/auth-testing.ts +6 -4
  75. package/src/types/middleware-types.ts +7 -4
  76. package/src/types/route-inference.ts +29 -14
  77. package/src/types.ts +63 -7
  78. package/src/url.ts +7 -2
  79. package/src/utils.ts +107 -39
  80. package/src/validation/validator.ts +7 -4
  81. package/src/websocket/clustering.ts +8 -1
  82. package/dist/router/fluent-router.d.ts +0 -315
  83. package/src/router/fluent-router.ts +0 -927
@@ -1,315 +0,0 @@
1
- /**
2
- * Fluent Routing Extensions
3
- *
4
- * Implements fluent routing patterns with full TypeScript support
5
- */
6
- import type { EnhancedRequest, MiddlewareHandler, Route, RouteHandler } from '../types';
7
- import type { Router } from './router';
8
- /**
9
- * Controller class interface
10
- */
11
- export interface ControllerClass {
12
- new (): Controller;
13
- }
14
- /**
15
- * Base controller interface
16
- */
17
- export interface Controller {
18
- [key: string]: RouteHandler | unknown;
19
- }
20
- /**
21
- * Resource controller methods
22
- */
23
- export type ResourceMethod = 'index' | 'create' | 'store' | 'show' | 'edit' | 'update' | 'destroy';
24
- /**
25
- * API resource methods (no create/edit views)
26
- */
27
- export type ApiResourceMethod = 'index' | 'store' | 'show' | 'update' | 'destroy';
28
- /**
29
- * Singleton resource methods
30
- */
31
- export type SingletonMethod = 'show' | 'edit' | 'update';
32
- /**
33
- * Resource configuration
34
- */
35
- export interface ResourceOptions {
36
- only?: ResourceMethod[];
37
- except?: ResourceMethod[];
38
- middleware?: (string | MiddlewareHandler)[];
39
- names?: Partial<Record<ResourceMethod, string>>;
40
- parameters?: Record<string, string>;
41
- shallow?: boolean;
42
- }
43
- /**
44
- * Route builder for fluent API
45
- */
46
- export interface FluentRoute {
47
- name: (name: string) => FluentRoute;
48
- middleware: (...middleware: (string | MiddlewareHandler)[]) => FluentRoute;
49
- withoutMiddleware: (...middleware: string[]) => FluentRoute;
50
- where: (param: string, pattern: string | RegExp) => FluentRoute;
51
- whereNumber: (param: string) => FluentRoute;
52
- whereAlpha: (param: string) => FluentRoute;
53
- whereAlphaNumeric: (param: string) => FluentRoute;
54
- whereUuid: (param: string) => FluentRoute;
55
- whereSlug: (param: string) => FluentRoute;
56
- can: (ability: string, model?: string) => FluentRoute;
57
- missing: (handler: (req: EnhancedRequest) => Response) => FluentRoute;
58
- withTrashed: () => FluentRoute;
59
- scopeBindings: () => FluentRoute;
60
- }
61
- /**
62
- * Group builder for fluent API
63
- */
64
- export interface GroupBuilder {
65
- prefix: (prefix: string) => GroupBuilder;
66
- name: (name: string) => GroupBuilder;
67
- middleware: (...middleware: (string | MiddlewareHandler)[]) => GroupBuilder;
68
- domain: (domain: string) => GroupBuilder;
69
- controller: (controller: ControllerClass) => GroupBuilder;
70
- routes: (callback: (router: FluentRouter) => void) => void;
71
- }
72
- /**
73
- * Fluent router with chainable API
74
- */
75
- export declare class FluentRouter {
76
- private router;
77
- private currentPrefix;
78
- private currentNamePrefix;
79
- private currentMiddleware;
80
- private currentDomain;
81
- private currentController;
82
- private excludedMiddleware;
83
- constructor(router: Router);
84
- /**
85
- * Register a GET route
86
- */
87
- get(path: string, handler: RouteHandler | string | Response): FluentRouteBuilder;
88
- /**
89
- * Register a POST route
90
- */
91
- post(path: string, handler: RouteHandler | string): FluentRouteBuilder;
92
- /**
93
- * Register a PUT route
94
- */
95
- put(path: string, handler: RouteHandler | string): FluentRouteBuilder;
96
- /**
97
- * Register a PATCH route
98
- */
99
- patch(path: string, handler: RouteHandler | string): FluentRouteBuilder;
100
- /**
101
- * Register a DELETE route
102
- */
103
- delete(path: string, handler: RouteHandler | string): FluentRouteBuilder;
104
- /**
105
- * Register an OPTIONS route
106
- */
107
- options(path: string, handler: RouteHandler | string): FluentRouteBuilder;
108
- /**
109
- * Register a route for any HTTP method
110
- */
111
- any(path: string, handler: RouteHandler | string): FluentRouteBuilder;
112
- /**
113
- * Register a route for multiple HTTP methods
114
- */
115
- match(methods: string[], path: string, handler: RouteHandler | string): FluentRouteBuilder;
116
- /**
117
- * Register a resource controller
118
- */
119
- resource(name: string, Controller: ControllerClass, options?: ResourceOptions): this;
120
- /**
121
- * Register an API resource controller (no create/edit views)
122
- */
123
- apiResource(name: string, controller: ControllerClass, options?: ResourceOptions): this;
124
- /**
125
- * Register a singleton resource (no index, create, store, destroy)
126
- */
127
- singleton(name: string, Controller: ControllerClass, options?: ResourceOptions): this;
128
- /**
129
- * Create a route group with prefix
130
- */
131
- prefix(prefix: string): GroupBuilderImpl;
132
- /**
133
- * Create a route group with name prefix
134
- */
135
- name(namePrefix: string): GroupBuilderImpl;
136
- /**
137
- * Create a route group with middleware
138
- */
139
- middleware(...middleware: (string | MiddlewareHandler)[]): GroupBuilderImpl;
140
- /**
141
- * Create a route group for a domain
142
- */
143
- domain(domain: string): GroupBuilderImpl;
144
- /**
145
- * Create a route group with a controller
146
- */
147
- controller(controller: ControllerClass): GroupBuilderImpl;
148
- /**
149
- * Create a route group
150
- */
151
- group(options: GroupOptions, callback: (router: FluentRouter) => void): this;
152
- /**
153
- * Check if a named route exists
154
- */
155
- has(name: string): boolean;
156
- /**
157
- * Get the current route (from request context)
158
- */
159
- current(): Route | null;
160
- /**
161
- * Get the current route name
162
- */
163
- currentRouteName(): string | null;
164
- /**
165
- * Get URL for a named route
166
- */
167
- route(name: string, params?: Record<string, string | number>): string;
168
- /**
169
- * Register a fallback route
170
- */
171
- fallback(handler: RouteHandler): this;
172
- private addRoute;
173
- /**
174
- * Create a pattern object for route matching
175
- */
176
- private createPattern;
177
- private buildPath;
178
- private buildMiddleware;
179
- private resolveHandler;
180
- private resolveMiddleware;
181
- private getResourceMethods;
182
- private getResourceRoute;
183
- private getSingletonRoute;
184
- }
185
- /**
186
- * Fluent route builder for chaining route configuration
187
- */
188
- export declare class FluentRouteBuilder implements FluentRoute {
189
- private router;
190
- private path;
191
- private method;
192
- private routeName;
193
- private routeMiddleware;
194
- private excludedMiddleware;
195
- private constraints;
196
- private missingHandler;
197
- private includeTrashed;
198
- private scopeBindingsEnabled;
199
- private ability;
200
- private abilityModel;
201
- constructor(router: Router, path: string, method: string);
202
- /**
203
- * Set the route name
204
- */
205
- name(name: string): this;
206
- /**
207
- * Add middleware to the route
208
- */
209
- middleware(...middleware: (string | MiddlewareHandler)[]): this;
210
- /**
211
- * Exclude middleware from the route
212
- */
213
- withoutMiddleware(...middleware: string[]): this;
214
- /**
215
- * Add a parameter constraint
216
- */
217
- where(param: string, pattern: string | RegExp): this;
218
- /**
219
- * Constrain parameter to numbers
220
- */
221
- whereNumber(param: string): this;
222
- /**
223
- * Constrain parameter to letters
224
- */
225
- whereAlpha(param: string): this;
226
- /**
227
- * Constrain parameter to alphanumeric
228
- */
229
- whereAlphaNumeric(param: string): this;
230
- /**
231
- * Constrain parameter to UUID
232
- */
233
- whereUuid(param: string): this;
234
- /**
235
- * Constrain parameter to slug format
236
- */
237
- whereSlug(param: string): this;
238
- /**
239
- * Add authorization check
240
- */
241
- can(ability: string, model?: string): this;
242
- /**
243
- * Handle missing model binding
244
- */
245
- missing(handler: (req: EnhancedRequest) => Response): this;
246
- /**
247
- * Include soft-deleted models
248
- */
249
- withTrashed(): this;
250
- /**
251
- * Enable scoped bindings
252
- */
253
- scopeBindings(): this;
254
- private findRoute;
255
- }
256
- interface GroupOptions {
257
- prefix?: string;
258
- as?: string;
259
- middleware?: (string | MiddlewareHandler)[];
260
- domain?: string;
261
- controller?: ControllerClass;
262
- }
263
- declare class GroupBuilderImpl implements GroupBuilder {
264
- private fluentRouter;
265
- private options;
266
- constructor(router: FluentRouter);
267
- prefix(prefix: string): this;
268
- name(name: string): this;
269
- middleware(...middleware: (string | MiddlewareHandler)[]): this;
270
- domain(domain: string): this;
271
- controller(controller: ControllerClass): this;
272
- routes(callback: (router: FluentRouter) => void): void;
273
- }
274
- /**
275
- * Extend Router with fluent routing methods
276
- */
277
- export declare function registerFluentRouting(RouterClass: typeof import('./router').Router): void;
278
- declare module './router' {
279
- interface Router {
280
- /**
281
- * Get fluent router instance
282
- */
283
- fluent: () => FluentRouter;
284
- /**
285
- * Register a controller-based resource
286
- * Note: Use `resourceController` to avoid conflict with existing `resource` method
287
- */
288
- resourceController: (name: string, controller: ControllerClass, options?: ResourceOptions) => Router;
289
- /**
290
- * Register an API resource controller (no create/edit views)
291
- */
292
- apiResourceController: (name: string, controller: ControllerClass, options?: ResourceOptions) => Router;
293
- /**
294
- * Register a singleton resource
295
- */
296
- singletonResource: (name: string, controller: ControllerClass, options?: ResourceOptions) => Router;
297
- /**
298
- * Check if a named route exists
299
- */
300
- hasRoute: (name: string) => boolean;
301
- /**
302
- * Get the current route
303
- */
304
- currentRoute: () => Route | null;
305
- /**
306
- * Get the current route name
307
- */
308
- currentRouteName: () => string | null;
309
- /**
310
- * Get URL for a named route
311
- */
312
- routeUrl: (name: string, params?: Record<string, string | number>) => string;
313
- }
314
- }
315
- export {};