@forklaunch/core 0.1.9 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/dist/cache/index.d.ts +1 -0
  2. package/dist/cache/index.d.ts.map +1 -0
  3. package/dist/cache/index.js +3 -20
  4. package/dist/cache/interfaces/ttlCache.interface.d.ts +1 -0
  5. package/dist/cache/interfaces/ttlCache.interface.d.ts.map +1 -0
  6. package/dist/cache/interfaces/ttlCache.interface.js +1 -3
  7. package/dist/cache/redisTtlCache.d.ts +1 -0
  8. package/dist/cache/redisTtlCache.d.ts.map +1 -0
  9. package/dist/cache/redisTtlCache.js +3 -8
  10. package/dist/cache/types/ttlCacheRecord.types.d.ts +1 -0
  11. package/dist/cache/types/ttlCacheRecord.types.d.ts.map +1 -0
  12. package/dist/cache/types/ttlCacheRecord.types.js +1 -3
  13. package/dist/controllers/index.d.ts +1 -0
  14. package/dist/controllers/index.d.ts.map +1 -0
  15. package/dist/controllers/index.js +1 -18
  16. package/dist/controllers/interfaces/controller.interface.d.ts +1 -0
  17. package/dist/controllers/interfaces/controller.interface.d.ts.map +1 -0
  18. package/dist/controllers/interfaces/controller.interface.js +1 -3
  19. package/dist/database/index.d.ts +1 -0
  20. package/dist/database/index.d.ts.map +1 -0
  21. package/dist/database/index.js +1 -18
  22. package/dist/database/mikro/models/entities/base.entity.d.ts +1 -0
  23. package/dist/database/mikro/models/entities/base.entity.d.ts.map +1 -0
  24. package/dist/database/mikro/models/entities/base.entity.js +7 -18
  25. package/dist/entityMapper/index.d.ts +1 -0
  26. package/dist/entityMapper/index.d.ts.map +1 -0
  27. package/dist/entityMapper/index.js +2 -19
  28. package/dist/entityMapper/interfaces/entityMapper.interface.d.ts +1 -0
  29. package/dist/entityMapper/interfaces/entityMapper.interface.d.ts.map +1 -0
  30. package/dist/entityMapper/interfaces/entityMapper.interface.js +1 -3
  31. package/dist/entityMapper/models/baseEntityMapper.model.d.ts +1 -0
  32. package/dist/entityMapper/models/baseEntityMapper.model.d.ts.map +1 -0
  33. package/dist/entityMapper/models/baseEntityMapper.model.js +2 -8
  34. package/dist/entityMapper/models/requestEntityMapper.model.d.ts +1 -0
  35. package/dist/entityMapper/models/requestEntityMapper.model.d.ts.map +1 -0
  36. package/dist/entityMapper/models/requestEntityMapper.model.js +4 -9
  37. package/dist/entityMapper/models/responseEntityMapper.model.d.ts +1 -0
  38. package/dist/entityMapper/models/responseEntityMapper.model.d.ts.map +1 -0
  39. package/dist/entityMapper/models/responseEntityMapper.model.js +4 -9
  40. package/dist/entityMapper/types/entityMapper.types.d.ts +1 -0
  41. package/dist/entityMapper/types/entityMapper.types.d.ts.map +1 -0
  42. package/dist/entityMapper/types/entityMapper.types.js +1 -3
  43. package/dist/eslint.config.d.mts +3 -0
  44. package/dist/eslint.config.d.mts.map +1 -0
  45. package/dist/eslint.config.mjs +10 -0
  46. package/dist/http/httpStatusCodes.d.ts +1 -0
  47. package/dist/http/httpStatusCodes.d.ts.map +1 -0
  48. package/dist/http/httpStatusCodes.js +10 -21
  49. package/dist/http/index.d.ts +1 -0
  50. package/dist/http/index.d.ts.map +1 -0
  51. package/dist/http/index.js +5 -22
  52. package/dist/http/interfaces/forklaunchExpress.abstractClass.d.ts +146 -0
  53. package/dist/http/interfaces/forklaunchExpress.abstractClass.d.ts.map +1 -0
  54. package/dist/http/interfaces/forklaunchExpress.abstractClass.js +316 -0
  55. package/dist/http/middleware/index.d.ts +1 -0
  56. package/dist/http/middleware/index.d.ts.map +1 -0
  57. package/dist/http/middleware/index.js +2 -19
  58. package/dist/http/middleware/request.middleware.d.ts +11 -9
  59. package/dist/http/middleware/request.middleware.d.ts.map +1 -0
  60. package/dist/http/middleware/request.middleware.js +11 -45
  61. package/dist/http/middleware/response.middleware.d.ts +5 -2
  62. package/dist/http/middleware/response.middleware.d.ts.map +1 -0
  63. package/dist/http/middleware/response.middleware.js +1 -5
  64. package/dist/http/openApiV3Generator.d.ts +1 -0
  65. package/dist/http/openApiV3Generator.d.ts.map +1 -0
  66. package/dist/http/openApiV3Generator.js +28 -13
  67. package/dist/http/regex.d.ts +1 -0
  68. package/dist/http/regex.d.ts.map +1 -0
  69. package/dist/http/regex.js +1 -5
  70. package/dist/http/types/api.types.d.ts +128 -50
  71. package/dist/http/types/api.types.d.ts.map +1 -0
  72. package/dist/http/types/api.types.js +1 -3
  73. package/dist/http/types/forklaunch.types.d.ts +2 -3
  74. package/dist/http/types/forklaunch.types.d.ts.map +1 -0
  75. package/dist/http/types/forklaunch.types.js +1 -3
  76. package/dist/http/types/index.d.ts +1 -0
  77. package/dist/http/types/index.d.ts.map +1 -0
  78. package/dist/http/types/index.js +3 -20
  79. package/dist/http/types/primitive.types.d.ts +5 -4
  80. package/dist/http/types/primitive.types.d.ts.map +1 -0
  81. package/dist/http/types/primitive.types.js +1 -3
  82. package/dist/index.d.ts +1 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +6 -23
  85. package/dist/jest.config.d.ts +1 -0
  86. package/dist/jest.config.d.ts.map +1 -0
  87. package/dist/jest.config.js +1 -4
  88. package/dist/services/index.d.ts +1 -0
  89. package/dist/services/index.d.ts.map +1 -0
  90. package/dist/services/index.js +1 -18
  91. package/dist/services/interfaces/baseService.d.ts +1 -0
  92. package/dist/services/interfaces/baseService.d.ts.map +1 -0
  93. package/dist/services/interfaces/baseService.js +1 -3
  94. package/dist/tests/entityMapper.test.d.ts +1 -0
  95. package/dist/tests/entityMapper.test.d.ts.map +1 -0
  96. package/dist/tests/entityMapper.test.js +34 -24
  97. package/dist/tests/http.middleware.test.d.ts +1 -0
  98. package/dist/tests/http.middleware.test.d.ts.map +1 -0
  99. package/dist/tests/http.middleware.test.js +16 -17
  100. package/dist/tests/openApiV3Generator.test.d.ts +1 -0
  101. package/dist/tests/openApiV3Generator.test.d.ts.map +1 -0
  102. package/dist/tests/openApiV3Generator.test.js +5 -9
  103. package/dist/tests/redisTtlCache.test.d.ts +1 -0
  104. package/dist/tests/redisTtlCache.test.d.ts.map +1 -0
  105. package/dist/tests/redisTtlCache.test.js +4 -7
  106. package/dist/tsconfig.tsbuildinfo +1 -0
  107. package/package.json +13 -10
  108. package/LICENSE +0 -21
  109. package/dist/cache/index.js.map +0 -1
  110. package/dist/cache/interfaces/ttlCache.interface.js.map +0 -1
  111. package/dist/cache/redisTtlCache.js.map +0 -1
  112. package/dist/cache/types/ttlCacheRecord.types.js.map +0 -1
  113. package/dist/controllers/index.js.map +0 -1
  114. package/dist/controllers/interfaces/controller.interface.js.map +0 -1
  115. package/dist/database/index.js.map +0 -1
  116. package/dist/database/mikro/models/entities/base.entity.js.map +0 -1
  117. package/dist/entityMapper/index.js.map +0 -1
  118. package/dist/entityMapper/interfaces/entityMapper.interface.js.map +0 -1
  119. package/dist/entityMapper/models/baseEntityMapper.model.js.map +0 -1
  120. package/dist/entityMapper/models/requestEntityMapper.model.js.map +0 -1
  121. package/dist/entityMapper/models/responseEntityMapper.model.js.map +0 -1
  122. package/dist/entityMapper/types/entityMapper.types.js.map +0 -1
  123. package/dist/http/httpStatusCodes.js.map +0 -1
  124. package/dist/http/index.js.map +0 -1
  125. package/dist/http/middleware/index.js.map +0 -1
  126. package/dist/http/middleware/request.middleware.js.map +0 -1
  127. package/dist/http/middleware/response.middleware.js.map +0 -1
  128. package/dist/http/openApiV3Generator.js.map +0 -1
  129. package/dist/http/regex.js.map +0 -1
  130. package/dist/http/types/api.types.js.map +0 -1
  131. package/dist/http/types/forklaunch.types.js.map +0 -1
  132. package/dist/http/types/index.js.map +0 -1
  133. package/dist/http/types/primitive.types.js.map +0 -1
  134. package/dist/index.js.map +0 -1
  135. package/dist/jest.config.js.map +0 -1
  136. package/dist/services/index.js.map +0 -1
  137. package/dist/services/interfaces/baseService.js.map +0 -1
  138. package/dist/tests/entityMapper.test.js.map +0 -1
  139. package/dist/tests/http.middleware.test.js.map +0 -1
  140. package/dist/tests/openApiV3Generator.test.js.map +0 -1
  141. package/dist/tests/redisTtlCache.test.js.map +0 -1
