@stacksjs/bun-router 0.0.5 → 0.0.6
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/auth.d.ts +134 -0
- package/dist/cache/lru-cache.d.ts +139 -0
- package/dist/cache/middleware-memoization.d.ts +151 -0
- package/dist/cache/route-cache-warmer.d.ts +161 -0
- package/dist/cache/sqlite-cache.d.ts +209 -0
- package/dist/cache/streaming-cache.d.ts +132 -0
- package/dist/cli/colors.d.ts +15 -0
- package/dist/cli/index.d.ts +10 -0
- package/dist/cli/middleware.d.ts +31 -0
- package/dist/cli/openapi.d.ts +17 -0
- package/dist/cli/router.d.ts +15 -0
- package/dist/cli/routes.d.ts +29 -0
- package/dist/cli/utils.d.ts +74 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +1 -1
- package/dist/config.d.ts +7 -0
- package/dist/container/container.d.ts +273 -0
- package/dist/container/contextual-binding.d.ts +240 -0
- package/dist/container/decorators.d.ts +141 -0
- package/dist/container/service-provider.d.ts +285 -0
- package/dist/development/hot-reload.d.ts +187 -0
- package/dist/development/index.d.ts +167 -0
- package/dist/development/performance-profiler.d.ts +217 -0
- package/dist/development/route-debugger.d.ts +154 -0
- package/dist/development/route-inspector.d.ts +211 -0
- package/dist/development/typescript-utilities.d.ts +209 -0
- package/dist/docs.d.ts +11 -0
- package/dist/errors/circuit-breaker.d.ts +195 -0
- package/dist/errors/error-handler.d.ts +88 -0
- package/dist/errors/error-reporting.d.ts +144 -0
- package/dist/errors/exceptions.d.ts +184 -0
- package/dist/errors/graceful-degradation.d.ts +154 -0
- package/dist/errors/index.d.ts +9 -0
- package/dist/errors/router-errors.d.ts +110 -0
- package/dist/file-serving/static-files.d.ts +143 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +319 -205
- package/dist/middleware/auth.d.ts +63 -0
- package/dist/middleware/content_security_policy.d.ts +53 -0
- package/dist/middleware/cors.d.ts +5 -0
- package/dist/middleware/csrf.d.ts +7 -0
- package/dist/middleware/ddos_protection.d.ts +39 -0
- package/dist/middleware/file_security.d.ts +26 -0
- package/dist/middleware/file_upload.d.ts +38 -0
- package/dist/middleware/helmet.d.ts +54 -0
- package/dist/middleware/index.d.ts +44 -0
- package/dist/middleware/input_validation.d.ts +45 -0
- package/dist/middleware/json_body.d.ts +4 -0
- package/dist/middleware/performance_alerting.d.ts +87 -0
- package/dist/middleware/performance_dashboard.d.ts +87 -0
- package/dist/middleware/performance_monitor.d.ts +209 -0
- package/dist/middleware/pipeline.d.ts +131 -0
- package/dist/middleware/rate_limit.d.ts +36 -0
- package/dist/middleware/request_id.d.ts +4 -0
- package/dist/middleware/request_signing.d.ts +153 -0
- package/dist/middleware/request_tracer.d.ts +72 -0
- package/dist/middleware/response_cache.d.ts +97 -0
- package/dist/middleware/security.d.ts +69 -0
- package/dist/middleware/security_suite.d.ts +46 -0
- package/dist/middleware/session.d.ts +23 -0
- package/dist/model-binding/index.d.ts +2 -0
- package/dist/model-binding/model-middleware.d.ts +118 -0
- package/dist/model-binding/model-registry.d.ts +164 -0
- package/dist/model-binding.d.ts +185 -0
- package/dist/model-resolver-factory.d.ts +31 -0
- package/dist/observability/correlation.d.ts +187 -0
- package/dist/observability/health-checks.d.ts +186 -0
- package/dist/observability/index.d.ts +60 -0
- package/dist/observability/integration.d.ts +147 -0
- package/dist/observability/metrics.d.ts +184 -0
- package/dist/observability/tracing.d.ts +187 -0
- package/dist/optimization/bun-utilities.d.ts +224 -0
- package/dist/query-builder-integration.d.ts +36 -0
- package/dist/request/context.d.ts +34 -0
- package/dist/request/enhanced-request.d.ts +213 -0
- package/dist/request/macros.d.ts +300 -0
- package/dist/response/macros.d.ts +245 -0
- package/dist/response/response-factory.d.ts +133 -0
- package/dist/router/api-routes.d.ts +5 -0
- package/dist/router/file-based-routing.d.ts +118 -0
- package/dist/router/file-streaming.d.ts +5 -0
- package/dist/router/fluent-router.d.ts +315 -0
- package/dist/router/fluent-routing.d.ts +271 -0
- package/dist/router/group-organization.d.ts +5 -0
- package/dist/router/handler-resolver.d.ts +24 -0
- package/dist/router/http-methods.d.ts +10 -0
- package/dist/router/index.d.ts +113 -0
- package/dist/router/middleware-groups.d.ts +94 -0
- package/dist/router/middleware-integration.d.ts +112 -0
- package/dist/router/middleware.d.ts +5 -0
- package/dist/router/model-binding.d.ts +5 -0
- package/dist/router/optimized-route-matching.d.ts +6 -0
- package/dist/router/route-building.d.ts +5 -0
- package/dist/router/route-compiler.d.ts +153 -0
- package/dist/router/route-matching.d.ts +5 -0
- package/dist/router/route-trie.d.ts +114 -0
- package/dist/router/router.d.ts +276 -0
- package/dist/router/server.d.ts +5 -0
- package/dist/router/validation-integration.d.ts +170 -0
- package/dist/router/view-rendering.d.ts +5 -0
- package/dist/router/websocket.d.ts +5 -0
- package/dist/routing/route-caching.d.ts +129 -0
- package/dist/routing/route-throttling.d.ts +150 -0
- package/dist/routing/subdomain-routing.d.ts +206 -0
- package/dist/session/database-store.d.ts +51 -0
- package/dist/session/file-store.d.ts +22 -0
- package/dist/session/index.d.ts +106 -0
- package/dist/session/memory-store.d.ts +21 -0
- package/dist/session/redis-store.d.ts +31 -0
- package/dist/streaming/index.d.ts +3 -0
- package/dist/streaming/sse-handler.d.ts +138 -0
- package/dist/streaming/stream-handler.d.ts +114 -0
- package/dist/testing/auth-testing.d.ts +156 -0
- package/dist/testing/file-upload-testing.d.ts +190 -0
- package/dist/testing/index.d.ts +10 -0
- package/dist/testing/middleware-testing.d.ts +138 -0
- package/dist/testing/model-binding-testing.d.ts +186 -0
- package/dist/testing/performance-testing.d.ts +235 -0
- package/dist/testing/test-client.d.ts +117 -0
- package/dist/testing/test-request.d.ts +85 -0
- package/dist/testing/test-response.d.ts +90 -0
- package/dist/testing/types.d.ts +207 -0
- package/dist/testing/websocket-testing.d.ts +227 -0
- package/dist/types/controller-types.d.ts +208 -0
- package/dist/types/core.d.ts +543 -0
- package/dist/types/middleware-types.d.ts +227 -0
- package/dist/types/request-response-augmentation.d.ts +261 -0
- package/dist/types/route-inference.d.ts +168 -0
- package/dist/types.d.ts +1776 -0
- package/dist/url.d.ts +56 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/query-preservation.d.ts +48 -0
- package/dist/utils.d.ts +69 -0
- package/dist/validation/validator.d.ts +140 -0
- package/dist/websocket/clustering.d.ts +185 -0
- package/package.json +3 -2
- package/src/auth.ts +469 -0
- package/src/cache/lru-cache.ts +457 -0
- package/src/cache/middleware-memoization.ts +531 -0
- package/src/cache/route-cache-warmer.ts +486 -0
- package/src/cache/sqlite-cache.ts +783 -0
- package/src/cache/streaming-cache.ts +572 -0
- package/src/cli/colors.ts +29 -0
- package/src/cli/index.ts +287 -0
- package/src/cli/middleware.ts +291 -0
- package/src/cli/openapi.ts +407 -0
- package/src/cli/router.ts +188 -0
- package/src/cli/routes.ts +265 -0
- package/src/cli/utils.ts +531 -0
- package/src/cli.ts +5 -0
- package/src/config.ts +322 -0
- package/src/container/container.ts +740 -0
- package/src/container/contextual-binding.ts +603 -0
- package/src/container/decorators.ts +359 -0
- package/src/container/service-provider.ts +596 -0
- package/src/development/hot-reload.ts +673 -0
- package/src/development/index.ts +499 -0
- package/src/development/performance-profiler.ts +717 -0
- package/src/development/route-debugger.ts +527 -0
- package/src/development/route-inspector.ts +749 -0
- package/src/development/typescript-utilities.ts +678 -0
- package/src/docs.ts +397 -0
- package/src/errors/circuit-breaker.ts +732 -0
- package/src/errors/error-handler.ts +569 -0
- package/src/errors/error-reporting.ts +672 -0
- package/src/errors/exceptions.ts +536 -0
- package/src/errors/graceful-degradation.ts +621 -0
- package/src/errors/index.ts +21 -0
- package/src/errors/router-errors.ts +632 -0
- package/src/file-serving/static-files.ts +581 -0
- package/src/index.ts +14 -0
- package/src/middleware/auth.ts +219 -0
- package/src/middleware/content_security_policy.ts +215 -0
- package/src/middleware/cors.ts +74 -0
- package/src/middleware/csrf.ts +108 -0
- package/src/middleware/ddos_protection.ts +255 -0
- package/src/middleware/file_security.ts +191 -0
- package/src/middleware/file_upload.ts +264 -0
- package/src/middleware/helmet.ts +268 -0
- package/src/middleware/index.ts +117 -0
- package/src/middleware/input_validation.ts +449 -0
- package/src/middleware/json_body.ts +37 -0
- package/src/middleware/performance_alerting.ts +538 -0
- package/src/middleware/performance_dashboard.ts +661 -0
- package/src/middleware/performance_monitor.ts +943 -0
- package/src/middleware/pipeline.ts +489 -0
- package/src/middleware/rate_limit.ts +245 -0
- package/src/middleware/request_id.ts +36 -0
- package/src/middleware/request_signing.ts +636 -0
- package/src/middleware/request_tracer.ts +636 -0
- package/src/middleware/response_cache.ts +743 -0
- package/src/middleware/security.ts +482 -0
- package/src/middleware/security_suite.ts +257 -0
- package/src/middleware/session.ts +91 -0
- package/src/model-binding/index.ts +18 -0
- package/src/model-binding/model-middleware.ts +425 -0
- package/src/model-binding/model-registry.ts +550 -0
- package/src/model-binding.ts +370 -0
- package/src/model-resolver-factory.ts +106 -0
- package/src/observability/correlation.ts +691 -0
- package/src/observability/health-checks.ts +729 -0
- package/src/observability/index.ts +184 -0
- package/src/observability/integration.ts +548 -0
- package/src/observability/metrics.ts +753 -0
- package/src/observability/tracing.ts +638 -0
- package/src/optimization/bun-utilities.ts +778 -0
- package/src/query-builder-integration.ts +137 -0
- package/src/request/context.ts +62 -0
- package/src/request/enhanced-request.ts +857 -0
- package/src/request/macros.ts +688 -0
- package/src/response/macros.ts +612 -0
- package/src/response/response-factory.ts +588 -0
- package/src/router/api-routes.ts +243 -0
- package/src/router/file-based-routing.ts +670 -0
- package/src/router/file-streaming.ts +372 -0
- package/src/router/fluent-router.ts +927 -0
- package/src/router/fluent-routing.ts +797 -0
- package/src/router/group-organization.ts +213 -0
- package/src/router/handler-resolver.ts +291 -0
- package/src/router/http-methods.ts +377 -0
- package/src/router/index.ts +185 -0
- package/src/router/middleware-groups.ts +222 -0
- package/src/router/middleware-integration.ts +399 -0
- package/src/router/middleware.ts +231 -0
- package/src/router/model-binding.ts +215 -0
- package/src/router/optimized-route-matching.ts +253 -0
- package/src/router/route-building.ts +212 -0
- package/src/router/route-compiler.ts +702 -0
- package/src/router/route-matching.ts +349 -0
- package/src/router/route-trie.ts +464 -0
- package/src/router/router.ts +1508 -0
- package/src/router/server.ts +406 -0
- package/src/router/validation-integration.ts +443 -0
- package/src/router/view-rendering.ts +233 -0
- package/src/router/websocket.ts +100 -0
- package/src/routing/route-caching.ts +402 -0
- package/src/routing/route-throttling.ts +469 -0
- package/src/routing/subdomain-routing.ts +492 -0
- package/src/session/database-store.ts +109 -0
- package/src/session/file-store.ts +148 -0
- package/src/session/index.ts +244 -0
- package/src/session/memory-store.ts +88 -0
- package/src/session/redis-store.ts +93 -0
- package/src/streaming/index.ts +17 -0
- package/src/streaming/sse-handler.ts +482 -0
- package/src/streaming/stream-handler.ts +552 -0
- package/src/testing/auth-testing.ts +446 -0
- package/src/testing/file-upload-testing.ts +543 -0
- package/src/testing/index.ts +10 -0
- package/src/testing/middleware-testing.ts +322 -0
- package/src/testing/model-binding-testing.ts +645 -0
- package/src/testing/performance-testing.ts +738 -0
- package/src/testing/test-client.ts +310 -0
- package/src/testing/test-request.ts +315 -0
- package/src/testing/test-response.ts +332 -0
- package/src/testing/types.ts +224 -0
- package/src/testing/websocket-testing.ts +590 -0
- package/src/types/controller-types.ts +385 -0
- package/src/types/core.ts +683 -0
- package/src/types/middleware-types.ts +419 -0
- package/src/types/request-response-augmentation.ts +489 -0
- package/src/types/route-inference.ts +357 -0
- package/src/types.ts +2049 -0
- package/src/url.ts +126 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/query-preservation.ts +201 -0
- package/src/utils.ts +327 -0
- package/src/validation/validator.ts +685 -0
- package/src/websocket/clustering.ts +762 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced Request Methods
|
|
3
|
+
*
|
|
4
|
+
* Implements fluent request methods with full TypeScript support
|
|
5
|
+
*/
|
|
6
|
+
import type { EnhancedRequest, RequestInput } from '../types';
|
|
7
|
+
/**
|
|
8
|
+
* Validation rules type
|
|
9
|
+
*/
|
|
10
|
+
export type ValidationRules = Record<string, string | ValidationRule[]>;
|
|
11
|
+
/**
|
|
12
|
+
* Validation rule interface
|
|
13
|
+
*/
|
|
14
|
+
export interface ValidationRule {
|
|
15
|
+
name: string;
|
|
16
|
+
validate: (value: unknown, parameters: string[], field: string, data: Record<string, unknown>) => Promise<boolean> | boolean;
|
|
17
|
+
message: string | ((_field: string, _parameters: string[]) => string);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Safe validated data wrapper
|
|
21
|
+
*/
|
|
22
|
+
export interface SafeData<T extends Record<string, unknown> = Record<string, unknown>> {
|
|
23
|
+
only: <K extends keyof T>(keys: K[]) => Pick<T, K>;
|
|
24
|
+
except: <K extends keyof T>(keys: K[]) => Omit<T, K>;
|
|
25
|
+
merge: <U extends Record<string, unknown>>(data: U) => T & U;
|
|
26
|
+
all: () => T;
|
|
27
|
+
has: (key: keyof T) => boolean;
|
|
28
|
+
get: <K extends keyof T>(key: K) => T[K];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Collection interface for array data
|
|
32
|
+
*/
|
|
33
|
+
export interface Collection<T> {
|
|
34
|
+
items: T[];
|
|
35
|
+
count: () => number;
|
|
36
|
+
first: () => T | undefined;
|
|
37
|
+
last: () => T | undefined;
|
|
38
|
+
map: <U>(fn: (item: T, index: number) => U) => Collection<U>;
|
|
39
|
+
filter: (fn: (item: T, index: number) => boolean) => Collection<T>;
|
|
40
|
+
find: (fn: (item: T, index: number) => boolean) => T | undefined;
|
|
41
|
+
reduce: <U>(fn: (acc: U, item: T, index: number) => U, initial: U) => U;
|
|
42
|
+
forEach: (fn: (item: T, index: number) => void) => void;
|
|
43
|
+
toArray: () => T[];
|
|
44
|
+
isEmpty: () => boolean;
|
|
45
|
+
isNotEmpty: () => boolean;
|
|
46
|
+
pluck: <K extends keyof T>(key: K) => Collection<T[K]>;
|
|
47
|
+
unique: () => Collection<T>;
|
|
48
|
+
sortBy: <K extends keyof T>(key: K, direction?: 'asc' | 'desc') => Collection<T>;
|
|
49
|
+
groupBy: <K extends keyof T>(key: K) => Map<T[K], Collection<T>>;
|
|
50
|
+
chunk: (size: number) => Collection<Collection<T>>;
|
|
51
|
+
take: (count: number) => Collection<T>;
|
|
52
|
+
skip: (count: number) => Collection<T>;
|
|
53
|
+
reverse: () => Collection<T>;
|
|
54
|
+
sum: (key?: keyof T) => number;
|
|
55
|
+
avg: (key?: keyof T) => number;
|
|
56
|
+
min: (key?: keyof T) => T | undefined;
|
|
57
|
+
max: (key?: keyof T) => T | undefined;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Collection class for array manipulation
|
|
61
|
+
*/
|
|
62
|
+
export declare class CollectionImpl<T> implements Collection<T> {
|
|
63
|
+
items: T[];
|
|
64
|
+
constructor(items: T[]);
|
|
65
|
+
count(): number;
|
|
66
|
+
first(): T | undefined;
|
|
67
|
+
last(): T | undefined;
|
|
68
|
+
map<U>(fn: (item: T, index: number) => U): Collection<U>;
|
|
69
|
+
filter(fn: (item: T, index: number) => boolean): Collection<T>;
|
|
70
|
+
find(fn: (item: T, index: number) => boolean): T | undefined;
|
|
71
|
+
reduce<U>(fn: (acc: U, item: T, index: number) => U, initial: U): U;
|
|
72
|
+
forEach(fn: (item: T, index: number) => void): void;
|
|
73
|
+
toArray(): T[];
|
|
74
|
+
isEmpty(): boolean;
|
|
75
|
+
isNotEmpty(): boolean;
|
|
76
|
+
pluck<K extends keyof T>(key: K): Collection<T[K]>;
|
|
77
|
+
unique(): Collection<T>;
|
|
78
|
+
sortBy<K extends keyof T>(key: K, direction?: 'asc' | 'desc'): Collection<T>;
|
|
79
|
+
groupBy<K extends keyof T>(key: K): Map<T[K], Collection<T>>;
|
|
80
|
+
chunk(size: number): Collection<Collection<T>>;
|
|
81
|
+
take(count: number): Collection<T>;
|
|
82
|
+
skip(count: number): Collection<T>;
|
|
83
|
+
reverse(): Collection<T>;
|
|
84
|
+
sum(key?: keyof T): number;
|
|
85
|
+
avg(key?: keyof T): number;
|
|
86
|
+
min(key?: keyof T): T | undefined;
|
|
87
|
+
max(key?: keyof T): T | undefined;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Create a safe data wrapper
|
|
91
|
+
*/
|
|
92
|
+
export declare function createSafeData<T extends Record<string, unknown>>(data: T): SafeData<T>;
|
|
93
|
+
/**
|
|
94
|
+
* Enhanced request methods interface
|
|
95
|
+
*/
|
|
96
|
+
export interface EnhancedRequestMethods {
|
|
97
|
+
/**
|
|
98
|
+
* Validate the request data
|
|
99
|
+
*/
|
|
100
|
+
validate: <T extends Record<string, unknown> = Record<string, unknown>>(rules: ValidationRules, messages?: Record<string, string>) => Promise<T>;
|
|
101
|
+
/**
|
|
102
|
+
* Get validated data as typed object
|
|
103
|
+
*/
|
|
104
|
+
getValidated: <T extends Record<string, unknown> = Record<string, unknown>>() => T;
|
|
105
|
+
/**
|
|
106
|
+
* Get safe validated data wrapper
|
|
107
|
+
*/
|
|
108
|
+
safe: <T extends Record<string, unknown> = Record<string, unknown>>() => SafeData<T>;
|
|
109
|
+
/**
|
|
110
|
+
* Execute callback when input has a value
|
|
111
|
+
*/
|
|
112
|
+
whenHas: <T>(key: string, callback: (value: T) => void, defaultCallback?: () => void) => void;
|
|
113
|
+
/**
|
|
114
|
+
* Execute callback when input is filled (not empty)
|
|
115
|
+
*/
|
|
116
|
+
whenFilled: <T>(key: string, callback: (value: T) => void, defaultCallback?: () => void) => void;
|
|
117
|
+
/**
|
|
118
|
+
* Parse date input
|
|
119
|
+
*/
|
|
120
|
+
date: (key: string, format?: string) => Date | null;
|
|
121
|
+
/**
|
|
122
|
+
* Parse enum input
|
|
123
|
+
*/
|
|
124
|
+
enum: <T extends Record<string, string | number>>(key: string, enumType: T) => T[keyof T] | null;
|
|
125
|
+
/**
|
|
126
|
+
* Get input as collection
|
|
127
|
+
*/
|
|
128
|
+
collect: <T = unknown>(key: string) => Collection<T>;
|
|
129
|
+
/**
|
|
130
|
+
* Get all input keys
|
|
131
|
+
*/
|
|
132
|
+
keys: () => string[];
|
|
133
|
+
/**
|
|
134
|
+
* Get input with type casting
|
|
135
|
+
*/
|
|
136
|
+
string: (key: string, defaultValue?: string) => string;
|
|
137
|
+
integer: (key: string, defaultValue?: number) => number;
|
|
138
|
+
float: (key: string, defaultValue?: number) => number;
|
|
139
|
+
boolean: (key: string, defaultValue?: boolean) => boolean;
|
|
140
|
+
/**
|
|
141
|
+
* Check if input matches a value
|
|
142
|
+
*/
|
|
143
|
+
isValue: (key: string, value: unknown) => boolean;
|
|
144
|
+
/**
|
|
145
|
+
* Get old input (for form repopulation)
|
|
146
|
+
*/
|
|
147
|
+
old: <T = unknown>(key: string, defaultValue?: T) => T;
|
|
148
|
+
/**
|
|
149
|
+
* Flash input to session for form repopulation
|
|
150
|
+
*/
|
|
151
|
+
flashInput: (keys?: string[]) => void;
|
|
152
|
+
/**
|
|
153
|
+
* Flash only specific keys
|
|
154
|
+
*/
|
|
155
|
+
flashInputOnly: (keys: string[]) => void;
|
|
156
|
+
/**
|
|
157
|
+
* Flash except specific keys
|
|
158
|
+
*/
|
|
159
|
+
flashInputExcept: (keys: string[]) => void;
|
|
160
|
+
/**
|
|
161
|
+
* Get input as array
|
|
162
|
+
*/
|
|
163
|
+
array: <T = unknown>(key: string) => T[];
|
|
164
|
+
/**
|
|
165
|
+
* Get input value from any source (query, body, params)
|
|
166
|
+
* Laravel-style request.get()
|
|
167
|
+
*/
|
|
168
|
+
get: <T = unknown>(key: string, defaultValue?: T) => T;
|
|
169
|
+
/**
|
|
170
|
+
* Get all input data
|
|
171
|
+
*/
|
|
172
|
+
all: () => RequestInput;
|
|
173
|
+
/**
|
|
174
|
+
* Get only specified keys
|
|
175
|
+
*/
|
|
176
|
+
only: <T extends Record<string, unknown> = Record<string, unknown>>(keys: string[]) => T;
|
|
177
|
+
/**
|
|
178
|
+
* Get all except specified keys
|
|
179
|
+
*/
|
|
180
|
+
except: <T extends Record<string, unknown> = Record<string, unknown>>(keys: string[]) => T;
|
|
181
|
+
/**
|
|
182
|
+
* Check if input has a key
|
|
183
|
+
*/
|
|
184
|
+
has: (key: string | string[]) => boolean;
|
|
185
|
+
/**
|
|
186
|
+
* Check if input has any of the keys
|
|
187
|
+
*/
|
|
188
|
+
hasAny: (keys: string[]) => boolean;
|
|
189
|
+
/**
|
|
190
|
+
* Check if input is filled (not empty)
|
|
191
|
+
*/
|
|
192
|
+
filled: (key: string | string[]) => boolean;
|
|
193
|
+
/**
|
|
194
|
+
* Check if input is missing
|
|
195
|
+
*/
|
|
196
|
+
missing: (key: string | string[]) => boolean;
|
|
197
|
+
/**
|
|
198
|
+
* Merge additional data into input
|
|
199
|
+
*/
|
|
200
|
+
merge: (data: Record<string, unknown>) => void;
|
|
201
|
+
/**
|
|
202
|
+
* Get input value or fail
|
|
203
|
+
*/
|
|
204
|
+
input: <T = unknown>(key: string, defaultValue?: T) => T;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Enhance request with additional methods
|
|
208
|
+
*/
|
|
209
|
+
export declare function enhanceRequestWithMethods(request: EnhancedRequest): EnhancedRequest & EnhancedRequestMethods;
|
|
210
|
+
/**
|
|
211
|
+
* Middleware to enhance request with additional methods
|
|
212
|
+
*/
|
|
213
|
+
export declare function enhancedRequestMiddleware(): (req: EnhancedRequest, next: () => Promise<Response | null>) => Promise<Response | null>;
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request/Response Enhancements - Request Macros
|
|
3
|
+
*
|
|
4
|
+
* Laravel-style request macros for enhanced request functionality
|
|
5
|
+
*/
|
|
6
|
+
import type { EnhancedRequest } from '../types';
|
|
7
|
+
export interface RequestMacro {
|
|
8
|
+
name: string;
|
|
9
|
+
handler: (this: EnhancedRequest, ...args: any[]) => any;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Request macro registry
|
|
13
|
+
*/
|
|
14
|
+
declare class RequestMacroRegistry {
|
|
15
|
+
private macros;
|
|
16
|
+
/**
|
|
17
|
+
* Register a request macro
|
|
18
|
+
*/
|
|
19
|
+
register(name: string, handler: (this: EnhancedRequest, ...args: any[]) => any): void;
|
|
20
|
+
/**
|
|
21
|
+
* Get a registered macro
|
|
22
|
+
*/
|
|
23
|
+
get(name: string): RequestMacro | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* Check if macro exists
|
|
26
|
+
*/
|
|
27
|
+
has(name: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Get all registered macros
|
|
30
|
+
*/
|
|
31
|
+
all(): RequestMacro[];
|
|
32
|
+
/**
|
|
33
|
+
* Remove a macro
|
|
34
|
+
*/
|
|
35
|
+
remove(name: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Clear all macros
|
|
38
|
+
*/
|
|
39
|
+
clear(): void;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Global request macro registry
|
|
43
|
+
*/
|
|
44
|
+
export declare const requestMacroRegistry: RequestMacroRegistry;
|
|
45
|
+
/**
|
|
46
|
+
* Request class with macro support
|
|
47
|
+
*/
|
|
48
|
+
export declare class RequestWithMacros {
|
|
49
|
+
/**
|
|
50
|
+
* Register a request macro
|
|
51
|
+
*/
|
|
52
|
+
static macro(name: string, handler: (this: EnhancedRequest, ...args: any[]) => any): void;
|
|
53
|
+
/**
|
|
54
|
+
* Apply macros to a request object
|
|
55
|
+
*/
|
|
56
|
+
static applyMacros(request: EnhancedRequest): EnhancedRequest;
|
|
57
|
+
/**
|
|
58
|
+
* Check if macro exists
|
|
59
|
+
*/
|
|
60
|
+
static hasMacro(name: string): boolean;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Built-in request macros
|
|
64
|
+
*/
|
|
65
|
+
export declare const BuiltInRequestMacros: {
|
|
66
|
+
/**
|
|
67
|
+
* Check if request wants JSON response
|
|
68
|
+
*/
|
|
69
|
+
wantsJson(this: EnhancedRequest): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Check if request wants HTML response
|
|
72
|
+
*/
|
|
73
|
+
wantsHtml(this: EnhancedRequest): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Check if request wants XML response
|
|
76
|
+
*/
|
|
77
|
+
wantsXml(this: EnhancedRequest): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Check if request expects JSON response
|
|
80
|
+
*/
|
|
81
|
+
expectsJson(this: EnhancedRequest): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Check if request is AJAX
|
|
84
|
+
*/
|
|
85
|
+
isAjax(this: EnhancedRequest): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Check if request is PJAX
|
|
88
|
+
*/
|
|
89
|
+
isPjax(this: EnhancedRequest): boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Check if request is from mobile device
|
|
92
|
+
*/
|
|
93
|
+
isMobile(this: EnhancedRequest): boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Check if request is from bot/crawler
|
|
96
|
+
*/
|
|
97
|
+
isBot(this: EnhancedRequest): boolean;
|
|
98
|
+
/**
|
|
99
|
+
* Check if request is secure (HTTPS)
|
|
100
|
+
*/
|
|
101
|
+
isSecure(this: EnhancedRequest): boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Get client IP address
|
|
104
|
+
*/
|
|
105
|
+
ip(this: EnhancedRequest): string;
|
|
106
|
+
/**
|
|
107
|
+
* Get all client IPs (including proxies)
|
|
108
|
+
*/
|
|
109
|
+
ips(this: EnhancedRequest): string[];
|
|
110
|
+
/**
|
|
111
|
+
* Get user agent
|
|
112
|
+
*/
|
|
113
|
+
userAgent(this: EnhancedRequest): string;
|
|
114
|
+
/**
|
|
115
|
+
* Get referer URL
|
|
116
|
+
*/
|
|
117
|
+
referer(this: EnhancedRequest): string | null;
|
|
118
|
+
/**
|
|
119
|
+
* Get authorization header
|
|
120
|
+
*/
|
|
121
|
+
bearerToken(this: EnhancedRequest): string | null;
|
|
122
|
+
/**
|
|
123
|
+
* Get basic auth credentials
|
|
124
|
+
*/
|
|
125
|
+
basicAuth(this: EnhancedRequest): {
|
|
126
|
+
username: string;
|
|
127
|
+
password: string;
|
|
128
|
+
} | null;
|
|
129
|
+
/**
|
|
130
|
+
* Check if request has specific header
|
|
131
|
+
*/
|
|
132
|
+
hasHeader(this: EnhancedRequest, name: string): boolean;
|
|
133
|
+
/**
|
|
134
|
+
* Get header value with default
|
|
135
|
+
*/
|
|
136
|
+
header(this: EnhancedRequest, name: string, defaultValue?: string): string | null;
|
|
137
|
+
/**
|
|
138
|
+
* Get all headers as object
|
|
139
|
+
*/
|
|
140
|
+
allHeaders(this: EnhancedRequest): Record<string, string>;
|
|
141
|
+
/**
|
|
142
|
+
* Get input value from query, body, or params
|
|
143
|
+
*/
|
|
144
|
+
input(this: EnhancedRequest, key: string, defaultValue?: any): any;
|
|
145
|
+
/**
|
|
146
|
+
* Get all input data
|
|
147
|
+
*/
|
|
148
|
+
all(this: EnhancedRequest): Record<string, unknown>;
|
|
149
|
+
/**
|
|
150
|
+
* Get only specified input keys
|
|
151
|
+
*/
|
|
152
|
+
only(this: EnhancedRequest, keys: string[]): Record<string, any>;
|
|
153
|
+
/**
|
|
154
|
+
* Get all input except specified keys
|
|
155
|
+
*/
|
|
156
|
+
except(this: EnhancedRequest, keys: string[]): Record<string, any>;
|
|
157
|
+
/**
|
|
158
|
+
* Check if input has specific key
|
|
159
|
+
*/
|
|
160
|
+
has(this: EnhancedRequest, key: string): boolean;
|
|
161
|
+
/**
|
|
162
|
+
* Check if input has any of the specified keys
|
|
163
|
+
*/
|
|
164
|
+
hasAny(this: EnhancedRequest, keys: string[]): boolean;
|
|
165
|
+
/**
|
|
166
|
+
* Check if input is missing specific key
|
|
167
|
+
*/
|
|
168
|
+
missing(this: EnhancedRequest, key: string): boolean;
|
|
169
|
+
/**
|
|
170
|
+
* Check if input is filled (not empty)
|
|
171
|
+
*/
|
|
172
|
+
filled(this: EnhancedRequest, key: string): boolean;
|
|
173
|
+
/**
|
|
174
|
+
* Get query parameter
|
|
175
|
+
*/
|
|
176
|
+
getQuery(this: EnhancedRequest, key?: string, defaultValue?: any): any;
|
|
177
|
+
/**
|
|
178
|
+
* Get route parameter
|
|
179
|
+
*/
|
|
180
|
+
param(this: EnhancedRequest, key: string, defaultValue?: any): any;
|
|
181
|
+
/**
|
|
182
|
+
* Get cookie value
|
|
183
|
+
*/
|
|
184
|
+
cookie(this: EnhancedRequest, name: string, defaultValue?: string): string | null;
|
|
185
|
+
/**
|
|
186
|
+
* Get all cookies
|
|
187
|
+
*/
|
|
188
|
+
cookies(this: EnhancedRequest): Record<string, string>;
|
|
189
|
+
/**
|
|
190
|
+
* Get file from upload
|
|
191
|
+
*/
|
|
192
|
+
file(this: EnhancedRequest, name: string): any;
|
|
193
|
+
/**
|
|
194
|
+
* Check if request has file upload
|
|
195
|
+
*/
|
|
196
|
+
hasFile(this: EnhancedRequest, name: string): boolean;
|
|
197
|
+
/**
|
|
198
|
+
* Get request path without query string
|
|
199
|
+
*/
|
|
200
|
+
path(this: EnhancedRequest): string;
|
|
201
|
+
/**
|
|
202
|
+
* Get request URL
|
|
203
|
+
*/
|
|
204
|
+
fullUrl(this: EnhancedRequest): string;
|
|
205
|
+
/**
|
|
206
|
+
* Get request root URL
|
|
207
|
+
*/
|
|
208
|
+
root(this: EnhancedRequest): string;
|
|
209
|
+
/**
|
|
210
|
+
* Check if path matches pattern
|
|
211
|
+
*/
|
|
212
|
+
is(this: EnhancedRequest, pattern: string): boolean;
|
|
213
|
+
/**
|
|
214
|
+
* Get route name (if available)
|
|
215
|
+
*/
|
|
216
|
+
route(this: EnhancedRequest): string | null;
|
|
217
|
+
/**
|
|
218
|
+
* Get request fingerprint for caching
|
|
219
|
+
*/
|
|
220
|
+
fingerprint(this: EnhancedRequest): string;
|
|
221
|
+
/**
|
|
222
|
+
* Get request signature for security
|
|
223
|
+
*/
|
|
224
|
+
signature(this: EnhancedRequest, secret: string): string;
|
|
225
|
+
/**
|
|
226
|
+
* Merge additional data into request
|
|
227
|
+
*/
|
|
228
|
+
merge(this: EnhancedRequest, data: Record<string, any>): void;
|
|
229
|
+
/**
|
|
230
|
+
* Replace request data
|
|
231
|
+
*/
|
|
232
|
+
replace(this: EnhancedRequest, data: Record<string, any>): void;
|
|
233
|
+
/**
|
|
234
|
+
* Get request age in milliseconds
|
|
235
|
+
*/
|
|
236
|
+
age(this: EnhancedRequest): number;
|
|
237
|
+
/**
|
|
238
|
+
* Check if request is from trusted proxy
|
|
239
|
+
*/
|
|
240
|
+
isFromTrustedProxy(this: EnhancedRequest, trustedProxies?: string[]): boolean;
|
|
241
|
+
/**
|
|
242
|
+
* Get request content length
|
|
243
|
+
*/
|
|
244
|
+
contentLength(this: EnhancedRequest): number;
|
|
245
|
+
/**
|
|
246
|
+
* Get request content type
|
|
247
|
+
*/
|
|
248
|
+
contentType(this: EnhancedRequest): string | null;
|
|
249
|
+
/**
|
|
250
|
+
* Check if request content type matches
|
|
251
|
+
*/
|
|
252
|
+
isContentType(this: EnhancedRequest, type: string): boolean;
|
|
253
|
+
};
|
|
254
|
+
/**
|
|
255
|
+
* Register all built-in macros
|
|
256
|
+
*/
|
|
257
|
+
export declare function registerBuiltInRequestMacros(): void;
|
|
258
|
+
/**
|
|
259
|
+
* Request macro factory functions
|
|
260
|
+
*/
|
|
261
|
+
export declare const RequestMacroFactory: {
|
|
262
|
+
/**
|
|
263
|
+
* Create input validation macro
|
|
264
|
+
*/
|
|
265
|
+
validateInput: (_rules: Record<string, string>) => (this: EnhancedRequest) => boolean;
|
|
266
|
+
/**
|
|
267
|
+
* Create custom header checker macro
|
|
268
|
+
*/
|
|
269
|
+
hasCustomHeader: (headerName: string) => (this: EnhancedRequest) => boolean;
|
|
270
|
+
/**
|
|
271
|
+
* Create role checker macro
|
|
272
|
+
*/
|
|
273
|
+
hasRole: (role: string) => (this: EnhancedRequest) => boolean;
|
|
274
|
+
/**
|
|
275
|
+
* Create permission checker macro
|
|
276
|
+
*/
|
|
277
|
+
can: (permission: string) => (this: EnhancedRequest) => boolean;
|
|
278
|
+
};
|
|
279
|
+
/**
|
|
280
|
+
* Request helper utilities
|
|
281
|
+
*/
|
|
282
|
+
export declare const RequestHelpers: {
|
|
283
|
+
/**
|
|
284
|
+
* Apply macros to request
|
|
285
|
+
*/
|
|
286
|
+
withMacros: (request: EnhancedRequest) => EnhancedRequest;
|
|
287
|
+
/**
|
|
288
|
+
* Create request from URL and options
|
|
289
|
+
*/
|
|
290
|
+
create: (url: string, options?: RequestInit) => EnhancedRequest;
|
|
291
|
+
/**
|
|
292
|
+
* Parse query string to object
|
|
293
|
+
*/
|
|
294
|
+
parseQuery: (queryString: string) => Record<string, string>;
|
|
295
|
+
/**
|
|
296
|
+
* Parse cookies from header
|
|
297
|
+
*/
|
|
298
|
+
parseCookies: (cookieHeader: string) => Record<string, string>;
|
|
299
|
+
};
|
|
300
|
+
export {};
|