@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.
- package/dist/auth.d.ts +22 -8
- package/dist/chunk-1ahs68ys.js +18 -0
- package/dist/{chunk-j0e7z7hd.js → chunk-cgptvjdf.js} +153 -75
- package/dist/chunk-g3ybefhg.js +1923 -0
- package/dist/cli.js +13 -11
- package/dist/container/container.d.ts +1 -0
- package/dist/container/contextual-binding.d.ts +0 -1
- package/dist/container/decorators.d.ts +2 -5
- package/dist/container/index.d.ts +16 -0
- package/dist/container/index.js +322 -0
- package/dist/file-serving/static-files.d.ts +16 -0
- package/dist/index.d.ts +17 -1
- package/dist/index.js +1086 -1270
- package/dist/middleware/cors.d.ts +9 -0
- package/dist/middleware/csrf.d.ts +7 -0
- package/dist/middleware/ddos_protection.d.ts +16 -1
- package/dist/middleware/rate_limit.d.ts +7 -1
- package/dist/middleware/request_tracer.d.ts +15 -9
- package/dist/middleware/response_cache.d.ts +2 -1
- package/dist/request/context.d.ts +12 -1
- package/dist/request/macros.d.ts +40 -2
- package/dist/response/macros.d.ts +3 -3
- package/dist/router/fluent-routing.d.ts +50 -13
- package/dist/router/handler-resolver.d.ts +8 -0
- package/dist/router/index.d.ts +2 -0
- package/dist/router/route-compiler.d.ts +8 -10
- package/dist/router/route-trie.d.ts +7 -1
- package/dist/router/router.d.ts +13 -2
- package/dist/router/validation-integration.d.ts +10 -4
- package/dist/types/middleware-types.d.ts +1 -1
- package/dist/types/route-inference.d.ts +9 -2
- package/dist/types.d.ts +62 -9
- package/dist/utils.d.ts +1 -1
- package/package.json +11 -1
- package/src/auth.ts +32 -12
- package/src/container/container.ts +58 -12
- package/src/container/contextual-binding.ts +4 -1
- package/src/container/decorators.ts +16 -7
- package/src/container/index.ts +49 -0
- package/src/errors/circuit-breaker.ts +3 -2
- package/src/errors/graceful-degradation.ts +2 -0
- package/src/file-serving/static-files.ts +144 -7
- package/src/index.ts +53 -1
- package/src/middleware/cors.ts +76 -8
- package/src/middleware/csrf.ts +80 -22
- package/src/middleware/ddos_protection.ts +27 -3
- package/src/middleware/input_validation.ts +10 -6
- package/src/middleware/performance_alerting.ts +2 -0
- package/src/middleware/performance_monitor.ts +2 -0
- package/src/middleware/rate_limit.ts +7 -1
- package/src/middleware/request_signing.ts +2 -0
- package/src/middleware/request_tracer.ts +34 -17
- package/src/middleware/response_cache.ts +48 -13
- package/src/middleware/session.ts +3 -3
- package/src/observability/metrics.ts +1 -1
- package/src/request/context.ts +50 -3
- package/src/request/enhanced-request.ts +20 -1
- package/src/request/macros.ts +183 -49
- package/src/response/macros.ts +3 -3
- package/src/router/file-based-routing.ts +17 -10
- package/src/router/fluent-routing.ts +117 -48
- package/src/router/group-organization.ts +17 -1
- package/src/router/handler-resolver.ts +36 -0
- package/src/router/http-methods.ts +33 -3
- package/src/router/index.ts +6 -0
- package/src/router/middleware.ts +3 -0
- package/src/router/optimized-route-matching.ts +58 -9
- package/src/router/route-compiler.ts +62 -73
- package/src/router/route-matching.ts +19 -0
- package/src/router/route-trie.ts +34 -48
- package/src/router/router.ts +72 -60
- package/src/router/server.ts +361 -139
- package/src/router/validation-integration.ts +11 -5
- package/src/testing/auth-testing.ts +6 -4
- package/src/types/middleware-types.ts +7 -4
- package/src/types/route-inference.ts +29 -14
- package/src/types.ts +63 -7
- package/src/url.ts +7 -2
- package/src/utils.ts +107 -39
- package/src/validation/validator.ts +7 -4
- package/src/websocket/clustering.ts +8 -1
- package/dist/router/fluent-router.d.ts +0 -315
- 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 {};
|