@forklaunch/hyper-express 0.7.6 → 0.7.8

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/lib/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _forklaunch_core_http from '@forklaunch/core/http';
2
- import { ParamsObject, ResponsesObject, Body, QueryObject, HeadersObject, SchemaAuthMethods, ContractDetails, ExpressLikeSchemaHandler, DocsConfiguration, ForklaunchExpressLikeApplication, OpenTelemetryCollector, MetricsDefinition, ForklaunchExpressLikeRouter, ForklaunchRouter, TypedMiddlewareDefinition } from '@forklaunch/core/http';
2
+ import { ParamsObject, ResponsesObject, Body, QueryObject, HeadersObject, VersionSchema, SchemaAuthMethods, ContractDetails, ExpressLikeSchemaHandler, DocsConfiguration, ForklaunchExpressLikeApplication, OpenTelemetryCollector, MetricsDefinition, ParsedQs, ForklaunchExpressLikeRouter, ForklaunchRouter, TypedMiddlewareDefinition } from '@forklaunch/core/http';
3
3
  import { Request, Response, MiddlewareNext, ServerConstructorOptions, Server, MiddlewareHandler, Router as Router$1 } from '@forklaunch/hyper-express-fork';
4
4
  export { MiddlewareNext as NextFunction, Request, Response, ServerConstructorOptions } from '@forklaunch/hyper-express-fork';
5
5
  import { AnySchemaValidator } from '@forklaunch/validator';
@@ -63,11 +63,11 @@ import * as uWebsockets from 'uWebSockets.js';
63
63
  * );
64
64
  * ```
65
65
  */
66
- declare const any: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "middleware", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => {
66
+ declare const any: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, "middleware">, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionSchema<SV, "middleware">, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "middleware", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => {
67
67
  _typedHandler: true;
68
68
  _path: Path;
69
- contractDetails: _forklaunch_core_http.MiddlewareContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>;
70
- handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[];
69
+ contractDetails: _forklaunch_core_http.MiddlewareContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>;
70
+ handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[];
71
71
  };
72
72
 
73
73
  /**
@@ -134,7 +134,7 @@ declare const any: <SV extends AnySchemaValidator, Name extends string, Path ext
134
134
  * );
135
135
  * ```
136
136
  */
137
- declare const delete_: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "delete", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "delete", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
137
+ declare const delete_: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, "delete">, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionSchema<SV, "delete">, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "delete", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "delete", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
138
138
 
139
139
  /**
140
140
  * Creates a GET route handler with schema validation and type safety.
@@ -212,7 +212,7 @@ declare const delete_: <SV extends AnySchemaValidator, Name extends string, Path
212
212
  * );
213
213
  * ```
214
214
  */
215
- declare const get: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "get", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "get", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
215
+ declare const get: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, "get">, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionSchema<SV, "get">, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "get", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "get", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
216
216
 
217
217
  /**
218
218
  * Creates a HEAD route handler with schema validation and type safety.
@@ -282,7 +282,7 @@ declare const get: <SV extends AnySchemaValidator, Name extends string, Path ext
282
282
  * );
283
283
  * ```
284
284
  */
285
- declare const head: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "head", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "head", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
285
+ declare const head: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, "head">, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionSchema<SV, "head">, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "head", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "head", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
286
286
 
287
287
  /**
288
288
  * Creates a middleware handler with schema validation and type safety.
@@ -346,11 +346,11 @@ declare const head: <SV extends AnySchemaValidator, Name extends string, Path ex
346
346
  * );
347
347
  * ```
348
348
  */
