@stacksjs/bun-router 0.0.17 → 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 (146) hide show
  1. package/dist/cli.js +1 -1
  2. package/dist/container/service-provider.d.ts +3 -3
  3. package/dist/development/performance-profiler.d.ts +3 -3
  4. package/dist/development/route-debugger.d.ts +1 -1
  5. package/dist/development/route-inspector.d.ts +2 -2
  6. package/dist/observability/integration.d.ts +1 -1
  7. package/dist/response/macros.d.ts +1 -1
  8. package/dist/router/index.d.ts +7 -7
  9. package/dist/router/router.d.ts +0 -32
  10. package/dist/testing/performance-testing.d.ts +2 -2
  11. package/dist/testing/test-client.d.ts +1 -1
  12. package/dist/testing/websocket-testing.d.ts +1 -1
  13. package/package.json +2 -3
  14. package/src/auth.ts +0 -489
  15. package/src/cache/lru-cache.ts +0 -457
  16. package/src/cache/middleware-memoization.ts +0 -531
  17. package/src/cache/route-cache-warmer.ts +0 -486
  18. package/src/cache/sqlite-cache.ts +0 -783
  19. package/src/cache/streaming-cache.ts +0 -572
  20. package/src/cli/colors.ts +0 -29
  21. package/src/cli/index.ts +0 -287
  22. package/src/cli/middleware.ts +0 -291
  23. package/src/cli/openapi.ts +0 -407
  24. package/src/cli/router.ts +0 -188
  25. package/src/cli/routes.ts +0 -265
  26. package/src/cli/utils.ts +0 -531
  27. package/src/cli.ts +0 -5
  28. package/src/config.ts +0 -322
  29. package/src/container/container.ts +0 -786
  30. package/src/container/contextual-binding.ts +0 -606
  31. package/src/container/decorators.ts +0 -368
  32. package/src/container/index.ts +0 -49
  33. package/src/container/service-provider.ts +0 -596
  34. package/src/development/hot-reload.ts +0 -673
  35. package/src/development/index.ts +0 -499
  36. package/src/development/performance-profiler.ts +0 -717
  37. package/src/development/route-debugger.ts +0 -527
  38. package/src/development/route-inspector.ts +0 -749
  39. package/src/development/typescript-utilities.ts +0 -682
  40. package/src/docs.ts +0 -397
  41. package/src/errors/circuit-breaker.ts +0 -733
  42. package/src/errors/error-handler.ts +0 -569
  43. package/src/errors/error-reporting.ts +0 -672
  44. package/src/errors/exceptions.ts +0 -536
  45. package/src/errors/graceful-degradation.ts +0 -623
  46. package/src/errors/index.ts +0 -21
  47. package/src/errors/router-errors.ts +0 -632
  48. package/src/file-serving/static-files.ts +0 -718
  49. package/src/index.ts +0 -66
  50. package/src/middleware/auth.ts +0 -220
  51. package/src/middleware/content_security_policy.ts +0 -215
  52. package/src/middleware/cors.ts +0 -142
  53. package/src/middleware/csrf.ts +0 -166
  54. package/src/middleware/ddos_protection.ts +0 -279
  55. package/src/middleware/file_security.ts +0 -191
  56. package/src/middleware/file_upload.ts +0 -275
  57. package/src/middleware/helmet.ts +0 -268
  58. package/src/middleware/index.ts +0 -117
  59. package/src/middleware/input_validation.ts +0 -453
  60. package/src/middleware/json_body.ts +0 -37
  61. package/src/middleware/performance_alerting.ts +0 -540
  62. package/src/middleware/performance_dashboard.ts +0 -661
  63. package/src/middleware/performance_monitor.ts +0 -945
  64. package/src/middleware/pipeline.ts +0 -489
  65. package/src/middleware/rate_limit.ts +0 -251
  66. package/src/middleware/request_id.ts +0 -36
  67. package/src/middleware/request_signing.ts +0 -638
  68. package/src/middleware/request_tracer.ts +0 -653
  69. package/src/middleware/response_cache.ts +0 -778
  70. package/src/middleware/security.ts +0 -482
  71. package/src/middleware/security_suite.ts +0 -257
  72. package/src/middleware/session.ts +0 -91
  73. package/src/model-binding/index.ts +0 -18
  74. package/src/model-binding/model-middleware.ts +0 -425
  75. package/src/model-binding/model-registry.ts +0 -550
  76. package/src/model-binding.ts +0 -370
  77. package/src/model-resolver-factory.ts +0 -106
  78. package/src/observability/correlation.ts +0 -691
  79. package/src/observability/health-checks.ts +0 -729
  80. package/src/observability/index.ts +0 -184
  81. package/src/observability/integration.ts +0 -548
  82. package/src/observability/metrics.ts +0 -753
  83. package/src/observability/tracing.ts +0 -638
  84. package/src/optimization/bun-utilities.ts +0 -778
  85. package/src/query-builder-integration.ts +0 -137
  86. package/src/request/context.ts +0 -109
  87. package/src/request/enhanced-request.ts +0 -876
  88. package/src/request/macros.ts +0 -822
  89. package/src/response/macros.ts +0 -665
  90. package/src/response/response-factory.ts +0 -596
  91. package/src/router/api-routes.ts +0 -243
  92. package/src/router/file-based-routing.ts +0 -697
  93. package/src/router/file-streaming.ts +0 -383
  94. package/src/router/fluent-routing.ts +0 -866
  95. package/src/router/group-organization.ts +0 -229
  96. package/src/router/handler-resolver.ts +0 -327
  97. package/src/router/http-methods.ts +0 -407
  98. package/src/router/index.ts +0 -193
  99. package/src/router/middleware-groups.ts +0 -222
  100. package/src/router/middleware-integration.ts +0 -399
  101. package/src/router/middleware.ts +0 -234
  102. package/src/router/model-binding.ts +0 -215
  103. package/src/router/optimized-route-matching.ts +0 -302
  104. package/src/router/route-building.ts +0 -221
  105. package/src/router/route-compiler.ts +0 -691
  106. package/src/router/route-matching.ts +0 -368
  107. package/src/router/route-trie.ts +0 -450
  108. package/src/router/router.ts +0 -1616
  109. package/src/router/server.ts +0 -684
  110. package/src/router/validation-integration.ts +0 -449
  111. package/src/router/view-rendering.ts +0 -233
  112. package/src/router/websocket.ts +0 -100
  113. package/src/routing/route-caching.ts +0 -402
  114. package/src/routing/route-throttling.ts +0 -469
  115. package/src/routing/subdomain-routing.ts +0 -492
  116. package/src/session/database-store.ts +0 -109
  117. package/src/session/file-store.ts +0 -148
  118. package/src/session/index.ts +0 -244
  119. package/src/session/memory-store.ts +0 -88
  120. package/src/session/redis-store.ts +0 -93
  121. package/src/streaming/index.ts +0 -17
  122. package/src/streaming/sse-handler.ts +0 -482
  123. package/src/streaming/stream-handler.ts +0 -552
  124. package/src/testing/auth-testing.ts +0 -448
  125. package/src/testing/file-upload-testing.ts +0 -543
  126. package/src/testing/index.ts +0 -10
  127. package/src/testing/middleware-testing.ts +0 -322
  128. package/src/testing/model-binding-testing.ts +0 -645
  129. package/src/testing/performance-testing.ts +0 -738
  130. package/src/testing/test-client.ts +0 -310
  131. package/src/testing/test-request.ts +0 -315
  132. package/src/testing/test-response.ts +0 -332
  133. package/src/testing/types.ts +0 -224
  134. package/src/testing/websocket-testing.ts +0 -590
  135. package/src/types/controller-types.ts +0 -385
  136. package/src/types/core.ts +0 -683
  137. package/src/types/middleware-types.ts +0 -422
  138. package/src/types/request-response-augmentation.ts +0 -489
  139. package/src/types/route-inference.ts +0 -372
  140. package/src/types.ts +0 -2123
  141. package/src/url.ts +0 -131
  142. package/src/utils/index.ts +0 -1
  143. package/src/utils/query-preservation.ts +0 -201
  144. package/src/utils.ts +0 -395
  145. package/src/validation/validator.ts +0 -688
  146. package/src/websocket/clustering.ts +0 -769
