@loutrejs/loutre 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/README.md +63 -32
  2. package/dist/adapters/aws-lambda.d.ts +5 -3
  3. package/dist/adapters/aws-lambda.js +53 -23
  4. package/dist/adapters/bun.d.ts +7 -4
  5. package/dist/adapters/bun.js +52 -42
  6. package/dist/adapters/cloudflare-workers.d.ts +5 -3
  7. package/dist/adapters/cloudflare-workers.js +23 -28
  8. package/dist/adapters/deno.d.ts +7 -4
  9. package/dist/adapters/deno.js +94 -57
  10. package/dist/adapters/electron.d.ts +13 -5
  11. package/dist/adapters/electron.js +76 -28
  12. package/dist/application/definition.d.ts +31 -0
  13. package/dist/application/definition.js +16 -0
  14. package/dist/application/index.d.ts +4 -63
  15. package/dist/application/index.js +2 -11
  16. package/dist/application/kernel-internal.d.ts +2 -0
  17. package/dist/application/kernel-internal.js +10 -0
  18. package/dist/application/kernel.d.ts +22 -0
  19. package/dist/application/kernel.js +65 -0
  20. package/dist/core/diagnostic.d.ts +9 -0
  21. package/dist/core/diagnostic.js +9 -0
  22. package/dist/core/extension.d.ts +118 -0
  23. package/dist/core/extension.js +73 -0
  24. package/dist/core/generic-layer.d.ts +26 -0
  25. package/dist/core/generic-layer.js +116 -0
  26. package/dist/core/index.d.ts +32 -15
  27. package/dist/core/index.js +15 -15
  28. package/dist/core/injection.d.ts +4 -13
  29. package/dist/core/injection.js +63 -0
  30. package/dist/core/instrumentation.d.ts +36 -0
  31. package/dist/core/model/context.d.ts +18 -0
  32. package/dist/core/model/context.js +34 -0
  33. package/dist/core/model/lifecycle.d.ts +5 -0
  34. package/dist/core/model/lifecycle.js +44 -0
  35. package/dist/core/model/modules.d.ts +2 -0
  36. package/dist/core/model/modules.js +101 -0
  37. package/dist/core/model/providers.d.ts +4 -0
  38. package/dist/core/model/providers.js +74 -0
  39. package/dist/core/model/snapshot.d.ts +6 -0
  40. package/dist/core/model/snapshot.js +31 -0
  41. package/dist/core/model/types.d.ts +78 -0
  42. package/dist/core/model/types.js +1 -0
  43. package/dist/core/model/validation.d.ts +4 -0
  44. package/dist/core/model/validation.js +40 -0
  45. package/dist/core/model/visibility.d.ts +4 -0
  46. package/dist/core/model/visibility.js +20 -0
  47. package/dist/core/model.d.ts +10 -0
  48. package/dist/core/model.js +346 -0
  49. package/dist/core/module.d.ts +8 -13
  50. package/dist/core/source-location.d.ts +8 -0
  51. package/dist/core/source-location.js +31 -0
  52. package/dist/core/token-internal.d.ts +3 -0
  53. package/dist/core/token-internal.js +4 -0
  54. package/dist/core/type.d.ts +7 -0
  55. package/dist/core/type.js +4 -0
  56. package/dist/devtools/capsule.d.ts +51 -0
  57. package/dist/devtools/capsule.js +245 -0
  58. package/dist/devtools/index.d.ts +11 -0
  59. package/dist/devtools/index.js +6 -0
  60. package/dist/devtools/inspector.d.ts +57 -0
  61. package/dist/devtools/inspector.js +1 -0
  62. package/dist/devtools/module.d.ts +18 -0
  63. package/dist/devtools/module.js +26 -0
  64. package/dist/devtools/observer.d.ts +77 -0
  65. package/dist/devtools/observer.js +10 -0
  66. package/dist/devtools/protocol.d.ts +1 -0
  67. package/dist/devtools/protocol.js +1 -0
  68. package/dist/devtools/provider-instrumentation.d.ts +14 -0
  69. package/dist/devtools/provider-instrumentation.js +117 -0
  70. package/dist/devtools/runtime.d.ts +20 -0
  71. package/dist/devtools/runtime.js +519 -0
  72. package/dist/devtools/values.d.ts +35 -0
  73. package/dist/devtools/values.js +175 -0
  74. package/dist/generated/version.d.ts +1 -1
  75. package/dist/generated/version.js +1 -1
  76. package/dist/graph/index.d.ts +2 -3
  77. package/dist/graph/index.js +1 -3
  78. package/dist/graph/model.d.ts +34 -0
  79. package/dist/graph/model.js +127 -0
  80. package/dist/http/auth.d.ts +46 -0
  81. package/dist/http/auth.js +96 -0
  82. package/dist/http/client.d.ts +28 -31
  83. package/dist/http/client.js +58 -44
  84. package/dist/http/cors-internal.d.ts +29 -0
  85. package/dist/http/cors-internal.js +160 -0
  86. package/dist/http/cors.d.ts +5 -8
  87. package/dist/http/cors.js +7 -165
  88. package/dist/http/extension.d.ts +348 -0
  89. package/dist/http/extension.js +1061 -0
  90. package/dist/http/index.d.ts +9 -7
  91. package/dist/http/index.js +5 -7
  92. package/dist/{application → http}/openapi.d.ts +12 -3
  93. package/dist/{application → http}/openapi.js +164 -102
  94. package/dist/http/path.d.ts +1 -42
  95. package/dist/http/path.js +1 -2
  96. package/dist/http/runtime/request.d.ts +17 -0
  97. package/dist/http/runtime/request.js +109 -0
  98. package/dist/http/runtime/response.d.ts +18 -0
  99. package/dist/http/runtime/response.js +108 -0
  100. package/dist/index.d.ts +4 -0
  101. package/dist/index.js +2 -0
  102. package/dist/message-port/extension.d.ts +66 -0
  103. package/dist/message-port/extension.js +411 -0
  104. package/dist/message-port/index.d.ts +4 -73
  105. package/dist/message-port/index.js +2 -189
  106. package/dist/message-port/transport.d.ts +11 -0
  107. package/dist/message-port/transport.js +45 -0
  108. package/dist/runtime/async-iterator-lifecycle.d.ts +12 -0
  109. package/dist/runtime/async-iterator-lifecycle.js +95 -0
  110. package/dist/runtime/capability.d.ts +11 -11
  111. package/dist/runtime/capability.js +3 -3
  112. package/dist/runtime/di.d.ts +5 -21
  113. package/dist/runtime/di.js +22 -289
  114. package/dist/runtime/execution-tracker.d.ts +8 -0
  115. package/dist/runtime/execution-tracker.js +54 -0
  116. package/dist/runtime/index.d.ts +15 -9
  117. package/dist/runtime/index.js +9 -9
  118. package/dist/runtime/ingress-gate.d.ts +7 -0
  119. package/dist/runtime/ingress-gate.js +33 -0
  120. package/dist/runtime/kernel.d.ts +25 -0
  121. package/dist/runtime/kernel.js +447 -0
  122. package/dist/runtime/logger.d.ts +2 -0
  123. package/dist/runtime/logger.js +2 -0
  124. package/dist/runtime/node-capabilities.d.ts +1 -1
  125. package/dist/runtime/node-capabilities.js +1 -1
  126. package/dist/runtime/server-port.d.ts +2 -0
  127. package/dist/runtime/server-port.js +11 -0
  128. package/dist/tasks/extension.d.ts +144 -0
  129. package/dist/tasks/extension.js +525 -0
  130. package/dist/tasks/index.d.ts +2 -0
  131. package/dist/tasks/index.js +1 -0
  132. package/dist/tasks/runtime/cron.d.ts +6 -0
  133. package/dist/tasks/runtime/cron.js +89 -0
  134. package/dist/websocket/errors.d.ts +9 -0
  135. package/dist/websocket/errors.js +18 -0
  136. package/dist/websocket/extension.d.ts +154 -0
  137. package/dist/websocket/extension.js +533 -0
  138. package/dist/websocket/index.d.ts +3 -0
  139. package/dist/websocket/index.js +2 -0
  140. package/package.json +16 -16
  141. package/dist/application/binding.d.ts +0 -33
  142. package/dist/application/binding.js +0 -295
  143. package/dist/application/host.d.ts +0 -8
  144. package/dist/application/host.js +0 -14
  145. package/dist/application/queue.d.ts +0 -3
  146. package/dist/application/queue.js +0 -4
  147. package/dist/application/scheduler.d.ts +0 -2
  148. package/dist/application/scheduler.js +0 -45
  149. package/dist/core/context-key.d.ts +0 -16
  150. package/dist/core/context-key.js +0 -17
  151. package/dist/core/contract-internal.d.ts +0 -22
  152. package/dist/core/contract-internal.js +0 -61
  153. package/dist/core/contract.d.ts +0 -96
  154. package/dist/core/contract.js +0 -88
  155. package/dist/core/execution.d.ts +0 -78
  156. package/dist/core/execution.js +0 -61
  157. package/dist/core/implementation.d.ts +0 -44
  158. package/dist/core/implementation.js +0 -35
  159. package/dist/core/layer.d.ts +0 -137
  160. package/dist/core/layer.js +0 -81
  161. package/dist/graph/compiler.d.ts +0 -4
  162. package/dist/graph/compiler.js +0 -228
  163. package/dist/graph/graph.d.ts +0 -18
  164. package/dist/graph/graph.js +0 -1118
  165. package/dist/graph/ir.d.ts +0 -175
  166. package/dist/http/application.d.ts +0 -18
  167. package/dist/http/application.js +0 -515
  168. package/dist/http/basic-auth.d.ts +0 -37
  169. package/dist/http/basic-auth.js +0 -67
  170. package/dist/http/definitions.d.ts +0 -363
  171. package/dist/http/definitions.js +0 -310
  172. package/dist/http/hosted-protocol.d.ts +0 -4
  173. package/dist/http/hosted-protocol.js +0 -4
  174. package/dist/http/internal.d.ts +0 -8
  175. package/dist/http/internal.js +0 -1
  176. package/dist/http/params.d.ts +0 -2
  177. package/dist/http/params.js +0 -19
  178. package/dist/http/request-body.d.ts +0 -4
  179. package/dist/http/request-body.js +0 -6
  180. package/dist/http/validate.d.ts +0 -20
  181. package/dist/http/validate.js +0 -6
  182. package/dist/message-port/environment.d.ts +0 -2
  183. package/dist/message-port/environment.js +0 -4
  184. package/dist/runtime/application.d.ts +0 -38
  185. package/dist/runtime/application.js +0 -339
  186. package/dist/runtime/pipeline.d.ts +0 -11
  187. package/dist/runtime/pipeline.js +0 -161
  188. /package/dist/{graph/ir.js → core/instrumentation.js} +0 -0