@@ -0,0 +1,146 @@
1
+ import { AnySchemaValidator } from '@forklaunch/validator';
2
+ import { Body, ExpressLikeRouterFunction, ForklaunchSchemaMiddlewareHandler, HeadersObject, HttpContractDetails, LiveTypeFunction, ParamsObject, PathParamHttpContractDetails, QueryObject, ResponsesObject } from '../types';
3
+ interface ExpressLikeRouter {
4
+ use: (...args: unknown[]) => void;
5
+ get(path: string, ...handlers: ExpressLikeRouterFunction[]): void;
6
+ post(path: string, ...handlers: ExpressLikeRouterFunction[]): void;
7
+ put(path: string, ...handlers: ExpressLikeRouterFunction[]): void;
8
+ patch(path: string, ...handlers: ExpressLikeRouterFunction[]): void;
9
+ delete(path: string, ...handlers: ExpressLikeRouterFunction[]): void;
10
+ }
11
+ export declare abstract class ForklaunchExpressRouter<SV extends AnySchemaValidator, BasePath extends `/${string}`> {
12
+ basePath: BasePath;
13
+ readonly internal: ExpressLikeRouter;
14
+ private routes;
15
+ constructor(basePath: BasePath, internal: ExpressLikeRouter);
16
+ /**
17
+ * Resolves middlewares based on the contract details.
18
+ *
19
+ * @param {PathParamHttpContractDetails<SV> | HttpContractDetails<SV>} contractDetails - The contract details.
20
+ * @returns {MiddlewareHandler<SV>[]} - The resolved middlewares.
21
+ */
22
+ private resolveMiddlewares;
23
+ /**
24
+ * Parses and runs the controller function with error handling.
25
+ *
26
+ * @template P - The type of request parameters.
27
+ * @template ResBodyMap - The type of response body.
28
+ * @template ReqBody - The type of request body.
29
+ * @template ReqQuery - The type of request query.
30
+ * @template LocalsObj - The type of local variables.
31
+ * @template StatusCode - The type of status code.
32
+ * @param {MiddlewareHandler<SV, P, ResBodyMap | string, ReqBody, ReqQuery, LocalsObj, StatusCode>} requestHandler - The request handler.
33
+ * @returns {ExpressMiddlewareHandler} - The Express request handler.
34
+ */
35
+ private parseAndRunControllerFunction;
36
+ /**
37
+ * Extracts the controller function from the provided functions.
38
+ *
39
+ * @template P - The type of request parameters.
40
+ * @template ResBodyMap - The type of response body.
41
+ * @template ReqBody - The type of request body.
42
+ * @template ReqQuery - The type of request query.
43
+ * @template LocalsObj - The type of local variables.
44
+ * @param {MiddlewareHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, LocalsObj>[]} functions - The provided functions.
45
+ * @returns {MiddlewareHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, LocalsObj>} - The extracted controller function.
46
+ * @throws {Error} - Throws an error if the last argument is not a function.
47
+ */
48
+ private extractControllerFunction;
49
+ /**
50
+ * Registers middleware to the router.
51
+ *
52
+ * @param {...unknown[]} args - The middleware to register.
53
+ * @returns {this} - The router instance.
54
+ */
55
+ use(...args: unknown[]): this;
56
+ /**
57
+ * Executes request locally, applying parameters
58
+ *
59
+ * @param functions {ForklaunchMiddlewareHandler<SV>}
60
+ * @param controllerFunction
61
+ * @returns
62
+ */
63
+ private localParamRequest;
64
+ /**
65
+ * Registers a GET route with the specified contract details and handler functions.
66
+ *
67
+ * @template P - The type of request parameters.
68
+ * @template ResBodyMap - The type of response body.
69
+ * @template ReqBody - The type of request body.
70
+ * @template ReqQuery - The type of request query.
71
+ * @template LocalsObj - The type of local variables.
72
+ * @param {string} path - The path for the route.
73
+ * @param {PathParamHttpContractDetails<SV, P, ResBodyMap, ReqQuery>} contractDetails - The contract details.
74
+ * @param {...SchemaMiddlewareHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, LocalsObj>[]} functions - The handler functions.
75
+ * @returns {ExpressRouter} - The Express router.
76
+ */
77
+ get<Path extends `/${string}`, P extends ParamsObject<SV> = ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV> = ResponsesObject<SV>, ReqBody extends Body<SV> = Body<SV>, ReqQuery extends QueryObject<SV> = QueryObject<SV>, ReqHeaders extends HeadersObject<SV> = HeadersObject<SV>, ResHeaders extends HeadersObject<SV> = HeadersObject<SV>, LocalsObj extends Record<string, unknown> = Record<string, unknown>>(path: Path, contractDetails: PathParamHttpContractDetails<SV, P, ResBodyMap, ReqQuery, ReqHeaders, ResHeaders>, ...functions: ForklaunchSchemaMiddlewareHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[]): {
78
+ get: LiveTypeFunction<SV, `${BasePath}/${string}`, import("../types").MapSchema<SV, P> extends infer Params ? unknown extends Params ? never : Params : never, import("../types").MapSchema<SV, ResBodyMap> extends infer ResponseBodyMap ? unknown extends ResponseBodyMap ? import("../types").ForklaunchResErrors<string, string, string, string> : ResponseBodyMap : never, import("../types").MapSchema<SV, ReqBody> extends infer Body ? unknown extends Body ? never : Body : never, import("../types").MapSchema<SV, ReqQuery> extends infer Query ? unknown extends Query ? never : Query : never, import("../types").MapSchema<SV, ReqHeaders> extends infer RequestHeaders ? unknown extends RequestHeaders ? import("../types").ForklaunchResHeaders : ReqHeaders : never, import("../types").MapSchema<SV, ResHeaders> extends infer ResponseHeaders ? unknown extends ResponseHeaders ? never : ResHeaders : never>;
79
+ };
80
+ /**
81
+ * Registers a POST route with the specified contract details and handler functions.
82
+ *
83
+ * @template P - The type of request parameters.
84
+ * @template ResBodyMap - The type of response body.
85
+ * @template ReqBody - The type of request body.
86
+ * @template ReqQuery - The type of request query.
87
+ * @template LocalsObj - The type of local variables.
88
+ * @param {string} path - The path for the route.
89
+ * @param {HttpContractDetails<SV, P, ResBodyMap, ReqBody, ReqQuery>} contractDetails - The contract details.
90
+ * @param {...SchemaMiddlewareHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, LocalsObj>[]} functions - The handler functions.
91
+ * @returns {ExpressRouter} - The Express router.
92
+ */
93
+ post<Path extends `/${string}`, P extends ParamsObject<SV> = ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV> = ResponsesObject<SV>, ReqBody extends Body<SV> = Body<SV>, ReqQuery extends QueryObject<SV> = QueryObject<SV>, ReqHeaders extends HeadersObject<SV> = HeadersObject<SV>, ResHeaders extends HeadersObject<SV> = HeadersObject<SV>, LocalsObj extends Record<string, unknown> = Record<string, unknown>>(path: Path, contractDetails: HttpContractDetails<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>, ...functions: ForklaunchSchemaMiddlewareHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[]): {
94
+ post: LiveTypeFunction<SV, `${BasePath}/${string}`, import("../types").MapSchema<SV, P> extends infer Params ? unknown extends Params ? never : Params : never, import("../types").MapSchema<SV, ResBodyMap> extends infer ResponseBodyMap ? unknown extends ResponseBodyMap ? import("../types").ForklaunchResErrors<string, string, string, string> : ResponseBodyMap : never, import("../types").MapSchema<SV, ReqBody> extends infer Body ? unknown extends Body ? never : Body : never, import("../types").MapSchema<SV, ReqQuery> extends infer Query ? unknown extends Query ? never : Query : never, import("../types").MapSchema<SV, ReqHeaders> extends infer RequestHeaders ? unknown extends RequestHeaders ? import("../types").ForklaunchResHeaders : ReqHeaders : never, import("../types").MapSchema<SV, ResHeaders> extends infer ResponseHeaders ? unknown extends ResponseHeaders ? never : ResHeaders : never>;
95
+ };
96
+ /**
97
+ * Registers a PUT route with the specified contract details and handler functions.
98
+ *
99
+ * @template P - The type of request parameters.
100
+ * @template ResBodyMap - The type of response body.
101
+ * @template ReqBody - The type of request body.
102
+ * @template ReqQuery - The type of request query.
103
+ * @template LocalsObj - The type of local variables.
104
+ * @param {string} path - The path for the route.
105
+ * @param {HttpContractDetails<SV, P, ResBodyMap, ReqBody, ReqQuery>} contractDetails - The contract details.
106
+ * @param {...SchemaMiddlewareHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, LocalsObj>[]} functions - The handler functions.
107
+ * @returns {ExpressRouter} - The Express router.
108
+ */
109
+ put<Path extends `/${string}`, P extends ParamsObject<SV> = ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV> = ResponsesObject<SV>, ReqBody extends Body<SV> = Body<SV>, ReqQuery extends QueryObject<SV> = QueryObject<SV>, ReqHeaders extends HeadersObject<SV> = HeadersObject<SV>, ResHeaders extends HeadersObject<SV> = HeadersObject<SV>, LocalsObj extends Record<string, unknown> = Record<string, unknown>>(path: Path, contractDetails: HttpContractDetails<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>, ...functions: ForklaunchSchemaMiddlewareHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[]): {
110
+ put: LiveTypeFunction<SV, `${BasePath}/${string}`, import("../types").MapSchema<SV, P> extends infer Params ? unknown extends Params ? never : Params : never, import("../types").MapSchema<SV, ResBodyMap> extends infer ResponseBodyMap ? unknown extends ResponseBodyMap ? import("../types").ForklaunchResErrors<string, string, string, string> : ResponseBodyMap : never, import("../types").MapSchema<SV, ReqBody> extends infer Body ? unknown extends Body ? never : Body : never, import("../types").MapSchema<SV, ReqQuery> extends infer Query ? unknown extends Query ? never : Query : never, import("../types").MapSchema<SV, ReqHeaders> extends infer RequestHeaders ? unknown extends RequestHeaders ? import("../types").ForklaunchResHeaders : ReqHeaders : never, import("../types").MapSchema<SV, ResHeaders> extends infer ResponseHeaders ? unknown extends ResponseHeaders ? never : ResHeaders : never>;
111
+ };
112
+ /**
113
+ * Registers a PATCH route with the specified contract details and handler functions.
114
+ *
115
+ * @template P - The type of request parameters.
116
+ * @template ResBodyMap - The type of response body.
117
+ * @template ReqBody - The type of request body.
118
+ * @template ReqQuery - The type of request query.
119
+ * @template LocalsObj - The type of local variables.
120
+ * @param {string} path - The path for the route.
121
+ * @param {HttpContractDetails<SV, P, ResBodyMap, ReqBody, ReqQuery>} contractDetails - The contract details.
122
+ * @param {...SchemaMiddlewareHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, LocalsObj>[]} functions - The handler functions.
123
+ * @returns {ExpressRouter} - The Express router.
124
+ */
125
+ patch<Path extends `/${string}`, P extends ParamsObject<SV> = ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV> = ResponsesObject<SV>, ReqBody extends Body<SV> = Body<SV>, ReqQuery extends QueryObject<SV> = QueryObject<SV>, ReqHeaders extends HeadersObject<SV> = HeadersObject<SV>, ResHeaders extends HeadersObject<SV> = HeadersObject<SV>, LocalsObj extends Record<string, unknown> = Record<string, unknown>>(path: Path, contractDetails: HttpContractDetails<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>, ...functions: ForklaunchSchemaMiddlewareHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[]): {
126
+ patch: LiveTypeFunction<SV, `${BasePath}/${string}`, import("../types").MapSchema<SV, P> extends infer Params ? unknown extends Params ? never : Params : never, import("../types").MapSchema<SV, ResBodyMap> extends infer ResponseBodyMap ? unknown extends ResponseBodyMap ? import("../types").ForklaunchResErrors<string, string, string, string> : ResponseBodyMap : never, import("../types").MapSchema<SV, ReqBody> extends infer Body ? unknown extends Body ? never : Body : never, import("../types").MapSchema<SV, ReqQuery> extends infer Query ? unknown extends Query ? never : Query : never, import("../types").MapSchema<SV, ReqHeaders> extends infer RequestHeaders ? unknown extends RequestHeaders ? import("../types").ForklaunchResHeaders : ReqHeaders : never, import("../types").MapSchema<SV, ResHeaders> extends infer ResponseHeaders ? unknown extends ResponseHeaders ? never : ResHeaders : never>;
127
+ };
128
+ /**
129
+ * Registers a DELETE route with the specified contract details and handler functions.
130
+ *
131
+ * @template P - The type of request parameters.
132
+ * @template ResBodyMap - The type of response body.
133
+ * @template ReqBody - The type of request body.
134
+ * @template ReqQuery - The type of request query.
135
+ * @template LocalsObj - The type of local variables.
136
+ * @param {string} path - The path for the route.
137
+ * @param {PathParamHttpContractDetails<SV, P, ResBodyMap, ReqQuery>} contractDetails - The contract details.
138
+ * @param {...SchemaMiddlewareHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, LocalsObj>[]} functions - The handler functions.
139
+ * @returns {ExpressRouter} - The Express router.
140
+ */
141
+ delete<Path extends `/${string}`, P extends ParamsObject<SV> = ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV> = ResponsesObject<SV>, ReqBody extends Body<SV> = Body<SV>, ReqQuery extends QueryObject<SV> = QueryObject<SV>, ReqHeaders extends HeadersObject<SV> = HeadersObject<SV>, ResHeaders extends HeadersObject<SV> = HeadersObject<SV>, LocalsObj extends Record<string, unknown> = Record<string, unknown>>(path: Path, contractDetails: PathParamHttpContractDetails<SV, P, ResBodyMap, ReqQuery, ReqHeaders, ResHeaders>, ...functions: ForklaunchSchemaMiddlewareHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>[]): {
142
+ delete: LiveTypeFunction<SV, `${BasePath}/${string}`, import("../types").MapSchema<SV, P> extends infer Params ? unknown extends Params ? never : Params : never, import("../types").MapSchema<SV, ResBodyMap> extends infer ResponseBodyMap ? unknown extends ResponseBodyMap ? import("../types").ForklaunchResErrors<string, string, string, string> : ResponseBodyMap : never, import("../types").MapSchema<SV, ReqBody> extends infer Body ? unknown extends Body ? never : Body : never, import("../types").MapSchema<SV, ReqQuery> extends infer Query ? unknown extends Query ? never : Query : never, import("../types").MapSchema<SV, ReqHeaders> extends infer RequestHeaders ? unknown extends RequestHeaders ? import("../types").ForklaunchResHeaders : ReqHeaders : never, import("../types").MapSchema<SV, ResHeaders> extends infer ResponseHeaders ? unknown extends ResponseHeaders ? never : ResHeaders : never>;
143
+ };
144
+ }
145
+ export {};
146
+ //# sourceMappingURL=forklaunchExpress.abstractClass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forklaunchExpress.abstractClass.d.ts","sourceRoot":"","sources":["../../../http/interfaces/forklaunchExpress.abstractClass.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,316 @@
1
+ import { enrichRequestDetails, parseReqHeaders, parseRequestAuth, parseRequestBody, parseRequestParams, parseRequestQuery } from '../middleware';
2
+ export class ForklaunchExpressRouter {
3
+ basePath;
4
+ internal;
5
+ routes = [];
6
+ constructor(basePath, internal) {
7
+ this.basePath = basePath;
8
+ this.internal = internal;
9
+ }
10
+ /**
11
+ * Resolves middlewares based on the contract details.
12
+ *
13
+ * @param {PathParamHttpContractDetails<SV> | HttpContractDetails<SV>} contractDetails - The contract details.
14
+ * @returns {MiddlewareHandler<SV>[]} - The resolved middlewares.
15
+ */
16
+ resolveMiddlewares(contractDetails) {
17
+ const middlewares = [
18
+ enrichRequestDetails(contractDetails)
19
+ ];
20
+ if (contractDetails.params) {
21
+ middlewares.push(parseRequestParams);
22
+ }
23
+ if (contractDetails.body) {
24
+ middlewares.push(parseRequestBody);
25
+ }
26
+ if (contractDetails.requestHeaders) {
27
+ middlewares.push(parseReqHeaders);
28
+ }
29
+ if (contractDetails.query) {
30
+ middlewares.push(parseRequestQuery);
31
+ }
32
+ if (contractDetails.auth) {
33
+ middlewares.push(parseRequestAuth);
34
+ }
35
+ return middlewares;
36
+ }
37
+ /**
38
+ * Parses and runs the controller function with error handling.
39
+ *
40
+ * @template P - The type of request parameters.
41
+ * @template ResBodyMap - The type of response body.
42
+ * @template ReqBody - The type of request body.
43
+ * @template ReqQuery - The type of request query.
44
+ * @template LocalsObj - The type of local variables.
45
+ * @template StatusCode - The type of status code.
46
+ * @param {MiddlewareHandler<SV, P, ResBodyMap | string, ReqBody, ReqQuery, LocalsObj, StatusCode>} requestHandler - The request handler.
47
+ * @returns {ExpressMiddlewareHandler} - The Express request handler.
48
+ */
49
+ parseAndRunControllerFunction(requestHandler) {
50
+ return (async (req, res, next) => {
51
+ if (!requestHandler) {
52
+ throw new Error('Controller function is not defined');
53
+ }
54
+ try {
55
+ await requestHandler(req, res, next);
56
+ }
57
+ catch (error) {
58
+ if (next) {
59
+ next(error);
60
+ }
61
+ console.error(error);
62
+ if (!res.headersSent) {
63
+ res.status(500).send('Internal Server Error');
64
+ }
65
+ }
66
+ });
67
+ }
68
+ /**
69
+ * Extracts the controller function from the provided functions.
70
+ *
71
+ * @template P - The type of request parameters.
72
+ * @template ResBodyMap - The type of response body.
73
+ * @template ReqBody - The type of request body.
74
+ * @template ReqQuery - The type of request query.
75
+ * @template LocalsObj - The type of local variables.
76
+ * @param {MiddlewareHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, LocalsObj>[]} functions - The provided functions.
77
+ * @returns {MiddlewareHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, LocalsObj>} - The extracted controller function.
78
+ * @throws {Error} - Throws an error if the last argument is not a function.
79
+ */
80
+ extractControllerFunction(functions) {
81
+ const controllerFunction = functions.pop();
82
+ if (typeof controllerFunction !== 'function') {
83
+ throw new Error('Last argument must be a function');
84
+ }
85
+ return controllerFunction;
86
+ }
87
+ // TODO: Move to UniversalSDK
88
+ // /**
89
+ // * Extracts the SDK path from the given path.
90
+ // *
91
+ // * @param {string | RegExp | (string | RegExp)[]} path - The provided path.
92
+ // * @returns {string} - The extracted SDK path.
93
+ // * @throws {Error} - Throws an error if the path is not defined.
94
+ // */
95
+ // private extractSdkPath(path: string | RegExp | (string | RegExp)[]): string {
96
+ // let sdkPath = path;
97
+ // if (Array.isArray(path)) {
98
+ // sdkPath = path.pop() || path[0];
99
+ // }
100
+ // if (!sdkPath) {
101
+ // throw new Error('Path is not defined');
102
+ // }
103
+ // if (sdkPath instanceof RegExp) {
104
+ // sdkPath = generateStringFromRegex(sdkPath);
105
+ // }
106
+ // return sdkPath as string;
107
+ // }
108
+ /**
109
+ * Registers middleware to the router.
110
+ *
111
+ * @param {...unknown[]} args - The middleware to register.
112
+ * @returns {this} - The router instance.
113
+ */
114
+ use(...args) {
115
+ this.internal.use(...args);
116
+ return this;
117
+ }
118
+ /**
119
+ * Executes request locally, applying parameters
120
+ *
121
+ * @param functions {ForklaunchMiddlewareHandler<SV>}
122
+ * @param controllerFunction
123
+ * @returns
124
+ */
125
+ localParamRequest(functions, controllerFunction) {
126
+ return (async (route, request) => {
127
+ let statusCode;
128
+ let responseMessage;
129
+ const responseHeaders = {};
130
+ const req = {
131
+ params: request?.params ?? {},
132
+ query: request?.query ?? {},
133
+ headers: request?.headers ?? {},
134
+ body: request?.body ?? {},
135
+ path: route
136
+ };
137
+ const res = {
138
+ status: (code) => {
139
+ statusCode = code;
140
+ return res;
141
+ },
142
+ send: (message) => {
143
+ responseMessage = message;
144
+ },
145
+ json: (body) => {
146
+ responseMessage = body;
147
+ },
148
+ jsonp: (body) => {
149
+ responseMessage = body;
150
+ },
151
+ setHeader: (key, value) => {
152
+ responseHeaders[key] = value;
153
+ }
154
+ };
155
+ // let cursor = functions.shift() as unknown as (req_: typeof req, resp_: typeof res, next: MiddlewareNext) => void;
156
+ let cursor = functions.shift();
157
+ if (cursor) {
158
+ for (const fn of functions) {
159
+ await cursor(req, res, (err) => {
160
+ if (err) {
161
+ throw err;
162
+ }
163
+ cursor = fn;
164
+ });
165
+ }
166
+ await cursor(req, res, async (err) => {
167
+ if (err) {
168
+ throw err;
169
+ }
170
+ });
171
+ }
172
+ const cFunction = controllerFunction;
173
+ await cFunction(req, res, (err) => {
174
+ if (err) {
175
+ throw err;
176
+ }
177
+ });
178
+ return {
179
+ code: statusCode,
180
+ response: responseMessage,
181
+ headers: responseHeaders
182
+ };
183
+ });
184
+ }
185
+ /**
186
+ * Registers a GET route with the specified contract details and handler functions.
187
+ *
188
+ * @template P - The type of request parameters.
189
+ * @template ResBodyMap - The type of response body.
190
+ * @template ReqBody - The type of request body.
191
+ * @template ReqQuery - The type of request query.
192
+ * @template LocalsObj - The type of local variables.
193
+ * @param {string} path - The path for the route.
194
+ * @param {PathParamHttpContractDetails<SV, P, ResBodyMap, ReqQuery>} contractDetails - The contract details.
195
+ * @param {...SchemaMiddlewareHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, LocalsObj>[]} functions - The handler functions.
196
+ * @returns {ExpressRouter} - The Express router.
197
+ */
198
+ get(path, contractDetails, ...functions) {
199
+ const controllerFunction = this.extractControllerFunction(functions);
200
+ this.routes.push({
201
+ basePath: this.basePath,
202
+ path,
203
+ method: 'GET',
204
+ contractDetails
205
+ });
206
+ this.internal.get(path, ...this.resolveMiddlewares(contractDetails).concat(functions), this.parseAndRunControllerFunction(controllerFunction));
207
+ return {
208
+ get: this.localParamRequest(functions, controllerFunction)
209
+ };
210
+ }
211
+ /**
212
+ * Registers a POST route with the specified contract details and handler functions.
213
+ *
214
+ * @template P - The type of request parameters.
215
+ * @template ResBodyMap - The type of response body.
216
+ * @template ReqBody - The type of request body.
217
+ * @template ReqQuery - The type of request query.
218
+ * @template LocalsObj - The type of local variables.
219
+ * @param {string} path - The path for the route.
220
+ * @param {HttpContractDetails<SV, P, ResBodyMap, ReqBody, ReqQuery>} contractDetails - The contract details.
221
+ * @param {...SchemaMiddlewareHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, LocalsObj>[]} functions - The handler functions.
222
+ * @returns {ExpressRouter} - The Express router.
223
+ */
224
+ post(path, contractDetails, ...functions) {
225
+ // : LiveType<SV, P, ResBodyMap, ReqBody, ReqQuery> {
226
+ const controllerFunction = this.extractControllerFunction(functions);
227
+ this.routes.push({
228
+ basePath: this.basePath,
229
+ path,
230
+ method: 'POST',
231
+ contractDetails
232
+ });
233
+ this.internal.post(path, ...this.resolveMiddlewares(contractDetails).concat(functions), this.parseAndRunControllerFunction(controllerFunction));
234
+ return {
235
+ post: this.localParamRequest(functions, controllerFunction)
236
+ };
237
+ }
238
+ /**
239
+ * Registers a PUT route with the specified contract details and handler functions.
240
+ *
241
+ * @template P - The type of request parameters.
242
+ * @template ResBodyMap - The type of response body.
243
+ * @template ReqBody - The type of request body.
244
+ * @template ReqQuery - The type of request query.
245
+ * @template LocalsObj - The type of local variables.
246
+ * @param {string} path - The path for the route.
247
+ * @param {HttpContractDetails<SV, P, ResBodyMap, ReqBody, ReqQuery>} contractDetails - The contract details.
248
+ * @param {...SchemaMiddlewareHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, LocalsObj>[]} functions - The handler functions.
249
+ * @returns {ExpressRouter} - The Express router.
250
+ */
251
+ put(path, contractDetails, ...functions) {
252
+ const controllerFunction = this.extractControllerFunction(functions);
253
+ this.routes.push({
254
+ basePath: this.basePath,
255
+ path,
256
+ method: 'PUT',
257
+ contractDetails
258
+ });
259
+ this.internal.put(path, ...this.resolveMiddlewares(contractDetails).concat(functions), this.parseAndRunControllerFunction(controllerFunction));
260
+ return {
261
+ put: this.localParamRequest(functions, controllerFunction)
262
+ };
263
+ }
264
+ /**
265
+ * Registers a PATCH route with the specified contract details and handler functions.
266
+ *
267
+ * @template P - The type of request parameters.
268
+ * @template ResBodyMap - The type of response body.
269
+ * @template ReqBody - The type of request body.
270
+ * @template ReqQuery - The type of request query.
271
+ * @template LocalsObj - The type of local variables.
272
+ * @param {string} path - The path for the route.
273
+ * @param {HttpContractDetails<SV, P, ResBodyMap, ReqBody, ReqQuery>} contractDetails - The contract details.
274
+ * @param {...SchemaMiddlewareHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, LocalsObj>[]} functions - The handler functions.
275
+ * @returns {ExpressRouter} - The Express router.
276
+ */
277
+ patch(path, contractDetails, ...functions) {
278
+ const controllerFunction = this.extractControllerFunction(functions);
279
+ this.routes.push({
280
+ basePath: this.basePath,
281
+ path,
282
+ method: 'PATCH',
283
+ contractDetails
284
+ });
285
+ this.internal.patch(path, ...this.resolveMiddlewares(contractDetails).concat(functions), this.parseAndRunControllerFunction(controllerFunction));
286
+ return {
287
+ patch: this.localParamRequest(functions, controllerFunction)
288
+ };
289
+ }
290
+ /**
291
+ * Registers a DELETE route with the specified contract details and handler functions.
292
+ *
293
+ * @template P - The type of request parameters.
294
+ * @template ResBodyMap - The type of response body.
295
+ * @template ReqBody - The type of request body.
296
+ * @template ReqQuery - The type of request query.
297
+ * @template LocalsObj - The type of local variables.
298
+ * @param {string} path - The path for the route.
299
+ * @param {PathParamHttpContractDetails<SV, P, ResBodyMap, ReqQuery>} contractDetails - The contract details.
300
+ * @param {...SchemaMiddlewareHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, LocalsObj>[]} functions - The handler functions.
301
+ * @returns {ExpressRouter} - The Express router.
302
+ */
303
+ delete(path, contractDetails, ...functions) {
304
+ const controllerFunction = this.extractControllerFunction(functions);
305
+ this.routes.push({
306
+ basePath: this.basePath,
307
+ path,
308
+ method: 'DELETE',
309
+ contractDetails
310
+ });
311
+ this.internal.delete(path, ...this.resolveMiddlewares(contractDetails).concat(functions), this.parseAndRunControllerFunction(controllerFunction));
312
+ return {
313
+ delete: this.localParamRequest(functions, controllerFunction)
314
+ };
315
+ }
316
+ }
@@ -1,2 +1,3 @@
1
1
  export * from './request.middleware';
