@stacksjs/bun-router 0.0.2 → 0.0.4
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/{chunk-r15a48wc.js → chunk-cjdekj87.js} +536 -98
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +2 -2
- package/dist/index.d.ts +3 -1
- package/dist/index.js +454 -119
- package/package.json +7 -9
- package/dist/auth.d.ts +0 -77
- package/dist/cache/lru-cache.d.ts +0 -88
- package/dist/cache/middleware-memoization.d.ts +0 -101
- package/dist/cache/route-cache-warmer.d.ts +0 -125
- package/dist/cache/sqlite-cache.d.ts +0 -114
- package/dist/cache/streaming-cache.d.ts +0 -86
- package/dist/cli/colors.d.ts +0 -12
- 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 -30
- package/dist/cli/utils.d.ts +0 -68
- package/dist/config.d.ts +0 -274
- package/dist/container/container.d.ts +0 -141
- package/dist/container/contextual-binding.d.ts +0 -112
- package/dist/container/decorators.d.ts +0 -114
- package/dist/container/service-provider.d.ts +0 -221
- package/dist/development/hot-reload.d.ts +0 -129
- package/dist/development/index.d.ts +0 -144
- package/dist/development/performance-profiler.d.ts +0 -152
- package/dist/development/route-debugger.d.ts +0 -102
- package/dist/development/route-inspector.d.ts +0 -142
- package/dist/development/typescript-utilities.d.ts +0 -116
- package/dist/docs.d.ts +0 -10
- package/dist/errors/circuit-breaker.d.ts +0 -138
- package/dist/errors/error-handler.d.ts +0 -57
- package/dist/errors/error-reporting.d.ts +0 -135
- package/dist/errors/exceptions.d.ts +0 -178
- package/dist/errors/graceful-degradation.d.ts +0 -130
- package/dist/errors/index.d.ts +0 -6
- package/dist/errors/router-errors.d.ts +0 -97
- package/dist/file-serving/static-files.d.ts +0 -98
- package/dist/middleware/auth.d.ts +0 -34
- package/dist/middleware/content_security_policy.d.ts +0 -54
- package/dist/middleware/cors.d.ts +0 -5
- package/dist/middleware/csrf.d.ts +0 -7
- package/dist/middleware/ddos_protection.d.ts +0 -47
- package/dist/middleware/file_security.d.ts +0 -23
- package/dist/middleware/file_upload.d.ts +0 -41
- package/dist/middleware/helmet.d.ts +0 -54
- package/dist/middleware/index.d.ts +0 -55
- package/dist/middleware/input_validation.d.ts +0 -46
- package/dist/middleware/json_body.d.ts +0 -4
- package/dist/middleware/performance_alerting.d.ts +0 -88
- package/dist/middleware/performance_dashboard.d.ts +0 -97
- package/dist/middleware/performance_monitor.d.ts +0 -236
- package/dist/middleware/pipeline.d.ts +0 -90
- package/dist/middleware/rate_limit.d.ts +0 -33
- package/dist/middleware/request_id.d.ts +0 -4
- package/dist/middleware/request_signing.d.ts +0 -96
- package/dist/middleware/request_tracer.d.ts +0 -76
- package/dist/middleware/response_cache.d.ts +0 -90
- package/dist/middleware/security.d.ts +0 -70
- package/dist/middleware/security_suite.d.ts +0 -46
- package/dist/middleware/session.d.ts +0 -7
- package/dist/model-binding/index.d.ts +0 -17
- package/dist/model-binding/model-middleware.d.ts +0 -80
- package/dist/model-binding/model-registry.d.ts +0 -125
- package/dist/model-binding.d.ts +0 -123
- package/dist/model-resolver-factory.d.ts +0 -31
- package/dist/observability/correlation.d.ts +0 -131
- package/dist/observability/health-checks.d.ts +0 -129
- package/dist/observability/index.d.ts +0 -92
- package/dist/observability/integration.d.ts +0 -112
- package/dist/observability/metrics.d.ts +0 -135
- package/dist/observability/tracing.d.ts +0 -112
- package/dist/optimization/bun-utilities.d.ts +0 -106
- package/dist/query-builder-integration.d.ts +0 -24
- package/dist/request/enhanced-request.d.ts +0 -143
- package/dist/request/macros.d.ts +0 -267
- package/dist/response/macros.d.ts +0 -207
- package/dist/response/response-factory.d.ts +0 -93
- package/dist/router/file-based-routing.d.ts +0 -40
- package/dist/router/file-streaming.d.ts +0 -6
- package/dist/router/fluent-router.d.ts +0 -179
- package/dist/router/fluent-routing.d.ts +0 -198
- package/dist/router/group-organization.d.ts +0 -5
- package/dist/router/handler-resolver.d.ts +0 -13
- package/dist/router/http-methods.d.ts +0 -10
- package/dist/router/index.d.ts +0 -114
- package/dist/router/middleware-integration.d.ts +0 -86
- package/dist/router/middleware.d.ts +0 -5
- package/dist/router/model-binding.d.ts +0 -7
- 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 -67
- package/dist/router/route-matching.d.ts +0 -5
- package/dist/router/route-trie.d.ts +0 -69
- package/dist/router/router.d.ts +0 -133
- package/dist/router/server.d.ts +0 -5
- package/dist/router/validation-integration.d.ts +0 -116
- 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 -105
- package/dist/routing/route-throttling.d.ts +0 -112
- package/dist/routing/subdomain-routing.d.ts +0 -159
- package/dist/streaming/index.d.ts +0 -15
- package/dist/streaming/sse-handler.d.ts +0 -81
- package/dist/streaming/stream-handler.d.ts +0 -81
- package/dist/testing/auth-testing.d.ts +0 -107
- package/dist/testing/file-upload-testing.d.ts +0 -139
- package/dist/testing/index.d.ts +0 -10
- package/dist/testing/middleware-testing.d.ts +0 -99
- package/dist/testing/model-binding-testing.d.ts +0 -132
- package/dist/testing/performance-testing.d.ts +0 -202
- package/dist/testing/test-client.d.ts +0 -58
- package/dist/testing/test-request.d.ts +0 -43
- package/dist/testing/test-response.d.ts +0 -45
- package/dist/testing/types.d.ts +0 -206
- package/dist/testing/websocket-testing.d.ts +0 -170
- package/dist/types/controller-types.d.ts +0 -303
- package/dist/types/core.d.ts +0 -526
- package/dist/types/middleware-types.d.ts +0 -315
- package/dist/types/request-response-augmentation.d.ts +0 -373
- package/dist/types/route-inference.d.ts +0 -287
- package/dist/types.d.ts +0 -1620
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/query-preservation.d.ts +0 -31
- package/dist/utils.d.ts +0 -69
- package/dist/validation/validator.d.ts +0 -169
- package/dist/websocket/clustering.d.ts +0 -114
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
// Typed request interface
|
|
2
|
-
export declare interface TypedRequest<TPath extends string = string, TQuery extends Record<string, any> = Record<string, never>, TBody = unknown, TContext = Record<string, never>> extends Omit<Request, 'body'> {
|
|
3
|
-
params: ExtractTypedParams<TPath>
|
|
4
|
-
query: ExtractQueryParams<TQuery>
|
|
5
|
-
body: TBody
|
|
6
|
-
context: TContext
|
|
7
|
-
}
|
|
8
|
-
// Route definition with type inference
|
|
9
|
-
export declare interface TypedRoute<TPath extends string, TQuery extends Record<string, any> = Record<string, never>, TBody = unknown, TContext = Record<string, never>> {
|
|
10
|
-
method: RouteMethod
|
|
11
|
-
path: ValidateRoutePattern<TPath>
|
|
12
|
-
handler: RouteHandler<TPath, TQuery, TBody, TContext>
|
|
13
|
-
middleware?: TypedMiddleware<any, any, any, TContext>[]
|
|
14
|
-
schema?: {
|
|
15
|
-
params?: RouteParamSchema<ExtractTypedParams<TPath>>
|
|
16
|
-
query?: TQuery
|
|
17
|
-
body?: BodySchema<TBody>
|
|
18
|
-
response?: ResponseSchema
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
// Body schema types
|
|
22
|
-
export declare interface BodySchema<T = unknown> {
|
|
23
|
-
type: 'json' | 'form' | 'text' | 'buffer' | 'stream'
|
|
24
|
-
schema?: T extends object ? {
|
|
25
|
-
[K in keyof T]: {
|
|
26
|
-
type: T[K] extends string ? 'string' :
|
|
27
|
-
T[K] extends number ? 'number' :
|
|
28
|
-
T[K] extends boolean ? 'boolean' :
|
|
29
|
-
T[K] extends Date ? 'date' :
|
|
30
|
-
T[K] extends Array<infer _U> ? 'array' : 'object'
|
|
31
|
-
required?: boolean
|
|
32
|
-
items?: T[K] extends Array<infer _U> ? BodySchema<_U> : never
|
|
33
|
-
properties?: T[K] extends object ? BodySchema<T[K]> : never
|
|
34
|
-
}
|
|
35
|
-
} : never
|
|
36
|
-
required?: (keyof T)[]
|
|
37
|
-
additionalProperties?: boolean
|
|
38
|
-
}
|
|
39
|
-
// Response schema types
|
|
40
|
-
export declare interface ResponseSchema {
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
// Route group types
|
|
44
|
-
export declare interface RouteGroup<TPrefix extends string = '', TContext = object> {
|
|
45
|
-
prefix: TPrefix
|
|
46
|
-
middleware?: TypedMiddleware<any, any, any, TContext>[]
|
|
47
|
-
routes: TypedRoute<any, any, any, TContext>[]
|
|
48
|
-
}
|
|
49
|
-
// Middleware type (forward declaration - will be defined in middleware types)
|
|
50
|
-
export declare interface TypedMiddleware<TRequest = any, TResponse = any, TNext = any, _TContext = Record<string, never>> {
|
|
51
|
-
(request: TRequest, next: TNext): Promise<TResponse> | TResponse
|
|
52
|
-
}
|
|
53
|
-
// Route builder helper types
|
|
54
|
-
export declare interface RouteBuilder<TContext = object> {
|
|
55
|
-
get: <TPath extends string, TQuery extends Record<string, any> = object>(
|
|
56
|
-
path: ValidateRoutePattern<TPath>,
|
|
57
|
-
handler: RouteHandler<TPath, TQuery, never, TContext>
|
|
58
|
-
) => TypedRoute<TPath, TQuery, never, TContext>
|
|
59
|
-
post: <TPath extends string, TQuery extends Record<string, any> = object, TBody = unknown>(
|
|
60
|
-
path: ValidateRoutePattern<TPath>,
|
|
61
|
-
handler: RouteHandler<TPath, TQuery, TBody, TContext>
|
|
62
|
-
) => TypedRoute<TPath, TQuery, TBody, TContext>
|
|
63
|
-
put: <TPath extends string, TQuery extends Record<string, any> = object, TBody = unknown>(
|
|
64
|
-
path: ValidateRoutePattern<TPath>,
|
|
65
|
-
handler: RouteHandler<TPath, TQuery, TBody, TContext>
|
|
66
|
-
) => TypedRoute<TPath, TQuery, TBody, TContext>
|
|
67
|
-
patch: <TPath extends string, TQuery extends Record<string, any> = object, TBody = unknown>(
|
|
68
|
-
path: ValidateRoutePattern<TPath>,
|
|
69
|
-
handler: RouteHandler<TPath, TQuery, TBody, TContext>
|
|
70
|
-
) => TypedRoute<TPath, TQuery, TBody, TContext>
|
|
71
|
-
delete: <TPath extends string, TQuery extends Record<string, any> = object>(
|
|
72
|
-
path: ValidateRoutePattern<TPath>,
|
|
73
|
-
handler: RouteHandler<TPath, TQuery, never, TContext>
|
|
74
|
-
) => TypedRoute<TPath, TQuery, never, TContext>
|
|
75
|
-
}
|
|
76
|
-
// Type-safe route registration
|
|
77
|
-
export declare interface TypeSafeRouter<TContext = object> {
|
|
78
|
-
register: <TPath extends string, TQuery extends Record<string, any> = object, TBody = unknown>(
|
|
79
|
-
route: TypedRoute<TPath, TQuery, TBody, TContext>
|
|
80
|
-
) => void
|
|
81
|
-
group: <TPrefix extends string>(
|
|
82
|
-
prefix: TPrefix,
|
|
83
|
-
configure: (builder: RouteBuilder<TContext>) => void
|
|
84
|
-
) => RouteGroup<TPrefix, TContext>
|
|
85
|
-
use: <TNewContext>(
|
|
86
|
-
middleware: TypedMiddleware<any, any, any, TNewContext>
|
|
87
|
-
) => TypeSafeRouter<TContext & TNewContext>
|
|
88
|
-
}
|
|
89
|
-
// OpenAPI schema generation types
|
|
90
|
-
export declare interface GenerateOpenAPISchema<T extends TypedRoute<any, any, any, any>> {
|
|
91
|
-
paths: {
|
|
92
|
-
[K in T extends TypedRoute<infer Path, any, any, any> ? Path : never]: {
|
|
93
|
-
[M in T extends TypedRoute<any, any, any, any> ? Lowercase<T['method']> : never]: {
|
|
94
|
-
parameters?: Array<{
|
|
95
|
-
name: string
|
|
96
|
-
in: 'path' | 'query'
|
|
97
|
-
required: boolean
|
|
98
|
-
schema: { type: string, format?: string }
|
|
99
|
-
}>
|
|
100
|
-
requestBody?: {
|
|
101
|
-
content: {
|
|
102
|
-
'application/json': { schema: any }
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
responses: {
|
|
106
|
-
[status: number]: {
|
|
107
|
-
description: string
|
|
108
|
-
content?: {
|
|
109
|
-
'application/json': { schema: any }
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Route Parameter Type Inference
|
|
119
|
-
*
|
|
120
|
-
* Advanced TypeScript utilities for inferring route parameter types from URL patterns
|
|
121
|
-
*/
|
|
122
|
-
// Base types for route parameter extraction
|
|
123
|
-
export type ExtractRouteParams<T extends string> = T extends `${infer _Start}:${infer Param}/${infer Rest}`
|
|
124
|
-
? { [K in Param]: string } & ExtractRouteParams<`/${Rest}`>
|
|
125
|
-
: T extends `${infer _Start}:${infer Param}?${infer Rest}`
|
|
126
|
-
? { [K in Param]?: string } & ExtractRouteParams<Rest>
|
|
127
|
-
: T extends `${infer _Start}:${infer Param}`
|
|
128
|
-
? { [K in Param]: string }
|
|
129
|
-
: T extends `${infer _Start}*${infer Rest}`
|
|
130
|
-
? { '*': string } & ExtractRouteParams<Rest>
|
|
131
|
-
: Record<string, never>
|
|
132
|
-
// Advanced parameter extraction with type constraints
|
|
133
|
-
export type ExtractTypedParams<T extends string> = T extends `${infer _Start}:${infer Param}<${infer Type}>${infer Rest}`
|
|
134
|
-
? { [K in Param]: ParseParamType<Type> } & ExtractTypedParams<Rest>
|
|
135
|
-
: T extends `${infer _Start}:${infer Param}/${infer Rest}`
|
|
136
|
-
? { [K in Param]: string } & ExtractTypedParams<`/${Rest}`>
|
|
137
|
-
: T extends `${infer _Start}:${infer Param}?${infer Rest}`
|
|
138
|
-
? { [K in Param]?: string } & ExtractTypedParams<Rest>
|
|
139
|
-
: T extends `${infer _Start}:${infer Param}`
|
|
140
|
-
? { [K in Param]: string }
|
|
141
|
-
: Record<string, never>
|
|
142
|
-
// Type parsing for parameter constraints
|
|
143
|
-
export type ParseParamType<T extends string> = T extends 'number' | 'int' | 'integer' ? number :
|
|
144
|
-
T extends 'boolean' | 'bool' ? boolean :
|
|
145
|
-
T extends 'date' ? Date :
|
|
146
|
-
T extends 'uuid' ? string :
|
|
147
|
-
T extends 'email' ? string :
|
|
148
|
-
T extends 'url' ? string :
|
|
149
|
-
T extends `enum(${infer Values})` ? ParseEnumValues<Values> :
|
|
150
|
-
T extends `range(${infer _Min},${infer _Max})` ? number :
|
|
151
|
-
T extends `length(${infer _MinMax})` ? string :
|
|
152
|
-
T extends `pattern(${infer _Pattern})` ? string :
|
|
153
|
-
string
|
|
154
|
-
// Enum value parsing
|
|
155
|
-
export type ParseEnumValues<T extends string> = T extends `${infer First}|${infer Rest}`
|
|
156
|
-
? First | ParseEnumValues<Rest>
|
|
157
|
-
: T
|
|
158
|
-
// Query parameter extraction
|
|
159
|
-
export type ExtractQueryParams<T extends Record<string, any>> = {
|
|
160
|
-
[K in keyof T]: T[K] extends 'string' ? string :
|
|
161
|
-
T[K] extends 'number' ? number :
|
|
162
|
-
T[K] extends 'boolean' ? boolean :
|
|
163
|
-
T[K] extends 'string[]' ? string[] :
|
|
164
|
-
T[K] extends 'number[]' ? number[] :
|
|
165
|
-
T[K] extends { type: infer Type, required: true } ?
|
|
166
|
-
Type extends 'string' ? string :
|
|
167
|
-
Type extends 'number' ? number :
|
|
168
|
-
Type extends 'boolean' ? boolean : string :
|
|
169
|
-
T[K] extends { type: infer Type, required: false } ?
|
|
170
|
-
Type extends 'string' ? string | undefined :
|
|
171
|
-
Type extends 'number' ? number | undefined :
|
|
172
|
-
Type extends 'boolean' ? boolean | undefined : string | undefined :
|
|
173
|
-
string
|
|
174
|
-
}
|
|
175
|
-
// Route pattern validation
|
|
176
|
-
export type ValidateRoutePattern<T extends string> = T extends `${infer _}:${infer _Param}:${infer _}`
|
|
177
|
-
? `Invalid route pattern: consecutive parameters not allowed in "${T}"`
|
|
178
|
-
: T extends `${infer _}::${infer _}`
|
|
179
|
-
? `Invalid route pattern: empty parameter name in "${T}"`
|
|
180
|
-
: T extends `${infer _}:${infer Param}`
|
|
181
|
-
? Param extends `${infer Name}${infer Rest}`
|
|
182
|
-
? Name extends ''
|
|
183
|
-
? `Invalid route pattern: empty parameter name in "${T}"`
|
|
184
|
-
: Rest extends `<${infer Type}>`
|
|
185
|
-
? ValidateParamType<Type> extends never
|
|
186
|
-
? `Invalid parameter type "${Type}" in route "${T}"`
|
|
187
|
-
: T
|
|
188
|
-
: T
|
|
189
|
-
: T
|
|
190
|
-
: T
|
|
191
|
-
// Parameter type validation
|
|
192
|
-
export type ValidateParamType<T extends string> = T extends 'string' | 'number' | 'int' | 'integer' | 'boolean' | 'bool' | 'date' | 'uuid' | 'email' | 'url'
|
|
193
|
-
? T
|
|
194
|
-
: T extends `enum(${infer Values})`
|
|
195
|
-
? Values extends '' ? never : T
|
|
196
|
-
: T extends `range(${infer Min},${infer Max})`
|
|
197
|
-
? Min extends `${number}`
|
|
198
|
-
? Max extends `${number}` ? T : never
|
|
199
|
-
: never
|
|
200
|
-
: T extends `length(${infer MinMax})`
|
|
201
|
-
? MinMax extends `${number}` | `${number},${number}` ? T : never
|
|
202
|
-
: T extends `pattern(${infer Pattern})`
|
|
203
|
-
? Pattern extends '' ? never : T
|
|
204
|
-
: never
|
|
205
|
-
// Route method types
|
|
206
|
-
export type RouteMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS'
|
|
207
|
-
// Route handler type with inferred parameters
|
|
208
|
-
export type RouteHandler<TPath extends string, TQuery extends Record<string, any> = Record<string, never>, TBody = unknown, TContext = Record<string, never>> = (request: TypedRequest<TPath, TQuery, TBody, TContext>) => Promise<Response> | Response
|
|
209
|
-
// Parameter schema for validation
|
|
210
|
-
export type RouteParamSchema<T extends Record<string, any>> = {
|
|
211
|
-
[K in keyof T]: {
|
|
212
|
-
type: T[K] extends string ? 'string' :
|
|
213
|
-
T[K] extends number ? 'number' :
|
|
214
|
-
T[K] extends boolean ? 'boolean' :
|
|
215
|
-
T[K] extends Date ? 'date' : 'string'
|
|
216
|
-
required?: boolean
|
|
217
|
-
pattern?: string
|
|
218
|
-
min?: number
|
|
219
|
-
max?: number
|
|
220
|
-
enum?: T[K][]
|
|
221
|
-
transform?: (value: string) => T[K]
|
|
222
|
-
validate?: (value: T[K]) => boolean | string
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
// Utility types for route building
|
|
226
|
-
export type InferRouteParams<T> = T extends TypedRoute<infer Path, any, any, any>
|
|
227
|
-
? ExtractTypedParams<Path>
|
|
228
|
-
: never
|
|
229
|
-
export type InferRouteQuery<T> = T extends TypedRoute<any, infer Query, any, any>
|
|
230
|
-
? ExtractQueryParams<Query>
|
|
231
|
-
: never
|
|
232
|
-
export type InferRouteBody<T> = T extends TypedRoute<any, any, infer Body, any>
|
|
233
|
-
? Body
|
|
234
|
-
: never
|
|
235
|
-
export type InferRouteContext<T> = T extends TypedRoute<any, any, any, infer Context>
|
|
236
|
-
? Context
|
|
237
|
-
: never
|
|
238
|
-
// Advanced pattern matching types
|
|
239
|
-
export type MatchRoute<TPattern extends string, TPath extends string> = TPattern extends `${infer Start}:${infer _Param}/${infer Rest}`
|
|
240
|
-
? TPath extends `${Start}${infer Value}/${infer PathRest}`
|
|
241
|
-
? Value extends ''
|
|
242
|
-
? false
|
|
243
|
-
: MatchRoute<`/${Rest}`, `/${PathRest}`>
|
|
244
|
-
: false
|
|
245
|
-
: TPattern extends `${infer Start}:${infer _Param}`
|
|
246
|
-
? TPath extends `${Start}${infer Value}`
|
|
247
|
-
? Value extends '' ? false : true
|
|
248
|
-
: false
|
|
249
|
-
: TPattern extends TPath
|
|
250
|
-
? true
|
|
251
|
-
: false
|
|
252
|
-
// Route parameter extraction at runtime
|
|
253
|
-
export type ExtractParamsFromPath<TPattern extends string, TPath extends string> = TPattern extends `${infer Start}:${infer _Param}/${infer Rest}`
|
|
254
|
-
? TPath extends `${Start}${infer Value}/${infer PathRest}`
|
|
255
|
-
? { [K in _Param]: Value } & ExtractParamsFromPath<`/${Rest}`, `/${PathRest}`>
|
|
256
|
-
: Record<string, never>
|
|
257
|
-
: TPattern extends `${infer Start}:${infer _Param}`
|
|
258
|
-
? TPath extends `${Start}${infer Value}`
|
|
259
|
-
? { [K in _Param]: Value }
|
|
260
|
-
: Record<string, never>
|
|
261
|
-
: Record<string, never>
|
|
262
|
-
// Compile-time route validation
|
|
263
|
-
export type ValidateRoutes<T extends readonly TypedRoute<any, any, any, any>[]> = {
|
|
264
|
-
[K in keyof T]: T[K] extends TypedRoute<infer Path, any, any, any>
|
|
265
|
-
? ValidateRoutePattern<Path> extends `Invalid ${string}`
|
|
266
|
-
? ValidateRoutePattern<Path>
|
|
267
|
-
: T[K]
|
|
268
|
-
: T[K]
|
|
269
|
-
}
|
|
270
|
-
// Route conflict detection
|
|
271
|
-
export type DetectRouteConflicts<T extends readonly TypedRoute<any, any, any, any>[]> = {
|
|
272
|
-
[K in keyof T]: {
|
|
273
|
-
[J in keyof T]: K extends J
|
|
274
|
-
? never
|
|
275
|
-
: T[K] extends TypedRoute<infer Path1, any, any, any>
|
|
276
|
-
? T[J] extends TypedRoute<infer Path2, any, any, any>
|
|
277
|
-
? Path1 extends Path2
|
|
278
|
-
? `Route conflict: "${Path1}" is defined multiple times`
|
|
279
|
-
: never
|
|
280
|
-
: never
|
|
281
|
-
: never
|
|
282
|
-
}[keyof T]
|
|
283
|
-
}[keyof T]
|
|
284
|
-
// Type utilities for testing
|
|
285
|
-
export type AssertEqual<T, U> = T extends U ? U extends T ? true : false : false
|
|
286
|
-
export type AssertExtends<T, U> = T extends U ? true : false
|
|
287
|
-
export type AssertNotEqual<T, U> = AssertEqual<T, U> extends true ? false : true
|