@@ -0,0 +1,348 @@
1
+ import { type ExecutionDefinition, type ExecutionExtension, type ExecutionExtensionDrainContext, type GenericLayer, type RuntimeCapabilityBinding, type SchemaInput, type SchemaOutput, type StandardSchemaV1, type SourceLocation, type Type } from '../core/index.js';
2
+ import { type HttpPathSegment, type PathParamNames } from './path.js';
3
+ export interface HttpServerDriver {
4
+ readonly runtime: string;
5
+ }
6
+ export declare const HTTP_SERVER: import("../core/extension.js").RuntimeCapability<HttpServerDriver>;
7
+ export interface HttpExecutionRequestDefinition {
8
+ readonly params?: Readonly<Record<string, StandardSchemaV1>>;
9
+ readonly query?: StandardSchemaV1;
10
+ readonly headers?: StandardSchemaV1;
11
+ readonly body?: StandardSchemaV1;
12
+ }
13
+ export type HttpHeaderValue = string | readonly string[];
14
+ export type HttpHeaders = Readonly<Record<string, HttpHeaderValue | undefined>>;
15
+ export interface HttpErrorMatcher<TError extends {
16
+ readonly data: unknown;
17
+ }> {
18
+ is(error: unknown): error is TError;
19
+ }
20
+ export interface HttpErrorMapping<TError extends {
21
+ readonly data: unknown;
22
+ } = {
23
+ readonly data: unknown;
24
+ }, TResult = unknown> {
25
+ readonly kind: 'http-error-mapping';
26
+ readonly definition: HttpErrorMatcher<TError>;
27
+ readonly map: (error: TError) => TResult | Promise<TResult>;
28
+ }
29
+ export interface HttpResponseHeadersWithDefaults<TSchema extends StandardSchemaV1 = StandardSchemaV1> {
30
+ readonly schema: TSchema;
31
+ readonly defaults: HttpHeaders;
32
+ }
33
+ export type HttpResponseHeadersDefinition = StandardSchemaV1 | HttpHeaders | HttpResponseHeadersWithDefaults;
34
+ export interface HttpExecutionResponseDefinition {
35
+ readonly status: number;
36
+ readonly description?: string;
37
+ readonly body?: StandardSchemaV1;
38
+ readonly headers?: HttpResponseHeadersDefinition;
39
+ readonly error?: HttpErrorMapping<any, any>;
40
+ readonly stream?: 'server';
41
+ }
42
+ export type HttpValidationPart = 'body';
43
+ export interface HttpValidationMiddleware<TPart extends HttpValidationPart = HttpValidationPart> {
44
+ readonly kind: 'http-validation';
45
+ readonly part: TPart;
46
+ }
47
+ export interface HttpExecutionRouteDefinition {
48
+ readonly method: string;
49
+ readonly path: string;
50
+ readonly summary?: string;
51
+ readonly description?: string;
52
+ readonly tags?: readonly string[];
53
+ readonly deprecated?: boolean;
54
+ readonly request?: HttpExecutionRequestDefinition;
55
+ readonly responses: Readonly<Record<string, HttpExecutionResponseDefinition>>;
56
+ readonly middlewares?: readonly HttpRouteMiddleware[];
57
+ readonly interaction?: 'unary' | 'server-stream';
58
+ }
59
+ type AnyHttpMiddleware = GenericLayer<any, any, HttpExecutionResult>;
60
+ type HttpRouteMiddleware = AnyHttpMiddleware | HttpValidationMiddleware;
61
+ export interface HttpContractBranchDefinition {
62
+ readonly path?: string;
63
+ readonly responses?: Readonly<Record<string, HttpExecutionResponseDefinition>>;
64
+ readonly middlewares?: readonly AnyHttpMiddleware[];
65
+ readonly routes: HttpContractRouteTree;
66
+ }
67
+ export type HttpContractNodeDefinition = HttpExecutionRouteDefinition | HttpContractBranchDefinition;
68
+ export type HttpContractRouteTree = Readonly<Record<string, HttpContractNodeDefinition>>;
69
+ declare const httpMiddlewareShortCircuit: unique symbol;
70
+ export type HttpMiddleware<TContribution extends object = object, TContext extends object = HttpMiddlewareContext, TShortCircuit extends HttpExecutionResult = never> = GenericLayer<TContext, TContribution, HttpExecutionResult> & {
71
+ readonly [httpMiddlewareShortCircuit]?: TShortCircuit;
72
+ };
73
+ export interface HttpMiddlewareContext {
74
+ readonly request: Request;
75
+ readonly input: {
76
+ readonly params: Readonly<Record<string, unknown>>;
77
+ readonly query: unknown;
78
+ readonly headers: unknown;
79
+ readonly body: unknown;
80
+ };
81
+ readonly signal: AbortSignal;
82
+ }
83
+ type MiddlewareContribution<TMiddleware> = TMiddleware extends GenericLayer<any, infer TContribution, any> ? TContribution : {};
84
+ type UnionToIntersection<TUnion> = (TUnion extends unknown ? (value: TUnion) => void : never) extends (value: infer TIntersection) => void ? TIntersection : never;
85
+ type JoinHttpPath<TPrefix extends string, TPath extends string> = TPrefix extends '' ? TPath : TPrefix extends '/' ? TPath : TPath extends '/' ? TPrefix : `${TPrefix}${TPath}`;
86
+ type BranchPath<TBranch extends HttpContractBranchDefinition> = TBranch extends {
87
+ readonly path: infer TPath extends string;
88
+ } ? TPath : '';
89
+ type BranchResponses<TBranch extends HttpContractBranchDefinition> = TBranch extends {
90
+ readonly responses: infer TResponses extends Readonly<Record<string, HttpExecutionResponseDefinition>>;
91
+ } ? TResponses : {};
92
+ type BranchMiddlewares<TBranch extends HttpContractBranchDefinition> = TBranch extends {
93
+ readonly middlewares: infer TMiddlewares extends readonly AnyHttpMiddleware[];
94
+ } ? TMiddlewares : readonly [];
95
+ type ResolveHttpRoute<TRoute extends HttpExecutionRouteDefinition, TPathPrefix extends string, TResponses extends Readonly<Record<string, HttpExecutionResponseDefinition>>, TMiddlewares extends readonly HttpRouteMiddleware[]> = Omit<TRoute, 'path' | 'responses' | 'middlewares'> & {
96
+ readonly path: JoinHttpPath<TPathPrefix, TRoute['path']>;
97
+ readonly responses: TResponses & TRoute['responses'];
98
+ } & (readonly [
99
+ ...TMiddlewares,
100
+ ...(TRoute extends {
101
+ readonly middlewares: infer TRouteMiddlewares extends readonly HttpRouteMiddleware[];
102
+ } ? TRouteMiddlewares : readonly [])
103
+ ] extends readonly [] ? {} : {
104
+ readonly middlewares: readonly [
105
+ ...TMiddlewares,
106
+ ...(TRoute extends {
107
+ readonly middlewares: infer TRouteMiddlewares extends readonly HttpRouteMiddleware[];
108
+ } ? TRouteMiddlewares : readonly [])
109
+ ];
110
+ });
111
+ type ResolveHttpNode<TName extends string, TNode extends HttpContractNodeDefinition, TPathPrefix extends string, TResponses extends Readonly<Record<string, HttpExecutionResponseDefinition>>, TMiddlewares extends readonly HttpRouteMiddleware[]> = TNode extends HttpExecutionRouteDefinition ? Readonly<Record<TName, ResolveHttpRoute<TNode, TPathPrefix, TResponses, TMiddlewares>>> : TNode extends HttpContractBranchDefinition ? ResolveHttpRouteTree<TNode['routes'], JoinHttpPath<TPathPrefix, BranchPath<TNode>>, TResponses & BranchResponses<TNode>, readonly [...TMiddlewares, ...BranchMiddlewares<TNode>]> : never;
112
+ type ResolveHttpRouteTree<TTree extends HttpContractRouteTree, TPathPrefix extends string = '', TResponses extends Readonly<Record<string, HttpExecutionResponseDefinition>> = {}, TMiddlewares extends readonly HttpRouteMiddleware[] = readonly []> = UnionToIntersection<{
113
+ [TName in keyof TTree & string]: ResolveHttpNode<TName, TTree[TName], TPathPrefix, TResponses, TMiddlewares>;
114
+ }[keyof TTree & string]>;
115
+ export type ResolvedHttpContractRoutes<TTree extends HttpContractRouteTree> = ResolveHttpRouteTree<TTree> extends infer TRoutes ? {
116
+ readonly [TName in keyof TRoutes]: Extract<TRoutes[TName], HttpExecutionRouteDefinition>;
117
+ } : never;
118
+ type HasResponseNameCollision<TLeft extends Readonly<Record<string, HttpExecutionResponseDefinition>>, TRight extends Readonly<Record<string, HttpExecutionResponseDefinition>>> = Extract<keyof TLeft, keyof TRight> extends never ? false : true;
119
+ type IsHttpContractNodeInheritanceValid<TNode extends HttpContractNodeDefinition, TResponses extends Readonly<Record<string, HttpExecutionResponseDefinition>>> = TNode extends HttpExecutionRouteDefinition ? HasResponseNameCollision<TResponses, TNode['responses']> extends true ? false : true : TNode extends HttpContractBranchDefinition ? HasResponseNameCollision<TResponses, BranchResponses<TNode>> extends true ? false : IsHttpContractTreeInheritanceValid<TNode['routes'], TResponses & BranchResponses<TNode>> : false;
120
+ type IsHttpContractTreeInheritanceValid<TTree extends HttpContractRouteTree, TResponses extends Readonly<Record<string, HttpExecutionResponseDefinition>> = {}> = string extends keyof TTree ? true : false extends {
121
+ [TName in keyof TTree]: IsHttpContractNodeInheritanceValid<TTree[TName], TResponses>;
122
+ }[keyof TTree] ? false : true;
123
+ type HttpMiddlewareState<TRoute extends HttpExecutionRouteDefinition> = TRoute extends {
124
+ readonly middlewares: infer TMiddlewares extends readonly HttpRouteMiddleware[];
125
+ } ? UnionToIntersection<MiddlewareContribution<TMiddlewares[number]>> : {};
126
+ export interface HttpContract<TRoutes extends Readonly<Record<string, HttpExecutionRouteDefinition>> = Readonly<Record<string, HttpExecutionRouteDefinition>>> {
127
+ readonly kind: 'http-contract';
128
+ readonly routes: TRoutes;
129
+ }
130
+ type RequestValue<TRequest extends HttpExecutionRequestDefinition | undefined, TPart extends keyof HttpExecutionRequestDefinition, TFallback> = TRequest extends HttpExecutionRequestDefinition ? TRequest[TPart] extends StandardSchemaV1 ? SchemaOutput<TRequest[TPart]> : TFallback : TFallback;
131
+ type RawHttpQuery = Readonly<Record<string, string | readonly string[] | undefined>>;
132
+ type RawHttpRequestHeaders = Readonly<Record<string, string | undefined>>;
133
+ type HttpParamsValue<TRequest extends HttpExecutionRequestDefinition | undefined> = TRequest extends {
134
+ readonly params: infer TParams;
135
+ } ? TParams extends Readonly<Record<string, StandardSchemaV1>> ? {
136
+ readonly [K in keyof TParams]: SchemaOutput<TParams[K]>;
137
+ } : Readonly<Record<string, string>> : Readonly<Record<string, string>>;
138
+ type IsAny<T> = 0 extends 1 & T ? true : false;
139
+ type IsUnknown<T> = unknown extends T ? [keyof T] extends [never] ? true : false : false;
140
+ type ResponseHeadersSchema<TResponse> = TResponse extends {
141
+ readonly headers: infer THeaders;
142
+ } ? THeaders extends StandardSchemaV1 ? THeaders : THeaders extends {
143
+ readonly schema: infer TSchema extends StandardSchemaV1;
144
+ } ? TSchema : never : never;
145
+ type ResponseHeadersOutput<TResponse> = ResponseHeadersSchema<TResponse> extends infer TSchema ? [TSchema] extends [never] ? never : TSchema extends StandardSchemaV1 ? SchemaOutput<TSchema> : never : never;
146
+ type HttpResultHeaders<THeaders> = IsAny<THeaders> extends true ? {
147
+ readonly headers?: HttpHeaders;
148
+ } : IsUnknown<THeaders> extends true ? {
149
+ readonly headers?: HttpHeaders;
150
+ } : [THeaders] extends [never] ? {
151
+ readonly headers?: never;
152
+ } : undefined extends THeaders ? {
153
+ readonly headers?: Exclude<THeaders, undefined>;
154
+ } : {
155
+ readonly headers: THeaders;
156
+ };
157
+ export type HttpExecutionResult<TVariant extends string = string, TBody = unknown, THeaders = unknown> = {
158
+ readonly kind: 'http-result';
159
+ readonly response: TVariant;
160
+ readonly body: TBody;
161
+ } & HttpResultHeaders<THeaders>;
162
+ export type HttpResponseResult<TBody, THeaders = unknown> = {
163
+ readonly body: TBody;
164
+ } & HttpResultHeaders<THeaders>;
165
+ type ResponseBodyOutput<TResponse extends HttpExecutionResponseDefinition> = TResponse extends {
166
+ readonly stream: 'server';
167
+ readonly body: infer TBody extends StandardSchemaV1;
168
+ } ? AsyncIterable<SchemaOutput<TBody>> : TResponse['body'] extends StandardSchemaV1 ? SchemaOutput<TResponse['body']> : undefined;
169
+ type ResponseValue<TResponse extends HttpExecutionResponseDefinition> = (TResponse['body'] extends StandardSchemaV1 ? {
170
+ readonly body: ResponseBodyOutput<TResponse>;
171
+ } : {
172
+ readonly body?: undefined;
173
+ }) & HttpResultHeaders<ResponseHeadersOutput<TResponse>>;
174
+ type DeclaredHttpResponseResult<TVariant extends string, TResponse extends HttpExecutionResponseDefinition> = HttpExecutionResult<TVariant, ResponseBodyOutput<TResponse>, ResponseHeadersOutput<TResponse>>;
175
+ type DeclaredHttpResult<TRoute extends HttpExecutionRouteDefinition, TVariant extends keyof TRoute['responses'] & string> = DeclaredHttpResponseResult<TVariant, TRoute['responses'][TVariant]>;
176
+ type DeclaredHttpResults<TRoute extends HttpExecutionRouteDefinition> = {
177
+ [TVariant in keyof TRoute['responses'] & string]: DeclaredHttpResult<TRoute, TVariant>;
178
+ }[keyof TRoute['responses'] & string];
179
+ type ResponseHelpers<TResponses extends HttpExecutionRouteDefinition['responses']> = {
180
+ readonly [TVariant in keyof TResponses]: TVariant extends string ? TResponses[TVariant] extends infer TResponse extends HttpExecutionResponseDefinition ? (value: ResponseValue<TResponse>) => DeclaredHttpResponseResult<TVariant, TResponse> : never : never;
181
+ };
182
+ export type HttpExecutionContext<TRoute extends HttpExecutionRouteDefinition = HttpExecutionRouteDefinition> = {
183
+ readonly input: {
184
+ readonly params: HttpParamsValue<TRoute['request']>;
185
+ readonly query: RequestValue<TRoute['request'], 'query', RawHttpQuery>;
186
+ readonly headers: RequestValue<TRoute['request'], 'headers', RawHttpRequestHeaders>;
187
+ readonly body: RequestValue<TRoute['request'], 'body', undefined>;
188
+ };
189
+ readonly response: ResponseHelpers<TRoute['responses']>;
190
+ readonly signal: AbortSignal;
191
+ readonly state: Readonly<HttpMiddlewareState<TRoute>>;
192
+ };
193
+ export type HttpHandlers<TContract extends HttpContract> = {
194
+ readonly [TName in keyof TContract['routes']]: (context: HttpExecutionContext<TContract['routes'][TName]>) => DeclaredHttpResults<TContract['routes'][TName]> | Promise<DeclaredHttpResults<TContract['routes'][TName]>>;
195
+ };
196
+ export interface HttpImplementationDefinition<TContract extends HttpContract = HttpContract> {
197
+ readonly name: string;
198
+ readonly contract: TContract;
199
+ readonly factory: () => HttpHandlers<TContract>;
200
+ }
201
+ interface CompiledHttpRoute {
202
+ readonly name: string;
203
+ readonly method: string;
204
+ readonly path: string;
205
+ readonly segments: readonly HttpPathSegment[];
206
+ readonly dispatch: string;
207
+ readonly definition: HttpExecutionRouteDefinition;
208
+ readonly middlewares: readonly AnyHttpMiddleware[];
209
+ readonly source?: SourceLocation;
210
+ }
211
+ interface CompiledHttpExecution {
212
+ readonly routes: readonly CompiledHttpRoute[];
213
+ readonly factory: () => Record<string, (context: HttpExecutionContext) => HttpExecutionResult | Promise<HttpExecutionResult>>;
214
+ }
215
+ export interface HttpExtensionRuntime {
216
+ fetch(request: Request): Promise<Response>;
217
+ drain(context: ExecutionExtensionDrainContext): Promise<void>;
218
+ }
219
+ export interface HttpHostApi {
220
+ fetch(request: Request): Promise<Response>;
221
+ }
222
+ declare const httpExecutionExtensionIdentity: unique symbol;
223
+ export declare const httpExecutionExtension: ExecutionExtension<HttpImplementationDefinition & ExecutionDefinition, CompiledHttpExecution, 'http', HttpHostApi, HttpExtensionRuntime> & {
224
+ readonly [httpExecutionExtensionIdentity]: true;
225
+ };
226
+ export type HttpExecutionDefinition<TContract extends HttpContract = HttpContract> = HttpImplementationDefinition<TContract> & ExecutionDefinition<typeof httpExecutionExtension>;
227
+ type HttpStatusDigit = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';
228
+ type HttpStatusHundreds = '2' | '3' | '4' | '5';
229
+ type IsValidHttpResponseStatus<TStatus extends number> = number extends TStatus ? false : `${TStatus}` extends `${HttpStatusHundreds}${HttpStatusDigit}${HttpStatusDigit}` ? true : false;
230
+ type IsBodylessHttpStatus<TStatus extends number> = TStatus extends 204 | 205 | 304 ? true : false;
231
+ type IsResponseStatusCompatible<TResponse> = TResponse extends HttpExecutionResponseDefinition ? IsValidHttpResponseStatus<TResponse['status']> extends true ? IsBodylessHttpStatus<TResponse['status']> extends true ? TResponse extends {
232
+ readonly body: StandardSchemaV1;
233
+ } | {
234
+ readonly stream: 'server';
235
+ } ? false : true : TResponse extends {
236
+ readonly stream: 'server';
237
+ } ? TResponse extends {
238
+ readonly body: StandardSchemaV1;
239
+ } ? true : false : true : false : false;
240
+ type AreResponseStatusesCompatible<TResponses extends HttpExecutionRouteDefinition['responses']> = false extends {
241
+ [TVariant in keyof TResponses]: IsResponseStatusCompatible<TResponses[TVariant]>;
242
+ }[keyof TResponses] ? false : true;
243
+ type IsResponseHeadersSchemaCompatible<TResponse> = ResponseHeadersSchema<TResponse> extends infer THeaders ? [THeaders] extends [never] ? true : THeaders extends StandardSchemaV1 ? SchemaOutput<THeaders> extends HttpHeaders | undefined ? true : false : true : true;
244
+ type AreResponseHeadersSchemasCompatible<TResponses extends HttpExecutionRouteDefinition['responses']> = false extends {
245
+ [TVariant in keyof TResponses]: IsResponseHeadersSchemaCompatible<TResponses[TVariant]>;
246
+ }[keyof TResponses] ? false : true;
247
+ type ErrorMappingResult<TResponse> = TResponse extends {
248
+ readonly error: infer TMapping extends HttpErrorMapping<any, any>;
249
+ } ? Awaited<ReturnType<TMapping['map']>> : never;
250
+ type IsErrorMappingCompatible<TResponse> = TResponse extends HttpExecutionResponseDefinition ? TResponse extends {
251
+ readonly error: HttpErrorMapping<any, any>;
252
+ } ? TResponse extends {
253
+ readonly body: StandardSchemaV1;
254
+ } ? ErrorMappingResult<TResponse> extends HttpResponseResult<ResponseBodyOutput<TResponse>, ResponseHeadersOutput<TResponse>> ? true : false : false : true : false;
255
+ type AreErrorMappingsCompatible<TResponses extends HttpExecutionRouteDefinition['responses']> = false extends {
256
+ [TVariant in keyof TResponses]: IsErrorMappingCompatible<TResponses[TVariant]>;
257
+ }[keyof TResponses] ? false : true;
258
+ type HasRequiredStringContentType<TValue> = [TValue] extends [
259
+ {
260
+ readonly 'content-type': string;
261
+ }
262
+ ] ? true : false;
263
+ type IsExactParamsSchemaMap<TPath extends string, TSchemas extends Readonly<Record<string, StandardSchemaV1>>> = Exclude<keyof TSchemas, PathParamNames<TPath>> extends never ? Exclude<PathParamNames<TPath>, keyof TSchemas> extends never ? true : false : false;
264
+ type IsRawStringCompatible<TInput> = string extends TInput ? true : [Extract<TInput, string>] extends [never] ? false : true;
265
+ type DoParamsSchemasAcceptStrings<TSchemas extends Readonly<Record<string, StandardSchemaV1>>> = false extends {
266
+ [TName in keyof TSchemas]: IsRawStringCompatible<SchemaInput<TSchemas[TName]>>;
267
+ }[keyof TSchemas] ? false : true;
268
+ type MiddlewareShortCircuit<TMiddleware> = typeof httpMiddlewareShortCircuit extends keyof TMiddleware ? TMiddleware extends {
269
+ readonly [httpMiddlewareShortCircuit]?: infer TResult;
270
+ } ? Exclude<TResult, undefined> : never : never;
271
+ type RouteMiddlewareShortCircuits<TRoute extends HttpExecutionRouteDefinition> = TRoute extends {
272
+ readonly middlewares: infer TMiddlewares extends readonly HttpRouteMiddleware[];
273
+ } ? MiddlewareShortCircuit<TMiddlewares[number]> : never;
274
+ type AreMiddlewareShortCircuitsCompatible<TRoute extends HttpExecutionRouteDefinition> = [RouteMiddlewareShortCircuits<TRoute>] extends [never] ? true : Exclude<RouteMiddlewareShortCircuits<TRoute>, DeclaredHttpResults<TRoute>> extends never ? true : false;
275
+ type HttpRouteConstraint<TRoute extends HttpExecutionRouteDefinition> = (AreResponseStatusesCompatible<TRoute['responses']> extends true ? AreResponseHeadersSchemasCompatible<TRoute['responses']> extends true ? AreErrorMappingsCompatible<TRoute['responses']> extends true ? unknown : {
276
+ readonly responses: never;
277
+ } : {
278
+ readonly responses: never;
279
+ } : {
280
+ readonly responses: never;
281
+ }) & (TRoute['request'] extends {
282
+ readonly body: StandardSchemaV1;
283
+ } ? TRoute['request'] extends {
284
+ readonly headers: infer THeaders extends StandardSchemaV1;
285
+ } ? HasRequiredStringContentType<SchemaInput<THeaders>> extends true ? HasRequiredStringContentType<SchemaOutput<THeaders>> extends true ? unknown : {
286
+ readonly request: never;
287
+ } : {
288
+ readonly request: never;
289
+ } : {
290
+ readonly request: never;
291
+ } : unknown) & (TRoute['request'] extends {
292
+ readonly params: infer TParams extends Readonly<Record<string, StandardSchemaV1>>;
293
+ } ? IsExactParamsSchemaMap<TRoute['path'], TParams> extends true ? DoParamsSchemasAcceptStrings<TParams> extends true ? unknown : {
294
+ readonly request: never;
295
+ } : {
296
+ readonly request: never;
297
+ } : unknown) & (AreMiddlewareShortCircuitsCompatible<TRoute> extends true ? unknown : {
298
+ readonly middlewares: never;
299
+ });
300
+ type HttpContractConstraint<TRoutes extends Readonly<Record<string, HttpExecutionRouteDefinition>>> = {
301
+ readonly [TName in keyof TRoutes]: HttpRouteConstraint<TRoutes[TName]>;
302
+ };
303
+ type ErrorOf<TDefinition> = TDefinition extends HttpErrorMatcher<infer TError> ? TError : never;
304
+ export declare function httpError<TDefinition extends HttpErrorMatcher<{
305
+ readonly data: unknown;
306
+ }>>(definition: TDefinition): HttpErrorMapping<ErrorOf<TDefinition>, {
307
+ readonly body: ErrorOf<TDefinition>['data'];
308
+ }>;
309
+ export declare function httpError<TDefinition extends HttpErrorMatcher<{
310
+ readonly data: unknown;
311
+ }>, const TResult>(definition: TDefinition, map: (error: ErrorOf<TDefinition>) => TResult | Promise<TResult>): HttpErrorMapping<ErrorOf<TDefinition>, TResult>;
312
+ export declare function defineHttpContract<const TTree extends HttpContractRouteTree>(routes: TTree & (IsHttpContractTreeInheritanceValid<TTree> extends true ? unknown : never) & (ResolvedHttpContractRoutes<TTree> extends HttpContractConstraint<ResolvedHttpContractRoutes<TTree>> ? unknown : never)): HttpContract<ResolvedHttpContractRoutes<TTree>>;
313
+ export declare function defineHttpImplementation<const TContract extends HttpContract>(definition: {
314
+ readonly name?: string;
315
+ readonly contract: TContract;
316
+ readonly factory: HttpImplementationDefinition<TContract>['factory'];
317
+ }): HttpExecutionDefinition<TContract>;
318
+ export declare function bindHttpServer(driver: HttpServerDriver): RuntimeCapabilityBinding<HttpServerDriver>;
319
+ export declare function defineHttpMiddleware<TContribution extends object = {}>(definition: {
320
+ readonly name: string;
321
+ readonly state?: Type<TContribution>;
322
+ readonly factory: HttpMiddleware<NoInfer<TContribution>>['factory'];
323
+ }): HttpMiddleware<TContribution>;
324
+ export declare const validate: Readonly<{
325
+ body: Readonly<{
326
+ kind: 'http-validation';
327
+ part: 'body';
328
+ }>;
329
+ }>;
330
+ export declare const executionHttp: Readonly<{
331
+ contract: typeof defineHttpContract;
332
+ implementation: typeof defineHttpImplementation;
333
+ middleware: typeof defineHttpMiddleware;
334
+ validate: Readonly<{
335
+ body: Readonly<{
336
+ kind: 'http-validation';
337
+ part: 'body';
338
+ }>;
339
+ }>;
340
+ error: typeof httpError;
341
+ extension: ExecutionExtension<HttpImplementationDefinition<HttpContract<Readonly<Record<string, HttpExecutionRouteDefinition>>>> & ExecutionDefinition<import("../core/extension.js").AnyExecutionExtension>, CompiledHttpExecution, "http", HttpHostApi, HttpExtensionRuntime> & {
342
+ readonly [httpExecutionExtensionIdentity]: true;
343
+ };
344
+ serverCapability: import("../core/extension.js").RuntimeCapability<HttpServerDriver>;
345
+ bindServer: typeof bindHttpServer;
346
+ }>;
347
+ export declare function withHttpFrameworkHeaders(result: HttpExecutionResult, headers: HttpHeaders): HttpExecutionResult;
348
+ export {};