2
2
  export * from './response.middleware';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../http/middleware/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC"}
@@ -1,19 +1,2 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./request.middleware"), exports);
18
- __exportStar(require("./response.middleware"), exports);
19
- //# sourceMappingURL=index.js.map
1
+ export * from './request.middleware';
2
+ export * from './response.middleware';
@@ -1,6 +1,7 @@
1
1
  import { AnySchemaValidator, SchemaValidator } from '@forklaunch/validator';
2
- import { ForklaunchNextFunction, ForklaunchRequest, ForklaunchResponse } from '../types/api.types';
3
- import { HttpContractDetails, PathParamHttpContractDetails, StringOnlyObject } from '../types/primitive.types';
2
+ import { ParsedQs } from 'qs';
3
+ import { ForklaunchNextFunction, ForklaunchRequest, ForklaunchResponse, ForklaunchSchemaMiddlewareHandler } from '../types/api.types';
4
+ import { Body, HeadersObject, HttpContractDetails, ParamsDictionary, ParamsObject, PathParamHttpContractDetails, QueryObject, ResponsesObject, StringOnlyObject } from '../types/primitive.types';
4
5
  /**
5
6
  * Middleware to create and add a request context.
6
7
  *
@@ -11,7 +12,7 @@ import { HttpContractDetails, PathParamHttpContractDetails, StringOnlyObject } f
11
12
  * @param {SV} schemaValidator - The schema validator.
12
13
  * @returns {Function} - Middleware function to create request context.
13
14
  */
