@stacksjs/bun-router 0.0.16 → 0.0.18

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 (176) hide show
  1. package/dist/auth.d.ts +22 -8
  2. package/dist/chunk-1ahs68ys.js +18 -0
  3. package/dist/{chunk-0145g1me.js → chunk-cgptvjdf.js} +147 -75
  4. package/dist/chunk-g3ybefhg.js +1923 -0
  5. package/dist/cli.js +3 -2
  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/container/service-provider.d.ts +3 -3
  12. package/dist/development/performance-profiler.d.ts +3 -3
  13. package/dist/development/route-debugger.d.ts +1 -1
  14. package/dist/development/route-inspector.d.ts +2 -2
  15. package/dist/file-serving/static-files.d.ts +16 -0
  16. package/dist/index.d.ts +17 -1
  17. package/dist/index.js +1159 -1380
  18. package/dist/middleware/cors.d.ts +9 -0
  19. package/dist/middleware/csrf.d.ts +7 -0
  20. package/dist/middleware/ddos_protection.d.ts +16 -1
  21. package/dist/middleware/rate_limit.d.ts +7 -1
  22. package/dist/middleware/request_tracer.d.ts +15 -9
  23. package/dist/middleware/response_cache.d.ts +2 -1
  24. package/dist/observability/integration.d.ts +1 -1
  25. package/dist/request/context.d.ts +12 -1
  26. package/dist/request/macros.d.ts +40 -2
  27. package/dist/response/macros.d.ts +4 -4
  28. package/dist/router/fluent-routing.d.ts +50 -13
  29. package/dist/router/handler-resolver.d.ts +8 -0
  30. package/dist/router/index.d.ts +9 -7
  31. package/dist/router/route-compiler.d.ts +8 -10
  32. package/dist/router/route-trie.d.ts +7 -1
  33. package/dist/router/router.d.ts +13 -34
  34. package/dist/router/validation-integration.d.ts +10 -4
  35. package/dist/testing/performance-testing.d.ts +2 -2
  36. package/dist/testing/test-client.d.ts +1 -1
  37. package/dist/testing/websocket-testing.d.ts +1 -1
  38. package/dist/types/middleware-types.d.ts +1 -1
  39. package/dist/types/route-inference.d.ts +9 -2
  40. package/dist/types.d.ts +62 -9
  41. package/dist/utils.d.ts +1 -1
  42. package/package.json +12 -3
  43. package/dist/router/fluent-router.d.ts +0 -315
  44. package/src/auth.ts +0 -469
  45. package/src/cache/lru-cache.ts +0 -457
  46. package/src/cache/middleware-memoization.ts +0 -531
  47. package/src/cache/route-cache-warmer.ts +0 -486
  48. package/src/cache/sqlite-cache.ts +0 -783
  49. package/src/cache/streaming-cache.ts +0 -572
  50. package/src/cli/colors.ts +0 -29
  51. package/src/cli/index.ts +0 -287
  52. package/src/cli/middleware.ts +0 -291
  53. package/src/cli/openapi.ts +0 -407
  54. package/src/cli/router.ts +0 -188
  55. package/src/cli/routes.ts +0 -265
  56. package/src/cli/utils.ts +0 -531
  57. package/src/cli.ts +0 -5
  58. package/src/config.ts +0 -322
  59. package/src/container/container.ts +0 -740
  60. package/src/container/contextual-binding.ts +0 -603
  61. package/src/container/decorators.ts +0 -359
  62. package/src/container/service-provider.ts +0 -596
  63. package/src/development/hot-reload.ts +0 -673
  64. package/src/development/index.ts +0 -499
  65. package/src/development/performance-profiler.ts +0 -717
  66. package/src/development/route-debugger.ts +0 -527
  67. package/src/development/route-inspector.ts +0 -749
  68. package/src/development/typescript-utilities.ts +0 -682
  69. package/src/docs.ts +0 -397
  70. package/src/errors/circuit-breaker.ts +0 -732
  71. package/src/errors/error-handler.ts +0 -569
  72. package/src/errors/error-reporting.ts +0 -672
  73. package/src/errors/exceptions.ts +0 -536
  74. package/src/errors/graceful-degradation.ts +0 -621
  75. package/src/errors/index.ts +0 -21
  76. package/src/errors/router-errors.ts +0 -632
  77. package/src/file-serving/static-files.ts +0 -581
  78. package/src/index.ts +0 -14
  79. package/src/middleware/auth.ts +0 -220
  80. package/src/middleware/content_security_policy.ts +0 -215
  81. package/src/middleware/cors.ts +0 -74
  82. package/src/middleware/csrf.ts +0 -118
  83. package/src/middleware/ddos_protection.ts +0 -255
  84. package/src/middleware/file_security.ts +0 -191
  85. package/src/middleware/file_upload.ts +0 -275
  86. package/src/middleware/helmet.ts +0 -268
  87. package/src/middleware/index.ts +0 -117
  88. package/src/middleware/input_validation.ts +0 -449
  89. package/src/middleware/json_body.ts +0 -37
  90. package/src/middleware/performance_alerting.ts +0 -538
  91. package/src/middleware/performance_dashboard.ts +0 -661
  92. package/src/middleware/performance_monitor.ts +0 -943
  93. package/src/middleware/pipeline.ts +0 -489
  94. package/src/middleware/rate_limit.ts +0 -245
  95. package/src/middleware/request_id.ts +0 -36
  96. package/src/middleware/request_signing.ts +0 -636
  97. package/src/middleware/request_tracer.ts +0 -636
  98. package/src/middleware/response_cache.ts +0 -743
  99. package/src/middleware/security.ts +0 -482
  100. package/src/middleware/security_suite.ts +0 -257
  101. package/src/middleware/session.ts +0 -91
  102. package/src/model-binding/index.ts +0 -18
  103. package/src/model-binding/model-middleware.ts +0 -425
  104. package/src/model-binding/model-registry.ts +0 -550
  105. package/src/model-binding.ts +0 -370
  106. package/src/model-resolver-factory.ts +0 -106
  107. package/src/observability/correlation.ts +0 -691
  108. package/src/observability/health-checks.ts +0 -729
  109. package/src/observability/index.ts +0 -184
  110. package/src/observability/integration.ts +0 -548
  111. package/src/observability/metrics.ts +0 -753
  112. package/src/observability/tracing.ts +0 -638
  113. package/src/optimization/bun-utilities.ts +0 -778
  114. package/src/query-builder-integration.ts +0 -137
  115. package/src/request/context.ts +0 -62
  116. package/src/request/enhanced-request.ts +0 -857
  117. package/src/request/macros.ts +0 -688
  118. package/src/response/macros.ts +0 -665
  119. package/src/response/response-factory.ts +0 -596
  120. package/src/router/api-routes.ts +0 -243
  121. package/src/router/file-based-routing.ts +0 -690
  122. package/src/router/file-streaming.ts +0 -383
  123. package/src/router/fluent-router.ts +0 -927
  124. package/src/router/fluent-routing.ts +0 -797
  125. package/src/router/group-organization.ts +0 -213
  126. package/src/router/handler-resolver.ts +0 -291
  127. package/src/router/http-methods.ts +0 -377
  128. package/src/router/index.ts +0 -187
  129. package/src/router/middleware-groups.ts +0 -222
  130. package/src/router/middleware-integration.ts +0 -399
  131. package/src/router/middleware.ts +0 -231
  132. package/src/router/model-binding.ts +0 -215
  133. package/src/router/optimized-route-matching.ts +0 -253
  134. package/src/router/route-building.ts +0 -221
  135. package/src/router/route-compiler.ts +0 -702
  136. package/src/router/route-matching.ts +0 -349
  137. package/src/router/route-trie.ts +0 -464
  138. package/src/router/router.ts +0 -1604
  139. package/src/router/server.ts +0 -462
  140. package/src/router/validation-integration.ts +0 -443
  141. package/src/router/view-rendering.ts +0 -233
  142. package/src/router/websocket.ts +0 -100
  143. package/src/routing/route-caching.ts +0 -402
  144. package/src/routing/route-throttling.ts +0 -469
  145. package/src/routing/subdomain-routing.ts +0 -492
  146. package/src/session/database-store.ts +0 -109
  147. package/src/session/file-store.ts +0 -148
  148. package/src/session/index.ts +0 -244
  149. package/src/session/memory-store.ts +0 -88
  150. package/src/session/redis-store.ts +0 -93
  151. package/src/streaming/index.ts +0 -17
  152. package/src/streaming/sse-handler.ts +0 -482
  153. package/src/streaming/stream-handler.ts +0 -552
  154. package/src/testing/auth-testing.ts +0 -446
  155. package/src/testing/file-upload-testing.ts +0 -543
  156. package/src/testing/index.ts +0 -10
  157. package/src/testing/middleware-testing.ts +0 -322
  158. package/src/testing/model-binding-testing.ts +0 -645
  159. package/src/testing/performance-testing.ts +0 -738
  160. package/src/testing/test-client.ts +0 -310
  161. package/src/testing/test-request.ts +0 -315
  162. package/src/testing/test-response.ts +0 -332
  163. package/src/testing/types.ts +0 -224
  164. package/src/testing/websocket-testing.ts +0 -590
  165. package/src/types/controller-types.ts +0 -385
  166. package/src/types/core.ts +0 -683
  167. package/src/types/middleware-types.ts +0 -419
  168. package/src/types/request-response-augmentation.ts +0 -489
  169. package/src/types/route-inference.ts +0 -357
  170. package/src/types.ts +0 -2067
  171. package/src/url.ts +0 -126
  172. package/src/utils/index.ts +0 -1
  173. package/src/utils/query-preservation.ts +0 -201
  174. package/src/utils.ts +0 -392
  175. package/src/validation/validator.ts +0 -685
  176. package/src/websocket/clustering.ts +0 -762