349
- declare const middleware: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "middleware", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => {
349
+ declare const middleware: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, "middleware">, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionSchema<SV, "middleware">, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "middleware", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => {
350
350
  _typedHandler: true;
351
351
  _path: Path;
352
- contractDetails: _forklaunch_core_http.MiddlewareContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>;
353
- handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[];
352
+ contractDetails: _forklaunch_core_http.MiddlewareContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>;
353
+ handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[];
354
354
  };
355
355
 
356
356
  /**
@@ -408,7 +408,7 @@ declare const middleware: <SV extends AnySchemaValidator, Name extends string, P
408
408
  * );
409
409
  * ```
410
410
  */
411
- declare const options: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "options", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "options", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
411
+ declare const options: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, "options">, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionSchema<SV, "options">, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "options", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "options", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
412
412
 
413
413
  /**
414
414
  * Creates a PATCH route handler with schema validation and type safety.
@@ -500,7 +500,7 @@ declare const options: <SV extends AnySchemaValidator, Name extends string, Path
500
500
  * );
501
501
  * ```
502
502
  */
503
- declare const patch: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "patch", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "patch", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
503
+ declare const patch: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, "patch">, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionSchema<SV, "patch">, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "patch", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "patch", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
504
504
 
505
505
  /**
506
506
  * Creates a POST route handler with schema validation and type safety.
@@ -585,7 +585,7 @@ declare const patch: <SV extends AnySchemaValidator, Name extends string, Path e
585
585
  * );
586
586
  * ```
587
587
  */
588
- declare const post: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "post", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "post", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
588
+ declare const post: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, "post">, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionSchema<SV, "post">, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "post", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "post", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
589
589
 
590
590
  /**
591
591
  * Creates a PUT route handler with schema validation and type safety for Hyper-Express.
@@ -651,7 +651,7 @@ declare const post: <SV extends AnySchemaValidator, Name extends string, Path ex
651
651
  * );
652
652
  * ```
653
653
  */
654
- declare const put: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "put", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "put", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
654
+ declare const put: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, "put">, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionSchema<SV, "put">, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "put", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "put", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
655
655
 
656
656
  /**
657
657
  * Creates a TRACE route handler with schema validation and type safety.
@@ -703,7 +703,7 @@ declare const put: <SV extends AnySchemaValidator, Name extends string, Path ext
703
703
  * );
704
704
  * ```
705
705
  */
706
- declare const trace: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "trace", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "trace", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
706
+ declare const trace: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, "trace">, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionSchema<SV, "trace">, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "trace", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "trace", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
707
707
 
708
708
  type ExpressOptions = {
709
709
  docs?: DocsConfiguration;
@@ -785,6 +785,18 @@ declare class Application<SV extends AnySchemaValidator> extends ForklaunchExpre
785
785
  listen(unix_path: string, callback?: (listen_socket: uWebsockets.us_listen_socket) => void): Promise<uWebsockets.us_listen_socket>;
786
786
  }
787
787
 
788
+ /**
789
+ * A request handler function compatible with Hyper-Express, used for processing HTTP requests.
790
+ *
791
+ * @param req - The incoming request object, with `query` and `headers` properties normalized to either `ParsedQs` or a generic record.
792
+ * @param res - The response object for sending data back to the client.
793
+ * @param next - The middleware next function to pass control to the next handler.
794
+ */
795
+ type ExpressRequestHandler = (req: Omit<Request<Record<string, unknown>>, 'query' | 'headers'> & {
796
+ query: ParsedQs | Record<string, unknown>;
797
+ headers: Record<string, unknown>;
798
+ }, res: Response<Record<string, unknown>>, next: MiddlewareNext) => void;
799
+
788
800
  declare class Router<SV extends AnySchemaValidator, BasePath extends `/${string}`> extends ForklaunchExpressLikeRouter<SV, BasePath, MiddlewareHandler, Router$1, Request<Record<string, unknown>>, Response<Record<string, unknown>>, MiddlewareNext> implements ForklaunchRouter<SV> {
789
801
  basePath: BasePath;
790
802
  private configOptions;
@@ -792,7 +804,7 @@ declare class Router<SV extends AnySchemaValidator, BasePath extends `/${string}
792
804
  busboy?: BusboyConfig;
793
805
  });
794
806
  route(path: string): this;
795
- any: TypedMiddlewareDefinition<this, SV, Request<Record<string, unknown>>, Response<Record<string, unknown>>, MiddlewareNext, MiddlewareHandler>;
807
+ any: TypedMiddlewareDefinition<this, SV, Request<Record<string, unknown>>, Response<Record<string, unknown>>, MiddlewareNext, ExpressRequestHandler>;
796
808
  clone(): this;
797
809
  }
798
810
 
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _forklaunch_core_http from '@forklaunch/core/http';
2
- import { ParamsObject, ResponsesObject, Body, QueryObject, HeadersObject, SchemaAuthMethods, ContractDetails, ExpressLikeSchemaHandler, DocsConfiguration, ForklaunchExpressLikeApplication, OpenTelemetryCollector, MetricsDefinition, ForklaunchExpressLikeRouter, ForklaunchRouter, TypedMiddlewareDefinition } from '@forklaunch/core/http';
2
+ import { ParamsObject, ResponsesObject, Body, QueryObject, HeadersObject, VersionSchema, SchemaAuthMethods, ContractDetails, ExpressLikeSchemaHandler, DocsConfiguration, ForklaunchExpressLikeApplication, OpenTelemetryCollector, MetricsDefinition, ParsedQs, ForklaunchExpressLikeRouter, ForklaunchRouter, TypedMiddlewareDefinition } from '@forklaunch/core/http';
3
3
  import { Request, Response, MiddlewareNext, ServerConstructorOptions, Server, MiddlewareHandler, Router as Router$1 } from '@forklaunch/hyper-express-fork';
4
4
  export { MiddlewareNext as NextFunction, Request, Response, ServerConstructorOptions } from '@forklaunch/hyper-express-fork';
5
5
  import { AnySchemaValidator } from '@forklaunch/validator';
@@ -63,11 +63,11 @@ import * as uWebsockets from 'uWebSockets.js';
63
63
  * );
64
64
  * ```
65
65
  */
66
- declare const any: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "middleware", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => {
66
+ declare const any: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, "middleware">, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionSchema<SV, "middleware">, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "middleware", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => {
67
67
  _typedHandler: true;
68
68
  _path: Path;
69
- contractDetails: _forklaunch_core_http.MiddlewareContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>;
70
- handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[];
69
+ contractDetails: _forklaunch_core_http.MiddlewareContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>;
70
+ handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[];
71
71
  };
72
72
 
73
73
  /**
@@ -134,7 +134,7 @@ declare const any: <SV extends AnySchemaValidator, Name extends string, Path ext
134
134
  * );
135
135
  * ```
136
136
  */
137
- declare const delete_: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "delete", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "delete", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
137
+ declare const delete_: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, "delete">, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionSchema<SV, "delete">, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "delete", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "delete", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
138
138
 
139
139
  /**
140
140
  * Creates a GET route handler with schema validation and type safety.
@@ -212,7 +212,7 @@ declare const delete_: <SV extends AnySchemaValidator, Name extends string, Path
212
212
  * );
213
213
  * ```
214
214
  */
215
- declare const get: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "get", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "get", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
215
+ declare const get: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, "get">, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionSchema<SV, "get">, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "get", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "get", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
216
216
 
217
217
  /**
218
218
  * Creates a HEAD route handler with schema validation and type safety.
@@ -282,7 +282,7 @@ declare const get: <SV extends AnySchemaValidator, Name extends string, Path ext
282
282
  * );
283
283
  * ```
284
284
  */
285
- declare const head: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "head", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "head", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
285
+ declare const head: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, "head">, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionSchema<SV, "head">, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "head", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "head", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
286
286
 
287
287
  /**
288
288
  * Creates a middleware handler with schema validation and type safety.
@@ -346,11 +346,11 @@ declare const head: <SV extends AnySchemaValidator, Name extends string, Path ex
346
346
  * );
347
347
  * ```
348
348
  */
349
- declare const middleware: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "middleware", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => {
349
+ declare const middleware: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, "middleware">, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionSchema<SV, "middleware">, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "middleware", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => {
350
350
  _typedHandler: true;
351
351
  _path: Path;
352
- contractDetails: _forklaunch_core_http.MiddlewareContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>;
353
- handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[];
352
+ contractDetails: _forklaunch_core_http.MiddlewareContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>;
353
+ handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[];
354
354
  };
355
355
 
356
356
  /**
@@ -408,7 +408,7 @@ declare const middleware: <SV extends AnySchemaValidator, Name extends string, P
408
408
  * );
409
409
  * ```
410
410
  */
411
- declare const options: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "options", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "options", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
411
+ declare const options: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, "options">, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionSchema<SV, "options">, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "options", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "options", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
412
412
 
413
413
  /**
414
414
  * Creates a PATCH route handler with schema validation and type safety.
@@ -500,7 +500,7 @@ declare const options: <SV extends AnySchemaValidator, Name extends string, Path
500
500
  * );
501
501
  * ```
502
502
  */
503
- declare const patch: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "patch", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "patch", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
503
+ declare const patch: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, "patch">, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionSchema<SV, "patch">, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "patch", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "patch", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
504
504
 
505
505
  /**
506
506
  * Creates a POST route handler with schema validation and type safety.
@@ -585,7 +585,7 @@ declare const patch: <SV extends AnySchemaValidator, Name extends string, Path e
585
585
  * );
586
586
  * ```
587
587
  */
588
- declare const post: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "post", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "post", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
588
+ declare const post: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, "post">, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionSchema<SV, "post">, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "post", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "post", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
589
589
 
590
590
  /**
591
591
  * Creates a PUT route handler with schema validation and type safety for Hyper-Express.
@@ -651,7 +651,7 @@ declare const post: <SV extends AnySchemaValidator, Name extends string, Path ex
651
651
  * );
652
652
  * ```
653
653
  */
654
- declare const put: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "put", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "put", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
654
+ declare const put: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, "put">, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionSchema<SV, "put">, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "put", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "put", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
655
655
 
656
656
  /**
657
657
  * Creates a TRACE route handler with schema validation and type safety.
@@ -703,7 +703,7 @@ declare const put: <SV extends AnySchemaValidator, Name extends string, Path ext
703
703
  * );
704
704
  * ```
705
705
  */
706
- declare const trace: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "trace", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "trace", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
706
+ declare const trace: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, "trace">, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionSchema<SV, "trace">, Request<LocalsObj>>>(schemaValidator: SV, path: Path, contractDetails: ContractDetails<SV, Name, "trace", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Request<LocalsObj>, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext>[]) => _forklaunch_core_http.ExpressLikeTypedHandler<SV, Name, "trace", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, Request<LocalsObj>, Response<LocalsObj>, MiddlewareNext, Auth>;
707
707
 
708
708
  type ExpressOptions = {
709
709
  docs?: DocsConfiguration;
@@ -785,6 +785,18 @@ declare class Application<SV extends AnySchemaValidator> extends ForklaunchExpre
785
785
  listen(unix_path: string, callback?: (listen_socket: uWebsockets.us_listen_socket) => void): Promise<uWebsockets.us_listen_socket>;
786
786
  }
787
787
 
788
+ /**
789
+ * A request handler function compatible with Hyper-Express, used for processing HTTP requests.
790
+ *
791
+ * @param req - The incoming request object, with `query` and `headers` properties normalized to either `ParsedQs` or a generic record.
792
+ * @param res - The response object for sending data back to the client.
793
+ * @param next - The middleware next function to pass control to the next handler.
794
+ */
795
+ type ExpressRequestHandler = (req: Omit<Request<Record<string, unknown>>, 'query' | 'headers'> & {
796
+ query: ParsedQs | Record<string, unknown>;
797
+ headers: Record<string, unknown>;
798
+ }, res: Response<Record<string, unknown>>, next: MiddlewareNext) => void;
799
+
788
800
  declare class Router<SV extends AnySchemaValidator, BasePath extends `/${string}`> extends ForklaunchExpressLikeRouter<SV, BasePath, MiddlewareHandler, Router$1, Request<Record<string, unknown>>, Response<Record<string, unknown>>, MiddlewareNext> implements ForklaunchRouter<SV> {
789
801
  basePath: BasePath;
790
802
  private configOptions;
@@ -792,7 +804,7 @@ declare class Router<SV extends AnySchemaValidator, BasePath extends `/${string}
792
804
  busboy?: BusboyConfig;
793
805
  });
794
806
  route(path: string): this;
795
- any: TypedMiddlewareDefinition<this, SV, Request<Record<string, unknown>>, Response<Record<string, unknown>>, MiddlewareNext, MiddlewareHandler>;
807
+ any: TypedMiddlewareDefinition<this, SV, Request<Record<string, unknown>>, Response<Record<string, unknown>>, MiddlewareNext, ExpressRequestHandler>;
796
808
  clone(): this;
797
809
  }
798
810
 
package/lib/index.js CHANGED
@@ -109,9 +109,15 @@ var import_http11 = require("@forklaunch/core/http");
109
109
  function contentParse(options2) {
110
110
  return async (req) => {
111
111
  const coercedRequest = req;
112
+ let contractBody;
113
+ if (coercedRequest.contractDetails.versions) {
114
+ contractBody = Object.values(coercedRequest.contractDetails.versions)[0]?.body;
115
+ } else {
116
+ contractBody = coercedRequest.contractDetails.body;
117
+ }
112
118
  const discriminatedBody = (0, import_http11.discriminateBody)(
113
119
  coercedRequest.schemaValidator,
114
- coercedRequest.contractDetails.body
120
+ contractBody
115
121
  );
116
122
  if (discriminatedBody != null) {
117
123
  switch (discriminatedBody.parserType) {
@@ -146,6 +152,9 @@ function contentParse(options2) {
146
152
  break;
147
153
  default:
148
154
  (0, import_common.isNever)(discriminatedBody.parserType);
155
+ throw new Error(
156
+ "Unsupported parser type for body: " + discriminatedBody.parserType
157
+ );
149
158
  }
150
159
  }
151
160
  };
@@ -321,7 +330,7 @@ Correlation id: ${(0, import_http13.isForklaunchRequest)(req) ? req.context.corr
321
330
  [import_http13.ATTR_HTTP_RESPONSE_STATUS_CODE]: statusCode ?? 500
322
331
  });
323
332
  });
324
- const openApi = (0, import_http13.generateSwaggerDocument)(
333
+ const openApi = (0, import_http13.generateOpenApiSpecs)(
325
334
  this.schemaValidator,
326
335
  protocol,
327
336
  host,
@@ -330,32 +339,47 @@ Correlation id: ${(0, import_http13.isForklaunchRequest)(req) ? req.context.corr
330
339
  );
331
340
  if (this.docsConfiguration == null || this.docsConfiguration.type === "scalar") {
332
341
  this.internal.use(
333
- `/api/${process.env.VERSION ?? "v1"}${process.env.DOCS_PATH ?? "/docs"}`,
342
+ `/api${process.env.VERSION ? `/${process.env.VERSION}` : ""}${process.env.DOCS_PATH ?? "/docs"}`,
334
343
  (0, import_express_api_reference.apiReference)({
335
344
  ...this.docsConfiguration,
336
345
  sources: [
337
346
  {
338
- content: openApi,
347
+ content: openApi[import_http13.OPENAPI_DEFAULT_VERSION],
339
348
  title: "API Reference"
340
349
  },
350
+ ...Object.entries(openApi).map(([version, spec]) => ({
351
+ content: spec,
352
+ title: `API Reference - ${version}`
353
+ })),
341
354
  ...this.docsConfiguration?.sources ?? []
342
355
  ]
343
356
  })
344
357
  );
345
358
  } else if (this.docsConfiguration?.type === "swagger") {
346
- const swaggerPath = `/api/${process.env.VERSION ?? "v1"}${process.env.DOCS_PATH ?? "/docs"}`;
347
- this.internal.use(swaggerPath, swaggerRedirect(swaggerPath));
348
- this.internal.get(`${swaggerPath}/*`, swagger(swaggerPath, openApi));
359
+ const swaggerPath = `/api${process.env.VERSION ? `/${process.env.VERSION}` : ""}${process.env.DOCS_PATH ?? "/docs"}`;
360
+ Object.entries(openApi).forEach(([version, spec]) => {
361
+ const versionPath = encodeURIComponent(`${swaggerPath}/${version}`);
362
+ this.internal.use(versionPath, swaggerRedirect(versionPath));
363
+ this.internal.get(`${versionPath}/*`, swagger(versionPath, spec));
364
+ });
349
365
  }
350
366
  this.internal.get(
351
- `/api/${process.env.VERSION ?? "v1"}/openapi`,
367
+ `/api${process.env.VERSION ? `/${process.env.VERSION}` : ""}/openapi`,
352
368
  (_, res) => {
353
369
  res.type("application/json");
354
- res.json(openApi);
370
+ res.json({
371
+ latest: openApi[import_http13.OPENAPI_DEFAULT_VERSION],
372
+ ...Object.fromEntries(
373
+ Object.entries(openApi).map(([version, spec]) => [
374
+ `v${version}`,
375
+ spec
376
+ ])
377
+ )
378
+ });
355
379
  }
356
380
  );
357
381
  this.internal.get(
358
- `/api/${process.env.VERSION ?? "v1"}/openapi-hash`,
382
+ `/api${process.env.VERSION ? `/${process.env.VERSION}` : ""}/openapi-hash`,
359
383
  async (_, res) => {
360
384
  const hash = await import_crypto.default.createHash("sha256").update((0, import_common3.safeStringify)(openApi)).digest("hex");
361
385
  res.send(hash);
package/lib/index.mjs CHANGED
@@ -83,8 +83,9 @@ import { safeStringify as safeStringify2 } from "@forklaunch/common";
83
83
  import {
84
84
  ATTR_HTTP_RESPONSE_STATUS_CODE,
85
85
  ForklaunchExpressLikeApplication,
86
- generateSwaggerDocument,
87
- isForklaunchRequest
86
+ generateOpenApiSpecs,
87
+ isForklaunchRequest,
88
+ OPENAPI_DEFAULT_VERSION
88
89
  } from "@forklaunch/core/http";
89
90
  import {
90
91
  Server
@@ -98,9 +99,15 @@ import { discriminateBody } from "@forklaunch/core/http";
98
99
  function contentParse(options2) {
99
100
  return async (req) => {
100
101
  const coercedRequest = req;
102
+ let contractBody;
103
+ if (coercedRequest.contractDetails.versions) {
104
+ contractBody = Object.values(coercedRequest.contractDetails.versions)[0]?.body;
105
+ } else {
106
+ contractBody = coercedRequest.contractDetails.body;
107
+ }
101
108
  const discriminatedBody = discriminateBody(
102
109
  coercedRequest.schemaValidator,
103
- coercedRequest.contractDetails.body
110
+ contractBody
104
111
  );
105
112
  if (discriminatedBody != null) {
106
113
  switch (discriminatedBody.parserType) {
@@ -135,6 +142,9 @@ function contentParse(options2) {
135
142
  break;
136
143
  default:
137
144
  isNever(discriminatedBody.parserType);
145
+ throw new Error(
146
+ "Unsupported parser type for body: " + discriminatedBody.parserType
147
+ );
138
148
  }
139
149
  }
140
150
  };
@@ -312,7 +322,7 @@ Correlation id: ${isForklaunchRequest(req) ? req.context.correlationId : "No cor
312
322
  [ATTR_HTTP_RESPONSE_STATUS_CODE]: statusCode ?? 500
313
323
  });
314
324
  });
315
- const openApi = generateSwaggerDocument(
325
+ const openApi = generateOpenApiSpecs(
316
326
  this.schemaValidator,
317
327
  protocol,
318
328
  host,
@@ -321,32 +331,47 @@ Correlation id: ${isForklaunchRequest(req) ? req.context.correlationId : "No cor
321
331
  );
322
332
  if (this.docsConfiguration == null || this.docsConfiguration.type === "scalar") {
323
333
  this.internal.use(
324
- `/api/${process.env.VERSION ?? "v1"}${process.env.DOCS_PATH ?? "/docs"}`,
334
+ `/api${process.env.VERSION ? `/${process.env.VERSION}` : ""}${process.env.DOCS_PATH ?? "/docs"}`,
325
335
  apiReference({
326
336
  ...this.docsConfiguration,
327
337
  sources: [
328
338
  {
329
- content: openApi,
339
+ content: openApi[OPENAPI_DEFAULT_VERSION],
330
340
  title: "API Reference"
331
341
  },
342
+ ...Object.entries(openApi).map(([version, spec]) => ({
343
+ content: spec,
344
+ title: `API Reference - ${version}`
345
+ })),
332
346
  ...this.docsConfiguration?.sources ?? []
333
347
  ]
334
348
  })
335
349
  );
336
350
  } else if (this.docsConfiguration?.type === "swagger") {
337
- const swaggerPath = `/api/${process.env.VERSION ?? "v1"}${process.env.DOCS_PATH ?? "/docs"}`;
338
- this.internal.use(swaggerPath, swaggerRedirect(swaggerPath));
339
- this.internal.get(`${swaggerPath}/*`, swagger(swaggerPath, openApi));
351
+ const swaggerPath = `/api${process.env.VERSION ? `/${process.env.VERSION}` : ""}${process.env.DOCS_PATH ?? "/docs"}`;
352
+ Object.entries(openApi).forEach(([version, spec]) => {
353
+ const versionPath = encodeURIComponent(`${swaggerPath}/${version}`);
354
+ this.internal.use(versionPath, swaggerRedirect(versionPath));
355
+ this.internal.get(`${versionPath}/*`, swagger(versionPath, spec));
356
+ });
340
357
  }
341
358
  this.internal.get(
342
- `/api/${process.env.VERSION ?? "v1"}/openapi`,
359
+ `/api${process.env.VERSION ? `/${process.env.VERSION}` : ""}/openapi`,
343
360
  (_, res) => {
344
361
  res.type("application/json");
345
- res.json(openApi);
362
+ res.json({
363
+ latest: openApi[OPENAPI_DEFAULT_VERSION],
364
+ ...Object.fromEntries(
365
+ Object.entries(openApi).map(([version, spec]) => [
366
+ `v${version}`,
367
+ spec
368
+ ])
369
+ )
370
+ });
346
371
  }
347
372
  );
348
373
  this.internal.get(
349
- `/api/${process.env.VERSION ?? "v1"}/openapi-hash`,
374
+ `/api${process.env.VERSION ? `/${process.env.VERSION}` : ""}/openapi-hash`,
350
375
  async (_, res) => {
351
376
  const hash = await crypto.createHash("sha256").update(safeStringify2(openApi)).digest("hex");
352
377
  res.send(hash);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forklaunch/hyper-express",
3
- "version": "0.7.6",
3
+ "version": "0.7.8",
4
4
  "description": "Forklaunch framework for hyper-express.",
5
5
  "homepage": "https://github.com/forklaunch/forklaunch-js#readme",
6
6
  "bugs": {
@@ -26,37 +26,37 @@
26
26
  ],
27
27
  "dependencies": {
28
28
  "@forklaunch/hyper-express-fork": "^6.17.34",
29
- "@scalar/express-api-reference": "^0.8.10",
29
+ "@scalar/express-api-reference": "^0.8.13",
30
30
  "cors": "^2.8.5",
31
31
  "live-directory": "^3.0.3",
32
32
  "openapi3-ts": "^4.5.0",
33
33
  "qs": "^6.14.0",
34
- "swagger-ui-dist": "^5.26.2",
34
+ "swagger-ui-dist": "^5.27.1",
35
35
  "swagger-ui-express": "^5.0.1",
36
36
  "uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.44.0",
37
- "@forklaunch/common": "0.4.5",
38
- "@forklaunch/core": "0.11.6",
39
- "@forklaunch/validator": "0.7.7"
37
+ "@forklaunch/common": "0.4.6",
38
+ "@forklaunch/validator": "0.8.0",
39
+ "@forklaunch/core": "0.12.0"
40
40
  },
41
41
  "devDependencies": {
42
- "@eslint/js": "^9.31.0",
42
+ "@eslint/js": "^9.32.0",
43
43
  "@types/busboy": "^1.5.4",
44
44
  "@types/cors": "^2.8.19",
45
45
  "@types/jest": "^30.0.0",
46
46
  "@types/qs": "^6.14.0",
47
47
  "@types/swagger-ui-dist": "^3.30.6",
48
48
  "@types/swagger-ui-express": "^4.1.8",
49
- "@typescript/native-preview": "7.0.0-dev.20250712.1",
50
- "jest": "^30.0.4",
49
+ "@typescript/native-preview": "7.0.0-dev.20250802.1",
50
+ "jest": "^30.0.5",
51
51
  "kill-port-process": "^3.2.1",
52
52
  "prettier": "^3.6.2",
53
53
  "ts-jest": "^29.4.0",
54
54
  "ts-node": "^10.9.2",
55
55
  "tsup": "^8.5.0",
56
56
  "tsx": "^4.20.3",
57
- "typedoc": "^0.28.7",
58
- "typescript": "^5.8.3",
59
- "typescript-eslint": "^8.36.0"
57
+ "typedoc": "^0.28.9",
58
+ "typescript": "^5.9.2",
59
+ "typescript-eslint": "^8.38.0"
60
60
  },
61
61
  "scripts": {
62
62
  "build": "tsgo --noEmit && tsup index.ts --format cjs,esm --no-splitting --dts --tsconfig tsconfig.json --out-dir lib --clean",