14
- export declare function createRequestContext<SV extends AnySchemaValidator, Request extends ForklaunchRequest<SV>, Response extends ForklaunchResponse, NextFunction extends ForklaunchNextFunction>(schemaValidator: SV): (req: Request, res: Response, next?: NextFunction) => void;
15
+ export declare function createRequestContext<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>>(schemaValidator: SV): ForklaunchSchemaMiddlewareHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>;
15
16
  /**
16
17
  * Middleware to enrich the request details with contract details.
17
18
  *
@@ -22,7 +23,7 @@ export declare function createRequestContext<SV extends AnySchemaValidator, Requ
22
23
  * @param {PathParamHttpContractDetails<SV> | HttpContractDetails<SV>} contractDetails - The contract details.
23
24
  * @returns {Function} - Middleware function to enrich request details.
24
25
  */
25
- export declare function enrichRequestDetails<SV extends AnySchemaValidator, Request extends ForklaunchRequest<SV>, Response extends ForklaunchResponse, NextFunction extends ForklaunchNextFunction>(contractDetails: PathParamHttpContractDetails<SV> | HttpContractDetails<SV>): (req: Request, _res: Response, next?: NextFunction) => void;
26
+ export declare function enrichRequestDetails<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>>(contractDetails: PathParamHttpContractDetails<SV, P, ResBodyMap, ReqQuery, ReqHeaders, ResHeaders> | HttpContractDetails<SV, P, ResBodyMap, ReqQuery, ReqHeaders, ResHeaders>): ForklaunchSchemaMiddlewareHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>;
26
27
  /**
27
28
  * Pre-handler function to parse and validate input.
28
29
  *
@@ -44,7 +45,7 @@ export declare function preHandlerParse<SV extends AnySchemaValidator>(schemaVal
44
45
  * @param {Response} res - The response object.
45
46
  * @param {NextFunction} [next] - The next middleware function.
46
47
  */