@@ -1,137 +0,0 @@
1
- import type { Model, QueryBuilderModelResolver } from './model-binding'
2
-
3
- /**
4
- * Integration layer for bun-query-builder with model binding
5
- */
6
- export class QueryBuilderIntegration {
7
- private queryBuilder: any
8
- private resolvers = new Map<string, QueryBuilderModelResolver>()
9
-
10
- constructor(queryBuilder: any) {
11
- this.queryBuilder = queryBuilder
12
- }
13
-
14
- /**
15
- * Register a model resolver and inject the query builder
16
- */
17
- registerResolver<TModel extends Model>(
18
- name: string,
19
- resolver: QueryBuilderModelResolver<TModel>,
20
- ): void {
21
- // Inject the query builder instance
22
- resolver.queryBuilder = this.queryBuilder
23
- this.resolvers.set(name, resolver)
24
- }
25
-
26
- /**
27
- * Get a registered resolver
28
- */
29
- getResolver<TModel extends Model>(name: string): QueryBuilderModelResolver<TModel> | undefined {
30
- return this.resolvers.get(name) as QueryBuilderModelResolver<TModel> | undefined
31
- }
32
-
33
- /**
34
- * Resolve a model by name and ID
35
- */
36
- async resolveModel<TModel extends Model>(
37
- name: string,
38
- id: string | number,
39
- keyName?: string,
40
- context: Record<string, Model> = {},
41
- ): Promise<TModel | null> {
42
- const resolver = this.getResolver<TModel>(name)
43
- if (!resolver) {
44
- throw new Error(`No resolver registered for model: ${name}`)
45
- }
46
-
47
- // Apply constraints if available
48
- if (resolver.applyConstraints) {
49
- const query = this.queryBuilder
50
- .select()
51
- .from(resolver.table)
52
- .where(keyName || resolver.getRouteKeyName?.() || 'id', '=', id)
53
-
54
- const constrainedQuery = resolver.applyConstraints(query, context)
55
- return await constrainedQuery.first() || null
56
- }
57
-
58
- // Use the resolver's find method
59
- return await resolver.find(id, keyName)
60
- }
61
-
62
- /**
63
- * Resolve a model or throw an error
64
- */
65
- async resolveModelOrFail<TModel extends Model>(
66
- name: string,
67
- id: string | number,
68
- keyName?: string,
69
- context: Record<string, Model> = {},
70
- ): Promise<TModel> {
71
- const model = await this.resolveModel<TModel>(name, id, keyName, context)
72
- if (!model) {
73
- throw new Error(`${name} not found with ${keyName || 'id'}: ${id}`)
74
- }
75
- return model
76
- }
77
- }
78
-
79
- /**
80
- * Create a query builder integration instance
81
- */
82
- export function createQueryBuilderIntegration(queryBuilder: any): QueryBuilderIntegration {
83
- return new QueryBuilderIntegration(queryBuilder)
84
- }
85
-
86
- /**
87
- * Helper to create a basic model resolver using the query builder
88
- */
89
- export function createBasicResolver<TModel extends Model>(
90
- tableName: string,
91
- options: {
92
- keyName?: string
93
- transform?: (row: any) => TModel
94
- } = {},
95
- ): QueryBuilderModelResolver<TModel> {
96
- const { keyName = 'id', transform } = options
97
-
98
- return {
99
- table: tableName,
100
- queryBuilder: undefined, // Will be injected
101
-
102
- async find(id: string | number, searchKey = keyName): Promise<TModel | null> {
103
- if (!this.queryBuilder) {
104
- throw new Error(`Query builder not initialized for table: ${tableName}`)
105
- }
106
-
107
- try {
108
- const result = await this.queryBuilder
109
- .select()
110
- .from(this.table)
111
- .where(searchKey, '=', id)
112
- .first()
113
-
114
- if (!result)
115
- return null
116
-
117
- return transform ? transform(result) : result as TModel
118
- }
119
- catch (error) {
120
- console.error(`Error finding ${tableName}:`, error)
121
- return null
122
- }
123
- },
124
-
125
- async findOrFail(id: string | number, searchKey = keyName): Promise<TModel> {
126
- const model = await this.find(id, searchKey)
127
- if (!model) {
128
- throw new Error(`${tableName} not found with ${searchKey}: ${id}`)
129
- }
130
- return model
131
- },
132
-
133
- getRouteKeyName(): string {
134
- return keyName
135
- },
136
- }
137
- }
@@ -1,109 +0,0 @@
1
- /**
2
- * Request Context
3
- *
4
- * AsyncLocalStorage-backed access to the current request. The Router wires
5
- * `runWithRequest()` automatically around handler/middleware invocation and
6
- * calls `setCurrentRequest()` once the request has been enhanced with route
7
- * params. User code reaches the active request via `request()` or
8
- * `getCurrentRequest()` without having to thread it through call stacks.
9
- */
10
-
11
- import { AsyncLocalStorage } from 'node:async_hooks'
12
- import type { EnhancedRequest } from '../types'
13
-
14
- interface RequestContextStore {
15
- current: EnhancedRequest | null
16
- }
17
-
18
- const storage: AsyncLocalStorage<RequestContextStore> = new AsyncLocalStorage<RequestContextStore>()
19
-
20
- // AsyncLocalStorage.run costs roughly a microsecond per request — a large
21
- // share of total dispatch time — so it only runs once something actually
22
- // uses the context API. Until then a plain module variable tracks the
23
- // in-flight request: exact in the synchronous phase of a handler and for
24
- // non-overlapping requests, which covers the call that flips
25
- // `contextEnabled`. Every request that starts after the first use gets
26
- // full ALS isolation. Apps that need guaranteed isolation from the very
27
- // first request under concurrency can call `enableRequestContext()` at
28
- // startup.
29
- let contextEnabled = false
30
- let syncCurrent: EnhancedRequest | null = null
31
-
32
- /**
33
- * Force AsyncLocalStorage-backed request context on for all subsequent
34
- * requests. Calling `request()`/`getCurrentRequest()` enables it
35
- * automatically — use this when the very first request must already be
36
- * fully isolated under concurrent load.
37
- */
38
- export function enableRequestContext(): void {
39
- contextEnabled = true
40
- }
41
-
42
- /**
43
- * Run `fn` inside a request-context scope where `request()` and
44
- * `getCurrentRequest()` resolve to `initial`. The Router calls this around
45
- * each request automatically.
46
- */
47
- export function runWithRequest<T>(initial: EnhancedRequest | Request, fn: () => T | Promise<T>): T | Promise<T> {
48
- if (!contextEnabled) {
49
- syncCurrent = initial as EnhancedRequest
50
- const result = fn()
51
- if (result instanceof Promise) {
52
- return result.finally(() => {
53
- syncCurrent = null
54
- }) as Promise<T>
55
- }
56
- syncCurrent = null
57
- return result
58
- }
59
- return storage.run({ current: initial as EnhancedRequest }, fn)
60
- }
61
-
62
- /**
63
- * Update the request stored in the current context. The Router calls this
64
- * after enhancing the request with matched route params, so subsequent
65
- * `request()` calls see the enhanced object.
66
- */
67
- export function setCurrentRequest(req: EnhancedRequest): void {
68
- const store = storage.getStore()
69
- if (store) {
70
- store.current = req
71
- return
72
- }
73
- // Pre-enablement fallback: only refresh it while a request is in flight
74
- if (syncCurrent !== null) {
75
- syncCurrent = req
76
- }
77
- }
78
-
79
- /**
80
- * Returns the active request, or `undefined` when called outside a request
81
- * scope. Prefer `request()` when the request is required.
82
- *
83
- * First use switches the router to AsyncLocalStorage-backed context for
84
- * all subsequent requests; this call itself resolves via a synchronous
85
- * fallback (see `enableRequestContext` for eager opt-in).
86
- */
87
- export function getCurrentRequest(): EnhancedRequest | undefined {
88
- if (!contextEnabled) {
89
- contextEnabled = true
90
- return syncCurrent ?? undefined
91
- }
92
- return storage.getStore()?.current ?? syncCurrent ?? undefined
93
- }
94
-
95
- /**
96
- * Returns the active request. Throws when called outside a request scope —
97
- * typically that means it was called before the Router established context
98
- * (e.g. during module initialization) or inside a fire-and-forget callback
99
- * that escaped the AsyncLocalStorage frame.
100
- */
101
- export function request(): EnhancedRequest {
102
- const req = getCurrentRequest()
103
- if (!req) {
104
- throw new Error(
105
- 'request() called outside a request scope. It can only be invoked from within a route handler or middleware.',
106
- )
107
- }
108
- return req
109
- }