@forklaunch/core 0.2.37 → 0.3.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.
- package/lib/{src/database/mikro/models/entities/base.entity.d.ts → base.entity-DNfmMOgd.d.mts} +3 -2
- package/lib/base.entity-DNfmMOgd.d.ts +27 -0
- package/lib/{src/cache/redisTtlCache.d.ts → cache/index.d.mts} +67 -4
- package/lib/cache/index.d.ts +130 -0
- package/lib/cache/index.js +133 -0
- package/lib/cache/index.mjs +105 -0
- package/lib/controllers/index.d.mts +5 -0
- package/lib/controllers/index.d.ts +5 -0
- package/lib/controllers/index.js +18 -0
- package/lib/controllers/index.mjs +0 -0
- package/lib/database/index.d.mts +37 -0
- package/lib/{src/database/mikro/models/entities/mongo.base.entity.d.ts → database/index.d.ts} +5 -2
- package/lib/database/index.js +78 -0
- package/lib/database/index.mjs +53 -0
- package/lib/dtoMapper/index.d.mts +215 -0
- package/lib/dtoMapper/index.d.ts +215 -0
- package/lib/dtoMapper/index.js +230 -0
- package/lib/dtoMapper/index.mjs +202 -0
- package/lib/http/index.d.mts +910 -0
- package/lib/http/index.d.ts +910 -0
- package/lib/http/index.js +2181 -0
- package/lib/http/index.mjs +2122 -0
- package/lib/services/index.d.mts +64 -0
- package/lib/services/index.d.ts +64 -0
- package/lib/services/index.js +159 -0
- package/lib/services/index.mjs +131 -0
- package/package.json +39 -26
- package/lib/src/cache/index.d.ts +0 -5
- package/lib/src/cache/index.d.ts.map +0 -1
- package/lib/src/cache/index.js +0 -4
- package/lib/src/cache/interfaces/ttlCache.interface.d.ts +0 -48
- package/lib/src/cache/interfaces/ttlCache.interface.d.ts.map +0 -1
- package/lib/src/cache/interfaces/ttlCache.interface.js +0 -1
- package/lib/src/cache/redisTtlCache.d.ts.map +0 -1
- package/lib/src/cache/redisTtlCache.js +0 -98
- package/lib/src/cache/types/ttlCacheRecord.types.d.ts +0 -14
- package/lib/src/cache/types/ttlCacheRecord.types.d.ts.map +0 -1
- package/lib/src/cache/types/ttlCacheRecord.types.js +0 -1
- package/lib/src/cache/utils/cacheKey.d.ts +0 -2
- package/lib/src/cache/utils/cacheKey.d.ts.map +0 -1
- package/lib/src/cache/utils/cacheKey.js +0 -3
- package/lib/src/controllers/index.d.ts +0 -2
- package/lib/src/controllers/index.d.ts.map +0 -1
- package/lib/src/controllers/index.js +0 -1
- package/lib/src/controllers/interfaces/controller.interface.d.ts +0 -4
- package/lib/src/controllers/interfaces/controller.interface.d.ts.map +0 -1
- package/lib/src/controllers/interfaces/controller.interface.js +0 -1
- package/lib/src/database/index.d.ts +0 -3
- package/lib/src/database/index.d.ts.map +0 -1
- package/lib/src/database/index.js +0 -2
- package/lib/src/database/mikro/models/entities/base.entity.d.ts.map +0 -1
- package/lib/src/database/mikro/models/entities/base.entity.js +0 -42
- package/lib/src/database/mikro/models/entities/mongo.base.entity.d.ts.map +0 -1
- package/lib/src/database/mikro/models/entities/mongo.base.entity.js +0 -51
- package/lib/src/dtoMapper/index.d.ts +0 -3
- package/lib/src/dtoMapper/index.d.ts.map +0 -1
- package/lib/src/dtoMapper/index.js +0 -2
- package/lib/src/dtoMapper/interfaces/dtoMapper.interface.d.ts +0 -18
- package/lib/src/dtoMapper/interfaces/dtoMapper.interface.d.ts.map +0 -1
- package/lib/src/dtoMapper/interfaces/dtoMapper.interface.js +0 -1
- package/lib/src/dtoMapper/models/baseDtoMapper.model.d.ts +0 -72
- package/lib/src/dtoMapper/models/baseDtoMapper.model.d.ts.map +0 -1
- package/lib/src/dtoMapper/models/baseDtoMapper.model.js +0 -76
- package/lib/src/dtoMapper/models/requestDtoMapper.model.d.ts +0 -68
- package/lib/src/dtoMapper/models/requestDtoMapper.model.d.ts.map +0 -1
- package/lib/src/dtoMapper/models/requestDtoMapper.model.js +0 -71
- package/lib/src/dtoMapper/models/responseDtoMapper.model.d.ts +0 -67
- package/lib/src/dtoMapper/models/responseDtoMapper.model.d.ts.map +0 -1
- package/lib/src/dtoMapper/models/responseDtoMapper.model.js +0 -68
- package/lib/src/dtoMapper/types/dtoMapper.types.d.ts +0 -9
- package/lib/src/dtoMapper/types/dtoMapper.types.d.ts.map +0 -1
- package/lib/src/dtoMapper/types/dtoMapper.types.js +0 -1
- package/lib/src/http/application/expressLikeApplication.d.ts +0 -21
- package/lib/src/http/application/expressLikeApplication.d.ts.map +0 -1
- package/lib/src/http/application/expressLikeApplication.js +0 -21
- package/lib/src/http/guards/isConstrainedForklaunchRouter.d.ts +0 -4
- package/lib/src/http/guards/isConstrainedForklaunchRouter.d.ts.map +0 -1
- package/lib/src/http/guards/isConstrainedForklaunchRouter.js +0 -5
- package/lib/src/http/guards/isExpressLikeSchemaHandler.d.ts +0 -5
- package/lib/src/http/guards/isExpressLikeSchemaHandler.d.ts.map +0 -1
- package/lib/src/http/guards/isExpressLikeSchemaHandler.js +0 -6
- package/lib/src/http/guards/isForklaunchExpressLikeRouter.d.ts +0 -5
- package/lib/src/http/guards/isForklaunchExpressLikeRouter.d.ts.map +0 -1
- package/lib/src/http/guards/isForklaunchExpressLikeRouter.js +0 -6
- package/lib/src/http/guards/isForklaunchRouter.d.ts +0 -4
- package/lib/src/http/guards/isForklaunchRouter.d.ts.map +0 -1
- package/lib/src/http/guards/isForklaunchRouter.js +0 -7
- package/lib/src/http/guards/isHttpContractDetails.d.ts +0 -7
- package/lib/src/http/guards/isHttpContractDetails.d.ts.map +0 -1
- package/lib/src/http/guards/isHttpContractDetails.js +0 -9
- package/lib/src/http/guards/isPathParamContractDetails.d.ts +0 -4
- package/lib/src/http/guards/isPathParamContractDetails.d.ts.map +0 -1
- package/lib/src/http/guards/isPathParamContractDetails.js +0 -10
- package/lib/src/http/guards/isResponseShape.d.ts +0 -3
- package/lib/src/http/guards/isResponseShape.d.ts.map +0 -1
- package/lib/src/http/guards/isResponseShape.js +0 -7
- package/lib/src/http/guards/isTypedHandler.d.ts +0 -5
- package/lib/src/http/guards/isTypedHandler.d.ts.map +0 -1
- package/lib/src/http/guards/isTypedHandler.js +0 -6
- package/lib/src/http/handlers/delete.d.ts +0 -9
- package/lib/src/http/handlers/delete.d.ts.map +0 -1
- package/lib/src/http/handlers/delete.js +0 -4
- package/lib/src/http/handlers/get.d.ts +0 -9
- package/lib/src/http/handlers/get.d.ts.map +0 -1
- package/lib/src/http/handlers/get.js +0 -4
- package/lib/src/http/handlers/head.d.ts +0 -9
- package/lib/src/http/handlers/head.d.ts.map +0 -1
- package/lib/src/http/handlers/head.js +0 -4
- package/lib/src/http/handlers/middleware.d.ts +0 -9
- package/lib/src/http/handlers/middleware.d.ts.map +0 -1
- package/lib/src/http/handlers/middleware.js +0 -4
- package/lib/src/http/handlers/options.d.ts +0 -9
- package/lib/src/http/handlers/options.d.ts.map +0 -1
- package/lib/src/http/handlers/options.js +0 -4
- package/lib/src/http/handlers/patch.d.ts +0 -9
- package/lib/src/http/handlers/patch.d.ts.map +0 -1
- package/lib/src/http/handlers/patch.js +0 -4
- package/lib/src/http/handlers/post.d.ts +0 -9
- package/lib/src/http/handlers/post.d.ts.map +0 -1
- package/lib/src/http/handlers/post.js +0 -4
- package/lib/src/http/handlers/put.d.ts +0 -9
- package/lib/src/http/handlers/put.d.ts.map +0 -1
- package/lib/src/http/handlers/put.js +0 -4
- package/lib/src/http/handlers/trace.d.ts +0 -9
- package/lib/src/http/handlers/trace.d.ts.map +0 -1
- package/lib/src/http/handlers/trace.js +0 -4
- package/lib/src/http/handlers/typedAuthHandler.d.ts +0 -5
- package/lib/src/http/handlers/typedAuthHandler.d.ts.map +0 -1
- package/lib/src/http/handlers/typedAuthHandler.js +0 -3
- package/lib/src/http/handlers/typedHandler.d.ts +0 -21
- package/lib/src/http/handlers/typedHandler.d.ts.map +0 -1
- package/lib/src/http/handlers/typedHandler.js +0 -30
- package/lib/src/http/index.d.ts +0 -23
- package/lib/src/http/index.d.ts.map +0 -1
- package/lib/src/http/index.js +0 -22
- package/lib/src/http/interfaces/expressLikeRouter.interface.d.ts +0 -24
- package/lib/src/http/interfaces/expressLikeRouter.interface.d.ts.map +0 -1
- package/lib/src/http/interfaces/expressLikeRouter.interface.js +0 -1
- package/lib/src/http/middleware/request/auth.middleware.d.ts +0 -16
- package/lib/src/http/middleware/request/auth.middleware.d.ts.map +0 -1
- package/lib/src/http/middleware/request/auth.middleware.js +0 -143
- package/lib/src/http/middleware/request/cors.middleware.d.ts +0 -13
- package/lib/src/http/middleware/request/cors.middleware.d.ts.map +0 -1
- package/lib/src/http/middleware/request/cors.middleware.js +0 -15
- package/lib/src/http/middleware/request/createContext.middleware.d.ts +0 -15
- package/lib/src/http/middleware/request/createContext.middleware.d.ts.map +0 -1
- package/lib/src/http/middleware/request/createContext.middleware.js +0 -26
- package/lib/src/http/middleware/request/enrichDetails.middleware.d.ts +0 -15
- package/lib/src/http/middleware/request/enrichDetails.middleware.d.ts.map +0 -1
- package/lib/src/http/middleware/request/enrichDetails.middleware.js +0 -19
- package/lib/src/http/middleware/request/parse.middleware.d.ts +0 -17
- package/lib/src/http/middleware/request/parse.middleware.d.ts.map +0 -1
- package/lib/src/http/middleware/request/parse.middleware.js +0 -43
- package/lib/src/http/middleware/response/parse.middleware.d.ts +0 -31
- package/lib/src/http/middleware/response/parse.middleware.d.ts.map +0 -1
- package/lib/src/http/middleware/response/parse.middleware.js +0 -52
- package/lib/src/http/openApiV3Generator/openApiV3Generator.d.ts +0 -14
- package/lib/src/http/openApiV3Generator/openApiV3Generator.d.ts.map +0 -1
- package/lib/src/http/openApiV3Generator/openApiV3Generator.js +0 -169
- package/lib/src/http/router/expressLikeRouter.d.ts +0 -138
- package/lib/src/http/router/expressLikeRouter.d.ts.map +0 -1
- package/lib/src/http/router/expressLikeRouter.js +0 -483
- package/lib/src/http/types/apiDefinition.types.d.ts +0 -260
- package/lib/src/http/types/apiDefinition.types.d.ts.map +0 -1
- package/lib/src/http/types/apiDefinition.types.js +0 -1
- package/lib/src/http/types/contractDetails.types.d.ts +0 -211
- package/lib/src/http/types/contractDetails.types.d.ts.map +0 -1
- package/lib/src/http/types/contractDetails.types.js +0 -1
- package/lib/src/http/types/expressLikeRouter.types.d.ts +0 -51
- package/lib/src/http/types/expressLikeRouter.types.d.ts.map +0 -1
- package/lib/src/http/types/expressLikeRouter.types.js +0 -1
- package/lib/src/http/types/router.types.d.ts +0 -32
- package/lib/src/http/types/router.types.d.ts.map +0 -1
- package/lib/src/http/types/router.types.js +0 -1
- package/lib/src/http/types/typedHandler.types.d.ts +0 -10
- package/lib/src/http/types/typedHandler.types.d.ts.map +0 -1
- package/lib/src/http/types/typedHandler.types.js +0 -1
- package/lib/src/http/utils/enrichExpressLikeSend.d.ts +0 -32
- package/lib/src/http/utils/enrichExpressLikeSend.d.ts.map +0 -1
- package/lib/src/http/utils/enrichExpressLikeSend.js +0 -50
- package/lib/src/http/utils/httpStatusCodes.d.ts +0 -75
- package/lib/src/http/utils/httpStatusCodes.d.ts.map +0 -1
- package/lib/src/http/utils/httpStatusCodes.js +0 -1039
- package/lib/src/services/configInjector.d.ts +0 -21
- package/lib/src/services/configInjector.d.ts.map +0 -1
- package/lib/src/services/configInjector.js +0 -90
- package/lib/src/services/index.d.ts +0 -5
- package/lib/src/services/index.d.ts.map +0 -1
- package/lib/src/services/index.js +0 -4
- package/lib/src/services/interfaces/baseService.d.ts +0 -15
- package/lib/src/services/interfaces/baseService.d.ts.map +0 -1
- package/lib/src/services/interfaces/baseService.js +0 -1
- package/lib/src/services/types/configInjector.types.d.ts +0 -25
- package/lib/src/services/types/configInjector.types.d.ts.map +0 -1
- package/lib/src/services/types/configInjector.types.js +0 -6
- package/lib/src/services/types/entityManager.types.d.ts +0 -4
- package/lib/src/services/types/entityManager.types.d.ts.map +0 -1
- package/lib/src/services/types/entityManager.types.js +0 -1
- package/lib/tests/configInjector.test.d.ts +0 -2
- package/lib/tests/configInjector.test.d.ts.map +0 -1
- package/lib/tests/configInjector.test.js +0 -105
- package/lib/tests/dtoMapper.test.d.ts +0 -2
- package/lib/tests/dtoMapper.test.d.ts.map +0 -1
- package/lib/tests/dtoMapper.test.js +0 -170
- package/lib/tests/expressLikeRouterInstantiation.test.d.ts +0 -2
- package/lib/tests/expressLikeRouterInstantiation.test.d.ts.map +0 -1
- package/lib/tests/expressLikeRouterInstantiation.test.js +0 -118
- package/lib/tests/http.middleware.test.d.ts +0 -2
- package/lib/tests/http.middleware.test.d.ts.map +0 -1
- package/lib/tests/http.middleware.test.js +0 -102
- package/lib/tests/openApiV3Generator.test.d.ts +0 -2
- package/lib/tests/openApiV3Generator.test.d.ts.map +0 -1
- package/lib/tests/openApiV3Generator.test.js +0 -66
- package/lib/tests/redisTtlCache.test.d.ts +0 -2
- package/lib/tests/redisTtlCache.test.d.ts.map +0 -1
- package/lib/tests/redisTtlCache.test.js +0 -49
- package/lib/tests/typedHandler.test.d.ts +0 -2
- package/lib/tests/typedHandler.test.d.ts.map +0 -1
- package/lib/tests/typedHandler.test.js +0 -3
- package/lib/vitest.config.d.ts +0 -3
- package/lib/vitest.config.d.ts.map +0 -1
- package/lib/vitest.config.js +0 -7
@@ -0,0 +1,910 @@
|
|
1
|
+
import { AnySchemaValidator, UnboxedObjectSchema, IdiomaticSchema, Schema, SchemaValidator } from '@forklaunch/validator';
|
2
|
+
import { Prettify, RemoveTrailingSlash, MakePropertyOptionalIfChildrenOptional } from '@forklaunch/common';
|
3
|
+
import { ParsedQs } from 'qs';
|
4
|
+
import { OpenAPIObject } from 'openapi3-ts/oas31';
|
5
|
+
|
6
|
+
interface PathBasedHandler<RouterHandler> {
|
7
|
+
(path: string, ...handlers: RouterHandler[]): unknown;
|
8
|
+
}
|
9
|
+
interface PathOrMiddlewareBasedHandler<RouterHandler> extends PathBasedHandler<RouterHandler> {
|
10
|
+
(...args: RouterHandler[]): unknown;
|
11
|
+
}
|
12
|
+
interface NestableRouterBasedHandler<RouterHandler, Router> extends PathOrMiddlewareBasedHandler<RouterHandler> {
|
13
|
+
(...args: (Router | RouterHandler)[]): unknown;
|
14
|
+
(path: string, ...handlers: (Router | RouterHandler)[]): unknown;
|
15
|
+
}
|
16
|
+
interface ExpressLikeRouter<RouterHandler, Router> {
|
17
|
+
use: NestableRouterBasedHandler<RouterHandler, Router>;
|
18
|
+
all: PathOrMiddlewareBasedHandler<RouterHandler>;
|
19
|
+
connect: PathOrMiddlewareBasedHandler<RouterHandler>;
|
20
|
+
get: PathBasedHandler<RouterHandler>;
|
21
|
+
post: PathBasedHandler<RouterHandler>;
|
22
|
+
put: PathBasedHandler<RouterHandler>;
|
23
|
+
patch: PathBasedHandler<RouterHandler>;
|
24
|
+
delete: PathBasedHandler<RouterHandler>;
|
25
|
+
options: PathBasedHandler<RouterHandler>;
|
26
|
+
head: PathBasedHandler<RouterHandler>;
|
27
|
+
trace: PathBasedHandler<RouterHandler>;
|
28
|
+
}
|
29
|
+
|
30
|
+
/**
|
31
|
+
* Dictionary type for URL parameters.
|
32
|
+
*/
|
33
|
+
type ParamsDictionary = {
|
34
|
+
[key: string]: string;
|
35
|
+
};
|
36
|
+
/**
|
37
|
+
* Type representing an object with only string keys.
|
38
|
+
*
|
39
|
+
* @template SV - A type that extends AnySchemaValidator.
|
40
|
+
*/
|
41
|
+
type StringOnlyObject<SV extends AnySchemaValidator> = Omit<UnboxedObjectSchema<SV>, number | symbol>;
|
42
|
+
/**
|
43
|
+
* Type representing an object with only number keys.
|
44
|
+
*
|
45
|
+
* @template SV - A type that extends AnySchemaValidator.
|
46
|
+
*/
|
47
|
+
type NumberOnlyObject<SV extends AnySchemaValidator> = Omit<UnboxedObjectSchema<SV>, string | symbol>;
|
48
|
+
/**
|
49
|
+
* Type representing the body object in a request.
|
50
|
+
*
|
51
|
+
* @template SV - A type that extends AnySchemaValidator.
|
52
|
+
*/
|
53
|
+
type BodyObject<SV extends AnySchemaValidator> = StringOnlyObject<SV> & unknown;
|
54
|
+
/**
|
55
|
+
* Type representing the parameters object in a request.
|
56
|
+
*
|
57
|
+
* @template SV - A type that extends AnySchemaValidator.
|
58
|
+
*/
|
59
|
+
type ParamsObject<SV extends AnySchemaValidator> = StringOnlyObject<SV> & unknown;
|
60
|
+
/**
|
61
|
+
* Type representing the query object in a request.
|
62
|
+
*
|
63
|
+
* @template SV - A type that extends AnySchemaValidator.
|
64
|
+
*/
|
65
|
+
type QueryObject<SV extends AnySchemaValidator> = StringOnlyObject<SV> & unknown;
|
66
|
+
/**
|
67
|
+
* Type representing the headers object in a request.
|
68
|
+
*
|
69
|
+
* @template SV - A type that extends AnySchemaValidator.
|
70
|
+
*/
|
71
|
+
type HeadersObject<SV extends AnySchemaValidator> = StringOnlyObject<SV> & unknown;
|
72
|
+
/**
|
73
|
+
* Type representing the responses object in a request.
|
74
|
+
*
|
75
|
+
* @template SV - A type that extends AnySchemaValidator.
|
76
|
+
*/
|
77
|
+
type ResponsesObject<SV extends AnySchemaValidator> = {
|
78
|
+
[key: number]: SV['_ValidSchemaObject'] | UnboxedObjectSchema<SV> | string | SV['string'];
|
79
|
+
} & unknown;
|
80
|
+
/**
|
81
|
+
* Type representing the body in a request.
|
82
|
+
*
|
83
|
+
* @template SV - A type that extends AnySchemaValidator.
|
84
|
+
*/
|
85
|
+
type Body<SV extends AnySchemaValidator> = BodyObject<SV> | SV['_ValidSchemaObject'] | SV['_SchemaCatchall'];
|
86
|
+
type AuthMethodsBase = ({
|
87
|
+
readonly method: 'jwt';
|
88
|
+
} | {
|
89
|
+
readonly method: 'basic';
|
90
|
+
readonly login: (username: string, password: string) => boolean;
|
91
|
+
} | {
|
92
|
+
readonly method: 'other';
|
93
|
+
readonly tokenPrefix: string;
|
94
|
+
readonly headerName?: string;
|
95
|
+
readonly decodeResource: (token: string) => string;
|
96
|
+
}) & ({
|
97
|
+
readonly allowedPermissions: Set<string>;
|
98
|
+
readonly forbiddenPermissions?: Set<string>;
|
99
|
+
readonly allowedRoles?: Set<string>;
|
100
|
+
readonly forbiddenRoles?: Set<string>;
|
101
|
+
} | {
|
102
|
+
readonly allowedPermissions?: Set<string>;
|
103
|
+
readonly forbiddenPermissions: Set<string>;
|
104
|
+
readonly allowedRoles?: Set<string>;
|
105
|
+
readonly forbiddenRoles?: Set<string>;
|
106
|
+
} | {
|
107
|
+
readonly allowedPermissions?: Set<string>;
|
108
|
+
readonly forbiddenPermissions?: Set<string>;
|
109
|
+
readonly allowedRoles: Set<string>;
|
110
|
+
readonly forbiddenRoles?: Set<string>;
|
111
|
+
} | {
|
112
|
+
readonly allowedPermissions?: Set<string>;
|
113
|
+
readonly forbiddenPermissions?: Set<string>;
|
114
|
+
readonly allowedRoles?: Set<string>;
|
115
|
+
readonly forbiddenRoles: Set<string>;
|
116
|
+
});
|
117
|
+
/**
|
118
|
+
* Type representing the authentication methods.
|
119
|
+
*/
|
120
|
+
type SchemaAuthMethods<SV extends AnySchemaValidator, ParamsSchema extends ParamsObject<SV>, ReqBody extends Body<SV>, QuerySchema extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>> = Prettify<AuthMethodsBase & {
|
121
|
+
readonly mapPermissions?: ExpressLikeSchemaAuthMapper<SV, ParamsSchema, ReqBody, QuerySchema, ReqHeaders>;
|
122
|
+
readonly mapRoles?: ExpressLikeSchemaAuthMapper<SV, ParamsSchema, ReqBody, QuerySchema, ReqHeaders>;
|
123
|
+
}>;
|
124
|
+
type AuthMethods<SV extends AnySchemaValidator, P extends ParamsDictionary, ReqBody extends Record<string, unknown>, ReqQuery extends ParsedQs, ReqHeaders extends Record<string, string>> = AuthMethodsBase & {
|
125
|
+
readonly mapPermissions?: ExpressLikeAuthMapper<SV, P, ReqBody, ReqQuery, ReqHeaders>;
|
126
|
+
readonly mapRoles?: ExpressLikeAuthMapper<SV, P, ReqBody, ReqQuery, ReqHeaders>;
|
127
|
+
};
|
128
|
+
/**
|
129
|
+
* Type representing a mapped schema.
|
130
|
+
*s ParamsDictionary,
|
131
|
+
// ReqBody extends Record<string, unknown>,
|
132
|
+
//
|
133
|
+
* @template SV - A type that extends AnySchemaValidator.
|
134
|
+
* @template T - A type that extends IdiomaticSchema or a valid schema object.
|
135
|
+
*/
|
136
|
+
type MapSchema<SV extends AnySchemaValidator, T extends IdiomaticSchema<SV> | SV['_ValidSchemaObject']> = Schema<T, SV> extends infer U ? (T extends U ? unknown : U) : never;
|
137
|
+
/**
|
138
|
+
* Type representing the parameters in a request.
|
139
|
+
*/
|
140
|
+
type ExtractParams<Path extends `/${string}`> = Path extends `${string}/:${infer Param}/${infer Rest}` ? Param | ExtractParams<`/${Rest}`> : Path extends `${string}/:${infer Param}` ? Param : never;
|
141
|
+
/**
|
142
|
+
* Type representing the parameters in a request.
|
143
|
+
*/
|
144
|
+
type ExtractedParamsObject<Path extends `/${string}`> = Record<ExtractParams<Path>, unknown>;
|
145
|
+
/**
|
146
|
+
* Represents the path parameter methods.
|
147
|
+
*/
|
148
|
+
type PathParamMethod = 'get' | 'delete' | 'options' | 'head' | 'trace';
|
149
|
+
/**
|
150
|
+
* Represents the body parameter methods.
|
151
|
+
*/
|
152
|
+
type HttpMethod = 'post' | 'patch' | 'put';
|
153
|
+
/**
|
154
|
+
* Represents all supported typed methods.
|
155
|
+
*/
|
156
|
+
type Method = PathParamMethod | HttpMethod | 'middleware';
|
157
|
+
/**
|
158
|
+
* Interface representing a compiled schema for a response.
|
159
|
+
*/
|
160
|
+
type ResponseCompiledSchema = {
|
161
|
+
headers?: unknown;
|
162
|
+
responses: Record<number, unknown>;
|
163
|
+
};
|
164
|
+
/**
|
165
|
+
* Interface representing HTTP contract details for path parameters.
|
166
|
+
*
|
167
|
+
* @template SV - A type that extends AnySchemaValidator.
|
168
|
+
* @template ParamsSchema - A type for parameter schemas, defaulting to ParamsObject.
|
169
|
+
* @template ResponseSchemas - A type for response schemas, defaulting to ResponsesObject.
|
170
|
+
* @template QuerySchema - A type for query schemas, defaulting to QueryObject.
|
171
|
+
*/
|
172
|
+
type PathParamHttpContractDetails<SV extends AnySchemaValidator, Path extends `/${string}` = `/${string}`, ParamsSchema extends ParamsObject<SV> = ParamsObject<SV>, ResponseSchemas extends ResponsesObject<SV> = ResponsesObject<SV>, QuerySchema extends QueryObject<SV> = QueryObject<SV>, ReqHeaders extends HeadersObject<SV> = HeadersObject<SV>, ResHeaders extends HeadersObject<SV> = HeadersObject<SV>> = {
|
173
|
+
/** Name of the contract */
|
174
|
+
readonly name: string;
|
175
|
+
/** Summary of the contract */
|
176
|
+
readonly summary: string;
|
177
|
+
/** Response schemas for the contract */
|
178
|
+
readonly responses: ResponseSchemas;
|
179
|
+
/** Optional request headers for the contract */
|
180
|
+
readonly requestHeaders?: ReqHeaders;
|
181
|
+
/** Optional response headers for the contract */
|
182
|
+
readonly responseHeaders?: ResHeaders;
|
183
|
+
/** Optional query schemas for the contract */
|
184
|
+
readonly query?: QuerySchema;
|
185
|
+
/** Optional authentication details for the contract */
|
186
|
+
readonly auth?: SchemaAuthMethods<SV, string | number | symbol extends ExtractedParamsObject<Path> ? {
|
187
|
+
[K in keyof ExtractedParamsObject<Path>]: ParamsSchema[K];
|
188
|
+
} : ParamsSchema, never, QuerySchema, ReqHeaders> & {};
|
189
|
+
readonly options?: {
|
190
|
+
readonly requestValidation: 'error' | 'warning' | 'none';
|
191
|
+
readonly responseValidation: 'error' | 'warning' | 'none';
|
192
|
+
};
|
193
|
+
} & (string | number | symbol extends ExtractedParamsObject<Path> ? {
|
194
|
+
/** Optional parameters for the contract */
|
195
|
+
readonly params?: ParamsSchema;
|
196
|
+
} : {
|
197
|
+
/** Required parameters for the contract */
|
198
|
+
readonly params: {
|
199
|
+
[K in keyof ExtractedParamsObject<Path>]: ParamsSchema[K];
|
200
|
+
};
|
201
|
+
});
|
202
|
+
/**
|
203
|
+
* Interface representing HTTP contract details.
|
204
|
+
*
|
205
|
+
* @template SV - A type that extends AnySchemaValidator.
|
206
|
+
* @template ParamsSchema - A type for parameter schemas, defaulting to ParamsObject.
|
207
|
+
* @template ResponseSchemas - A type for response schemas, defaulting to ResponsesObject.
|
208
|
+
* @template BodySchema - A type for the body schema, defaulting to Body.
|
209
|
+
* @template QuerySchema - A type for query schemas, defaulting to QueryObject.
|
210
|
+
*/
|
211
|
+
type HttpContractDetails<SV extends AnySchemaValidator, Path extends `/${string}` = `/${string}`, ParamsSchema extends ParamsObject<SV> = ParamsObject<SV>, ResponseSchemas extends ResponsesObject<SV> = ResponsesObject<SV>, BodySchema extends Body<SV> = Body<SV>, QuerySchema extends QueryObject<SV> = QueryObject<SV>, ReqHeaders extends HeadersObject<SV> = HeadersObject<SV>, ResHeaders extends HeadersObject<SV> = HeadersObject<SV>> = PathParamHttpContractDetails<SV, Path, ParamsSchema, ResponseSchemas, QuerySchema, ReqHeaders, ResHeaders> & {
|
212
|
+
/** Required body schema for the contract */
|
213
|
+
readonly body: BodySchema;
|
214
|
+
/** Optional content type for the contract */
|
215
|
+
readonly contentType?: 'application/json' | 'multipart/form-data' | 'application/x-www-form-urlencoded';
|
216
|
+
readonly auth?: SchemaAuthMethods<SV, string | number | symbol extends ExtractedParamsObject<Path> ? {
|
217
|
+
[K in keyof ExtractedParamsObject<Path>]: ParamsSchema[K];
|
218
|
+
} : ParamsSchema, BodySchema, QuerySchema, ReqHeaders> & {};
|
219
|
+
};
|
220
|
+
/**
|
221
|
+
* Interface representing HTTP contract details for middleware.
|
222
|
+
*
|
223
|
+
* @template SV - A type that extends AnySchemaValidator.
|
224
|
+
* @template ParamsSchema - A type for parameter schemas, defaulting to ParamsObject.
|
225
|
+
* @template ResponseSchemas - A type for response schemas, defaulting to ResponsesObject.
|
226
|
+
* @template QuerySchema - A type for query schemas, defaulting to QueryObject.
|
227
|
+
* @template ReqHeaders - A type for request headers, defaulting to HeadersObject.
|
228
|
+
* @template ResHeaders - A type for response headers, defaulting to HeadersObject.
|
229
|
+
*/
|
230
|
+
type MiddlewareContractDetails<SV extends AnySchemaValidator, Path extends `/${string}` = `/${string}`, ParamsSchema extends ParamsObject<SV> = ParamsObject<SV>, ResponseSchemas extends ResponsesObject<SV> = ResponsesObject<SV>, BodySchema extends Body<SV> = Body<SV>, QuerySchema extends QueryObject<SV> = QueryObject<SV>, ReqHeaders extends HeadersObject<SV> = HeadersObject<SV>, ResHeaders extends HeadersObject<SV> = HeadersObject<SV>> = Omit<Partial<HttpContractDetails<SV, Path, ParamsSchema, ResponseSchemas, BodySchema, QuerySchema, ReqHeaders, ResHeaders>>, 'name' | 'summary' | 'responses'>;
|
231
|
+
/**
|
232
|
+
* Utility for different Contract Detail types
|
233
|
+
*/
|
234
|
+
type ContractDetails<SV extends AnySchemaValidator, ContractMethod extends Method, Path extends `/${string}`, ParamsSchema extends ParamsObject<SV>, ResponseSchemas extends ResponsesObject<SV>, BodySchema extends Body<SV>, QuerySchema extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>> = ContractMethod extends PathParamMethod ? PathParamHttpContractDetails<SV, Path, ParamsSchema, ResponseSchemas, QuerySchema, ReqHeaders, ResHeaders> : ContractMethod extends HttpMethod ? HttpContractDetails<SV, Path, ParamsSchema, ResponseSchemas, BodySchema, QuerySchema, ReqHeaders, ResHeaders> : ContractMethod extends 'middleware' ? MiddlewareContractDetails<SV, Path, ParamsSchema, ResponseSchemas, BodySchema, QuerySchema, ReqHeaders, ResHeaders> : never;
|
235
|
+
|
236
|
+
/**
|
237
|
+
* Interface representing the context of a request.
|
238
|
+
*/
|
239
|
+
interface RequestContext {
|
240
|
+
/** Correlation ID for tracking requests */
|
241
|
+
correlationId: string;
|
242
|
+
/** Optional idempotency key for ensuring idempotent requests */
|
243
|
+
idempotencyKey?: string;
|
244
|
+
}
|
245
|
+
interface ForklaunchBaseRequest<P extends ParamsDictionary, ReqBody extends Record<string, unknown>, ReqQuery extends ParsedQs, ReqHeaders extends Record<string, string>> {
|
246
|
+
/** Context of the request */
|
247
|
+
context: Prettify<RequestContext>;
|
248
|
+
/** Request parameters */
|
249
|
+
params: P;
|
250
|
+
/** Request headers */
|
251
|
+
headers: ReqHeaders;
|
252
|
+
/** Request body */
|
253
|
+
body: ReqBody;
|
254
|
+
/** Request query */
|
255
|
+
query: ReqQuery;
|
256
|
+
}
|
257
|
+
/**
|
258
|
+
* Interface representing a Forklaunch request.
|
259
|
+
*
|
260
|
+
* @template SV - A type that extends AnySchemaValidator.
|
261
|
+
* @template P - A type for request parameters, defaulting to ParamsDictionary.
|
262
|
+
* @template ReqBody - A type for the request body, defaulting to unknown.
|
263
|
+
* @template ReqQuery - A type for the request query, defaulting to ParsedQs.
|
264
|
+
* @template Headers - A type for the request headers, defaulting to IncomingHttpHeaders.
|
265
|
+
*/
|
266
|
+
interface ForklaunchRequest<SV extends AnySchemaValidator, P extends ParamsDictionary, ReqBody extends Record<string, unknown>, ReqQuery extends ParsedQs, ReqHeaders extends Record<string, string>> extends ForklaunchBaseRequest<P, ReqBody, ReqQuery, ReqHeaders> {
|
267
|
+
/** Contract details for the request */
|
268
|
+
contractDetails: PathParamHttpContractDetails<SV> | HttpContractDetails<SV>;
|
269
|
+
/** Schema validator */
|
270
|
+
schemaValidator: SchemaValidator;
|
271
|
+
/** Method */
|
272
|
+
method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'HEAD' | 'CONNECT' | 'TRACE';
|
273
|
+
/** Request schema, compiled */
|
274
|
+
requestSchema: unknown;
|
275
|
+
}
|
276
|
+
/**
|
277
|
+
* Represents the types of data that can be sent in a response.
|
278
|
+
*/
|
279
|
+
type ForklaunchSendableData = Record<string, unknown> | string | Buffer | ArrayBuffer | NodeJS.ReadableStream | null | undefined;
|
280
|
+
/**
|
281
|
+
* Interface representing a Forklaunch response status.
|
282
|
+
* @template ResBody - A type for the response body.
|
283
|
+
*/
|
284
|
+
interface ForklaunchStatusResponse<ResBody> {
|
285
|
+
/**
|
286
|
+
* Sends the response.
|
287
|
+
* @param {ResBodyMap} [body] - The response body.
|
288
|
+
* @param {boolean} [close_connection] - Whether to close the connection.
|
289
|
+
* @returns {T} - The sent response.
|
290
|
+
*/
|
291
|
+
send: {
|
292
|
+
<T>(body?: ResBody, close_connection?: boolean): T;
|
293
|
+
<T>(body?: ResBody): T;
|
294
|
+
};
|
295
|
+
/**
|
296
|
+
* Sends a JSON response.
|
297
|
+
* @param {ResBodyMap} [body] - The response body.
|
298
|
+
* @returns {boolean|T} - The JSON response.
|
299
|
+
*/
|
300
|
+
json: {
|
301
|
+
(body?: ResBody): boolean;
|
302
|
+
<T>(body?: ResBody): T;
|
303
|
+
};
|
304
|
+
/**
|
305
|
+
* Sends a JSONP response.
|
306
|
+
* @param {ResBodyMap} [body] - The response body.
|
307
|
+
* @returns {boolean|T} - The JSONP response.
|
308
|
+
*/
|
309
|
+
jsonp: {
|
310
|
+
(body?: ResBody): boolean;
|
311
|
+
<T>(body?: ResBody): T;
|
312
|
+
};
|
313
|
+
}
|
314
|
+
/**
|
315
|
+
* Interface representing a Forklaunch response.
|
316
|
+
*
|
317
|
+
* @template ResBodyMap - A type for the response body, defaulting to common status code responses.
|
318
|
+
* @template StatusCode - A type for the status code, defaulting to number.
|
319
|
+
*/
|
320
|
+
interface ForklaunchResponse<ResBodyMap extends Record<number, unknown>, ResHeaders extends Record<string, string>, LocalsObj extends Record<string, unknown>> {
|
321
|
+
/** Data of the response body */
|
322
|
+
bodyData: unknown;
|
323
|
+
/** Status code of the response */
|
324
|
+
statusCode: number;
|
325
|
+
/** Whether the response is finished */
|
326
|
+
headersSent: boolean;
|
327
|
+
/**
|
328
|
+
* Gets the headers of the response.
|
329
|
+
* @returns {Omit<ResHeaders, keyof ForklaunchResHeaders> & ForklaunchResHeaders} - The headers of the response.
|
330
|
+
*/
|
331
|
+
getHeaders: () => Omit<ResHeaders, keyof ForklaunchResHeaders> & ForklaunchResHeaders;
|
332
|
+
/**
|
333
|
+
* Sets a header for the response.
|
334
|
+
* @param {string} key - The header key.
|
335
|
+
* @param {string} value - The header value.
|
336
|
+
*/
|
337
|
+
setHeader: <K extends keyof (ResHeaders & ForklaunchResHeaders)>(key: K, value: K extends keyof ForklaunchResHeaders ? ForklaunchResHeaders[K] : ResHeaders[K]) => void;
|
338
|
+
/**
|
339
|
+
* Sets the status of the response.
|
340
|
+
* @param {U} code - The status code.
|
341
|
+
* @param {string} [message] - Optional message.
|
342
|
+
* @returns {ForklaunchResponse<(ResBodyMap)[U], ResHeaders, U, LocalsObj>} - The response with the given status.
|
343
|
+
*/
|
344
|
+
status: {
|
345
|
+
<U extends keyof (ResBodyMap & ForklaunchResErrors)>(code: U): ForklaunchStatusResponse<(Omit<ForklaunchResErrors, keyof ResBodyMap> & ResBodyMap)[U]>;
|
346
|
+
<U extends keyof (ResBodyMap & ForklaunchResErrors)>(code: U, message?: string): ForklaunchStatusResponse<(Omit<ForklaunchResErrors, keyof ResBodyMap> & ResBodyMap)[U]>;
|
347
|
+
};
|
348
|
+
/**
|
349
|
+
* Ends the response.
|
350
|
+
* @param {string} [data] - Optional data to send.
|
351
|
+
*/
|
352
|
+
end: (data?: string) => void;
|
353
|
+
/** Local variables */
|
354
|
+
locals: LocalsObj;
|
355
|
+
/** Cors */
|
356
|
+
cors: boolean;
|
357
|
+
/** Response schema, compiled */
|
358
|
+
responseSchemas: ResponseCompiledSchema;
|
359
|
+
}
|
360
|
+
/**
|
361
|
+
* Type representing the next function in a middleware.
|
362
|
+
* @param {unknown} [err] - Optional error parameter.
|
363
|
+
*/
|
364
|
+
type ForklaunchNextFunction = (err?: unknown) => void;
|
365
|
+
/**
|
366
|
+
* Represents a middleware handler with schema validation.
|
367
|
+
*
|
368
|
+
* @template SV - A type that extends AnySchemaValidator.
|
369
|
+
* @template P - A type for request parameters, defaulting to ParamsDictionary.
|
370
|
+
* @template ResBodyMap - A type for the response body, defaulting to unknown.
|
371
|
+
* @template ReqBody - A type for the request body, defaulting to unknown.
|
372
|
+
* @template ReqQuery - A type for the request query, defaulting to ParsedQs.
|
373
|
+
* @template LocalsObj - A type for local variables, defaulting to an empty object.
|
374
|
+
* @template StatusCode - A type for the status code, defaulting to number.
|
375
|
+
*/
|
376
|
+
interface ExpressLikeHandler<SV extends AnySchemaValidator, P extends ParamsDictionary, ResBodyMap extends Record<number, unknown>, ReqBody extends Record<string, unknown>, ReqQuery extends ParsedQs, ReqHeaders extends Record<string, string>, ResHeaders extends Record<string, string>, LocalsObj extends Record<string, unknown>> {
|
377
|
+
(req: ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders>, res: ForklaunchResponse<ResBodyMap, ResHeaders, LocalsObj>, next?: ForklaunchNextFunction): void | Promise<void>;
|
378
|
+
}
|
379
|
+
type MapParamsSchema<SV extends AnySchemaValidator, P extends ParamsObject<SV>> = MapSchema<SV, P> extends infer Params ? unknown extends Params ? ParamsDictionary : Params : ParamsDictionary;
|
380
|
+
type MapResBodyMapSchema<SV extends AnySchemaValidator, ResBodyMap extends ResponsesObject<SV>> = MapSchema<SV, ResBodyMap> extends infer ResponseBodyMap ? unknown extends ResponseBodyMap ? ForklaunchResErrors : ResponseBodyMap : ForklaunchResErrors;
|
381
|
+
type MapReqBodySchema<SV extends AnySchemaValidator, ReqBody extends Body<SV>> = MapSchema<SV, ReqBody> extends infer Body ? unknown extends Body ? Record<string, unknown> : Body : Record<string, unknown>;
|
382
|
+
type MapReqQuerySchema<SV extends AnySchemaValidator, ReqQuery extends QueryObject<SV>> = MapSchema<SV, ReqQuery> extends infer Query ? unknown extends Query ? ParsedQs : Query : ParsedQs;
|
383
|
+
type MapReqHeadersSchema<SV extends AnySchemaValidator, ReqHeaders extends HeadersObject<SV>> = MapSchema<SV, ReqHeaders> extends infer RequestHeaders ? unknown extends RequestHeaders ? Record<string, string> : RequestHeaders : Record<string, string>;
|
384
|
+
type MapResHeadersSchema<SV extends AnySchemaValidator, ResHeaders extends HeadersObject<SV>> = MapSchema<SV, ResHeaders> extends infer ResponseHeaders ? unknown extends ResponseHeaders ? ForklaunchResHeaders : ResponseHeaders : ForklaunchResHeaders;
|
385
|
+
/**
|
386
|
+
* Represents a schema middleware handler with typed parameters, responses, body, and query.
|
387
|
+
*
|
388
|
+
* @template SV - A type that extends AnySchemaValidator.
|
389
|
+
* @template P - A type for parameter schemas, defaulting to ParamsObject.
|
390
|
+
* @template ResBodyMap - A type for response schemas, defaulting to ResponsesObject.
|
391
|
+
* @template ReqBody - A type for the request body, defaulting to Body.
|
392
|
+
* @template ReqQuery - A type for the request query, defaulting to QueryObject.
|
393
|
+
* @template LocalsObj - A type for local variables, defaulting to an empty object.
|
394
|
+
*/
|
395
|
+
type ExpressLikeSchemaHandler<SV extends AnySchemaValidator, 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>> = ExpressLikeHandler<SV, MapParamsSchema<SV, P>, MapResBodyMapSchema<SV, ResBodyMap>, MapReqBodySchema<SV, ReqBody>, MapReqQuerySchema<SV, ReqQuery>, MapReqHeadersSchema<SV, ReqHeaders>, MapResHeadersSchema<SV, ResHeaders>, LocalsObj>;
|
396
|
+
/**
|
397
|
+
* Represents a function that maps an authenticated request with schema validation
|
398
|
+
* to a set of authorization strings, with request properties automatically inferred from the schema.
|
399
|
+
*
|
400
|
+
* @template SV - The type representing the schema validator.
|
401
|
+
* @template P - The type representing request parameters inferred from the schema.
|
402
|
+
* @template ReqBody - The type representing the request body inferred from the schema.
|
403
|
+
* @template ReqQuery - The type representing the request query parameters inferred from the schema.
|
404
|
+
* @template ReqHeaders - The type representing the request headers inferred from the schema.
|
405
|
+
*
|
406
|
+
* @param {ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders>} req - The request object with schema validation.
|
407
|
+
* @returns {Set<string> | Promise<Set<string>>} - A set of authorization strings or a promise that resolves to it.
|
408
|
+
*/
|
409
|
+
type ExpressLikeSchemaAuthMapper<SV extends AnySchemaValidator, P extends ParamsObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>> = ExpressLikeAuthMapper<SV, MapParamsSchema<SV, P>, MapReqBodySchema<SV, ReqBody>, MapReqQuerySchema<SV, ReqQuery>, MapReqHeadersSchema<SV, ReqHeaders>>;
|
410
|
+
type ExpressLikeAuthMapper<SV extends AnySchemaValidator, P extends ParamsDictionary, ReqBody extends Record<string, unknown>, ReqQuery extends ParsedQs, ReqHeaders extends Record<string, string>> = (sub: string, req?: ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders>) => Set<string> | Promise<Set<string>>;
|
411
|
+
/**
|
412
|
+
* Represents a live type function for the SDK.
|
413
|
+
*
|
414
|
+
* @template SV - A type that extends AnySchemaValidator.
|
415
|
+
* @template Path - A type for the route path.
|
416
|
+
* @template P - A type for request parameters.
|
417
|
+
* @template ResBodyMap - A type for response schemas.
|
418
|
+
* @template ReqBody - A type for the request body.
|
419
|
+
* @template ReqQuery - A type for the request query.
|
420
|
+
* @template ReqHeaders - A type for the request headers.
|
421
|
+
* @template ResHeaders - A type for the response headers.
|
422
|
+
*
|
423
|
+
*/
|
424
|
+
type LiveTypeFunction<SV extends AnySchemaValidator, Route 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>> = (ParamsObject<SV> extends P ? unknown : {
|
425
|
+
params: MapSchema<SV, P>;
|
426
|
+
}) & (Body<SV> extends ReqBody ? unknown : {
|
427
|
+
body: MapSchema<SV, ReqBody>;
|
428
|
+
}) & (QueryObject<SV> extends ReqQuery ? unknown : {
|
429
|
+
query: MapSchema<SV, ReqQuery>;
|
430
|
+
}) & (HeadersObject<SV> extends ReqHeaders ? unknown : {
|
431
|
+
headers: MapSchema<SV, ReqHeaders>;
|
432
|
+
}) extends infer Request ? SdkResponse<ForklaunchResErrors & (HeadersObject<SV> extends ResBodyMap ? unknown : MapSchema<SV, ResBodyMap>), ForklaunchResHeaders extends ResHeaders ? unknown : MapSchema<SV, ResHeaders>> extends infer Return ? unknown extends Request ? (route: RemoveTrailingSlash<Route>) => Promise<Return> : (route: RemoveTrailingSlash<Route>, request: MakePropertyOptionalIfChildrenOptional<Request> & unknown) => Promise<Return> : never : never;
|
433
|
+
/**
|
434
|
+
* Represents a basic SDK Response object.
|
435
|
+
*
|
436
|
+
* @template ResBodyMap - A type for the response body.
|
437
|
+
* @template ResHeaders - A type for the response headers.
|
438
|
+
*/
|
439
|
+
type SdkResponse<ResBodyMap extends Record<number, unknown>, ResHeaders extends Record<string, string> | unknown> = Prettify<{
|
440
|
+
[K in keyof ResBodyMap]: {
|
441
|
+
code: K;
|
442
|
+
response: ResBodyMap[K];
|
443
|
+
} & (unknown extends ResHeaders ? unknown : {
|
444
|
+
headers: ResHeaders;
|
445
|
+
});
|
446
|
+
}[keyof ResBodyMap]>;
|
447
|
+
/**
|
448
|
+
* Represents the default error types for responses.
|
449
|
+
*/
|
450
|
+
type ForklaunchResErrors<BadRequest = string, Unauthorized = string, Forbidden = string, InternalServerErrorType = string> = {
|
451
|
+
400: BadRequest;
|
452
|
+
401: Unauthorized;
|
453
|
+
403: Forbidden;
|
454
|
+
500: InternalServerErrorType;
|
455
|
+
};
|
456
|
+
/**
|
457
|
+
* Represents the default header types for responses.
|
458
|
+
*/
|
459
|
+
type ForklaunchResHeaders = {
|
460
|
+
'x-correlation-id': string;
|
461
|
+
};
|
462
|
+
/**
|
463
|
+
* Represents the default error types for responses.
|
464
|
+
*/
|
465
|
+
type ErrorContainer<Code extends number> = {
|
466
|
+
/** The error code */
|
467
|
+
code: Code;
|
468
|
+
/** The error message */
|
469
|
+
error: string;
|
470
|
+
};
|
471
|
+
/**
|
472
|
+
* Represents a parsed response shape.
|
473
|
+
*/
|
474
|
+
type ResponseShape<Params, Headers, Query, Body> = {
|
475
|
+
params: Params;
|
476
|
+
headers: Headers;
|
477
|
+
query: Query;
|
478
|
+
body: Body;
|
479
|
+
};
|
480
|
+
/**
|
481
|
+
* Acts as a container to collect API routes for export to SDK consumers.
|
482
|
+
*/
|
483
|
+
type ApiClient<Routes extends Record<string, unknown>> = {
|
484
|
+
[Key in keyof Routes]: Routes[Key] extends (...args: never[]) => infer ReturnType ? Omit<ReturnType, 'router'> : never;
|
485
|
+
};
|
486
|
+
/**
|
487
|
+
* Represents a path match.
|
488
|
+
*/
|
489
|
+
type PathMatch<SuppliedPath extends `/${string}`, ActualPath extends `/${string}`> = ActualPath extends SuppliedPath ? SuppliedPath extends ActualPath ? SuppliedPath : never : never;
|
490
|
+
|
491
|
+
interface ConstrainedForklaunchRouter<SV extends AnySchemaValidator, RequestHandler> extends ForklaunchRouter<SV> {
|
492
|
+
requestHandler: RequestHandler;
|
493
|
+
}
|
494
|
+
/**
|
495
|
+
* Interface representing a Forklaunch router.
|
496
|
+
*
|
497
|
+
* @template SV - A type that extends AnySchemaValidator.
|
498
|
+
*/
|
499
|
+
interface ForklaunchRouter<SV extends AnySchemaValidator> {
|
500
|
+
/** The base path for the router */
|
501
|
+
basePath: `/${string}`;
|
502
|
+
/** The routes associated with the router */
|
503
|
+
routes: ForklaunchRoute<SV>[];
|
504
|
+
}
|
505
|
+
/**
|
506
|
+
* Interface representing a Forklaunch route.
|
507
|
+
*
|
508
|
+
* @template SV - A type that extends AnySchemaValidator.
|
509
|
+
*/
|
510
|
+
interface ForklaunchRoute<SV extends AnySchemaValidator> {
|
511
|
+
/** The base path for the route */
|
512
|
+
basePath: string;
|
513
|
+
/** The path for the route, which can be a string, RegExp, or an array of strings or RegExps */
|
514
|
+
path: string | RegExp | (string | RegExp)[];
|
515
|
+
/** The HTTP method for the route */
|
516
|
+
method: Method;
|
517
|
+
/** The contract details for the route */
|
518
|
+
contractDetails: PathParamHttpContractDetails<SV> | HttpContractDetails<SV>;
|
519
|
+
}
|
520
|
+
|
521
|
+
type ContractDetailsExpressLikeSchemaHandler<SV extends AnySchemaValidator, 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>> = ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>;
|
522
|
+
type TypedHandler<SV extends AnySchemaValidator, ContractMethod extends Method, 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>> = {
|
523
|
+
_typedHandler: true;
|
524
|
+
contractDetails: ContractDetails<SV, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>;
|
525
|
+
handlers: ContractDetailsExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[];
|
526
|
+
};
|
527
|
+
|
528
|
+
interface LiveTypeRouteDefinition<SV extends AnySchemaValidator, BasePath extends `/${string}`, ContractMethod extends Method> {
|
529
|
+
<Path extends `/${string}`, SuppliedPath extends Path, 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>>(path: PathMatch<SuppliedPath, Path>, typedHandler: TypedHandler<SV, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>): {
|
530
|
+
[Key in ContractMethod]: LiveTypeFunction<SV, `${BasePath}${Path}`, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>;
|
531
|
+
};
|
532
|
+
<Path extends `/${string}`, SuppliedPath extends Path, 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>>(path: PathMatch<SuppliedPath, Path>, middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>, ...middlewareAndTypedHandler: [
|
533
|
+
...ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[],
|
534
|
+
TypedHandler<SV, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>
|
535
|
+
]): {
|
536
|
+
[Key in ContractMethod]: LiveTypeFunction<SV, `${BasePath}${Path}`, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>;
|
537
|
+
};
|
538
|
+
<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>>(path: Path, contractDetails: ContractDetails<SV, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>, ...middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[]): {
|
539
|
+
[Key in ContractMethod]: LiveTypeFunction<SV, `${BasePath}${Path}`, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>;
|
540
|
+
};
|
541
|
+
}
|
542
|
+
interface TypedMiddlewareDefinition<ChainableRouter, SV extends AnySchemaValidator> {
|
543
|
+
<Path extends `/${string}`, SuppliedPath extends Path, 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>>(path: PathMatch<SuppliedPath, Path>, typedHandler: TypedHandler<SV, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>): ChainableRouter;
|
544
|
+
<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>>(typedHandler: TypedHandler<SV, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>): ChainableRouter;
|
545
|
+
<Path extends `/${string}`, SuppliedPath extends Path, 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>>(path: PathMatch<SuppliedPath, Path>, middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>, ...middlewareAndTypedHandler: [
|
546
|
+
...ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[],
|
547
|
+
TypedHandler<SV, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>
|
548
|
+
]): ChainableRouter;
|
549
|
+
<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>>(middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>, ...middlewareAndTypedHandler: [
|
550
|
+
...ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[],
|
551
|
+
TypedHandler<SV, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>
|
552
|
+
]): ChainableRouter;
|
553
|
+
<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>>(path: Path, contractDetails: ContractDetails<SV, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>, middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>, ...middlewares: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[]): ChainableRouter;
|
554
|
+
<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>>(contractDetails: ContractDetails<SV, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>, middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>, ...middlewares: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[]): ChainableRouter;
|
555
|
+
}
|
556
|
+
interface TypedNestableMiddlewareDefinition<ChainableRouter, RouterHandler, Internal extends ExpressLikeRouter<RouterHandler, Internal>, SV extends AnySchemaValidator> extends TypedMiddlewareDefinition<ChainableRouter, SV> {
|
557
|
+
(router: ConstrainedForklaunchRouter<SV, RouterHandler>): ChainableRouter;
|
558
|
+
<Path extends `/${string}`>(path: Path, router: ConstrainedForklaunchRouter<SV, RouterHandler>): ChainableRouter;
|
559
|
+
<Path extends `/${string}`, SuppliedPath extends Path, 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>>(path: PathMatch<SuppliedPath, Path>, middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj> | ConstrainedForklaunchRouter<SV, RouterHandler>, ...middlewareAndTypedHandler: [
|
560
|
+
...(ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj> | ConstrainedForklaunchRouter<SV, RouterHandler>)[],
|
561
|
+
TypedHandler<SV, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>
|
562
|
+
]): ChainableRouter;
|
563
|
+
<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>>(middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj> | ConstrainedForklaunchRouter<SV, RouterHandler>, ...middlewareAndTypedHandler: [
|
564
|
+
...(ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj> | ConstrainedForklaunchRouter<SV, RouterHandler>)[],
|
565
|
+
TypedHandler<SV, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>
|
566
|
+
]): ChainableRouter;
|
567
|
+
<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>>(path: Path, contractDetails: ContractDetails<SV, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>, middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj> | ConstrainedForklaunchRouter<SV, RouterHandler>, ...middlewares: (ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj> | ConstrainedForklaunchRouter<SV, RouterHandler>)[]): ChainableRouter;
|
568
|
+
<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>>(contractDetails: ContractDetails<SV, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>, middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj> | ConstrainedForklaunchRouter<SV, RouterHandler>, ...middlewares: (ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj> | ConstrainedForklaunchRouter<SV, RouterHandler>)[]): ChainableRouter;
|
569
|
+
}
|
570
|
+
type ContractDetailsOrMiddlewareOrTypedHandler<SV extends AnySchemaValidator, ContractMethod extends Method, 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>> = ContractDetails<SV, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders> | ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj> | TypedHandler<SV, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>;
|
571
|
+
type MiddlewareOrMiddlewareWithTypedHandler<SV extends AnySchemaValidator, ContractMethod extends Method, 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>> = ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj> | TypedHandler<SV, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>;
|
572
|
+
|
573
|
+
/**
|
574
|
+
* A class that represents an Express-like router.
|
575
|
+
*/
|
576
|
+
declare class ForklaunchExpressLikeRouter<SV extends AnySchemaValidator, BasePath extends `/${string}`, RouterHandler, Internal extends ExpressLikeRouter<RouterHandler, Internal>> implements ConstrainedForklaunchRouter<SV, RouterHandler> {
|
577
|
+
#private;
|
578
|
+
readonly schemaValidator: SV;
|
579
|
+
readonly internal: Internal;
|
580
|
+
requestHandler: RouterHandler;
|
581
|
+
routers: ForklaunchRouter<SV>[];
|
582
|
+
readonly routes: ForklaunchRoute<SV>[];
|
583
|
+
readonly basePath: BasePath;
|
584
|
+
constructor(basePath: BasePath, schemaValidator: SV, internal: Internal);
|
585
|
+
registerRoute<ContractMethod extends Method, 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>>(method: ContractMethod, path: Path, registrationMethod: PathBasedHandler<RouterHandler>, contractDetailsOrMiddlewareOrTypedHandler: ContractDetailsOrMiddlewareOrTypedHandler<SV, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>, ...middlewareOrMiddlewareAndTypedHandler: MiddlewareOrMiddlewareWithTypedHandler<SV, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[]): LiveTypeFunction<SV, `${BasePath}${Path}`, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>;
|
586
|
+
registerMiddlewareHandler<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>>(registrationMethod: PathOrMiddlewareBasedHandler<RouterHandler>, pathOrContractDetailsOrMiddlewareOrTypedHandler: Path | ContractDetailsOrMiddlewareOrTypedHandler<SV, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>, contractDetailsOrMiddlewareOrTypedHandler?: ContractDetailsOrMiddlewareOrTypedHandler<SV, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>, ...middlewareOrMiddlewareWithTypedHandler: MiddlewareOrMiddlewareWithTypedHandler<SV, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[]): this;
|
587
|
+
registerNestableMiddlewareHandler<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>>(registrationMethod: NestableRouterBasedHandler<RouterHandler, Internal>, pathOrContractDetailsOrMiddlewareOrTypedHandler: Path | ContractDetailsOrMiddlewareOrTypedHandler<SV, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj> | ConstrainedForklaunchRouter<SV, RouterHandler>, contractDetailsOrMiddlewareOrTypedHandler?: ContractDetailsOrMiddlewareOrTypedHandler<SV, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj> | ConstrainedForklaunchRouter<SV, RouterHandler>, ...middlewareOrMiddlewareWithTypedHandler: (MiddlewareOrMiddlewareWithTypedHandler<SV, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj> | ConstrainedForklaunchRouter<SV, RouterHandler>)[]): this;
|
588
|
+
use: TypedNestableMiddlewareDefinition<this, RouterHandler, Internal, SV>;
|
589
|
+
all: TypedMiddlewareDefinition<this, SV>;
|
590
|
+
connect: TypedMiddlewareDefinition<this, SV>;
|
591
|
+
/**
|
592
|
+
* Registers a GET route with the specified contract details and handler handlers.
|
593
|
+
*
|
594
|
+
* @template P - The type of request parameters.
|
595
|
+
* @template ResBodyMap - The type of response body.
|
596
|
+
* @template ReqBody - The type of request body.
|
597
|
+
* @template ReqQuery - The type of request query.
|
598
|
+
* @template LocalsObj - The type of local variables.
|
599
|
+
* @param {string} path - The path for the route.
|
600
|
+
* @param {PathParamHttpContractDetails<SV, P, ResBodyMap, ReqQuery>} contractDetails - The contract details.
|
601
|
+
* @param {...SchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, LocalsObj>[]} handlers - The handler handlers.
|
602
|
+
* @returns {ExpressRouter} - The Express router.
|
603
|
+
*/
|
604
|
+
get: LiveTypeRouteDefinition<SV, BasePath, 'get'>;
|
605
|
+
/**
|
606
|
+
* Registers a POST route with the specified contract details and handler handlers.
|
607
|
+
*
|
608
|
+
* @template P - The type of request parameters.
|
609
|
+
* @template ResBodyMap - The type of response body.
|
610
|
+
* @template ReqBody - The type of request body.
|
611
|
+
* @template ReqQuery - The type of request query.
|
612
|
+
* @template LocalsObj - The type of local variables.
|
613
|
+
* @param {string} path - The path for the route.
|
614
|
+
* @param {HttpContractDetails<SV, P, ResBodyMap, ReqBody, ReqQuery>} contractDetails - The contract details.
|
615
|
+
* @param {...SchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, LocalsObj>[]} handlers - The handler handlers.
|
616
|
+
* @returns {ExpressRouter} - The Expxwress router.
|
617
|
+
*/
|
618
|
+
post: LiveTypeRouteDefinition<SV, BasePath, 'post'>;
|
619
|
+
/**
|
620
|
+
* Registers a PUT route with the specified contract details and handler handlers.
|
621
|
+
*
|
622
|
+
* @template P - The type of request parameters.
|
623
|
+
* @template ResBodyMap - The type of response body.
|
624
|
+
* @template ReqBody - The type of request body.
|
625
|
+
* @template ReqQuery - The type of request query.
|
626
|
+
* @template LocalsObj - The type of local variables.
|
627
|
+
* @param {string} path - The path for the route.
|
628
|
+
* @param {HttpContractDetails<SV, P, ResBodyMap, ReqBody, ReqQuery>} contractDetails - The contract details.
|
629
|
+
* @param {...SchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, LocalsObj>[]} handlers - The handler handlers.
|
630
|
+
* @returns {ExpressRouter} - The Express router.
|
631
|
+
*/
|
632
|
+
put: LiveTypeRouteDefinition<SV, BasePath, 'put'>;
|
633
|
+
/**
|
634
|
+
* Registers a PATCH route with the specified contract details and handler handlers.
|
635
|
+
*
|
636
|
+
* @template P - The type of request parameters.
|
637
|
+
* @template ResBodyMap - The type of response body.
|
638
|
+
* @template ReqBody - The type of request body.
|
639
|
+
* @template ReqQuery - The type of request query.
|
640
|
+
* @template LocalsObj - The type of local variables.
|
641
|
+
* @param {string} path - The path for the route.
|
642
|
+
* @param {HttpContractDetails<SV, P, ResBodyMap, ReqBody, ReqQuery>} contractDetails - The contract details.
|
643
|
+
* @param {...SchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, LocalsObj>[]} handlers - The handler handlers.
|
644
|
+
* @returns {ExpressRouter} - The Express router.
|
645
|
+
*/
|
646
|
+
patch: LiveTypeRouteDefinition<SV, BasePath, 'patch'>;
|
647
|
+
/**
|
648
|
+
* Registers a DELETE route with the specified contract details and handler handlers.
|
649
|
+
*
|
650
|
+
* @template P - The type of request parameters.
|
651
|
+
* @template ResBodyMap - The type of response body.
|
652
|
+
* @template ReqBody - The type of request body.
|
653
|
+
* @template ReqQuery - The type of request query.
|
654
|
+
* @template LocalsObj - The type of local variables.
|
655
|
+
* @param {string} path - The path for the route.
|
656
|
+
* @param {PathParamHttpContractDetails<SV, P, ResBodyMap, ReqQuery>} contractDetails - The contract details.
|
657
|
+
* @param {...SchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, LocalsObj>[]} handlers - The handler handlers.
|
658
|
+
* @returns {ExpressRouter} - The Express router.
|
659
|
+
*/
|
660
|
+
delete: LiveTypeRouteDefinition<SV, BasePath, 'delete'>;
|
661
|
+
/**
|
662
|
+
* Registers a OPTIONS route with the specified contract details and handler handlers.
|
663
|
+
*
|
664
|
+
* @template P - The type of request parameters.
|
665
|
+
* @template ResBodyMap - The type of response body.
|
666
|
+
* @template ReqBody - The type of request body.
|
667
|
+
* @template ReqQuery - The type of request query.
|
668
|
+
* @template LocalsObj - The type of local variables.
|
669
|
+
* @param {string} path - The path for the route.
|
670
|
+
* @param {PathParamHttpContractDetails<SV, P, ResBodyMap, ReqQuery>} contractDetails - The contract details.
|
671
|
+
* @param {...SchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, LocalsObj>[]} handlers - The handler handlers.
|
672
|
+
* @returns {ExpressRouter} - The Express router.
|
673
|
+
*/
|
674
|
+
options: LiveTypeRouteDefinition<SV, BasePath, 'options'>;
|
675
|
+
/**
|
676
|
+
* Registers a HEAD route with the specified contract details and handler handlers.
|
677
|
+
*
|
678
|
+
* @template P - The type of request parameters.
|
679
|
+
* @template ResBodyMap - The type of response body.
|
680
|
+
* @template ReqBody - The type of request body.
|
681
|
+
* @template ReqQuery - The type of request query.
|
682
|
+
* @template LocalsObj - The type of local variables.
|
683
|
+
* @param {string} path - The path for the route.
|
684
|
+
* @param {PathParamHttpContractDetails<SV, P, ResBodyMap, ReqQuery>} contractDetails - The contract details.
|
685
|
+
* @param {...SchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, LocalsObj>[]} handlers - The handler handlers.
|
686
|
+
* @returns {ExpressRouter} - The Express router.
|
687
|
+
*/
|
688
|
+
head: LiveTypeRouteDefinition<SV, BasePath, 'head'>;
|
689
|
+
/**
|
690
|
+
* Registers a TRACE route with the specified contract details and handler handlers.
|
691
|
+
*
|
692
|
+
* @template P - The type of request parameters.
|
693
|
+
* @template ResBodyMap - The type of response body.
|
694
|
+
* @template ReqBody - The type of request body.
|
695
|
+
* @template ReqQuery - The type of request query.
|
696
|
+
* @template LocalsObj - The type of local variables.
|
697
|
+
* @param {string} path - The path for the route.
|
698
|
+
* @param {PathParamHttpContractDetails<SV, P, ResBodyMap, ReqQuery>} contractDetails - The contract details.
|
699
|
+
* @param {...SchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, LocalsObj>[]} handlers - The handler handlers.
|
700
|
+
* @returns {ExpressRouter} - The Express router.
|
701
|
+
*/
|
702
|
+
trace: LiveTypeRouteDefinition<SV, BasePath, 'trace'>;
|
703
|
+
}
|
704
|
+
|
705
|
+
/**
|
706
|
+
* ForklaunchExpressLikeApplication class that sets up routes and middleware for an Express-like application, for use with controller/routes pattern.
|
707
|
+
*
|
708
|
+
* @template SV - A type that extends AnySchemaValidator.
|
709
|
+
* @template Server - The server type.
|
710
|
+
*/
|
711
|
+
declare abstract class ForklaunchExpressLikeApplication<SV extends AnySchemaValidator, Server extends ExpressLikeRouter<RouterHandler, Server>, RouterHandler> extends ForklaunchExpressLikeRouter<SV, '/', RouterHandler, Server> {
|
712
|
+
readonly schemaValidator: SV;
|
713
|
+
readonly internal: Server;
|
714
|
+
/**
|
715
|
+
* Creates an instance of the Application class.
|
716
|
+
*
|
717
|
+
* @param {SV} schemaValidator - The schema validator.
|
718
|
+
*/
|
719
|
+
constructor(schemaValidator: SV, internal: Server);
|
720
|
+
abstract listen(...args: unknown[]): void;
|
721
|
+
}
|
722
|
+
|
723
|
+
declare function isForklaunchRouter<SV extends AnySchemaValidator>(maybeForklaunchRouter: unknown): maybeForklaunchRouter is ForklaunchRouter<SV>;
|
724
|
+
|
725
|
+
declare const delete_: <SV extends AnySchemaValidator, 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>>(_schemaValidator: SV, path: Path, contractDetails: PathParamHttpContractDetails<SV, Path, P, ResBodyMap, ReqQuery, ReqHeaders, ResHeaders>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[]) => {
|
726
|
+
_typedHandler: true;
|
727
|
+
contractDetails: PathParamHttpContractDetails<SV, Path, P, ResBodyMap, ReqQuery, ReqHeaders, ResHeaders>;
|
728
|
+
handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[];
|
729
|
+
};
|
730
|
+
|
731
|
+
declare const get: <SV extends AnySchemaValidator, 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>>(_schemaValidator: SV, path: Path, contractDetails: PathParamHttpContractDetails<SV, Path, P, ResBodyMap, ReqQuery, ReqHeaders, ResHeaders>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[]) => {
|
732
|
+
_typedHandler: true;
|
733
|
+
contractDetails: PathParamHttpContractDetails<SV, Path, P, ResBodyMap, ReqQuery, ReqHeaders, ResHeaders>;
|
734
|
+
handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[];
|
735
|
+
};
|
736
|
+
|
737
|
+
declare const head: <SV extends AnySchemaValidator, 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>>(_schemaValidator: SV, path: Path, contractDetails: PathParamHttpContractDetails<SV, Path, P, ResBodyMap, ReqQuery, ReqHeaders, ResHeaders>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[]) => {
|
738
|
+
_typedHandler: true;
|
739
|
+
contractDetails: PathParamHttpContractDetails<SV, Path, P, ResBodyMap, ReqQuery, ReqHeaders, ResHeaders>;
|
740
|
+
handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[];
|
741
|
+
};
|
742
|
+
|
743
|
+
declare const middleware: <SV extends AnySchemaValidator, 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>>(_schemaValidator: SV, path: Path, contractDetails: MiddlewareContractDetails<SV, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[]) => {
|
744
|
+
_typedHandler: true;
|
745
|
+
contractDetails: MiddlewareContractDetails<SV, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>;
|
746
|
+
handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[];
|
747
|
+
};
|
748
|
+
|
749
|
+
declare const options: <SV extends AnySchemaValidator, 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>>(_schemaValidator: SV, path: Path, contractDetails: PathParamHttpContractDetails<SV, Path, P, ResBodyMap, ReqQuery, ReqHeaders, ResHeaders>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[]) => {
|
750
|
+
_typedHandler: true;
|
751
|
+
contractDetails: PathParamHttpContractDetails<SV, Path, P, ResBodyMap, ReqQuery, ReqHeaders, ResHeaders>;
|
752
|
+
handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[];
|
753
|
+
};
|
754
|
+
|
755
|
+
declare const patch: <SV extends AnySchemaValidator, 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>>(_schemaValidator: SV, path: Path, contractDetails: HttpContractDetails<SV, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[]) => {
|
756
|
+
_typedHandler: true;
|
757
|
+
contractDetails: HttpContractDetails<SV, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>;
|
758
|
+
handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[];
|
759
|
+
};
|
760
|
+
|
761
|
+
declare const post: <SV extends AnySchemaValidator, 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>>(_schemaValidator: SV, path: Path, contractDetails: HttpContractDetails<SV, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[]) => {
|
762
|
+
_typedHandler: true;
|
763
|
+
contractDetails: HttpContractDetails<SV, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>;
|
764
|
+
handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[];
|
765
|
+
};
|
766
|
+
|
767
|
+
declare const put: <SV extends AnySchemaValidator, 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>>(_schemaValidator: SV, path: Path, contractDetails: HttpContractDetails<SV, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[]) => {
|
768
|
+
_typedHandler: true;
|
769
|
+
contractDetails: HttpContractDetails<SV, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>;
|
770
|
+
handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[];
|
771
|
+
};
|
772
|
+
|
773
|
+
declare const trace: <SV extends AnySchemaValidator, 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>>(_schemaValidator: SV, path: Path, contractDetails: PathParamHttpContractDetails<SV, Path, P, ResBodyMap, ReqQuery, ReqHeaders, ResHeaders>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[]) => {
|
774
|
+
_typedHandler: true;
|
775
|
+
contractDetails: PathParamHttpContractDetails<SV, Path, P, ResBodyMap, ReqQuery, ReqHeaders, ResHeaders>;
|
776
|
+
handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[];
|
777
|
+
};
|
778
|
+
|
779
|
+
/**
|
780
|
+
* Router class that sets up routes and middleware for an Express router, for use with controller/routes pattern.
|
781
|
+
*
|
782
|
+
* @template SV - A type that extends AnySchemaValidator.
|
783
|
+
* @template contractDetails - The contract details.
|
784
|
+
* @template handlers - The handler middlware and handler.
|
785
|
+
*/
|
786
|
+
declare function typedHandler<SV extends AnySchemaValidator, ContractMethod extends Method, 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>>(_schemaValidator: SV, _path: Path, _contractMethod: ContractMethod, contractDetails: ContractDetails<SV, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[]): {
|
787
|
+
_typedHandler: true;
|
788
|
+
contractDetails: ContractDetails<SV, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>;
|
789
|
+
handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[];
|
790
|
+
};
|
791
|
+
declare function typedHandler<SV extends AnySchemaValidator, ContractMethod extends Method, 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>>(_schemaValidator: SV, _contractMethod: ContractMethod, contractDetails: ContractDetails<SV, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[]): {
|
792
|
+
_typedHandler: true;
|
793
|
+
contractDetails: ContractDetails<SV, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>;
|
794
|
+
handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[];
|
795
|
+
};
|
796
|
+
|
797
|
+
/**
|
798
|
+
* Generates a Swagger document from given routers.
|
799
|
+
*
|
800
|
+
* @template SV - A type that extends AnySchemaValidator.
|
801
|
+
* @param {SV} schemaValidator - The schema validator.
|
802
|
+
* @param {string | number} port - The port on which the server is running.
|
803
|
+
* @param {ForklaunchRouter<SV>[]} routers - The routers to include in the Swagger document.
|
804
|
+
* @returns {OpenAPIObject} - The generated Swagger document.
|
805
|
+
*/
|
806
|
+
declare function generateSwaggerDocument<SV extends AnySchemaValidator>(schemaValidator: SV, port: string | number, routers: ForklaunchRouter<SV>[]): OpenAPIObject;
|
807
|
+
|
808
|
+
/**
|
809
|
+
* Enhances the Express-like `send` method with additional logic for response handling and validation.
|
810
|
+
*
|
811
|
+
* This function intercepts the `send` method to provide custom behavior, including response validation
|
812
|
+
* through the `parseResponse` middleware. If the response status is 404, it sends a "Not Found" message.
|
813
|
+
* If the response validation fails, it sends a parsing error message. Otherwise, it calls the original `send`
|
814
|
+
* method with the provided data.
|
815
|
+
*
|
816
|
+
* @template SV - The type of the schema validator used in the request.
|
817
|
+
* @template P - The type of the parameters dictionary used in the request.
|
818
|
+
* @template ResBodyMap - A record type mapping status codes to response body types.
|
819
|
+
* @template ReqBody - The type of the request body.
|
820
|
+
* @template ReqQuery - The type of the parsed query string.
|
821
|
+
* @template ReqHeaders - The type of the request headers.
|
822
|
+
* @template ResHeaders - The type of the response headers, extended from `ForklaunchResHeaders`.
|
823
|
+
* @template LocalsObj - The type of the locals object in the response.
|
824
|
+
*
|
825
|
+
* @param {unknown} instance - The context (typically `this`) in which the original `send` method is called.
|
826
|
+
* @param {ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders>} req - The request object, containing the schema validator and other request data.
|
827
|
+
* @param {ForklaunchResponse<ResBodyMap, ForklaunchResHeaders & ResHeaders, LocalsObj>} res - The response object, including headers and body data.
|
828
|
+
* @param {Function} originalSend - The original `send` method from the response object, to be called after custom logic.
|
829
|
+
* @param {string | ArrayBuffer | ArrayBufferView | NodeJS.ReadableStream | null | undefined} data - The data to be sent as the response body.
|
830
|
+
* @param {boolean} shouldEnrich - A flag indicating whether the response should be sent immediately.
|
831
|
+
*
|
832
|
+
* @returns {unknown} The return value of the original `send` method, typically the response itself.
|
833
|
+
*/
|
834
|
+
declare function enrichExpressLikeSend<SV extends AnySchemaValidator, P extends ParamsDictionary, ResBodyMap extends Record<number, unknown>, ReqBody extends Record<string, unknown>, ReqQuery extends ParsedQs, ReqHeaders extends Record<string, string>, ResHeaders extends Record<string, string>, LocalsObj extends Record<string, unknown>>(instance: unknown, req: ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders>, res: ForklaunchResponse<ResBodyMap, ForklaunchResHeaders & ResHeaders, LocalsObj>, originalSend: ForklaunchStatusResponse<ForklaunchSendableData>['send'], data: ForklaunchSendableData, shouldEnrich: boolean): void;
|
835
|
+
|
836
|
+
/**
|
837
|
+
* Object-map of the HTTP Status Codes. Maps from the status code, to the
|
838
|
+
* textual name. The key is the HTTP Status Code number, and the resulting
|
839
|
+
* value will be the textual name for that Status Code.
|
840
|
+
*
|
841
|
+
* The comments for each item are taken from httpstatuses.com and the RFC-7231
|
842
|
+
* document.
|
843
|
+
*
|
844
|
+
* @see https://httpstatuses.com
|
845
|
+
* @see https://datatracker.ietf.org/doc/html/rfc7231
|
846
|
+
*/
|
847
|
+
declare const HTTPStatuses: Readonly<{
|
848
|
+
[key: number]: string;
|
849
|
+
}>;
|
850
|
+
/**
|
851
|
+
* Numerical HTTP status code.
|
852
|
+
*/
|
853
|
+
type StatusCode = keyof typeof HTTPStatuses;
|
854
|
+
/**
|
855
|
+
* Checks if the given numerical status code is in the known HTTP status codes
|
856
|
+
* list.
|
857
|
+
*
|
858
|
+
* @param code HTTP Status code
|
859
|
+
* @returns True if the code is a valid HTTP status code
|
860
|
+
*/
|
861
|
+
declare const isValidStatusCode: (code: number) => boolean;
|
862
|
+
/**
|
863
|
+
* Checks if the given status code is in the informational range (1XX).
|
864
|
+
*
|
865
|
+
* @param code HTTP Status code
|
866
|
+
* @returns True if the code is in the "informational" range.
|
867
|
+
*/
|
868
|
+
declare const isInformational: (code: StatusCode) => boolean;
|
869
|
+
/**
|
870
|
+
* Checks if the given status code is in the successful range (2XX).
|
871
|
+
*
|
872
|
+
* @param code HTTP Status code
|
873
|
+
* @returns True if the code is in the "success" range.
|
874
|
+
*/
|
875
|
+
declare const isSuccessful: (code: StatusCode) => boolean;
|
876
|
+
/**
|
877
|
+
* Checks if the given status code is in the redirection range (3XX).
|
878
|
+
*
|
879
|
+
* @param code HTTP Status code
|
880
|
+
* @returns True if the code is in the "redirection" range.
|
881
|
+
*/
|
882
|
+
declare const isRedirection: (code: StatusCode) => boolean;
|
883
|
+
/**
|
884
|
+
* Checks if the given status code is in the client error range (4XX).
|
885
|
+
*
|
886
|
+
* @param code HTTP Status code
|
887
|
+
* @returns True if the code is in the "client error" range.
|
888
|
+
*/
|
889
|
+
declare const isClientError: (code: StatusCode) => boolean;
|
890
|
+
/**
|
891
|
+
* Checks if the given status code is in the server error range (5XX).
|
892
|
+
*
|
893
|
+
* @param code HTTP Status code
|
894
|
+
* @returns True if the code is in the "server error" range.
|
895
|
+
*/
|
896
|
+
declare const isServerError: (code: StatusCode) => boolean;
|
897
|
+
/**
|
898
|
+
* Searches the list of HTTP statuses for a matching textual name to the one
|
899
|
+
* provided. If a match is found, then the numerical status code is returned,
|
900
|
+
* otherwise `null`.
|
901
|
+
*
|
902
|
+
* Internally, the parameter and the status names are normalized by lower-casing
|
903
|
+
* the strings and trimming space.
|
904
|
+
*
|
905
|
+
* @param status HTTP Status textual name
|
906
|
+
* @returns The numerical status code, or null if not found
|
907
|
+
*/
|
908
|
+
declare const getCodeForStatus: (status: string) => null | StatusCode;
|
909
|
+
|
910
|
+
export { type ApiClient, type AuthMethods, type AuthMethodsBase, type Body, type BodyObject, type ConstrainedForklaunchRouter, type ContractDetails, type ContractDetailsExpressLikeSchemaHandler, type ContractDetailsOrMiddlewareOrTypedHandler, type ErrorContainer, type ExpressLikeAuthMapper, type ExpressLikeHandler, type ExpressLikeRouter, type ExpressLikeSchemaAuthMapper, type ExpressLikeSchemaHandler, type ExtractedParamsObject, type ForklaunchBaseRequest, ForklaunchExpressLikeApplication, ForklaunchExpressLikeRouter, type ForklaunchNextFunction, type ForklaunchRequest, type ForklaunchResErrors, type ForklaunchResHeaders, type ForklaunchResponse, type ForklaunchRoute, type ForklaunchRouter, type ForklaunchSendableData, type ForklaunchStatusResponse, HTTPStatuses, type HeadersObject, type HttpContractDetails, type HttpMethod, type LiveTypeFunction, type LiveTypeRouteDefinition, type MapParamsSchema, type MapReqBodySchema, type MapReqHeadersSchema, type MapReqQuerySchema, type MapResBodyMapSchema, type MapResHeadersSchema, type MapSchema, type Method, type MiddlewareContractDetails, type MiddlewareOrMiddlewareWithTypedHandler, type NestableRouterBasedHandler, type NumberOnlyObject, type ParamsDictionary, type ParamsObject, type PathBasedHandler, type PathMatch, type PathOrMiddlewareBasedHandler, type PathParamHttpContractDetails, type PathParamMethod, type QueryObject, type RequestContext, type ResponseCompiledSchema, type ResponseShape, type ResponsesObject, type SchemaAuthMethods, type StatusCode, type StringOnlyObject, type TypedHandler, type TypedMiddlewareDefinition, type TypedNestableMiddlewareDefinition, delete_, enrichExpressLikeSend, generateSwaggerDocument, get, getCodeForStatus, head, isClientError, isForklaunchRouter, isInformational, isRedirection, isServerError, isSuccessful, isValidStatusCode, middleware, options, patch, post, put, trace, typedHandler };
|