47
- export declare function parseRequestParams<SV extends AnySchemaValidator, Request extends ForklaunchRequest<SV>, Response extends ForklaunchResponse, NextFunction extends ForklaunchNextFunction>(req: Request, res: Response, next?: NextFunction): void;
48
+ export declare function parseRequestParams<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>>(req: ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders>, res: ForklaunchResponse<ResBodyMap, ResHeaders, LocalsObj>, next?: ForklaunchNextFunction): void;
48
49
  /**
49
50
  * Middleware to parse request body.
50
51
  *
@@ -56,7 +57,7 @@ export declare function parseRequestParams<SV extends AnySchemaValidator, Reques
56
57
  * @param {Response} res - The response object.
57
58
  * @param {NextFunction} [next] - The next middleware function.
58
59
  */
59
- export declare function parseRequestBody<SV extends AnySchemaValidator, Request extends ForklaunchRequest<SV>, Response extends ForklaunchResponse, NextFunction extends ForklaunchNextFunction>(req: Request, res: Response, next?: NextFunction): void;
60
+ export declare function parseRequestBody<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>>(req: ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders>, res: ForklaunchResponse<ResBodyMap, ResHeaders, LocalsObj>, next?: ForklaunchNextFunction): void;
60
61
  /**
61
62
  * Middleware to parse request headers.
62
63
  *
@@ -68,7 +69,7 @@ export declare function parseRequestBody<SV extends AnySchemaValidator, Request
68
69
  * @param {Response} res - The response object.
69
70
  * @param {NextFunction} [next] - The next middleware function.
70
71
  */
