@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
package/src/cli/routes.ts
DELETED
|
@@ -1,265 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs/promises'
|
|
2
|
-
import path from 'node:path'
|
|
3
|
-
import process from 'node:process'
|
|
4
|
-
import { chalk } from './colors'
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Options for the route:list command
|
|
8
|
-
*/
|
|
9
|
-
export interface RouteListOptions {
|
|
10
|
-
verbose?: boolean
|
|
11
|
-
extraVerbose?: boolean
|
|
12
|
-
path?: string
|
|
13
|
-
exceptVendor?: boolean
|
|
14
|
-
onlyVendor?: boolean
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Options for the route:types command
|
|
19
|
-
*/
|
|
20
|
-
export interface GenerateRouteTypesOptions {
|
|
21
|
-
output?: string
|
|
22
|
-
watch?: boolean
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Display all registered routes in a formatted table
|
|
27
|
-
*/
|
|
28
|
-
export async function displayRoutes(options: RouteListOptions): Promise<void> {
|
|
29
|
-
try {
|
|
30
|
-
// Try to load router instance from the application
|
|
31
|
-
const routesFile = `${process.cwd()}/routes/index.ts`
|
|
32
|
-
const { router } = await import(routesFile)
|
|
33
|
-
|
|
34
|
-
if (!router) {
|
|
35
|
-
console.error(chalk.red(`Could not find router instance in ${routesFile}.`))
|
|
36
|
-
process.exit(1)
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// Get routes from router
|
|
40
|
-
const routes = (router as any).routes || []
|
|
41
|
-
|
|
42
|
-
if (routes.length === 0) {
|
|
43
|
-
console.log(chalk.yellow('No routes defined.'))
|
|
44
|
-
return
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// Filter routes based on options
|
|
48
|
-
let filteredRoutes = routes
|
|
49
|
-
|
|
50
|
-
if (options.path) {
|
|
51
|
-
filteredRoutes = filteredRoutes.filter((route: any) =>
|
|
52
|
-
route.path.startsWith(options.path),
|
|
53
|
-
)
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// Display route table
|
|
57
|
-
console.log(chalk.bold('\nRoutes:'))
|
|
58
|
-
console.log(chalk.dim('+-----------------+-------------------------+------------------+----------------+'))
|
|
59
|
-
console.log(chalk.dim('| ') + chalk.bold('Method') + chalk.dim(' | ') + chalk.bold('URI') + chalk.dim(' | ') + chalk.bold('Name') + chalk.dim(' | ') + chalk.bold('Handler') + chalk.dim(' |'))
|
|
60
|
-
console.log(chalk.dim('+-----------------+-------------------------+------------------+----------------+'))
|
|
61
|
-
|
|
62
|
-
filteredRoutes.forEach((route: any) => {
|
|
63
|
-
const method = padString(route.method, 15)
|
|
64
|
-
const path = padString(route.path, 23)
|
|
65
|
-
const name = padString(route.name || '', 16)
|
|
66
|
-
|
|
67
|
-
let handler: string
|
|
68
|
-
if (typeof route.handler === 'string') {
|
|
69
|
-
handler = route.handler
|
|
70
|
-
}
|
|
71
|
-
else if (typeof route.handler === 'function') {
|
|
72
|
-
handler = route.handler.name ? `${route.handler.name}()` : 'Anonymous Function'
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
handler = 'Class Handler'
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
handler = padString(handler, 14)
|
|
79
|
-
|
|
80
|
-
console.log(chalk.dim('| ')
|
|
81
|
-
+ getMethodColor(route.method)(method) + chalk.dim(' | ')
|
|
82
|
-
+ chalk.green(path) + chalk.dim(' | ')
|
|
83
|
-
+ chalk.yellow(name) + chalk.dim(' | ')
|
|
84
|
-
+ chalk.blue(handler) + chalk.dim(' |'))
|
|
85
|
-
|
|
86
|
-
// Show middleware if verbose flag is set
|
|
87
|
-
if (options.verbose && route.middleware && route.middleware.length > 0) {
|
|
88
|
-
console.log(chalk.dim('| | ') + chalk.dim('Middleware: ')
|
|
89
|
-
+ route.middleware.map((m: any) => typeof m === 'string' ? m : m.name || 'Anonymous').join(', ')
|
|
90
|
-
+ chalk.dim(' |'))
|
|
91
|
-
}
|
|
92
|
-
})
|
|
93
|
-
|
|
94
|
-
console.log(chalk.dim('+-----------------+-------------------------+------------------+----------------+'))
|
|
95
|
-
console.log(`\nShowing ${filteredRoutes.length} routes`)
|
|
96
|
-
}
|
|
97
|
-
catch (error: any) {
|
|
98
|
-
console.error(chalk.red(`Error: ${error.message}`))
|
|
99
|
-
console.error(chalk.yellow(`Make sure your routes are defined in ${process.cwd()}/routes/index.ts and export a 'router' instance.`))
|
|
100
|
-
throw error
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Generate TypeScript types for route names
|
|
106
|
-
*/
|
|
107
|
-
export async function generateRouteTypes(outputPath: string): Promise<void> {
|
|
108
|
-
try {
|
|
109
|
-
// Try to load router instance from the application
|
|
110
|
-
const routesFile = `${process.cwd()}/routes/index.ts`
|
|
111
|
-
const { router } = await import(routesFile)
|
|
112
|
-
|
|
113
|
-
if (!router) {
|
|
114
|
-
console.error(chalk.red(`Could not find router instance in ${routesFile}.`))
|
|
115
|
-
process.exit(1)
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// Get routes from router
|
|
119
|
-
const routes = (router as any).routes || []
|
|
120
|
-
|
|
121
|
-
if (routes.length === 0) {
|
|
122
|
-
console.log(chalk.yellow('No routes defined. Creating empty types file.'))
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
// Collect named routes or generate names for unnamed routes
|
|
126
|
-
const routeNames = routes.map((route: any) => {
|
|
127
|
-
// If route has a name, use it
|
|
128
|
-
if (route.name)
|
|
129
|
-
return route.name
|
|
130
|
-
|
|
131
|
-
// Otherwise generate a name based on method and path
|
|
132
|
-
const methodLower = route.method.toLowerCase()
|
|
133
|
-
const pathFormatted = route.path
|
|
134
|
-
.replace(/^\//, '') // Remove leading slash
|
|
135
|
-
.replace(/\//g, '.') // Replace other slashes with dots
|
|
136
|
-
.replace(/\{([^}]+)\}/g, ':$1') // Replace {param} with :param
|
|
137
|
-
|
|
138
|
-
return pathFormatted ? `${methodLower}.${pathFormatted}` : methodLower
|
|
139
|
-
})
|
|
140
|
-
|
|
141
|
-
// Remove duplicates
|
|
142
|
-
const uniqueRouteNames = [...new Set(routeNames)]
|
|
143
|
-
|
|
144
|
-
// Generate type definition
|
|
145
|
-
const typeContent = `/**
|
|
146
|
-
* This file is auto-generated.
|
|
147
|
-
* DO NOT EDIT THIS FILE DIRECTLY.
|
|
148
|
-
* To update, run 'bun router route:types'
|
|
149
|
-
*/
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* String literal type for all available route names
|
|
153
|
-
*/
|
|
154
|
-
export type RouteName = ${uniqueRouteNames.length > 0
|
|
155
|
-
? uniqueRouteNames.map(name => `'${name}'`).join(' | ')
|
|
156
|
-
: 'string'}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Object type with route names as keys and string (for path generation) as values
|
|
160
|
-
*/
|
|
161
|
-
export interface RouteNameMap {
|
|
162
|
-
${uniqueRouteNames.map(name => ` '${name}': string`).join('\n')}
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* Type-safe function to generate a URL for a named route
|
|
167
|
-
*/
|
|
168
|
-
export type RouteFunction = <T extends RouteName>(name: T, params?: Record<string, string>) => string
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Validate that a string is a valid route name
|
|
172
|
-
*/
|
|
173
|
-
export function isValidRouteName(name: string): name is RouteName {
|
|
174
|
-
return [${uniqueRouteNames.map(name => `'${name}'`).join(', ')}].includes(name)
|
|
175
|
-
}
|
|
176
|
-
`
|
|
177
|
-
|
|
178
|
-
// Write to file
|
|
179
|
-
await fs.writeFile(outputPath, typeContent)
|
|
180
|
-
console.log(chalk.green(`✨ Route types generated at ${outputPath}`))
|
|
181
|
-
}
|
|
182
|
-
catch (error: any) {
|
|
183
|
-
if (error.code === 'ERR_MODULE_NOT_FOUND') {
|
|
184
|
-
console.error(chalk.red(`Routes file not found at ${process.cwd()}/routes/index.ts`))
|
|
185
|
-
console.error(chalk.yellow('Make sure your routes are defined and exported as "router" in routes/index.ts'))
|
|
186
|
-
}
|
|
187
|
-
else {
|
|
188
|
-
console.error(chalk.red(`Error generating route types: ${error.message}`))
|
|
189
|
-
}
|
|
190
|
-
throw error
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* Watch for changes in the routes directory and regenerate types
|
|
196
|
-
*/
|
|
197
|
-
export async function watchRoutesDirectory(outputPath: string): Promise<void> {
|
|
198
|
-
const routesPath = path.join(process.cwd(), 'routes')
|
|
199
|
-
|
|
200
|
-
// Check if routes directory exists
|
|
201
|
-
try {
|
|
202
|
-
await fs.access(routesPath)
|
|
203
|
-
}
|
|
204
|
-
catch {
|
|
205
|
-
console.error(chalk.red(`Routes directory not found at ${routesPath}`))
|
|
206
|
-
process.exit(1)
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
// Initial generation
|
|
210
|
-
await generateRouteTypes(outputPath)
|
|
211
|
-
console.log(chalk.green(`✨ Route types generated at ${outputPath}`))
|
|
212
|
-
console.log(chalk.blue(`Watching for changes in ${routesPath}...`))
|
|
213
|
-
|
|
214
|
-
// Setup file watcher
|
|
215
|
-
let timeoutId: ReturnType<typeof setTimeout> | null = null
|
|
216
|
-
const watcher = fs.watch(routesPath, { recursive: true })
|
|
217
|
-
|
|
218
|
-
for await (const _event of watcher) {
|
|
219
|
-
// Debounce to avoid multiple regenerations when multiple files change
|
|
220
|
-
if (timeoutId) {
|
|
221
|
-
clearTimeout(timeoutId)
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
timeoutId = setTimeout(async () => {
|
|
225
|
-
console.log(chalk.yellow(`Changes detected in routes directory. Regenerating types...`))
|
|
226
|
-
try {
|
|
227
|
-
await generateRouteTypes(outputPath)
|
|
228
|
-
console.log(chalk.green(`✨ Route types regenerated at ${outputPath}`))
|
|
229
|
-
}
|
|
230
|
-
catch (error: any) {
|
|
231
|
-
console.error(chalk.red(`Error regenerating types: ${error.message}`))
|
|
232
|
-
}
|
|
233
|
-
timeoutId = null
|
|
234
|
-
}, 500)
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
/**
|
|
239
|
-
* Pad a string to a specific length
|
|
240
|
-
*/
|
|
241
|
-
function padString(str: string, length: number): string {
|
|
242
|
-
return (str + ' '.repeat(length)).substring(0, length)
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
/**
|
|
246
|
-
* Get the appropriate color for an HTTP method
|
|
247
|
-
*/
|
|
248
|
-
function getMethodColor(method: string) {
|
|
249
|
-
switch (method.toUpperCase()) {
|
|
250
|
-
case 'GET':
|
|
251
|
-
return chalk.cyan
|
|
252
|
-
case 'POST':
|
|
253
|
-
return chalk.green
|
|
254
|
-
case 'PUT':
|
|
255
|
-
return chalk.yellow
|
|
256
|
-
case 'PATCH':
|
|
257
|
-
return chalk.yellow
|
|
258
|
-
case 'DELETE':
|
|
259
|
-
return chalk.red
|
|
260
|
-
case 'OPTIONS':
|
|
261
|
-
return chalk.gray
|
|
262
|
-
default:
|
|
263
|
-
return chalk.white
|
|
264
|
-
}
|
|
265
|
-
}
|