package/dist/cli.js CHANGED
@@ -1,7 +1,8 @@
1
1
  // @bun
2
2
  import {
3
3
  middleware
4
- } from "./chunk-0145g1me.js";
4
+ } from "./chunk-cgptvjdf.js";
5
+ import"./chunk-1ahs68ys.js";
5
6
 
6
7
  // src/cli/index.ts
7
8
  import process15 from "process";
@@ -2045,7 +2046,7 @@ function getPrefix() {
2045
2046
  }
2046
2047
  var prefix = getPrefix();
2047
2048
  // package.json
2048
- var version = "0.0.16";
2049
+ var version = "0.0.18";
2049
2050
 
2050
2051
  // src/cli/middleware.ts
2051
2052
  import fs2 from "fs/promises";
@@ -66,6 +66,7 @@ export interface InjectMetadata {
66
66
  */
67
67
  export declare class Container {
68
68
  private bindings;
69
+ private tagIndex;
69
70
  private instances;
70
71
  private scopedInstances;
71
72
  private interceptors;
@@ -237,4 +237,3 @@ export declare class BindingConditions {
237
237
  */
238
238
  static custom(predicate: (context: ResolutionContext) => boolean, description?: string): BindingCondition;
239
239
  }
240
- export { ContextualContainer as DIContainer };
@@ -2,11 +2,8 @@
2
2
  * Modern Dependency Injection Decorators
3
3
  */
4
4
  import type { ResolutionContext } from './container';
5
- import { Container } from './container';
6
- export declare const INJECTABLE_METADATA_KEY: unique symbol;
7
- export declare const INJECT_METADATA_KEY: unique symbol;
8
- export declare const OPTIONAL_METADATA_KEY: unique symbol;
9
- export declare const TAGGED_METADATA_KEY: unique symbol;
5
+ import { Container, INJECT_METADATA_KEY, INJECTABLE_METADATA_KEY, OPTIONAL_METADATA_KEY, TAGGED_METADATA_KEY } from './container';
6
+ export { INJECT_METADATA_KEY, INJECTABLE_METADATA_KEY, OPTIONAL_METADATA_KEY, TAGGED_METADATA_KEY };
10
7
  export declare const CONTROLLER_METADATA_KEY: unique symbol;
11
8
  export declare const ROUTE_METADATA_KEY: unique symbol;
12
9
  export declare const MIDDLEWARE_METADATA_KEY: unique symbol;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Dependency-injection container — public entry point.
3
+ *
4
+ * ```ts
5
+ * import { Container, createContainer, Inject, Injectable } from '@stacksjs/bun-router/container'
6
+ * ```
7
+ *
8
+ * The core `Container` (and a few companions) are also re-exported from the
9
+ * package root; the decorators live only here because their names (`Get`,
10
+ * `Post`, `Controller`, …) would collide with the router's exports.
11
+ */
12
+ export * from './container';
13
+ export { Body, Controller, CONTROLLER_METADATA_KEY, Cookie, decoratorContainer, DecoratorContainer, Delete, Get, Head, Header, Inject, Injectable, InjectParam, MetadataReader, MIDDLEWARE_METADATA_KEY, Optional, Options, Param, PARAM_METADATA_KEY, Patch, Post, Put, Query, ROUTE_METADATA_KEY, Tagged, UseMiddleware, } from './decorators';
14
+ export type { ControllerMetadata, ParamMetadata, RouteMetadata } from './decorators';
15
+ export * from './contextual-binding';
16
+ export * from './service-provider';
@@ -0,0 +1,322 @@
1
+ // @bun
2
+ import {
3
+ AuthGuard,
4
+ AuthService,
5
+ AuthServiceProvider,
6
+ BaseDeferredServiceProvider,
7
+ BaseServiceProvider,
8
+ BindingBuilder,
9
+ BindingConditions,
10
+ CacheManager,
11
+ CacheServiceProvider,
12
+ ConfigService,
13
+ ConfigServiceProvider,
14
+ ConsoleLogger,
15
+ Container,
16
+ ContextualContainer,
17
+ DatabaseConnection,
18
+ DatabaseServiceProvider,
19
+ DefaultContextualBindingBuilder,
20
+ DefaultServiceProviderManager,
21
+ EnvironmentManager,
22
+ EnvironmentPresets,
23
+ EventBus,
24
+ EventDispatcher,
25
+ EventServiceProvider,
26
+ FileLogger,
27
+ INJECTABLE_METADATA_KEY,
28
+ INJECT_METADATA_KEY,
29
+ JwtService,
30
+ Logger,
31
+ LoggingServiceProvider,
32
+ MemoryCache,
33
+ OPTIONAL_METADATA_KEY,
34
+ PostRepository,
35
+ RedisCache,
36
+ TAGGED_METADATA_KEY,
37
+ UserRepository,
38
+ ValidationPipe,
39
+ ValidationServiceProvider,
40
+ Validator,
41
+ createContainer,
42
+ getContainer,
43
+ setContainer
44
+ } from "../chunk-g3ybefhg.js";
45
+ import"../chunk-1ahs68ys.js";
46
+ // src/container/decorators.ts
47
+ var CONTROLLER_METADATA_KEY = Symbol("controller");
48
+ var ROUTE_METADATA_KEY = Symbol("route");
49
+ var MIDDLEWARE_METADATA_KEY = Symbol("middleware");
50
+ var PARAM_METADATA_KEY = Symbol("param");
51
+ function Injectable(metadata = {}) {
52
+ return (target) => {
53
+ target[INJECTABLE_METADATA_KEY] = metadata;
54
+ return target;
55
+ };
56
+ }
57
+ function Inject(token, options) {
58
+ return function(target, _propertyKey, parameterIndex) {
59
+ const classConstructor = target.constructor === Function ? target : target.constructor;
60
+ if (!classConstructor[INJECT_METADATA_KEY]) {
61
+ classConstructor[INJECT_METADATA_KEY] = [];
62
+ }
63
+ const metadata = {
64
+ token,
65
+ optional: options?.optional,
66
+ tags: options?.tags,
67
+ when: options?.when
68
+ };
69
+ classConstructor[INJECT_METADATA_KEY][parameterIndex] = metadata;
70
+ };
71
+ }
72
+ function Optional() {
73
+ return (target, _propertyKey, parameterIndex) => {
74
+ if (!target[OPTIONAL_METADATA_KEY]) {
75
+ target[OPTIONAL_METADATA_KEY] = [];
76
+ }
77
+ target[OPTIONAL_METADATA_KEY][parameterIndex] = true;
78
+ };
79
+ }
80
+ function Tagged(tag) {
81
+ return function(target, _propertyKey, parameterIndex) {
82
+ if (!target[TAGGED_METADATA_KEY]) {
83
+ target[TAGGED_METADATA_KEY] = [];
84
+ }
85
+ target[TAGGED_METADATA_KEY][parameterIndex] = tag;
86
+ };
87
+ }
88
+ function Controller(prefix, options) {
89
+ return function(target) {
90
+ const metadata = {
91
+ prefix: prefix || "",
92
+ middleware: options?.middleware || [],
93
+ tags: options?.tags || []
94
+ };
95
+ target[CONTROLLER_METADATA_KEY] = metadata;
96
+ return target;
97
+ };
98
+ }
99
+ function Get(path = "", options) {
100
+ return createRouteDecorator("GET", path, options);
101
+ }
102
+ function Post(path = "", options) {
103
+ return createRouteDecorator("POST", path, options);
104
+ }
105
+ function Put(path = "", options) {
106
+ return createRouteDecorator("PUT", path, options);
107
+ }
108
+ function Delete(path = "", options) {
109
+ return createRouteDecorator("DELETE", path, options);
110
+ }
111
+ function Patch(path = "", options) {
112
+ return createRouteDecorator("PATCH", path, options);
113
+ }
114
+ function Options(path = "", options) {
115
+ return createRouteDecorator("OPTIONS", path, options);
116
+ }
117
+ function Head(path = "", options) {
118
+ return createRouteDecorator("HEAD", path, options);
119
+ }
120
+ function createRouteDecorator(method, path, options) {
121
+ return function(target, propertyKey, descriptor) {
122
+ if (!target.constructor[ROUTE_METADATA_KEY]) {
123
+ target.constructor[ROUTE_METADATA_KEY] = [];
124
+ }
125
+ const metadata = {
126
+ method,
127
+ path,
128
+ middleware: options?.middleware || [],
129
+ tags: options?.tags || []
130
+ };
131
+ target.constructor[ROUTE_METADATA_KEY].push({
132
+ ...metadata,
133
+ propertyKey,
134
+ handler: descriptor.value
135
+ });
136
+ return descriptor;
137
+ };
138
+ }
139
+ function UseMiddleware(...middleware) {
140
+ return function(target, propertyKey, descriptor) {
141
+ if (propertyKey && descriptor) {
142
+ if (!target.constructor[MIDDLEWARE_METADATA_KEY]) {
143
+ target.constructor[MIDDLEWARE_METADATA_KEY] = new Map;
144
+ }
145
+ target.constructor[MIDDLEWARE_METADATA_KEY].set(propertyKey, middleware);
146
+ } else {
147
+ target[MIDDLEWARE_METADATA_KEY] = middleware;
148
+ }
149
+ return descriptor || target;
150
+ };
151
+ }
152
+ function Param(key) {
153
+ return createParamDecorator("param", key);
154
+ }
155
+ function Query(key) {
156
+ return createParamDecorator("query", key);
157
+ }
158
+ function Body() {
159
+ return createParamDecorator("body");
160
+ }
161
+ function Header(key) {
162
+ return createParamDecorator("header", key);
163
+ }
164
+ function Cookie(key) {
165
+ return createParamDecorator("cookie", key);
166
+ }
167
+ function InjectParam(token) {
168
+ return createParamDecorator("param", undefined, token);
169
+ }
170
+ function createParamDecorator(type, key, token) {
171
+ return function(target, propertyKey, parameterIndex) {
172
+ if (!target.constructor[PARAM_METADATA_KEY]) {
173
+ target.constructor[PARAM_METADATA_KEY] = new Map;
174
+ }
175
+ if (!target.constructor[PARAM_METADATA_KEY].has(propertyKey)) {
176
+ target.constructor[PARAM_METADATA_KEY].set(propertyKey, []);
177
+ }
178
+ const metadata = {
179
+ type,
180
+ key,
181
+ token
182
+ };
183
+ target.constructor[PARAM_METADATA_KEY].get(propertyKey)[parameterIndex] = metadata;
184
+ };
185
+ }
186
+
187
+ class MetadataReader {
188
+ static getInjectableMetadata(target) {
189
+ return target[INJECTABLE_METADATA_KEY];
190
+ }
191
+ static getInjectMetadata(target) {
192
+ return target[INJECT_METADATA_KEY] || [];
193
+ }
194
+ static getOptionalMetadata(target) {
195
+ return target[OPTIONAL_METADATA_KEY] || [];
196
+ }
197
+ static getTaggedMetadata(target) {
198
+ return target[TAGGED_METADATA_KEY] || [];
199
+ }
200
+ static getControllerMetadata(target) {
201
+ return target[CONTROLLER_METADATA_KEY];
202
+ }
203
+ static getAllRoutes(target) {
204
+ return target[ROUTE_METADATA_KEY] || [];
205
+ }
206
+ static getMiddlewareMetadata(target, propertyKey) {
207
+ if (propertyKey) {
208
+ const methodMiddleware = target[MIDDLEWARE_METADATA_KEY]?.get(propertyKey);
209
+ return methodMiddleware || [];
210
+ }
211
+ return target[MIDDLEWARE_METADATA_KEY] || [];
212
+ }
213
+ static getParamMetadata(target, propertyKey) {
214
+ return target[PARAM_METADATA_KEY]?.get(propertyKey) || [];
215
+ }
216
+ }
217
+
218
+ class DecoratorContainer extends Container {
219
+ registerController(controllerClass) {
220
+ const metadata = MetadataReader.getControllerMetadata(controllerClass);
221
+ if (!metadata) {
222
+ throw new Error(`Class ${controllerClass.name} is not decorated with @Controller`);
223
+ }
224
+ this.singleton(controllerClass, controllerClass);
225
+ const routes = MetadataReader.getAllRoutes(controllerClass);
226
+ for (const _route of routes) {}
227
+ }
228
+ resolve(token, context) {
229
+ if (typeof token === "function") {
230
+ const metadata = MetadataReader.getInjectableMetadata(token);
231
+ if (metadata) {
232
+ try {
233
+ return super.resolve(token, context);
234
+ } catch {
235
+ const scope = metadata.scope || "transient";
236
+ switch (scope) {
237
+ case "singleton":
238
+ this.singleton(token, token);
239
+ break;
240
+ case "transient":
241
+ this.transient(token, token);
242
+ break;
243
+ default:
244
+ this.transient(token, token);
245
+ }
246
+ }
247
+ }
248
+ }
249
+ return super.resolve(token, context);
250
+ }
251
+ }
252
+ var decoratorContainer = new DecoratorContainer;
253
+ export {
254
+ setContainer,
255
+ getContainer,
256
+ decoratorContainer,
257
+ createContainer,
258
+ Validator,
259
+ ValidationServiceProvider,
260
+ ValidationPipe,
261
+ UserRepository,
262
+ UseMiddleware,
263
+ Tagged,
264
+ TAGGED_METADATA_KEY,
265
+ RedisCache,
266
+ ROUTE_METADATA_KEY,
267
+ Query,
268
+ Put,
269
+ PostRepository,
270
+ Post,
271
+ Patch,
272
+ Param,
273
+ PARAM_METADATA_KEY,
274
+ Options,
275
+ Optional,
276
+ OPTIONAL_METADATA_KEY,
277
+ MetadataReader,
278
+ MemoryCache,
279
+ MIDDLEWARE_METADATA_KEY,
280
+ LoggingServiceProvider,
281
+ Logger,
282
+ JwtService,
283
+ Injectable,
284
+ InjectParam,
285
+ Inject,
286
+ INJECT_METADATA_KEY,
287
+ INJECTABLE_METADATA_KEY,
288
+ Header,
289
+ Head,
290
+ Get,
291
+ FileLogger,
292
+ EventServiceProvider,
293
+ EventDispatcher,
294
+ EventBus,
295
+ EnvironmentPresets,
296
+ EnvironmentManager,
297
+ Delete,
298
+ DefaultServiceProviderManager,
299
+ DefaultContextualBindingBuilder,
300
+ DecoratorContainer,
301
+ DatabaseServiceProvider,
302
+ DatabaseConnection,
303
+ Container as DIContainer,
304
+ Cookie,
305
+ Controller,
306
+ ContextualContainer,
307
+ Container,
308
+ ConsoleLogger,
309
+ ConfigServiceProvider,
310
+ ConfigService,
311
+ CacheServiceProvider,
312
+ CacheManager,
313
+ CONTROLLER_METADATA_KEY,
314
+ Body,
315
+ BindingConditions,
316
+ BindingBuilder,
317
+ BaseServiceProvider,
318
+ BaseDeferredServiceProvider,
319
+ AuthServiceProvider,
320
+ AuthService,
321
+ AuthGuard
322
+ };
@@ -181,7 +181,7 @@ export declare class LoggingServiceProvider extends BaseServiceProvider {
181
181
  */
182
182
  export declare class DatabaseServiceProvider extends BaseServiceProvider {
183
183
  readonly name = "database";
184
- readonly dependencies: readonly ["config", "logging"];
184
+ readonly dependencies: readonly ['config', 'logging'];
185
185
  register(container: Container): void;
186
186
  boot(container: Container): Promise<void>;
187
187
  shutdown(container: Container): Promise<void>;
@@ -191,7 +191,7 @@ export declare class DatabaseServiceProvider extends BaseServiceProvider {
191
191
  */
192
192
  export declare class CacheServiceProvider extends BaseServiceProvider {
193
193
  readonly name = "cache";
194
- readonly dependencies: readonly ["config"];
194
+ readonly dependencies: readonly ['config'];
195
195
  register(container: Container): void;
196
196
  }
197
197
  /**
@@ -199,7 +199,7 @@ export declare class CacheServiceProvider extends BaseServiceProvider {
199
199
  */
200
200
  export declare class AuthServiceProvider extends BaseServiceProvider {
201
201
  readonly name = "auth";
202
- readonly dependencies: readonly ["config", "database"];
202
+ readonly dependencies: readonly ['config', 'database'];
203
203
  register(container: Container): void;
204
204
  }
205
205
  /**
@@ -201,11 +201,11 @@ export declare const PerformanceProfilingHelpers: {
201
201
  /**
202
202
  * Record timing from request context
203
203
  */
204
- startTiming: (req: EnhancedRequest, phase: keyof RouteProfile["phases"], name: string) => string | null;
204
+ startTiming: (req: EnhancedRequest, phase: keyof RouteProfile['phases'], name: string) => string | null;
205
205
  /**
206
206
  * End timing from request context
207
207
  */
208
- endTiming: (req: EnhancedRequest, phase: keyof RouteProfile["phases"], timingId: string) => void;
208
+ endTiming: (req: EnhancedRequest, phase: keyof RouteProfile['phases'], timingId: string) => void;
209
209
  /**
210
210
  * Record database query from request context
211
211
  */
@@ -213,5 +213,5 @@ export declare const PerformanceProfilingHelpers: {
213
213
  /**
214
214
  * Record profile point from request context
215
215
  */
216
- recordPoint: (req: EnhancedRequest, phase: keyof RouteProfile["phases"], name: string, metadata?: Record<string, any>) => void;
216
+ recordPoint: (req: EnhancedRequest, phase: keyof RouteProfile['phases'], name: string, metadata?: Record<string, any>) => void;
217
217
  };
@@ -150,5 +150,5 @@ export declare const RouteDebugHelpers: {
150
150
  /**
151
151
  * Record timing from request context
152
152
  */
153
- recordTiming: (req: EnhancedRequest, phase: keyof RouteDebugInfo["timings"], duration: number) => void;
153
+ recordTiming: (req: EnhancedRequest, phase: keyof RouteDebugInfo['timings'], duration: number) => void;
154
154
  };
@@ -199,7 +199,7 @@ export declare const RouteInspectionHelpers: {
199
199
  /**
200
200
  * List all routes in a formatted table
201
201
  */
202
- listRoutes: (filter?: Parameters<RouteInspector["getRoutes"]>[0]) => void;
202
+ listRoutes: (filter?: Parameters<RouteInspector['getRoutes']>[0]) => void;
203
203
  /**
204
204
  * Analyze routes and show recommendations
205
205
  */
@@ -207,5 +207,5 @@ export declare const RouteInspectionHelpers: {
207
207
  /**
208
208
  * Export routes to file
209
209
  */
210
- exportRoutes: (format?: "json" | "csv" | "markdown" | "openapi", filename?: string) => void;
210
+ exportRoutes: (format?: 'json' | 'csv' | 'markdown' | 'openapi', filename?: string) => void;
211
211
  };
@@ -17,6 +17,12 @@ export interface StaticFileConfig {
17
17
  compressionThreshold?: number;
18
18
  cacheControl?: string;
19
19
  dotfiles?: 'allow' | 'deny' | 'ignore';
20
+ /**
21
+ * Files larger than this (bytes) are streamed straight from disk via
22
+ * `Bun.file()` instead of being buffered into the in-memory cache.
23
+ * Streamed responses support HTTP Range requests (206). Default: 5 MiB.
24
+ */
25
+ maxCacheFileSize?: number;
20
26
  }
21
27
  export interface FileCache {
22
28
  content: ArrayBuffer;
@@ -56,6 +62,11 @@ export declare class StaticFileServer {
56
62
  * Serve cached file with proper headers
57
63
  */
58
64
  private serveCachedFile;
65
+ /**
66
+ * Stream a file from disk without buffering it into memory.
67
+ * Supports single-range HTTP Range requests (RFC 9110 §14).
68
+ */
69
+ private serveStreamedFile;
59
70
  /**
60
71
  * Resolve file path, handling index files and extensions
61
72
  */
@@ -88,6 +99,11 @@ export declare class StaticFileServer {
88
99
  * Clear cache
89
100
  */
90
101
  clearCache(): void;
102
+ /**
103
+ * Invalidate a single cached file (e.g. from a file watcher), leaving
104
+ * the rest of the cache warm.
105
+ */
106
+ invalidateFile(filePath: string): void;
91
107
  /**
92
108
  * Get cache size
93
109
  */
package/dist/index.d.ts CHANGED
@@ -1,14 +1,30 @@
1
+ /**
2
+ * @stacksjs/bun-router — a fast, type-safe router for Bun.
3
+ *
4
+ * Main entry point. The most commonly used exports:
5
+ * - `Router` — the primary router class (from `./router`)
6
+ * - `FluentRouter` / `router` — chainable routing API
7
+ * - `Auth`, `JWT`, `ApiKeyManager`, `OAuth2Helper` — auth helpers
8
+ * - `Container`, `createContainer` — dependency-injection container
9
+ * - `url()` / `registerNamedRoute()` — named-route URL generation
10
+ * - `Errors` — namespaced error/exception types
11
+ */
1
12
  export { default as Auth } from './auth';
2
13
  export * from './auth';
3
14
  export * from './config';
15
+ export { BindingBuilder, Container, createContainer, getContainer, setContainer, } from './container/container';
16
+ export type { Binding, BindingScope, ContainerOptions, ResolutionContext, Token } from './container/container';
17
+ export { ContextualContainer, EnvironmentManager } from './container/contextual-binding';
18
+ export { DefaultServiceProviderManager } from './container/service-provider';
4
19
  export * as Errors from './errors';
5
20
  export * from './middleware';
6
- export { getCurrentRequest, request, runWithRequest, setCurrentRequest } from './request/context';
21
+ export { enableRequestContext, getCurrentRequest, request, runWithRequest, setCurrentRequest } from './request/context';
7
22
  export * from './session';
8
23
  export * from './response/response-factory';
9
24
  export * from './router';
10
25
  export { MiddlewareGroupRegistry, middlewareGroups } from './router/middleware-groups';
11
26
  export * from './testing';
12
27
  export * from './types';
28
+ export * from './validation/validator';
13
29
  export { clearNamedRoutes, getNamedRoutePath, getNamedRoutes, registerNamedRoute, url, type UrlOptions } from './url';
14
30
  export * from './utils';