71
- export declare function parseRequestHeaders<SV extends AnySchemaValidator, Request extends ForklaunchRequest<SV>, Response extends ForklaunchResponse, NextFunction extends ForklaunchNextFunction>(req: Request, res: Response, next?: NextFunction): void;
72
+ export declare function parseReqHeaders<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>>(req: ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders>, res: ForklaunchResponse<ResBodyMap, ResHeaders, LocalsObj>, next?: ForklaunchNextFunction): void;
72
73
  /**
73
74
  * Middleware to parse request query.
74
75
  *
@@ -80,7 +81,7 @@ export declare function parseRequestHeaders<SV extends AnySchemaValidator, Reque
80
81
  * @param {Response} res - The response object.
81
82
  * @param {NextFunction} [next] - The next middleware function.
82
83
  */
83
- export declare function parseRequestQuery<SV extends AnySchemaValidator, Request extends ForklaunchRequest<SV>, Response extends ForklaunchResponse, NextFunction extends ForklaunchNextFunction>(req: Request, res: Response, next?: NextFunction): void;
84
+ export declare function parseRequestQuery<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>>(req: ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders>, res: ForklaunchResponse<ResBodyMap, ResHeaders, LocalsObj>, next?: ForklaunchNextFunction): void;
84
85
  /**
85
86
  * Maps roles from authorization.
86
87
  *
@@ -106,4 +107,5 @@ export declare function parseRequestQuery<SV extends AnySchemaValidator, Request
106
107
  * @param {Response} res - The response object.
107
108
  * @param {NextFunction} [next] - The next middleware function.
108
109
  */
