@stacksjs/bun-router 0.0.13 → 0.0.14
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/CHANGELOG.md +770 -0
- package/README.md +584 -261
- package/package.json +43 -47
- package/bin/cli.ts +0 -9
- package/dist/auth.d.ts +0 -134
- package/dist/cache/lru-cache.d.ts +0 -139
- package/dist/cache/middleware-memoization.d.ts +0 -151
- package/dist/cache/route-cache-warmer.d.ts +0 -161
- package/dist/cache/sqlite-cache.d.ts +0 -209
- package/dist/cache/streaming-cache.d.ts +0 -132
- package/dist/chunk-1mvtv6jw.js +0 -13012
- package/dist/cli/colors.d.ts +0 -15
- package/dist/cli/index.d.ts +0 -10
- package/dist/cli/middleware.d.ts +0 -31
- package/dist/cli/openapi.d.ts +0 -17
- package/dist/cli/router.d.ts +0 -15
- package/dist/cli/routes.d.ts +0 -29
- package/dist/cli/utils.d.ts +0 -74
- package/dist/cli.d.ts +0 -1
- package/dist/cli.js +0 -3195
- package/dist/config.d.ts +0 -7
- package/dist/container/container.d.ts +0 -273
- package/dist/container/contextual-binding.d.ts +0 -240
- package/dist/container/decorators.d.ts +0 -141
- package/dist/container/service-provider.d.ts +0 -285
- package/dist/development/hot-reload.d.ts +0 -187
- package/dist/development/index.d.ts +0 -167
- package/dist/development/performance-profiler.d.ts +0 -217
- package/dist/development/route-debugger.d.ts +0 -154
- package/dist/development/route-inspector.d.ts +0 -211
- package/dist/development/typescript-utilities.d.ts +0 -209
- package/dist/docs.d.ts +0 -11
- package/dist/errors/circuit-breaker.d.ts +0 -195
- package/dist/errors/error-handler.d.ts +0 -88
- package/dist/errors/error-reporting.d.ts +0 -144
- package/dist/errors/exceptions.d.ts +0 -184
- package/dist/errors/graceful-degradation.d.ts +0 -154
- package/dist/errors/index.d.ts +0 -9
- package/dist/errors/router-errors.d.ts +0 -110
- package/dist/file-serving/static-files.d.ts +0 -143
- package/dist/index.d.ts +0 -14
- package/dist/index.js +0 -13933
- package/dist/middleware/auth.d.ts +0 -63
- package/dist/middleware/content_security_policy.d.ts +0 -53
- package/dist/middleware/cors.d.ts +0 -5
- package/dist/middleware/csrf.d.ts +0 -7
- package/dist/middleware/ddos_protection.d.ts +0 -39
- package/dist/middleware/file_security.d.ts +0 -26
- package/dist/middleware/file_upload.d.ts +0 -38
- package/dist/middleware/helmet.d.ts +0 -54
- package/dist/middleware/index.d.ts +0 -44
- package/dist/middleware/input_validation.d.ts +0 -45
- package/dist/middleware/json_body.d.ts +0 -4
- package/dist/middleware/performance_alerting.d.ts +0 -87
- package/dist/middleware/performance_dashboard.d.ts +0 -87
- package/dist/middleware/performance_monitor.d.ts +0 -209
- package/dist/middleware/pipeline.d.ts +0 -131
- package/dist/middleware/rate_limit.d.ts +0 -36
- package/dist/middleware/request_id.d.ts +0 -4
- package/dist/middleware/request_signing.d.ts +0 -153
- package/dist/middleware/request_tracer.d.ts +0 -72
- package/dist/middleware/response_cache.d.ts +0 -97
- package/dist/middleware/security.d.ts +0 -69
- package/dist/middleware/security_suite.d.ts +0 -46
- package/dist/middleware/session.d.ts +0 -23
- package/dist/model-binding/index.d.ts +0 -2
- package/dist/model-binding/model-middleware.d.ts +0 -118
- package/dist/model-binding/model-registry.d.ts +0 -164
- package/dist/model-binding.d.ts +0 -185
- package/dist/model-resolver-factory.d.ts +0 -31
- package/dist/observability/correlation.d.ts +0 -187
- package/dist/observability/health-checks.d.ts +0 -186
- package/dist/observability/index.d.ts +0 -60
- package/dist/observability/integration.d.ts +0 -147
- package/dist/observability/metrics.d.ts +0 -184
- package/dist/observability/tracing.d.ts +0 -187
- package/dist/optimization/bun-utilities.d.ts +0 -224
- package/dist/query-builder-integration.d.ts +0 -36
- package/dist/request/context.d.ts +0 -34
- package/dist/request/enhanced-request.d.ts +0 -213
- package/dist/request/macros.d.ts +0 -300
- package/dist/response/macros.d.ts +0 -245
- package/dist/response/response-factory.d.ts +0 -133
- package/dist/router/api-routes.d.ts +0 -5
- package/dist/router/file-based-routing.d.ts +0 -118
- package/dist/router/file-streaming.d.ts +0 -5
- package/dist/router/fluent-router.d.ts +0 -315
- package/dist/router/fluent-routing.d.ts +0 -271
- package/dist/router/group-organization.d.ts +0 -5
- package/dist/router/handler-resolver.d.ts +0 -24
- package/dist/router/http-methods.d.ts +0 -10
- package/dist/router/index.d.ts +0 -114
- package/dist/router/middleware-groups.d.ts +0 -94
- package/dist/router/middleware-integration.d.ts +0 -112
- package/dist/router/middleware.d.ts +0 -5
- package/dist/router/model-binding.d.ts +0 -5
- package/dist/router/optimized-route-matching.d.ts +0 -6
- package/dist/router/route-building.d.ts +0 -5
- package/dist/router/route-compiler.d.ts +0 -153
- package/dist/router/route-matching.d.ts +0 -5
- package/dist/router/route-trie.d.ts +0 -114
- package/dist/router/router.d.ts +0 -294
- package/dist/router/server.d.ts +0 -5
- package/dist/router/validation-integration.d.ts +0 -170
- package/dist/router/view-rendering.d.ts +0 -5
- package/dist/router/websocket.d.ts +0 -5
- package/dist/routing/route-caching.d.ts +0 -129
- package/dist/routing/route-throttling.d.ts +0 -150
- package/dist/routing/subdomain-routing.d.ts +0 -206
- package/dist/session/database-store.d.ts +0 -51
- package/dist/session/file-store.d.ts +0 -22
- package/dist/session/index.d.ts +0 -106
- package/dist/session/memory-store.d.ts +0 -21
- package/dist/session/redis-store.d.ts +0 -31
- package/dist/streaming/index.d.ts +0 -3
- package/dist/streaming/sse-handler.d.ts +0 -138
- package/dist/streaming/stream-handler.d.ts +0 -114
- package/dist/testing/auth-testing.d.ts +0 -156
- package/dist/testing/file-upload-testing.d.ts +0 -190
- package/dist/testing/index.d.ts +0 -10
- package/dist/testing/middleware-testing.d.ts +0 -138
- package/dist/testing/model-binding-testing.d.ts +0 -186
- package/dist/testing/performance-testing.d.ts +0 -235
- package/dist/testing/test-client.d.ts +0 -117
- package/dist/testing/test-request.d.ts +0 -85
- package/dist/testing/test-response.d.ts +0 -90
- package/dist/testing/types.d.ts +0 -207
- package/dist/testing/websocket-testing.d.ts +0 -227
- package/dist/types/controller-types.d.ts +0 -208
- package/dist/types/core.d.ts +0 -543
- package/dist/types/middleware-types.d.ts +0 -227
- package/dist/types/request-response-augmentation.d.ts +0 -261
- package/dist/types/route-inference.d.ts +0 -168
- package/dist/types.d.ts +0 -1782
- package/dist/url.d.ts +0 -56
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/query-preservation.d.ts +0 -48
- package/dist/utils.d.ts +0 -69
- package/dist/validation/validator.d.ts +0 -140
- package/dist/websocket/clustering.d.ts +0 -185
- package/src/auth.ts +0 -469
- package/src/cache/lru-cache.ts +0 -457
- package/src/cache/middleware-memoization.ts +0 -531
- package/src/cache/route-cache-warmer.ts +0 -486
- package/src/cache/sqlite-cache.ts +0 -783
- package/src/cache/streaming-cache.ts +0 -572
- package/src/cli/colors.ts +0 -29
- package/src/cli/index.ts +0 -287
- package/src/cli/middleware.ts +0 -291
- package/src/cli/openapi.ts +0 -407
- package/src/cli/router.ts +0 -188
- package/src/cli/routes.ts +0 -265
- package/src/cli/utils.ts +0 -531
- package/src/cli.ts +0 -5
- package/src/config.ts +0 -322
- package/src/container/container.ts +0 -740
- package/src/container/contextual-binding.ts +0 -603
- package/src/container/decorators.ts +0 -359
- package/src/container/service-provider.ts +0 -596
- package/src/development/hot-reload.ts +0 -673
- package/src/development/index.ts +0 -499
- package/src/development/performance-profiler.ts +0 -717
- package/src/development/route-debugger.ts +0 -527
- package/src/development/route-inspector.ts +0 -749
- package/src/development/typescript-utilities.ts +0 -682
- package/src/docs.ts +0 -397
- package/src/errors/circuit-breaker.ts +0 -732
- package/src/errors/error-handler.ts +0 -569
- package/src/errors/error-reporting.ts +0 -672
- package/src/errors/exceptions.ts +0 -536
- package/src/errors/graceful-degradation.ts +0 -621
- package/src/errors/index.ts +0 -21
- package/src/errors/router-errors.ts +0 -632
- package/src/file-serving/static-files.ts +0 -581
- package/src/index.ts +0 -14
- package/src/middleware/auth.ts +0 -219
- package/src/middleware/content_security_policy.ts +0 -215
- package/src/middleware/cors.ts +0 -74
- package/src/middleware/csrf.ts +0 -108
- package/src/middleware/ddos_protection.ts +0 -255
- package/src/middleware/file_security.ts +0 -191
- package/src/middleware/file_upload.ts +0 -264
- package/src/middleware/helmet.ts +0 -268
- package/src/middleware/index.ts +0 -117
- package/src/middleware/input_validation.ts +0 -449
- package/src/middleware/json_body.ts +0 -37
- package/src/middleware/performance_alerting.ts +0 -538
- package/src/middleware/performance_dashboard.ts +0 -661
- package/src/middleware/performance_monitor.ts +0 -943
- package/src/middleware/pipeline.ts +0 -489
- package/src/middleware/rate_limit.ts +0 -245
- package/src/middleware/request_id.ts +0 -36
- package/src/middleware/request_signing.ts +0 -636
- package/src/middleware/request_tracer.ts +0 -636
- package/src/middleware/response_cache.ts +0 -743
- package/src/middleware/security.ts +0 -482
- package/src/middleware/security_suite.ts +0 -257
- package/src/middleware/session.ts +0 -91
- package/src/model-binding/index.ts +0 -18
- package/src/model-binding/model-middleware.ts +0 -425
- package/src/model-binding/model-registry.ts +0 -550
- package/src/model-binding.ts +0 -370
- package/src/model-resolver-factory.ts +0 -106
- package/src/observability/correlation.ts +0 -691
- package/src/observability/health-checks.ts +0 -729
- package/src/observability/index.ts +0 -184
- package/src/observability/integration.ts +0 -548
- package/src/observability/metrics.ts +0 -753
- package/src/observability/tracing.ts +0 -638
- package/src/optimization/bun-utilities.ts +0 -778
- package/src/query-builder-integration.ts +0 -137
- package/src/request/context.ts +0 -62
- package/src/request/enhanced-request.ts +0 -857
- package/src/request/macros.ts +0 -688
- package/src/response/macros.ts +0 -612
- package/src/response/response-factory.ts +0 -596
- package/src/router/api-routes.ts +0 -243
- package/src/router/file-based-routing.ts +0 -670
- package/src/router/file-streaming.ts +0 -372
- package/src/router/fluent-router.ts +0 -927
- package/src/router/fluent-routing.ts +0 -797
- package/src/router/group-organization.ts +0 -213
- package/src/router/handler-resolver.ts +0 -291
- package/src/router/http-methods.ts +0 -377
- package/src/router/index.ts +0 -187
- package/src/router/middleware-groups.ts +0 -222
- package/src/router/middleware-integration.ts +0 -399
- package/src/router/middleware.ts +0 -231
- package/src/router/model-binding.ts +0 -215
- package/src/router/optimized-route-matching.ts +0 -253
- package/src/router/route-building.ts +0 -212
- package/src/router/route-compiler.ts +0 -702
- package/src/router/route-matching.ts +0 -349
- package/src/router/route-trie.ts +0 -464
- package/src/router/router.ts +0 -1581
- package/src/router/server.ts +0 -462
- package/src/router/validation-integration.ts +0 -443
- package/src/router/view-rendering.ts +0 -233
- package/src/router/websocket.ts +0 -100
- package/src/routing/route-caching.ts +0 -402
- package/src/routing/route-throttling.ts +0 -469
- package/src/routing/subdomain-routing.ts +0 -492
- package/src/session/database-store.ts +0 -109
- package/src/session/file-store.ts +0 -148
- package/src/session/index.ts +0 -244
- package/src/session/memory-store.ts +0 -88
- package/src/session/redis-store.ts +0 -93
- package/src/streaming/index.ts +0 -17
- package/src/streaming/sse-handler.ts +0 -482
- package/src/streaming/stream-handler.ts +0 -552
- package/src/testing/auth-testing.ts +0 -446
- package/src/testing/file-upload-testing.ts +0 -543
- package/src/testing/index.ts +0 -10
- package/src/testing/middleware-testing.ts +0 -322
- package/src/testing/model-binding-testing.ts +0 -645
- package/src/testing/performance-testing.ts +0 -738
- package/src/testing/test-client.ts +0 -310
- package/src/testing/test-request.ts +0 -315
- package/src/testing/test-response.ts +0 -332
- package/src/testing/types.ts +0 -224
- package/src/testing/websocket-testing.ts +0 -590
- package/src/types/controller-types.ts +0 -385
- package/src/types/core.ts +0 -683
- package/src/types/middleware-types.ts +0 -419
- package/src/types/request-response-augmentation.ts +0 -489
- package/src/types/route-inference.ts +0 -357
- package/src/types.ts +0 -2055
- package/src/url.ts +0 -126
- package/src/utils/index.ts +0 -1
- package/src/utils/query-preservation.ts +0 -201
- package/src/utils.ts +0 -327
- package/src/validation/validator.ts +0 -685
- package/src/websocket/clustering.ts +0 -762
|
@@ -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
|
-
}
|
package/src/request/context.ts
DELETED
|
@@ -1,62 +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
|
-
/**
|
|
21
|
-
* Run `fn` inside an AsyncLocalStorage scope where `request()` and
|
|
22
|
-
* `getCurrentRequest()` resolve to `initial`. The Router calls this around
|
|
23
|
-
* each request automatically.
|
|
24
|
-
*/
|
|
25
|
-
export function runWithRequest<T>(initial: EnhancedRequest | Request, fn: () => T | Promise<T>): T | Promise<T> {
|
|
26
|
-
return storage.run({ current: initial as EnhancedRequest }, fn)
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Update the request stored in the current context. The Router calls this
|
|
31
|
-
* after enhancing the request with matched route params, so subsequent
|
|
32
|
-
* `request()` calls see the enhanced object.
|
|
33
|
-
*/
|
|
34
|
-
export function setCurrentRequest(req: EnhancedRequest): void {
|
|
35
|
-
const store = storage.getStore()
|
|
36
|
-
if (store)
|
|
37
|
-
store.current = req
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Returns the active request, or `undefined` when called outside a request
|
|
42
|
-
* scope. Prefer `request()` when the request is required.
|
|
43
|
-
*/
|
|
44
|
-
export function getCurrentRequest(): EnhancedRequest | undefined {
|
|
45
|
-
return storage.getStore()?.current ?? undefined
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Returns the active request. Throws when called outside a request scope —
|
|
50
|
-
* typically that means it was called before the Router established context
|
|
51
|
-
* (e.g. during module initialization) or inside a fire-and-forget callback
|
|
52
|
-
* that escaped the AsyncLocalStorage frame.
|
|
53
|
-
*/
|
|
54
|
-
export function request(): EnhancedRequest {
|
|
55
|
-
const req = getCurrentRequest()
|
|
56
|
-
if (!req) {
|
|
57
|
-
throw new Error(
|
|
58
|
-
'request() called outside a request scope. It can only be invoked from within a route handler or middleware.',
|
|
59
|
-
)
|
|
60
|
-
}
|
|
61
|
-
return req
|
|
62
|
-
}
|