109
- export declare function parseRequestAuth<SV extends AnySchemaValidator, Request extends ForklaunchRequest<SV>, Response extends ForklaunchResponse, NextFunction extends ForklaunchNextFunction>(req: Request, res: Response, next?: NextFunction): Promise<void>;
110
+ export declare function parseRequestAuth<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>>(req: ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders>, res: ForklaunchResponse<ResBodyMap, ResHeaders, LocalsObj>, next?: ForklaunchNextFunction): Promise<void>;
111
+ //# sourceMappingURL=request.middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.middleware.d.ts","sourceRoot":"","sources":["../../../http/middleware/request.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE5E,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAE9B,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,iCAAiC,EAClC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,IAAI,EACJ,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,4BAA4B,EAC5B,WAAW,EACX,eAAe,EACf,gBAAgB,EACjB,MAAM,0BAA0B,CAAC;AAElC;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,EAAE,SAAS,kBAAkB,EAC7B,CAAC,SAAS,YAAY,CAAC,EAAE,CAAC,EAC1B,UAAU,SAAS,eAAe,CAAC,EAAE,CAAC,EACtC,OAAO,SAAS,IAAI,CAAC,EAAE,CAAC,EACxB,QAAQ,SAAS,WAAW,CAAC,EAAE,CAAC,EAChC,UAAU,SAAS,aAAa,CAAC,EAAE,CAAC,EACpC,UAAU,SAAS,aAAa,CAAC,EAAE,CAAC,EACpC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEzC,eAAe,EAAE,EAAE,GAClB,iCAAiC,CAClC,EAAE,EACF,CAAC,EACD,UAAU,EACV,OAAO,EACP,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAS,CACV,CAoBA;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,EAAE,SAAS,kBAAkB,EAC7B,CAAC,SAAS,YAAY,CAAC,EAAE,CAAC,EAC1B,UAAU,SAAS,eAAe,CAAC,EAAE,CAAC,EACtC,OAAO,SAAS,IAAI,CAAC,EAAE,CAAC,EACxB,QAAQ,SAAS,WAAW,CAAC,EAAE,CAAC,EAChC,UAAU,SAAS,aAAa,CAAC,EAAE,CAAC,EACpC,UAAU,SAAS,aAAa,CAAC,EAAE,CAAC,EACpC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEzC,eAAe,EACX,4BAA4B,CAC1B,EAAE,EACF,CAAC,EACD,UAAU,EACV,QAAQ,EACR,UAAU,EACV,UAAU,CACX,GACD,mBAAmB,CAAC,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,GAC3E,iCAAiC,CAClC,EAAE,EACF,CAAC,EACD,UAAU,EACV,OAAO,EACP,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAS,CACV,CAQA;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,EAAE,SAAS,kBAAkB,EAC3D,eAAe,EAAE,eAAe,EAChC,MAAM,EAAE,OAAO,EACf,WAAW,CAAC,EAAE,gBAAgB,CAAC,EAAE,CAAC,GACjC,GAAG,GAAG,SAAS,CASjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,SAAS,kBAAkB,EAC7B,CAAC,SAAS,gBAAgB,EAC1B,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,QAAQ,SAAS,QAAQ,EACzB,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEzC,GAAG,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,EAC5D,GAAG,EAAE,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,EAC1D,IAAI,CAAC,EAAE,sBAAsB,QAY9B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,SAAS,kBAAkB,EAC7B,CAAC,SAAS,gBAAgB,EAC1B,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,QAAQ,SAAS,QAAQ,EACzB,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEzC,GAAG,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,EAC5D,GAAG,EAAE,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,EAC1D,IAAI,CAAC,EAAE,sBAAsB,QAqB9B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,EAAE,SAAS,kBAAkB,EAC7B,CAAC,SAAS,gBAAgB,EAC1B,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,QAAQ,SAAS,QAAQ,EACzB,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEzC,GAAG,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,EAC5D,GAAG,EAAE,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,EAC1D,IAAI,CAAC,EAAE,sBAAsB,QAY9B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,SAAS,kBAAkB,EAC7B,CAAC,SAAS,gBAAgB,EAC1B,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,QAAQ,SAAS,QAAQ,EACzB,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEzC,GAAG,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,EAC5D,GAAG,EAAE,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,EAC1D,IAAI,CAAC,EAAE,sBAAsB,QAY9B;AAuCD;;;;;;GAMG;AAQH;;;;;;GAMG;AAQH;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,SAAS,kBAAkB,EAC7B,CAAC,SAAS,gBAAgB,EAC1B,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,QAAQ,SAAS,QAAQ,EACzB,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEzC,GAAG,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,EAC5D,GAAG,EAAE,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,EAC1D,IAAI,CAAC,EAAE,sBAAsB,iBAsD9B"}