@geekmidas/constructs 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AWSLambdaFunction-nic3vzt3.mjs → AWSLambdaFunction-DWIZYsCy.mjs} +2 -2
- package/dist/{AWSLambdaFunction-nic3vzt3.mjs.map → AWSLambdaFunction-DWIZYsCy.mjs.map} +1 -1
- package/dist/{AWSLambdaFunction-DW9qrBNR.cjs → AWSLambdaFunction-qA5LqPsv.cjs} +2 -2
- package/dist/{AWSLambdaFunction-DW9qrBNR.cjs.map → AWSLambdaFunction-qA5LqPsv.cjs.map} +1 -1
- package/dist/{AWSLambdaSubscriberAdaptor-ZuQAhW9_.cjs → AWSLambdaSubscriberAdaptor-CmPZ10JF.cjs} +1 -1
- package/dist/{AWSLambdaSubscriberAdaptor-ZuQAhW9_.cjs.map → AWSLambdaSubscriberAdaptor-CmPZ10JF.cjs.map} +1 -1
- package/dist/{AWSLambdaSubscriberAdaptor-BhqrpTVc.mjs → AWSLambdaSubscriberAdaptor-G8y3YkWj.mjs} +1 -1
- package/dist/{AWSLambdaSubscriberAdaptor-BhqrpTVc.mjs.map → AWSLambdaSubscriberAdaptor-G8y3YkWj.mjs.map} +1 -1
- package/dist/{AmazonApiGatewayEndpointAdaptor-D_Q_NTMT.cjs → AmazonApiGatewayEndpointAdaptor-B8mozTcG.cjs} +33 -10
- package/dist/AmazonApiGatewayEndpointAdaptor-B8mozTcG.cjs.map +1 -0
- package/dist/{AmazonApiGatewayEndpointAdaptor-DtzgQ9Vb.d.cts → AmazonApiGatewayEndpointAdaptor-BFhJ2Rpz.d.cts} +5 -2
- package/dist/{AmazonApiGatewayEndpointAdaptor-QzIAnWzS.mjs → AmazonApiGatewayEndpointAdaptor-Bmz6Cy1e.mjs} +33 -10
- package/dist/AmazonApiGatewayEndpointAdaptor-Bmz6Cy1e.mjs.map +1 -0
- package/dist/{AmazonApiGatewayEndpointAdaptor-DNZLntHj.d.mts → AmazonApiGatewayEndpointAdaptor-BrB3RfbI.d.mts} +5 -2
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-BF5bGWV1.mjs → AmazonApiGatewayV1EndpointAdaptor-24g3dLn5.mjs} +3 -3
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-BF5bGWV1.mjs.map → AmazonApiGatewayV1EndpointAdaptor-24g3dLn5.mjs.map} +1 -1
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-Gw-j61qM.d.cts → AmazonApiGatewayV1EndpointAdaptor-Bd-o8ese.d.cts} +3 -3
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-DbJa4cpU.d.mts → AmazonApiGatewayV1EndpointAdaptor-BtNXt0-4.d.mts} +3 -3
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-Bh4tckwd.cjs → AmazonApiGatewayV1EndpointAdaptor-D4eZ-fx5.cjs} +3 -3
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-Bh4tckwd.cjs.map → AmazonApiGatewayV1EndpointAdaptor-D4eZ-fx5.cjs.map} +1 -1
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-BOaOkLXF.mjs → AmazonApiGatewayV2EndpointAdaptor-Cc40RThv.mjs} +3 -3
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-BOaOkLXF.mjs.map → AmazonApiGatewayV2EndpointAdaptor-Cc40RThv.mjs.map} +1 -1
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-BlKn-KJ6.d.mts → AmazonApiGatewayV2EndpointAdaptor-DAJdtgek.d.mts} +3 -3
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-LUlpwmUW.d.cts → AmazonApiGatewayV2EndpointAdaptor-DX-Uci5w.d.cts} +3 -3
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-L4Ywv3Pk.cjs → AmazonApiGatewayV2EndpointAdaptor-J6tACl-N.cjs} +3 -3
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-L4Ywv3Pk.cjs.map → AmazonApiGatewayV2EndpointAdaptor-J6tACl-N.cjs.map} +1 -1
- package/dist/{Cron-BgJo6EW6.mjs → Cron-Br2TtpGY.mjs} +1 -1
- package/dist/{Cron-BgJo6EW6.mjs.map → Cron-Br2TtpGY.mjs.map} +1 -1
- package/dist/{Cron-JYYGj5ik.cjs → Cron-DF1o3U_T.cjs} +1 -1
- package/dist/{Cron-JYYGj5ik.cjs.map → Cron-DF1o3U_T.cjs.map} +1 -1
- package/dist/{CronBuilder-DVuhB_kA.mjs → CronBuilder-DNFHMTSl.mjs} +2 -2
- package/dist/{CronBuilder-DVuhB_kA.mjs.map → CronBuilder-DNFHMTSl.mjs.map} +1 -1
- package/dist/{CronBuilder-BDDS21OP.cjs → CronBuilder-e8CAOwBV.cjs} +2 -2
- package/dist/{CronBuilder-BDDS21OP.cjs.map → CronBuilder-e8CAOwBV.cjs.map} +1 -1
- package/dist/{Endpoint-DYUjJdEs.d.mts → Endpoint-C7jPJzAH.d.mts} +115 -6
- package/dist/{Endpoint-D1nnEsBU.cjs → Endpoint-COGAflGh.cjs} +128 -4
- package/dist/Endpoint-COGAflGh.cjs.map +1 -0
- package/dist/{Endpoint-DNlmybXV.mjs → Endpoint-DLLZvqoh.mjs} +123 -5
- package/dist/Endpoint-DLLZvqoh.mjs.map +1 -0
- package/dist/{Endpoint-C7z9YJHK.d.cts → Endpoint-XUMNAXYy.d.cts} +115 -6
- package/dist/{EndpointBuilder-B2iScUND.d.mts → EndpointBuilder-CFtWQhcv.d.mts} +2 -2
- package/dist/{EndpointBuilder-BhRd626m.cjs → EndpointBuilder-FJktpPOu.cjs} +2 -2
- package/dist/{EndpointBuilder-BhRd626m.cjs.map → EndpointBuilder-FJktpPOu.cjs.map} +1 -1
- package/dist/{EndpointBuilder-CpjIMYb0.mjs → EndpointBuilder-oXO_ka1-.mjs} +2 -2
- package/dist/{EndpointBuilder-CpjIMYb0.mjs.map → EndpointBuilder-oXO_ka1-.mjs.map} +1 -1
- package/dist/{EndpointBuilder-1fw103D6.d.cts → EndpointBuilder-t6fVEKBH.d.cts} +2 -2
- package/dist/{EndpointFactory-D576BhaH.d.cts → EndpointFactory-DBRGrXAy.d.mts} +10 -10
- package/dist/{EndpointFactory-DZQpM-9K.d.mts → EndpointFactory-DInjHvFR.d.cts} +10 -10
- package/dist/{EndpointFactory-ChmVHWim.cjs → EndpointFactory-Kk1tpifs.cjs} +4 -3
- package/dist/EndpointFactory-Kk1tpifs.cjs.map +1 -0
- package/dist/{EndpointFactory-DLpEbLzL.mjs → EndpointFactory-eG8bDhOh.mjs} +4 -3
- package/dist/EndpointFactory-eG8bDhOh.mjs.map +1 -0
- package/dist/{FunctionExecutionWrapper-UzfHDM2R.cjs → FunctionExecutionWrapper-CElXEjPe.cjs} +1 -1
- package/dist/{FunctionExecutionWrapper-UzfHDM2R.cjs.map → FunctionExecutionWrapper-CElXEjPe.cjs.map} +1 -1
- package/dist/{FunctionExecutionWrapper-CPzSbfaI.mjs → FunctionExecutionWrapper-XGrSAAPD.mjs} +1 -1
- package/dist/{FunctionExecutionWrapper-CPzSbfaI.mjs.map → FunctionExecutionWrapper-XGrSAAPD.mjs.map} +1 -1
- package/dist/{HonoEndpointAdaptor-ua6mp3gt.d.cts → HonoEndpointAdaptor-BJgpbMUG.d.cts} +4 -4
- package/dist/{HonoEndpointAdaptor-fs2928iO.mjs → HonoEndpointAdaptor-BlT1rWHV.mjs} +24 -9
- package/dist/HonoEndpointAdaptor-BlT1rWHV.mjs.map +1 -0
- package/dist/{HonoEndpointAdaptor-01cH100U.d.mts → HonoEndpointAdaptor-C9Xe2pRp.d.mts} +2 -2
- package/dist/{HonoEndpointAdaptor-6LERutxi.cjs → HonoEndpointAdaptor-Ds433Q8w.cjs} +24 -9
- package/dist/HonoEndpointAdaptor-Ds433Q8w.cjs.map +1 -0
- package/dist/{TestEndpointAdaptor-CelYsQi0.mjs → TestEndpointAdaptor-BG6fzAOx.mjs} +20 -6
- package/dist/TestEndpointAdaptor-BG6fzAOx.mjs.map +1 -0
- package/dist/{TestEndpointAdaptor-B4SvJvK-.cjs → TestEndpointAdaptor-BaQaTy_1.cjs} +20 -6
- package/dist/TestEndpointAdaptor-BaQaTy_1.cjs.map +1 -0
- package/dist/{TestEndpointAdaptor-Da0ooGt2.d.mts → TestEndpointAdaptor-Db0cm1fb.d.mts} +3 -3
- package/dist/{TestEndpointAdaptor-CHcgyI3V.d.cts → TestEndpointAdaptor-v7A-7hTs.d.cts} +3 -3
- package/dist/adaptors/aws.cjs +8 -8
- package/dist/adaptors/aws.d.cts +5 -5
- package/dist/adaptors/aws.d.mts +5 -5
- package/dist/adaptors/aws.mjs +8 -8
- package/dist/adaptors/hono.cjs +4 -4
- package/dist/adaptors/hono.d.cts +3 -3
- package/dist/adaptors/hono.d.mts +3 -3
- package/dist/adaptors/hono.mjs +4 -4
- package/dist/adaptors/testing.cjs +2 -2
- package/dist/adaptors/testing.d.cts +3 -3
- package/dist/adaptors/testing.d.mts +3 -3
- package/dist/adaptors/testing.mjs +2 -2
- package/dist/crons/Cron.cjs +1 -1
- package/dist/crons/Cron.d.cts +1 -1
- package/dist/crons/Cron.d.mts +1 -1
- package/dist/crons/Cron.mjs +1 -1
- package/dist/crons/CronBuilder.cjs +2 -2
- package/dist/crons/CronBuilder.d.cts +1 -1
- package/dist/crons/CronBuilder.d.mts +1 -1
- package/dist/crons/CronBuilder.mjs +2 -2
- package/dist/crons/index.cjs +2 -2
- package/dist/crons/index.d.cts +5 -5
- package/dist/crons/index.d.mts +5 -5
- package/dist/crons/index.mjs +2 -2
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.cjs +2 -2
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.cts +3 -3
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.mts +3 -3
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.mjs +2 -2
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.cjs +4 -4
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.cts +4 -4
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.mts +4 -4
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.mjs +4 -4
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.cjs +4 -4
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.cts +4 -4
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.mts +4 -4
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.mjs +4 -4
- package/dist/endpoints/Endpoint.cjs +2 -1
- package/dist/endpoints/Endpoint.d.cts +3 -3
- package/dist/endpoints/Endpoint.d.mts +3 -3
- package/dist/endpoints/Endpoint.mjs +2 -2
- package/dist/endpoints/EndpointBuilder.cjs +2 -2
- package/dist/endpoints/EndpointBuilder.d.cts +3 -3
- package/dist/endpoints/EndpointBuilder.d.mts +3 -3
- package/dist/endpoints/EndpointBuilder.mjs +2 -2
- package/dist/endpoints/EndpointFactory.cjs +3 -3
- package/dist/endpoints/EndpointFactory.d.cts +4 -4
- package/dist/endpoints/EndpointFactory.d.mts +4 -4
- package/dist/endpoints/EndpointFactory.mjs +3 -3
- package/dist/endpoints/HonoEndpointAdaptor.cjs +4 -4
- package/dist/endpoints/HonoEndpointAdaptor.d.cts +3 -3
- package/dist/endpoints/HonoEndpointAdaptor.d.mts +3 -3
- package/dist/endpoints/HonoEndpointAdaptor.mjs +4 -4
- package/dist/endpoints/TestEndpointAdaptor.cjs +2 -2
- package/dist/endpoints/TestEndpointAdaptor.d.cts +3 -3
- package/dist/endpoints/TestEndpointAdaptor.d.mts +3 -3
- package/dist/endpoints/TestEndpointAdaptor.mjs +2 -2
- package/dist/endpoints/helpers.cjs +2 -2
- package/dist/endpoints/helpers.d.cts +2 -2
- package/dist/endpoints/helpers.d.mts +2 -2
- package/dist/endpoints/helpers.mjs +2 -2
- package/dist/endpoints/index.cjs +3 -3
- package/dist/endpoints/index.cjs.map +1 -1
- package/dist/endpoints/index.d.cts +7 -7
- package/dist/endpoints/index.d.mts +7 -7
- package/dist/endpoints/index.mjs +3 -3
- package/dist/endpoints/index.mjs.map +1 -1
- package/dist/endpoints/parseHonoQuery.cjs +1 -1
- package/dist/endpoints/parseHonoQuery.mjs +1 -1
- package/dist/endpoints/parseQueryParams.cjs +1 -1
- package/dist/endpoints/parseQueryParams.mjs +1 -1
- package/dist/functions/AWSLambdaFunction.cjs +2 -2
- package/dist/functions/AWSLambdaFunction.mjs +2 -2
- package/dist/functions/FunctionExecutionWrapper.cjs +1 -1
- package/dist/functions/FunctionExecutionWrapper.mjs +1 -1
- package/dist/functions/index.d.cts +1 -1
- package/dist/functions/index.d.mts +1 -1
- package/dist/{helpers-CP7A0U_s.mjs → helpers-CM0U-4Vk.mjs} +2 -2
- package/dist/{helpers-CP7A0U_s.mjs.map → helpers-CM0U-4Vk.mjs.map} +1 -1
- package/dist/{helpers-CjvCSIF5.cjs → helpers-go4jiRvV.cjs} +2 -2
- package/dist/{helpers-CjvCSIF5.cjs.map → helpers-go4jiRvV.cjs.map} +1 -1
- package/dist/index-BjB0W_Wq.d.mts +9 -0
- package/dist/index-D9vqHZie.d.cts +9 -0
- package/dist/{parseHonoQuery-BiPp8bEJ.cjs → parseHonoQuery-DopC24vB.cjs} +1 -1
- package/dist/{parseHonoQuery-BiPp8bEJ.cjs.map → parseHonoQuery-DopC24vB.cjs.map} +1 -1
- package/dist/{parseHonoQuery-yWRoKFFl.mjs → parseHonoQuery-znDKBhdE.mjs} +1 -1
- package/dist/{parseHonoQuery-yWRoKFFl.mjs.map → parseHonoQuery-znDKBhdE.mjs.map} +1 -1
- package/dist/{parseQueryParams-DSk9xl09.mjs → parseQueryParams-BJaRh3OB.mjs} +1 -1
- package/dist/{parseQueryParams-DSk9xl09.mjs.map → parseQueryParams-BJaRh3OB.mjs.map} +1 -1
- package/dist/{parseQueryParams-C2EjouGt.cjs → parseQueryParams-BzPop4I1.cjs} +1 -1
- package/dist/{parseQueryParams-C2EjouGt.cjs.map → parseQueryParams-BzPop4I1.cjs.map} +1 -1
- package/dist/subscribers/AWSLambdaSubscriberAdaptor.cjs +1 -1
- package/dist/subscribers/AWSLambdaSubscriberAdaptor.mjs +1 -1
- package/dist/subscribers/index.d.cts +2 -2
- package/dist/subscribers/index.d.mts +2 -2
- package/package.json +3 -3
- package/src/endpoints/EndpointFactory.ts +88 -18
- package/src/endpoints/index.ts +1 -1
- package/dist/AmazonApiGatewayEndpointAdaptor-D_Q_NTMT.cjs.map +0 -1
- package/dist/AmazonApiGatewayEndpointAdaptor-QzIAnWzS.mjs.map +0 -1
- package/dist/Endpoint-D1nnEsBU.cjs.map +0 -1
- package/dist/Endpoint-DNlmybXV.mjs.map +0 -1
- package/dist/EndpointFactory-ChmVHWim.cjs.map +0 -1
- package/dist/EndpointFactory-DLpEbLzL.mjs.map +0 -1
- package/dist/HonoEndpointAdaptor-6LERutxi.cjs.map +0 -1
- package/dist/HonoEndpointAdaptor-fs2928iO.mjs.map +0 -1
- package/dist/TestEndpointAdaptor-B4SvJvK-.cjs.map +0 -1
- package/dist/TestEndpointAdaptor-CelYsQi0.mjs.map +0 -1
- package/dist/index-BXTN4mwI.d.mts +0 -9
- package/dist/index-zOH9f4sh.d.cts +0 -9
|
@@ -48,12 +48,16 @@ declare class Endpoint<TRoute extends string, TMethod extends HttpMethod, TInput
|
|
|
48
48
|
tags?: string[];
|
|
49
49
|
/** The HTTP success status code to return (default: 200) */
|
|
50
50
|
readonly status: SuccessStatus;
|
|
51
|
+
/** Default headers to apply to all responses */
|
|
52
|
+
readonly defaultHeaders: Record<string, string>;
|
|
51
53
|
/** Function to extract session data from the request context */
|
|
52
54
|
getSession: SessionFn<TServices, TLogger, TSession>;
|
|
53
55
|
/** Function to determine if the request is authorized */
|
|
54
56
|
authorize: AuthorizeFn<TServices, TLogger, TSession>;
|
|
55
57
|
/** Optional rate limiting configuration */
|
|
56
58
|
rateLimit?: RateLimitConfig;
|
|
59
|
+
/** The endpoint handler function */
|
|
60
|
+
private endpointFn;
|
|
57
61
|
/**
|
|
58
62
|
* Builds a complete OpenAPI 3.1 schema from an array of endpoints.
|
|
59
63
|
*
|
|
@@ -109,6 +113,40 @@ declare class Endpoint<TRoute extends string, TMethod extends HttpMethod, TInput
|
|
|
109
113
|
* ```
|
|
110
114
|
*/
|
|
111
115
|
static createHeaders(headers: Record<string, string>): HeaderFn;
|
|
116
|
+
/**
|
|
117
|
+
* Parses cookie string and creates a cookie lookup function.
|
|
118
|
+
*
|
|
119
|
+
* @param cookieHeader - The Cookie header value
|
|
120
|
+
* @returns Function to retrieve cookie values by name
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```typescript
|
|
124
|
+
* const cookieFn = Endpoint.createCookies('session=abc123; theme=dark');
|
|
125
|
+
* cookieFn('session'); // Returns 'abc123'
|
|
126
|
+
* cookieFn('theme'); // Returns 'dark'
|
|
127
|
+
* ```
|
|
128
|
+
*/
|
|
129
|
+
static createCookies(cookieHeader: string | undefined): CookieFn;
|
|
130
|
+
/**
|
|
131
|
+
* Formats a cookie as a Set-Cookie header string.
|
|
132
|
+
*
|
|
133
|
+
* @param name - Cookie name
|
|
134
|
+
* @param value - Cookie value
|
|
135
|
+
* @param options - Cookie options (httpOnly, secure, sameSite, etc.)
|
|
136
|
+
* @returns Formatted Set-Cookie header string
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```typescript
|
|
140
|
+
* const header = Endpoint.formatCookieHeader('session', 'abc123', {
|
|
141
|
+
* httpOnly: true,
|
|
142
|
+
* secure: true,
|
|
143
|
+
* sameSite: 'strict',
|
|
144
|
+
* maxAge: 3600
|
|
145
|
+
* });
|
|
146
|
+
* // Returns: "session=abc123; Max-Age=3600; HttpOnly; Secure; SameSite=Strict"
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
static formatCookieHeader(name: string, value: string, options?: CookieOptions): string;
|
|
112
150
|
/**
|
|
113
151
|
* Extracts and refines input data from the endpoint context.
|
|
114
152
|
*
|
|
@@ -117,7 +155,7 @@ declare class Endpoint<TRoute extends string, TMethod extends HttpMethod, TInput
|
|
|
117
155
|
* @internal
|
|
118
156
|
*/
|
|
119
157
|
refineInput(ctx: EndpointContext<TInput, TServices, TLogger, TSession>): InferComposableStandardSchema<TInput>;
|
|
120
|
-
handler:
|
|
158
|
+
handler: (ctx: EndpointContext<TInput, TServices, TLogger, TSession>, response: ResponseBuilder) => OutSchema extends StandardSchemaV1 ? InferStandardSchema<OutSchema> | ResponseWithMetadata<InferStandardSchema<OutSchema>> | Promise<InferStandardSchema<OutSchema>> | Promise<ResponseWithMetadata<InferStandardSchema<OutSchema>>> : any | ResponseWithMetadata<any> | Promise<any> | Promise<ResponseWithMetadata<any>>;
|
|
121
159
|
/**
|
|
122
160
|
* Type guard to check if an object is an Endpoint instance.
|
|
123
161
|
*
|
|
@@ -125,6 +163,10 @@ declare class Endpoint<TRoute extends string, TMethod extends HttpMethod, TInput
|
|
|
125
163
|
* @returns True if the object is an Endpoint
|
|
126
164
|
*/
|
|
127
165
|
static isEndpoint(obj: any): obj is Endpoint<any, any, any, any>;
|
|
166
|
+
/**
|
|
167
|
+
* Helper to check if response has metadata
|
|
168
|
+
*/
|
|
169
|
+
static hasMetadata<T>(response: T | ResponseWithMetadata<T>): response is ResponseWithMetadata<T>;
|
|
128
170
|
/**
|
|
129
171
|
* Converts Express-style route params to OpenAPI format.
|
|
130
172
|
* @returns Route with ':param' converted to '{param}'
|
|
@@ -256,6 +298,7 @@ type AuthorizeContext<TServices extends Service[] = [], TLogger extends Logger =
|
|
|
256
298
|
services: ServiceRecord<TServices>;
|
|
257
299
|
logger: TLogger;
|
|
258
300
|
header: HeaderFn;
|
|
301
|
+
cookie: CookieFn;
|
|
259
302
|
session: TSession;
|
|
260
303
|
};
|
|
261
304
|
/**
|
|
@@ -280,6 +323,7 @@ type SessionContext<TServices extends Service[] = [], TLogger extends Logger = L
|
|
|
280
323
|
services: ServiceRecord<TServices>;
|
|
281
324
|
logger: TLogger;
|
|
282
325
|
header: HeaderFn;
|
|
326
|
+
cookie: CookieFn;
|
|
283
327
|
};
|
|
284
328
|
/**
|
|
285
329
|
* Function type for extracting session data from a request.
|
|
@@ -341,9 +385,63 @@ type EndpointHeaders = Map<string, string>;
|
|
|
341
385
|
* @returns The header value or undefined if not found
|
|
342
386
|
*/
|
|
343
387
|
type HeaderFn = SingleHeaderFn;
|
|
388
|
+
/**
|
|
389
|
+
* Function type for retrieving cookie values.
|
|
390
|
+
*
|
|
391
|
+
* @param name - The cookie name
|
|
392
|
+
* @returns The cookie value or undefined if not found
|
|
393
|
+
*
|
|
394
|
+
* @example
|
|
395
|
+
* ```typescript
|
|
396
|
+
* const sessionId = cookie('session');
|
|
397
|
+
* ```
|
|
398
|
+
*/
|
|
399
|
+
type CookieFn = (name: string) => string | undefined;
|
|
400
|
+
/**
|
|
401
|
+
* Cookie options matching standard Set-Cookie attributes
|
|
402
|
+
*/
|
|
403
|
+
interface CookieOptions {
|
|
404
|
+
domain?: string;
|
|
405
|
+
path?: string;
|
|
406
|
+
expires?: Date;
|
|
407
|
+
maxAge?: number;
|
|
408
|
+
httpOnly?: boolean;
|
|
409
|
+
secure?: boolean;
|
|
410
|
+
sameSite?: 'strict' | 'lax' | 'none';
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Response metadata that handlers can set
|
|
414
|
+
*/
|
|
415
|
+
interface ResponseMetadata {
|
|
416
|
+
headers?: Record<string, string>;
|
|
417
|
+
cookies?: Map<string, {
|
|
418
|
+
value: string;
|
|
419
|
+
options?: CookieOptions;
|
|
420
|
+
}>;
|
|
421
|
+
status?: SuccessStatus;
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Return type for handlers that want to set response metadata
|
|
425
|
+
*/
|
|
426
|
+
interface ResponseWithMetadata<T> {
|
|
427
|
+
data: T;
|
|
428
|
+
metadata: ResponseMetadata;
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Response builder for fluent API in handlers
|
|
432
|
+
*/
|
|
433
|
+
declare class ResponseBuilder {
|
|
434
|
+
private metadata;
|
|
435
|
+
header(key: string, value: string): this;
|
|
436
|
+
cookie(name: string, value: string, options?: CookieOptions): this;
|
|
437
|
+
deleteCookie(name: string, options?: Pick<CookieOptions, 'domain' | 'path'>): this;
|
|
438
|
+
status(code: SuccessStatus): this;
|
|
439
|
+
send<T>(data: T): ResponseWithMetadata<T>;
|
|
440
|
+
getMetadata(): ResponseMetadata;
|
|
441
|
+
}
|
|
344
442
|
/**
|
|
345
443
|
* The execution context provided to endpoint handlers.
|
|
346
|
-
* Contains all parsed input data, services, logger, headers, and session.
|
|
444
|
+
* Contains all parsed input data, services, logger, headers, cookies, and session.
|
|
347
445
|
*
|
|
348
446
|
* @template Input - The input schemas (body, query, params)
|
|
349
447
|
* @template TServices - Available service dependencies
|
|
@@ -357,6 +455,8 @@ type EndpointContext<Input extends EndpointSchemas | undefined = undefined, TSer
|
|
|
357
455
|
logger: TLogger;
|
|
358
456
|
/** Function to retrieve request headers */
|
|
359
457
|
header: HeaderFn;
|
|
458
|
+
/** Function to retrieve request cookies */
|
|
459
|
+
cookie: CookieFn;
|
|
360
460
|
/** Session data extracted by getSession */
|
|
361
461
|
session: TSession;
|
|
362
462
|
} & InferComposableStandardSchema<Input>;
|
|
@@ -370,17 +470,26 @@ type EndpointContext<Input extends EndpointSchemas | undefined = undefined, TSer
|
|
|
370
470
|
* @template TSession - Session data type
|
|
371
471
|
*
|
|
372
472
|
* @param ctx - The endpoint execution context
|
|
373
|
-
* @
|
|
473
|
+
* @param response - Response builder for setting cookies, headers, and status
|
|
474
|
+
* @returns The response data (validated if OutSchema is provided) or ResponseWithMetadata
|
|
374
475
|
*
|
|
375
476
|
* @example
|
|
376
477
|
* ```typescript
|
|
478
|
+
* // Simple response
|
|
377
479
|
* const handler: EndpointHandler<Input, [UserService], Logger, UserSchema> =
|
|
378
480
|
* async ({ params, services }) => {
|
|
379
481
|
* return await services.users.findById(params.id);
|
|
380
482
|
* };
|
|
483
|
+
*
|
|
484
|
+
* // With response builder
|
|
485
|
+
* const handler: EndpointHandler<Input, [UserService], Logger, UserSchema> =
|
|
486
|
+
* async ({ params, services }, response) => {
|
|
487
|
+
* const user = await services.users.findById(params.id);
|
|
488
|
+
* return response.header('X-User-Id', user.id).send(user);
|
|
489
|
+
* };
|
|
381
490
|
* ```
|
|
382
491
|
*/
|
|
383
|
-
type EndpointHandler<TInput extends EndpointSchemas | undefined = undefined, TServices extends Service[] = [], TLogger extends Logger = Logger, OutSchema extends StandardSchemaV1 | undefined = undefined, TSession = unknown> = (ctx: EndpointContext<TInput, TServices, TLogger, TSession
|
|
492
|
+
type EndpointHandler<TInput extends EndpointSchemas | undefined = undefined, TServices extends Service[] = [], TLogger extends Logger = Logger, OutSchema extends StandardSchemaV1 | undefined = undefined, TSession = unknown> = (ctx: EndpointContext<TInput, TServices, TLogger, TSession>, response: ResponseBuilder) => OutSchema extends StandardSchemaV1 ? InferStandardSchema<OutSchema> | ResponseWithMetadata<InferStandardSchema<OutSchema>> | Promise<InferStandardSchema<OutSchema>> | Promise<ResponseWithMetadata<InferStandardSchema<OutSchema>>> : unknown | ResponseWithMetadata<unknown> | Promise<unknown> | Promise<ResponseWithMetadata<unknown>>;
|
|
384
493
|
/**
|
|
385
494
|
* HTTP success status codes that can be returned by endpoints.
|
|
386
495
|
*/
|
|
@@ -401,5 +510,5 @@ declare enum SuccessStatus {
|
|
|
401
510
|
type EndpointOutput<T> = T extends Endpoint<any, any, any, infer OutSchema, any, any, any, any> ? InferStandardSchema<OutSchema> : never;
|
|
402
511
|
type EndpointEvent<T> = T extends Endpoint<any, any, any, any, any, any, any, infer TEventPublisher> ? ExtractPublisherMessage<TEventPublisher> : never;
|
|
403
512
|
//#endregion
|
|
404
|
-
export { AuthorizeContext, AuthorizeFn, ConvertRouteParams, Endpoint, EndpointContext, EndpointEvent, EndpointHandler, EndpointHeaders, EndpointInput, EndpointOpenApiSchema, EndpointOptions, EndpointOutput, EndpointSchemas, HeaderFn, MultiHeaderFn, SessionContext, SessionFn, SingleHeaderFn, SuccessStatus };
|
|
405
|
-
//# sourceMappingURL=Endpoint-
|
|
513
|
+
export { AuthorizeContext, AuthorizeFn, ConvertRouteParams, CookieFn, CookieOptions, Endpoint, EndpointContext, EndpointEvent, EndpointHandler, EndpointHeaders, EndpointInput, EndpointOpenApiSchema, EndpointOptions, EndpointOutput, EndpointSchemas, HeaderFn, MultiHeaderFn, ResponseBuilder, ResponseMetadata, ResponseWithMetadata, SessionContext, SessionFn, SingleHeaderFn, SuccessStatus };
|
|
514
|
+
//# sourceMappingURL=Endpoint-XUMNAXYy.d.cts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { HttpMethod } from "./types-CVq20-fE.mjs";
|
|
2
2
|
import { BaseFunctionBuilder } from "./BaseFunctionBuilder-Dda7AiID.mjs";
|
|
3
|
-
import { AuthorizeFn, Endpoint, EndpointHandler, EndpointSchemas, SessionFn, SuccessStatus } from "./Endpoint-
|
|
3
|
+
import { AuthorizeFn, Endpoint, EndpointHandler, EndpointSchemas, SessionFn, SuccessStatus } from "./Endpoint-C7jPJzAH.mjs";
|
|
4
4
|
import { Service } from "@geekmidas/services";
|
|
5
5
|
import { RateLimitConfig } from "@geekmidas/rate-limit";
|
|
6
6
|
import { EventPublisher, MappedEvent } from "@geekmidas/events";
|
|
@@ -46,4 +46,4 @@ declare class EndpointBuilder<TRoute extends string, TMethod extends HttpMethod,
|
|
|
46
46
|
}
|
|
47
47
|
//#endregion
|
|
48
48
|
export { EndpointBuilder };
|
|
49
|
-
//# sourceMappingURL=EndpointBuilder-
|
|
49
|
+
//# sourceMappingURL=EndpointBuilder-CFtWQhcv.d.mts.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const require_chunk = require('./chunk-CUT6urMc.cjs');
|
|
2
2
|
const require_Construct = require('./Construct-BSEs6uwW.cjs');
|
|
3
3
|
const require_BaseFunctionBuilder = require('./BaseFunctionBuilder-DtO4Nwxm.cjs');
|
|
4
|
-
const require_Endpoint = require('./Endpoint-
|
|
4
|
+
const require_Endpoint = require('./Endpoint-COGAflGh.cjs');
|
|
5
5
|
const lodash_uniqby = require_chunk.__toESM(require("lodash.uniqby"));
|
|
6
6
|
|
|
7
7
|
//#region src/endpoints/EndpointBuilder.ts
|
|
@@ -104,4 +104,4 @@ Object.defineProperty(exports, 'EndpointBuilder', {
|
|
|
104
104
|
return EndpointBuilder;
|
|
105
105
|
}
|
|
106
106
|
});
|
|
107
|
-
//# sourceMappingURL=EndpointBuilder-
|
|
107
|
+
//# sourceMappingURL=EndpointBuilder-FJktpPOu.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EndpointBuilder-
|
|
1
|
+
{"version":3,"file":"EndpointBuilder-FJktpPOu.cjs","names":["BaseFunctionBuilder","route: TRoute","method: TMethod","ConstructType","publisher: Service<TEventPublisherServiceName, TEventPublisher>","description: string","status: SuccessStatus","event: TEvent","tags: string[]","publisher: Service<TName, T>","schema: T","config: RateLimitConfig","services: T","logger: T","_schema: any","fn: EndpointHandler<TInput, TServices, TLogger, OutSchema, TSession>","Endpoint"],"sources":["../src/endpoints/EndpointBuilder.ts"],"sourcesContent":["import type { Logger } from '@geekmidas/logger';\nimport type { RateLimitConfig } from '@geekmidas/rate-limit';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { BaseFunctionBuilder } from '../functions';\nimport { Endpoint, type EndpointSchemas } from './Endpoint';\nimport type {\n AuthorizeFn,\n EndpointHandler,\n SessionFn,\n SuccessStatus,\n} from './Endpoint';\n\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { HttpMethod } from '../types';\n\nexport class EndpointBuilder<\n TRoute extends string,\n TMethod extends HttpMethod,\n TInput extends EndpointSchemas = {},\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> extends BaseFunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName\n> {\n protected schemas: TInput = {} as TInput;\n protected _description?: string;\n protected _status?: SuccessStatus;\n protected _tags?: string[];\n _getSession: SessionFn<TServices, TLogger, TSession> = () => ({}) as TSession;\n _authorize: AuthorizeFn<TServices, TLogger, TSession> = () => true;\n _rateLimit?: RateLimitConfig;\n\n constructor(\n readonly route: TRoute,\n readonly method: TMethod,\n ) {\n super(ConstructType.Endpoint);\n }\n\n // Internal setter for EndpointFactory to set default publisher\n _setPublisher(\n publisher: Service<TEventPublisherServiceName, TEventPublisher>,\n ) {\n this._publisher = publisher;\n }\n\n description(description: string): this {\n this._description = description;\n return this;\n }\n\n status(status: SuccessStatus): this {\n this._status = status;\n return this;\n }\n\n event<TEvent extends MappedEvent<TEventPublisher, OutSchema>>(\n event: TEvent,\n ): this {\n this._events.push(event);\n return this;\n }\n\n tags(tags: string[]): this {\n this._tags = tags;\n return this;\n }\n\n publisher<T extends EventPublisher<any>, TName extends string>(\n publisher: Service<TName, T>,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n T,\n TName\n > {\n this._publisher = publisher as unknown as Service<\n TEventPublisherServiceName,\n TEventPublisher\n >;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n T,\n TName\n >;\n }\n\n body<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'body'> & { body: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n this.schemas.body = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n search<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'query'> & { query: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n this.schemas.query = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n query<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'query'> & { query: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n return this.search(schema);\n }\n\n params<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'params'> & { params: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n this.schemas.params = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n rateLimit(config: RateLimitConfig): this {\n this._rateLimit = config;\n return this;\n }\n\n services<T extends Service[]>(\n services: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n [...TServices, ...T],\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n this._services = uniqBy(\n [...this._services, ...services],\n (s) => s.serviceName,\n ) as TServices;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n [...TServices, ...T],\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n logger<T extends Logger>(\n logger: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n T,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n this._logger = logger as unknown as TLogger;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n T,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n output<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n T,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n this.outputSchema = schema as unknown as OutSchema;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n T,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n // EndpointBuilder doesn't have a generic input method - it uses body, query, params instead\n input(_schema: any): any {\n throw new Error(\n 'EndpointBuilder does not support generic input. Use body(), query(), or params() instead.',\n );\n }\n\n handle(\n fn: EndpointHandler<TInput, TServices, TLogger, OutSchema, TSession>,\n ): Endpoint<\n TRoute,\n TMethod,\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TSession,\n TEventPublisher\n > {\n return new Endpoint({\n fn,\n method: this.method,\n route: this.route,\n description: this._description,\n tags: this._tags,\n input: this.schemas,\n output: this.outputSchema,\n services: this._services,\n logger: this._logger,\n timeout: this._timeout,\n authorize: this._authorize,\n status: this._status,\n getSession: this._getSession,\n rateLimit: this._rateLimit,\n publisherService: this._publisher,\n events: this._events,\n });\n }\n}\n"],"mappings":";;;;;;;AAkBA,IAAa,kBAAb,cAUUA,gDAOR;CACA,AAAU,UAAkB,CAAE;CAC9B,AAAU;CACV,AAAU;CACV,AAAU;CACV,cAAuD,OAAO,CAAE;CAChE,aAAwD,MAAM;CAC9D;CAEA,YACWC,OACAC,QACT;AACA,QAAMC,gCAAc,SAAS;EAHpB;EACA;CAGV;CAGD,cACEC,WACA;AACA,OAAK,aAAa;CACnB;CAED,YAAYC,aAA2B;AACrC,OAAK,eAAe;AACpB,SAAO;CACR;CAED,OAAOC,QAA6B;AAClC,OAAK,UAAU;AACf,SAAO;CACR;CAED,MACEC,OACM;AACN,OAAK,QAAQ,KAAK,MAAM;AACxB,SAAO;CACR;CAED,KAAKC,MAAsB;AACzB,OAAK,QAAQ;AACb,SAAO;CACR;CAED,UACEC,WAWA;AACA,OAAK,aAAa;AAKlB,SAAO;CAWR;CAED,KACEC,QAUA;AACA,OAAK,QAAQ,OAAO;AAEpB,SAAO;CACR;CAED,OACEA,QAUA;AACA,OAAK,QAAQ,QAAQ;AAErB,SAAO;CACR;CAED,MACEA,QAUA;AACA,SAAO,KAAK,OAAO,OAAO;CAC3B;CAED,OACEA,QAUA;AACA,OAAK,QAAQ,SAAS;AAEtB,SAAO;CACR;CAED,UAAUC,QAA+B;AACvC,OAAK,aAAa;AAClB,SAAO;CACR;CAED,SACEC,UAWA;AACA,OAAK,YAAY,2BACf,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS,GAChC,CAAC,MAAM,EAAE,YACV;AAED,SAAO;CAWR;CAED,OACEC,QAWA;AACA,OAAK,UAAU;AAEf,SAAO;CAWR;CAED,OACEH,QAWA;AACA,OAAK,eAAe;AAEpB,SAAO;CAWR;CAGD,MAAMI,SAAmB;AACvB,QAAM,IAAI,MACR;CAEH;CAED,OACEC,IAUA;AACA,SAAO,IAAIC,0BAAS;GAClB;GACA,QAAQ,KAAK;GACb,OAAO,KAAK;GACZ,aAAa,KAAK;GAClB,MAAM,KAAK;GACX,OAAO,KAAK;GACZ,QAAQ,KAAK;GACb,UAAU,KAAK;GACf,QAAQ,KAAK;GACb,SAAS,KAAK;GACd,WAAW,KAAK;GAChB,QAAQ,KAAK;GACb,YAAY,KAAK;GACjB,WAAW,KAAK;GAChB,kBAAkB,KAAK;GACvB,QAAQ,KAAK;EACd;CACF;AACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ConstructType } from "./Construct-BbKCIPQm.mjs";
|
|
2
2
|
import { BaseFunctionBuilder } from "./BaseFunctionBuilder-BPE9JBbT.mjs";
|
|
3
|
-
import { Endpoint } from "./Endpoint-
|
|
3
|
+
import { Endpoint } from "./Endpoint-DLLZvqoh.mjs";
|
|
4
4
|
import uniqBy from "lodash.uniqby";
|
|
5
5
|
|
|
6
6
|
//#region src/endpoints/EndpointBuilder.ts
|
|
@@ -98,4 +98,4 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
|
|
|
98
98
|
|
|
99
99
|
//#endregion
|
|
100
100
|
export { EndpointBuilder };
|
|
101
|
-
//# sourceMappingURL=EndpointBuilder-
|
|
101
|
+
//# sourceMappingURL=EndpointBuilder-oXO_ka1-.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EndpointBuilder-
|
|
1
|
+
{"version":3,"file":"EndpointBuilder-oXO_ka1-.mjs","names":["route: TRoute","method: TMethod","publisher: Service<TEventPublisherServiceName, TEventPublisher>","description: string","status: SuccessStatus","event: TEvent","tags: string[]","publisher: Service<TName, T>","schema: T","config: RateLimitConfig","services: T","logger: T","_schema: any","fn: EndpointHandler<TInput, TServices, TLogger, OutSchema, TSession>"],"sources":["../src/endpoints/EndpointBuilder.ts"],"sourcesContent":["import type { Logger } from '@geekmidas/logger';\nimport type { RateLimitConfig } from '@geekmidas/rate-limit';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { BaseFunctionBuilder } from '../functions';\nimport { Endpoint, type EndpointSchemas } from './Endpoint';\nimport type {\n AuthorizeFn,\n EndpointHandler,\n SessionFn,\n SuccessStatus,\n} from './Endpoint';\n\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { HttpMethod } from '../types';\n\nexport class EndpointBuilder<\n TRoute extends string,\n TMethod extends HttpMethod,\n TInput extends EndpointSchemas = {},\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> extends BaseFunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName\n> {\n protected schemas: TInput = {} as TInput;\n protected _description?: string;\n protected _status?: SuccessStatus;\n protected _tags?: string[];\n _getSession: SessionFn<TServices, TLogger, TSession> = () => ({}) as TSession;\n _authorize: AuthorizeFn<TServices, TLogger, TSession> = () => true;\n _rateLimit?: RateLimitConfig;\n\n constructor(\n readonly route: TRoute,\n readonly method: TMethod,\n ) {\n super(ConstructType.Endpoint);\n }\n\n // Internal setter for EndpointFactory to set default publisher\n _setPublisher(\n publisher: Service<TEventPublisherServiceName, TEventPublisher>,\n ) {\n this._publisher = publisher;\n }\n\n description(description: string): this {\n this._description = description;\n return this;\n }\n\n status(status: SuccessStatus): this {\n this._status = status;\n return this;\n }\n\n event<TEvent extends MappedEvent<TEventPublisher, OutSchema>>(\n event: TEvent,\n ): this {\n this._events.push(event);\n return this;\n }\n\n tags(tags: string[]): this {\n this._tags = tags;\n return this;\n }\n\n publisher<T extends EventPublisher<any>, TName extends string>(\n publisher: Service<TName, T>,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n T,\n TName\n > {\n this._publisher = publisher as unknown as Service<\n TEventPublisherServiceName,\n TEventPublisher\n >;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n T,\n TName\n >;\n }\n\n body<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'body'> & { body: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n this.schemas.body = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n search<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'query'> & { query: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n this.schemas.query = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n query<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'query'> & { query: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n return this.search(schema);\n }\n\n params<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'params'> & { params: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher\n > {\n this.schemas.params = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n rateLimit(config: RateLimitConfig): this {\n this._rateLimit = config;\n return this;\n }\n\n services<T extends Service[]>(\n services: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n [...TServices, ...T],\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n this._services = uniqBy(\n [...this._services, ...services],\n (s) => s.serviceName,\n ) as TServices;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n [...TServices, ...T],\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n logger<T extends Logger>(\n logger: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n T,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n this._logger = logger as unknown as TLogger;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n T,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n output<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n T,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n this.outputSchema = schema as unknown as OutSchema;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n T,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n // EndpointBuilder doesn't have a generic input method - it uses body, query, params instead\n input(_schema: any): any {\n throw new Error(\n 'EndpointBuilder does not support generic input. Use body(), query(), or params() instead.',\n );\n }\n\n handle(\n fn: EndpointHandler<TInput, TServices, TLogger, OutSchema, TSession>,\n ): Endpoint<\n TRoute,\n TMethod,\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TSession,\n TEventPublisher\n > {\n return new Endpoint({\n fn,\n method: this.method,\n route: this.route,\n description: this._description,\n tags: this._tags,\n input: this.schemas,\n output: this.outputSchema,\n services: this._services,\n logger: this._logger,\n timeout: this._timeout,\n authorize: this._authorize,\n status: this._status,\n getSession: this._getSession,\n rateLimit: this._rateLimit,\n publisherService: this._publisher,\n events: this._events,\n });\n }\n}\n"],"mappings":";;;;;;AAkBA,IAAa,kBAAb,cAUU,oBAOR;CACA,AAAU,UAAkB,CAAE;CAC9B,AAAU;CACV,AAAU;CACV,AAAU;CACV,cAAuD,OAAO,CAAE;CAChE,aAAwD,MAAM;CAC9D;CAEA,YACWA,OACAC,QACT;AACA,QAAM,cAAc,SAAS;EAHpB;EACA;CAGV;CAGD,cACEC,WACA;AACA,OAAK,aAAa;CACnB;CAED,YAAYC,aAA2B;AACrC,OAAK,eAAe;AACpB,SAAO;CACR;CAED,OAAOC,QAA6B;AAClC,OAAK,UAAU;AACf,SAAO;CACR;CAED,MACEC,OACM;AACN,OAAK,QAAQ,KAAK,MAAM;AACxB,SAAO;CACR;CAED,KAAKC,MAAsB;AACzB,OAAK,QAAQ;AACb,SAAO;CACR;CAED,UACEC,WAWA;AACA,OAAK,aAAa;AAKlB,SAAO;CAWR;CAED,KACEC,QAUA;AACA,OAAK,QAAQ,OAAO;AAEpB,SAAO;CACR;CAED,OACEA,QAUA;AACA,OAAK,QAAQ,QAAQ;AAErB,SAAO;CACR;CAED,MACEA,QAUA;AACA,SAAO,KAAK,OAAO,OAAO;CAC3B;CAED,OACEA,QAUA;AACA,OAAK,QAAQ,SAAS;AAEtB,SAAO;CACR;CAED,UAAUC,QAA+B;AACvC,OAAK,aAAa;AAClB,SAAO;CACR;CAED,SACEC,UAWA;AACA,OAAK,YAAY,OACf,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS,GAChC,CAAC,MAAM,EAAE,YACV;AAED,SAAO;CAWR;CAED,OACEC,QAWA;AACA,OAAK,UAAU;AAEf,SAAO;CAWR;CAED,OACEH,QAWA;AACA,OAAK,eAAe;AAEpB,SAAO;CAWR;CAGD,MAAMI,SAAmB;AACvB,QAAM,IAAI,MACR;CAEH;CAED,OACEC,IAUA;AACA,SAAO,IAAI,SAAS;GAClB;GACA,QAAQ,KAAK;GACb,OAAO,KAAK;GACZ,aAAa,KAAK;GAClB,MAAM,KAAK;GACX,OAAO,KAAK;GACZ,QAAQ,KAAK;GACb,UAAU,KAAK;GACf,QAAQ,KAAK;GACb,SAAS,KAAK;GACd,WAAW,KAAK;GAChB,QAAQ,KAAK;GACb,YAAY,KAAK;GACjB,WAAW,KAAK;GAChB,kBAAkB,KAAK;GACvB,QAAQ,KAAK;EACd;CACF;AACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { HttpMethod } from "./types-Bp9ysFXd.cjs";
|
|
2
2
|
import { BaseFunctionBuilder } from "./BaseFunctionBuilder-5QCHkchp.cjs";
|
|
3
|
-
import { AuthorizeFn, Endpoint, EndpointHandler, EndpointSchemas, SessionFn, SuccessStatus } from "./Endpoint-
|
|
3
|
+
import { AuthorizeFn, Endpoint, EndpointHandler, EndpointSchemas, SessionFn, SuccessStatus } from "./Endpoint-XUMNAXYy.cjs";
|
|
4
4
|
import { EventPublisher, MappedEvent } from "@geekmidas/events";
|
|
5
5
|
import { Logger } from "@geekmidas/logger";
|
|
6
6
|
import { Service } from "@geekmidas/services";
|
|
@@ -46,4 +46,4 @@ declare class EndpointBuilder<TRoute extends string, TMethod extends HttpMethod,
|
|
|
46
46
|
}
|
|
47
47
|
//#endregion
|
|
48
48
|
export { EndpointBuilder };
|
|
49
|
-
//# sourceMappingURL=EndpointBuilder-
|
|
49
|
+
//# sourceMappingURL=EndpointBuilder-t6fVEKBH.d.cts.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { AuthorizeFn, SessionFn } from "./Endpoint-
|
|
2
|
-
import { EndpointBuilder } from "./EndpointBuilder-
|
|
1
|
+
import { AuthorizeFn, SessionFn } from "./Endpoint-C7jPJzAH.mjs";
|
|
2
|
+
import { EndpointBuilder } from "./EndpointBuilder-CFtWQhcv.mjs";
|
|
3
|
+
import { Service } from "@geekmidas/services";
|
|
3
4
|
import { EventPublisher, MappedEvent } from "@geekmidas/events";
|
|
4
5
|
import { Logger } from "@geekmidas/logger";
|
|
5
|
-
import { Service } from "@geekmidas/services";
|
|
6
6
|
|
|
7
7
|
//#region src/endpoints/EndpointFactory.d.ts
|
|
8
8
|
declare class EndpointFactory<TServices extends Service[] = [], TBasePath extends string = '', TLogger extends Logger = Logger, TSession = unknown, TEventPublisher extends EventPublisher<any> | undefined = undefined, TEventPublisherServiceName extends string = string> {
|
|
@@ -21,12 +21,12 @@ declare class EndpointFactory<TServices extends Service[] = [], TBasePath extend
|
|
|
21
21
|
defaultEventPublisher
|
|
22
22
|
}?: EndpointFactoryOptions<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName>);
|
|
23
23
|
static joinPaths<TBasePath extends string, P extends string>(path: P, basePath?: TBasePath): JoinPaths<TBasePath, P>;
|
|
24
|
-
route<TPath extends string>(path: TPath): EndpointFactory<TServices, JoinPaths<TBasePath, TPath>, TLogger, TSession, TEventPublisher>;
|
|
25
|
-
authorize(fn: AuthorizeFn<TServices, TLogger, TSession>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher>;
|
|
26
|
-
services<S extends Service[]>(services: S): EndpointFactory<[...S, ...TServices], TBasePath, TLogger, TSession, TEventPublisher>;
|
|
27
|
-
logger<L extends Logger>(logger: L): EndpointFactory<TServices, TBasePath, L, TSession>;
|
|
28
|
-
publisher<T extends EventPublisher<any>, TServiceName extends string = string>(publisher: Service<TServiceName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, T>;
|
|
29
|
-
session<T>(session: SessionFn<TServices, TLogger, T>): EndpointFactory<TServices, TBasePath, TLogger, T,
|
|
24
|
+
route<TPath extends string>(path: TPath): EndpointFactory<TServices, JoinPaths<TBasePath, TPath>, TLogger, TSession, TEventPublisher, TEventPublisherServiceName>;
|
|
25
|
+
authorize(fn: AuthorizeFn<TServices, TLogger, TSession>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName>;
|
|
26
|
+
services<S extends Service[]>(services: S): EndpointFactory<[...S, ...TServices], TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName>;
|
|
27
|
+
logger<L extends Logger>(logger: L): EndpointFactory<TServices, TBasePath, L, TSession, TEventPublisher, TEventPublisherServiceName>;
|
|
28
|
+
publisher<T extends EventPublisher<any>, TServiceName extends string = string>(publisher: Service<TServiceName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, T, TServiceName>;
|
|
29
|
+
session<T>(session: SessionFn<TServices, TLogger, T>): EndpointFactory<TServices, TBasePath, TLogger, T, TEventPublisher, TEventPublisherServiceName>;
|
|
30
30
|
private createBuilder;
|
|
31
31
|
post<TPath extends string>(path: TPath): EndpointBuilder<RemoveTrailingSlash<TBasePath extends "" ? TPath : TPath extends "" ? TBasePath : TBasePath extends "/" ? TPath extends `/${string}` ? TPath : `/${TPath}` : TBasePath extends `${infer Base}/` ? TPath extends `/${infer Rest}` ? `${Base}/${Rest}` : `${Base}/${TPath}` : TPath extends `/${infer Rest_1}` ? `${TBasePath}/${Rest_1}` : `${TBasePath}/${TPath}`>, "POST", {}, TServices, TLogger, undefined, TSession, TEventPublisher, string>;
|
|
32
32
|
get<TPath extends string>(path: TPath): EndpointBuilder<RemoveTrailingSlash<TBasePath extends "" ? TPath : TPath extends "" ? TBasePath : TBasePath extends "/" ? TPath extends `/${string}` ? TPath : `/${TPath}` : TBasePath extends `${infer Base}/` ? TPath extends `/${infer Rest}` ? `${Base}/${Rest}` : `${Base}/${TPath}` : TPath extends `/${infer Rest_1}` ? `${TBasePath}/${Rest_1}` : `${TBasePath}/${TPath}`>, "GET", {}, TServices, TLogger, undefined, TSession, TEventPublisher, string>;
|
|
@@ -49,4 +49,4 @@ interface EndpointFactoryOptions<TServices extends Service[] = [], TBasePath ext
|
|
|
49
49
|
declare const e: EndpointFactory<[], "", Logger, unknown, undefined, string>;
|
|
50
50
|
//#endregion
|
|
51
51
|
export { EndpointFactory, EndpointFactoryOptions, JoinPaths, RemoveTrailingSlash, e };
|
|
52
|
-
//# sourceMappingURL=EndpointFactory-
|
|
52
|
+
//# sourceMappingURL=EndpointFactory-DBRGrXAy.d.mts.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { AuthorizeFn, SessionFn } from "./Endpoint-
|
|
2
|
-
import { EndpointBuilder } from "./EndpointBuilder-
|
|
3
|
-
import { Service } from "@geekmidas/services";
|
|
1
|
+
import { AuthorizeFn, SessionFn } from "./Endpoint-XUMNAXYy.cjs";
|
|
2
|
+
import { EndpointBuilder } from "./EndpointBuilder-t6fVEKBH.cjs";
|
|
4
3
|
import { EventPublisher, MappedEvent } from "@geekmidas/events";
|
|
5
4
|
import { Logger } from "@geekmidas/logger";
|
|
5
|
+
import { Service } from "@geekmidas/services";
|
|
6
6
|
|
|
7
7
|
//#region src/endpoints/EndpointFactory.d.ts
|
|
8
8
|
declare class EndpointFactory<TServices extends Service[] = [], TBasePath extends string = '', TLogger extends Logger = Logger, TSession = unknown, TEventPublisher extends EventPublisher<any> | undefined = undefined, TEventPublisherServiceName extends string = string> {
|
|
@@ -21,12 +21,12 @@ declare class EndpointFactory<TServices extends Service[] = [], TBasePath extend
|
|
|
21
21
|
defaultEventPublisher
|
|
22
22
|
}?: EndpointFactoryOptions<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName>);
|
|
23
23
|
static joinPaths<TBasePath extends string, P extends string>(path: P, basePath?: TBasePath): JoinPaths<TBasePath, P>;
|
|
24
|
-
route<TPath extends string>(path: TPath): EndpointFactory<TServices, JoinPaths<TBasePath, TPath>, TLogger, TSession, TEventPublisher>;
|
|
25
|
-
authorize(fn: AuthorizeFn<TServices, TLogger, TSession>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher>;
|
|
26
|
-
services<S extends Service[]>(services: S): EndpointFactory<[...S, ...TServices], TBasePath, TLogger, TSession, TEventPublisher>;
|
|
27
|
-
logger<L extends Logger>(logger: L): EndpointFactory<TServices, TBasePath, L, TSession>;
|
|
28
|
-
publisher<T extends EventPublisher<any>, TServiceName extends string = string>(publisher: Service<TServiceName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, T>;
|
|
29
|
-
session<T>(session: SessionFn<TServices, TLogger, T>): EndpointFactory<TServices, TBasePath, TLogger, T,
|
|
24
|
+
route<TPath extends string>(path: TPath): EndpointFactory<TServices, JoinPaths<TBasePath, TPath>, TLogger, TSession, TEventPublisher, TEventPublisherServiceName>;
|
|
25
|
+
authorize(fn: AuthorizeFn<TServices, TLogger, TSession>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName>;
|
|
26
|
+
services<S extends Service[]>(services: S): EndpointFactory<[...S, ...TServices], TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName>;
|
|
27
|
+
logger<L extends Logger>(logger: L): EndpointFactory<TServices, TBasePath, L, TSession, TEventPublisher, TEventPublisherServiceName>;
|
|
28
|
+
publisher<T extends EventPublisher<any>, TServiceName extends string = string>(publisher: Service<TServiceName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, T, TServiceName>;
|
|
29
|
+
session<T>(session: SessionFn<TServices, TLogger, T>): EndpointFactory<TServices, TBasePath, TLogger, T, TEventPublisher, TEventPublisherServiceName>;
|
|
30
30
|
private createBuilder;
|
|
31
31
|
post<TPath extends string>(path: TPath): EndpointBuilder<RemoveTrailingSlash<TBasePath extends "" ? TPath : TPath extends "" ? TBasePath : TBasePath extends "/" ? TPath extends `/${string}` ? TPath : `/${TPath}` : TBasePath extends `${infer Base}/` ? TPath extends `/${infer Rest}` ? `${Base}/${Rest}` : `${Base}/${TPath}` : TPath extends `/${infer Rest_1}` ? `${TBasePath}/${Rest_1}` : `${TBasePath}/${TPath}`>, "POST", {}, TServices, TLogger, undefined, TSession, TEventPublisher, string>;
|
|
32
32
|
get<TPath extends string>(path: TPath): EndpointBuilder<RemoveTrailingSlash<TBasePath extends "" ? TPath : TPath extends "" ? TBasePath : TBasePath extends "/" ? TPath extends `/${string}` ? TPath : `/${TPath}` : TBasePath extends `${infer Base}/` ? TPath extends `/${infer Rest}` ? `${Base}/${Rest}` : `${Base}/${TPath}` : TPath extends `/${infer Rest_1}` ? `${TBasePath}/${Rest_1}` : `${TBasePath}/${TPath}`>, "GET", {}, TServices, TLogger, undefined, TSession, TEventPublisher, string>;
|
|
@@ -49,4 +49,4 @@ interface EndpointFactoryOptions<TServices extends Service[] = [], TBasePath ext
|
|
|
49
49
|
declare const e: EndpointFactory<[], "", Logger, unknown, undefined, string>;
|
|
50
50
|
//#endregion
|
|
51
51
|
export { EndpointFactory, EndpointFactoryOptions, JoinPaths, RemoveTrailingSlash, e };
|
|
52
|
-
//# sourceMappingURL=EndpointFactory-
|
|
52
|
+
//# sourceMappingURL=EndpointFactory-DInjHvFR.d.cts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const require_chunk = require('./chunk-CUT6urMc.cjs');
|
|
2
|
-
const require_EndpointBuilder = require('./EndpointBuilder-
|
|
2
|
+
const require_EndpointBuilder = require('./EndpointBuilder-FJktpPOu.cjs');
|
|
3
3
|
const lodash_uniqby = require_chunk.__toESM(require("lodash.uniqby"));
|
|
4
4
|
const __geekmidas_logger_console = require_chunk.__toESM(require("@geekmidas/logger/console"));
|
|
5
5
|
|
|
@@ -69,7 +69,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
69
69
|
basePath: this.basePath,
|
|
70
70
|
defaultAuthorizeFn: this.defaultAuthorizeFn,
|
|
71
71
|
defaultLogger: logger,
|
|
72
|
-
defaultSessionExtractor: this.defaultSessionExtractor
|
|
72
|
+
defaultSessionExtractor: this.defaultSessionExtractor,
|
|
73
|
+
defaultEventPublisher: this.defaultEventPublisher
|
|
73
74
|
});
|
|
74
75
|
}
|
|
75
76
|
publisher(publisher) {
|
|
@@ -136,4 +137,4 @@ Object.defineProperty(exports, 'e', {
|
|
|
136
137
|
return e;
|
|
137
138
|
}
|
|
138
139
|
});
|
|
139
|
-
//# sourceMappingURL=EndpointFactory-
|
|
140
|
+
//# sourceMappingURL=EndpointFactory-Kk1tpifs.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EndpointFactory-Kk1tpifs.cjs","names":["ConsoleLogger","path: P","basePath: TBasePath","path: TPath","fn: AuthorizeFn<TServices, TLogger, TSession>","services: S","logger: L","publisher: Service<TServiceName, T>","session: SessionFn<TServices, TLogger, T>","method: TMethod","EndpointBuilder"],"sources":["../src/endpoints/EndpointFactory.ts"],"sourcesContent":["import type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type { Service } from '@geekmidas/services';\nimport uniqBy from 'lodash.uniqby';\nimport type { AuthorizeFn, SessionFn } from './Endpoint';\nimport { EndpointBuilder } from './EndpointBuilder';\n\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { HttpMethod } from '../types';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class EndpointFactory<\n TServices extends Service[] = [],\n TBasePath extends string = '',\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> {\n // @ts-ignore\n private defaultServices: TServices;\n private basePath: TBasePath = '' as TBasePath;\n private defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n private defaultEventPublisher:\n | Service<TEventPublisherServiceName, TEventPublisher>\n | undefined;\n private defaultSessionExtractor?: SessionFn<TServices, TLogger, TSession>;\n private defaultLogger: TLogger = DEFAULT_LOGGER;\n\n constructor({\n basePath,\n defaultAuthorizeFn,\n defaultLogger,\n defaultSessionExtractor,\n // @ts-ignore\n defaultServices = [] as TServices,\n defaultEventPublisher,\n }: EndpointFactoryOptions<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > = {}) {\n // Initialize default services\n this.defaultServices = uniqBy(\n defaultServices,\n (s) => s.serviceName,\n ) as TServices;\n\n this.basePath = basePath || ('' as TBasePath);\n this.defaultAuthorizeFn = defaultAuthorizeFn;\n this.defaultLogger = defaultLogger || (DEFAULT_LOGGER as TLogger);\n this.defaultSessionExtractor = defaultSessionExtractor;\n this.defaultEventPublisher = defaultEventPublisher;\n }\n\n static joinPaths<TBasePath extends string, P extends string>(\n path: P,\n basePath: TBasePath = '' as TBasePath,\n ): JoinPaths<TBasePath, P> {\n // Handle empty cases\n if (!basePath && !path) return '/' as JoinPaths<TBasePath, P>;\n if (!basePath)\n return (path.startsWith('/') ? path : '/' + path) as JoinPaths<\n TBasePath,\n P\n >;\n if (!path)\n return (\n basePath.startsWith('/') ? basePath : '/' + basePath\n ) as JoinPaths<TBasePath, P>;\n\n const base = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath;\n const segment = path.startsWith('/') ? path : '/' + path;\n\n let result = base + segment;\n\n // Ensure leading slash\n if (!result.startsWith('/')) {\n result = '/' + result;\n }\n\n // Normalize multiple slashes (except in the middle of the path where they might be intentional)\n result = result.replace(/^\\/+/g, '/');\n\n // Remove trailing slash unless it's the root path \"/\"\n if (result.length > 1 && result.endsWith('/')) {\n result = result.slice(0, -1);\n }\n\n return result as JoinPaths<TBasePath, P>;\n }\n\n // Create a sub-router with a path prefix\n route<TPath extends string>(\n path: TPath,\n ): EndpointFactory<\n TServices,\n JoinPaths<TBasePath, TPath>,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n const newBasePath = EndpointFactory.joinPaths(path, this.basePath);\n return new EndpointFactory<\n TServices,\n JoinPaths<TBasePath, TPath>,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >({\n defaultServices: this.defaultServices,\n basePath: newBasePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n });\n }\n\n // Create a new factory with authorization\n authorize(\n fn: AuthorizeFn<TServices, TLogger, TSession>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: fn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n });\n }\n\n // Create a new factory with services\n services<S extends Service[]>(\n services: S,\n ): EndpointFactory<\n [...S, ...TServices],\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n return new EndpointFactory<\n [...S, ...TServices],\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >({\n defaultServices: [...services, ...this.defaultServices],\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n });\n }\n\n logger<L extends Logger>(\n logger: L,\n ): EndpointFactory<\n TServices,\n TBasePath,\n L,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n L,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn as unknown as AuthorizeFn<\n TServices,\n L,\n TSession\n >,\n defaultLogger: logger,\n defaultSessionExtractor: this\n .defaultSessionExtractor as unknown as SessionFn<TServices, L, TSession>,\n defaultEventPublisher: this.defaultEventPublisher,\n });\n }\n\n publisher<\n T extends EventPublisher<any>,\n TServiceName extends string = string,\n >(\n publisher: Service<TServiceName, T>,\n ): EndpointFactory<TServices, TBasePath, TLogger, TSession, T, TServiceName> {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n T,\n TServiceName\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: publisher,\n });\n }\n\n session<T>(\n session: SessionFn<TServices, TLogger, T>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n T,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n T,\n TEventPublisher,\n TEventPublisherServiceName\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn as unknown as AuthorizeFn<\n TServices,\n TLogger,\n T\n >,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: session,\n defaultEventPublisher: this.defaultEventPublisher,\n });\n }\n\n private createBuilder<TMethod extends HttpMethod, TPath extends string>(\n method: TMethod,\n path: TPath,\n ): EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher\n > {\n const fullPath = EndpointFactory.joinPaths(path, this.basePath);\n const builder = new EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher\n >(fullPath, method);\n\n if (this.defaultAuthorizeFn) {\n // @ts-ignore\n builder._authorize = this.defaultAuthorizeFn;\n }\n if (this.defaultServices.length) {\n builder._services = this.defaultServices as TServices;\n }\n\n if (this.defaultLogger) {\n builder._logger = this.defaultLogger as TLogger;\n }\n\n if (this.defaultSessionExtractor) {\n builder._getSession = this.defaultSessionExtractor as SessionFn<\n TServices,\n TLogger,\n TSession\n >;\n }\n\n if (this.defaultEventPublisher) {\n builder._setPublisher(this.defaultEventPublisher);\n }\n\n return builder as unknown as EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n post<TPath extends string>(path: TPath) {\n return this.createBuilder('POST', path);\n }\n\n get<TPath extends string>(path: TPath) {\n return this.createBuilder('GET', path);\n }\n\n put<TPath extends string>(path: TPath) {\n return this.createBuilder('PUT', path);\n }\n\n delete<TPath extends string>(path: TPath) {\n return this.createBuilder('DELETE', path);\n }\n\n patch<TPath extends string>(path: TPath) {\n return this.createBuilder('PATCH', path);\n }\n\n options<TPath extends string>(path: TPath) {\n return this.createBuilder('OPTIONS', path);\n }\n}\n\nexport type RemoveTrailingSlash<T extends string> = T extends `${infer Rest}/`\n ? Rest extends ''\n ? T // Keep \"/\" as is\n : Rest\n : T;\n\nexport type JoinPaths<\n TBasePath extends string,\n TPath extends string,\n> = RemoveTrailingSlash<\n TBasePath extends ''\n ? TPath\n : TPath extends ''\n ? TBasePath\n : TBasePath extends '/'\n ? TPath extends `/${string}`\n ? TPath\n : `/${TPath}`\n : TBasePath extends `${infer Base}/`\n ? TPath extends `/${infer Rest}`\n ? `${Base}/${Rest}`\n : `${Base}/${TPath}`\n : TPath extends `/${infer Rest}`\n ? `${TBasePath}/${Rest}`\n : `${TBasePath}/${TPath}`\n>;\n\nexport interface EndpointFactoryOptions<\n TServices extends Service[] = [],\n TBasePath extends string = '',\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> {\n defaultServices?: TServices;\n basePath?: TBasePath;\n defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n defaultLogger?: TLogger;\n defaultSessionExtractor?: SessionFn<TServices, TLogger, TSession>;\n defaultEventPublisher?: Service<TEventPublisherServiceName, TEventPublisher>;\n defaultEvents?: MappedEvent<TEventPublisher, undefined>[];\n}\n\nexport const e = new EndpointFactory();\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EndpointBuilder } from "./EndpointBuilder-
|
|
1
|
+
import { EndpointBuilder } from "./EndpointBuilder-oXO_ka1-.mjs";
|
|
2
2
|
import uniqBy from "lodash.uniqby";
|
|
3
3
|
import { ConsoleLogger } from "@geekmidas/logger/console";
|
|
4
4
|
|
|
@@ -68,7 +68,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
68
68
|
basePath: this.basePath,
|
|
69
69
|
defaultAuthorizeFn: this.defaultAuthorizeFn,
|
|
70
70
|
defaultLogger: logger,
|
|
71
|
-
defaultSessionExtractor: this.defaultSessionExtractor
|
|
71
|
+
defaultSessionExtractor: this.defaultSessionExtractor,
|
|
72
|
+
defaultEventPublisher: this.defaultEventPublisher
|
|
72
73
|
});
|
|
73
74
|
}
|
|
74
75
|
publisher(publisher) {
|
|
@@ -124,4 +125,4 @@ const e = new EndpointFactory();
|
|
|
124
125
|
|
|
125
126
|
//#endregion
|
|
126
127
|
export { EndpointFactory, e };
|
|
127
|
-
//# sourceMappingURL=EndpointFactory-
|
|
128
|
+
//# sourceMappingURL=EndpointFactory-eG8bDhOh.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EndpointFactory-eG8bDhOh.mjs","names":["DEFAULT_LOGGER","path: P","basePath: TBasePath","path: TPath","fn: AuthorizeFn<TServices, TLogger, TSession>","services: S","logger: L","publisher: Service<TServiceName, T>","session: SessionFn<TServices, TLogger, T>","method: TMethod"],"sources":["../src/endpoints/EndpointFactory.ts"],"sourcesContent":["import type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type { Service } from '@geekmidas/services';\nimport uniqBy from 'lodash.uniqby';\nimport type { AuthorizeFn, SessionFn } from './Endpoint';\nimport { EndpointBuilder } from './EndpointBuilder';\n\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { HttpMethod } from '../types';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class EndpointFactory<\n TServices extends Service[] = [],\n TBasePath extends string = '',\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> {\n // @ts-ignore\n private defaultServices: TServices;\n private basePath: TBasePath = '' as TBasePath;\n private defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n private defaultEventPublisher:\n | Service<TEventPublisherServiceName, TEventPublisher>\n | undefined;\n private defaultSessionExtractor?: SessionFn<TServices, TLogger, TSession>;\n private defaultLogger: TLogger = DEFAULT_LOGGER;\n\n constructor({\n basePath,\n defaultAuthorizeFn,\n defaultLogger,\n defaultSessionExtractor,\n // @ts-ignore\n defaultServices = [] as TServices,\n defaultEventPublisher,\n }: EndpointFactoryOptions<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > = {}) {\n // Initialize default services\n this.defaultServices = uniqBy(\n defaultServices,\n (s) => s.serviceName,\n ) as TServices;\n\n this.basePath = basePath || ('' as TBasePath);\n this.defaultAuthorizeFn = defaultAuthorizeFn;\n this.defaultLogger = defaultLogger || (DEFAULT_LOGGER as TLogger);\n this.defaultSessionExtractor = defaultSessionExtractor;\n this.defaultEventPublisher = defaultEventPublisher;\n }\n\n static joinPaths<TBasePath extends string, P extends string>(\n path: P,\n basePath: TBasePath = '' as TBasePath,\n ): JoinPaths<TBasePath, P> {\n // Handle empty cases\n if (!basePath && !path) return '/' as JoinPaths<TBasePath, P>;\n if (!basePath)\n return (path.startsWith('/') ? path : '/' + path) as JoinPaths<\n TBasePath,\n P\n >;\n if (!path)\n return (\n basePath.startsWith('/') ? basePath : '/' + basePath\n ) as JoinPaths<TBasePath, P>;\n\n const base = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath;\n const segment = path.startsWith('/') ? path : '/' + path;\n\n let result = base + segment;\n\n // Ensure leading slash\n if (!result.startsWith('/')) {\n result = '/' + result;\n }\n\n // Normalize multiple slashes (except in the middle of the path where they might be intentional)\n result = result.replace(/^\\/+/g, '/');\n\n // Remove trailing slash unless it's the root path \"/\"\n if (result.length > 1 && result.endsWith('/')) {\n result = result.slice(0, -1);\n }\n\n return result as JoinPaths<TBasePath, P>;\n }\n\n // Create a sub-router with a path prefix\n route<TPath extends string>(\n path: TPath,\n ): EndpointFactory<\n TServices,\n JoinPaths<TBasePath, TPath>,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n const newBasePath = EndpointFactory.joinPaths(path, this.basePath);\n return new EndpointFactory<\n TServices,\n JoinPaths<TBasePath, TPath>,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >({\n defaultServices: this.defaultServices,\n basePath: newBasePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n });\n }\n\n // Create a new factory with authorization\n authorize(\n fn: AuthorizeFn<TServices, TLogger, TSession>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: fn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n });\n }\n\n // Create a new factory with services\n services<S extends Service[]>(\n services: S,\n ): EndpointFactory<\n [...S, ...TServices],\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n return new EndpointFactory<\n [...S, ...TServices],\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >({\n defaultServices: [...services, ...this.defaultServices],\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n });\n }\n\n logger<L extends Logger>(\n logger: L,\n ): EndpointFactory<\n TServices,\n TBasePath,\n L,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n L,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn as unknown as AuthorizeFn<\n TServices,\n L,\n TSession\n >,\n defaultLogger: logger,\n defaultSessionExtractor: this\n .defaultSessionExtractor as unknown as SessionFn<TServices, L, TSession>,\n defaultEventPublisher: this.defaultEventPublisher,\n });\n }\n\n publisher<\n T extends EventPublisher<any>,\n TServiceName extends string = string,\n >(\n publisher: Service<TServiceName, T>,\n ): EndpointFactory<TServices, TBasePath, TLogger, TSession, T, TServiceName> {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n T,\n TServiceName\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: publisher,\n });\n }\n\n session<T>(\n session: SessionFn<TServices, TLogger, T>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n T,\n TEventPublisher,\n TEventPublisherServiceName\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n T,\n TEventPublisher,\n TEventPublisherServiceName\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn as unknown as AuthorizeFn<\n TServices,\n TLogger,\n T\n >,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: session,\n defaultEventPublisher: this.defaultEventPublisher,\n });\n }\n\n private createBuilder<TMethod extends HttpMethod, TPath extends string>(\n method: TMethod,\n path: TPath,\n ): EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher\n > {\n const fullPath = EndpointFactory.joinPaths(path, this.basePath);\n const builder = new EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher\n >(fullPath, method);\n\n if (this.defaultAuthorizeFn) {\n // @ts-ignore\n builder._authorize = this.defaultAuthorizeFn;\n }\n if (this.defaultServices.length) {\n builder._services = this.defaultServices as TServices;\n }\n\n if (this.defaultLogger) {\n builder._logger = this.defaultLogger as TLogger;\n }\n\n if (this.defaultSessionExtractor) {\n builder._getSession = this.defaultSessionExtractor as SessionFn<\n TServices,\n TLogger,\n TSession\n >;\n }\n\n if (this.defaultEventPublisher) {\n builder._setPublisher(this.defaultEventPublisher);\n }\n\n return builder as unknown as EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName\n >;\n }\n\n post<TPath extends string>(path: TPath) {\n return this.createBuilder('POST', path);\n }\n\n get<TPath extends string>(path: TPath) {\n return this.createBuilder('GET', path);\n }\n\n put<TPath extends string>(path: TPath) {\n return this.createBuilder('PUT', path);\n }\n\n delete<TPath extends string>(path: TPath) {\n return this.createBuilder('DELETE', path);\n }\n\n patch<TPath extends string>(path: TPath) {\n return this.createBuilder('PATCH', path);\n }\n\n options<TPath extends string>(path: TPath) {\n return this.createBuilder('OPTIONS', path);\n }\n}\n\nexport type RemoveTrailingSlash<T extends string> = T extends `${infer Rest}/`\n ? Rest extends ''\n ? T // Keep \"/\" as is\n : Rest\n : T;\n\nexport type JoinPaths<\n TBasePath extends string,\n TPath extends string,\n> = RemoveTrailingSlash<\n TBasePath extends ''\n ? TPath\n : TPath extends ''\n ? TBasePath\n : TBasePath extends '/'\n ? TPath extends `/${string}`\n ? TPath\n : `/${TPath}`\n : TBasePath extends `${infer Base}/`\n ? TPath extends `/${infer Rest}`\n ? `${Base}/${Rest}`\n : `${Base}/${TPath}`\n : TPath extends `/${infer Rest}`\n ? `${TBasePath}/${Rest}`\n : `${TBasePath}/${TPath}`\n>;\n\nexport interface EndpointFactoryOptions<\n TServices extends Service[] = [],\n TBasePath extends string = '',\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> {\n defaultServices?: TServices;\n basePath?: TBasePath;\n defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n defaultLogger?: TLogger;\n defaultSessionExtractor?: SessionFn<TServices, TLogger, TSession>;\n defaultEventPublisher?: Service<TEventPublisherServiceName, TEventPublisher>;\n defaultEvents?: MappedEvent<TEventPublisher, undefined>[];\n}\n\nexport const e = new EndpointFactory();\n"],"mappings":"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"}
|
package/dist/{FunctionExecutionWrapper-UzfHDM2R.cjs.map → FunctionExecutionWrapper-CElXEjPe.cjs.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FunctionExecutionWrapper-
|
|
1
|
+
{"version":3,"file":"FunctionExecutionWrapper-CElXEjPe.cjs","names":["envParser: EnvironmentParser<{}>","fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n FunctionHandler<TInput, TServices, TLogger, TOutSchema>,\n TEventPublisher,\n TEventPublisherServiceName\n >","event: TEvent","response: InferStandardSchema<TOutSchema>","data: unknown","schema: T"],"sources":["../src/functions/FunctionExecutionWrapper.ts"],"sourcesContent":["import type { EnvironmentParser } from '@geekmidas/envkit';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type {\n ComposableStandardSchema,\n InferComposableStandardSchema,\n InferStandardSchema,\n} from '@geekmidas/schema';\nimport {\n type Service,\n ServiceDiscovery,\n type ServiceRecord,\n} from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { publishEvents } from '../publisher';\nimport type { Function, FunctionHandler } from './Function';\nimport { FunctionBuilder } from './FunctionBuilder';\n\nexport abstract class FunctionExecutionWrapper<\n TInput extends ComposableStandardSchema | undefined = undefined,\n TOutSchema extends StandardSchemaV1 | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> {\n constructor(\n protected envParser: EnvironmentParser<{}>,\n protected readonly fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n FunctionHandler<TInput, TServices, TLogger, TOutSchema>,\n TEventPublisher,\n TEventPublisherServiceName\n >,\n ) {}\n\n protected _logger?: TLogger;\n\n get logger(): TLogger {\n return this._logger || this.fn.logger;\n }\n\n get serviceDiscovery(): ServiceDiscovery<ServiceRecord<TServices>, Logger> {\n const serviceDiscovery = ServiceDiscovery.getInstance<\n ServiceRecord<TServices>,\n TLogger\n >(this.logger, this.envParser);\n\n return serviceDiscovery;\n }\n\n getServices(): Promise<ServiceRecord<TServices>> {\n return this.serviceDiscovery.register(this.fn.services);\n }\n\n async getFunctionInput<TEvent>(\n event: TEvent,\n ): Promise<InferComposableStandardSchema<TInput>> {\n const parsedInput = await FunctionBuilder.parseComposableStandardSchema(\n event,\n this.fn.input,\n );\n\n return parsedInput as InferComposableStandardSchema<TInput>;\n }\n\n async publishEvents(response: InferStandardSchema<TOutSchema>) {\n await publishEvents(\n this.logger,\n this.serviceDiscovery,\n this.fn.events,\n response,\n this.fn.publisherService,\n );\n }\n\n async parseComposableStandardSchema<T extends ComposableStandardSchema>(\n data: unknown,\n schema: T,\n ): Promise<InferComposableStandardSchema<T>> {\n return FunctionBuilder.parseComposableStandardSchema(data, schema);\n }\n}\n"],"mappings":";;;;;;AAkBA,IAAsB,2BAAtB,MAOE;CACA,YACYA,WACSC,IASnB;EAVU;EACS;CASjB;CAEJ,AAAU;CAEV,IAAI,SAAkB;AACpB,SAAO,KAAK,WAAW,KAAK,GAAG;CAChC;CAED,IAAI,mBAAuE;EACzE,MAAM,mBAAmB,sCAAiB,YAGxC,KAAK,QAAQ,KAAK,UAAU;AAE9B,SAAO;CACR;CAED,cAAiD;AAC/C,SAAO,KAAK,iBAAiB,SAAS,KAAK,GAAG,SAAS;CACxD;CAED,MAAM,iBACJC,OACgD;EAChD,MAAM,cAAc,MAAM,wCAAgB,8BACxC,OACA,KAAK,GAAG,MACT;AAED,SAAO;CACR;CAED,MAAM,cAAcC,UAA2C;AAC7D,QAAM,gCACJ,KAAK,QACL,KAAK,kBACL,KAAK,GAAG,QACR,UACA,KAAK,GAAG,iBACT;CACF;CAED,MAAM,8BACJC,MACAC,QAC2C;AAC3C,SAAO,wCAAgB,8BAA8B,MAAM,OAAO;CACnE;AACF"}
|
package/dist/{FunctionExecutionWrapper-CPzSbfaI.mjs.map → FunctionExecutionWrapper-XGrSAAPD.mjs.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FunctionExecutionWrapper-
|
|
1
|
+
{"version":3,"file":"FunctionExecutionWrapper-XGrSAAPD.mjs","names":["envParser: EnvironmentParser<{}>","fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n FunctionHandler<TInput, TServices, TLogger, TOutSchema>,\n TEventPublisher,\n TEventPublisherServiceName\n >","event: TEvent","response: InferStandardSchema<TOutSchema>","data: unknown","schema: T"],"sources":["../src/functions/FunctionExecutionWrapper.ts"],"sourcesContent":["import type { EnvironmentParser } from '@geekmidas/envkit';\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type {\n ComposableStandardSchema,\n InferComposableStandardSchema,\n InferStandardSchema,\n} from '@geekmidas/schema';\nimport {\n type Service,\n ServiceDiscovery,\n type ServiceRecord,\n} from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport { publishEvents } from '../publisher';\nimport type { Function, FunctionHandler } from './Function';\nimport { FunctionBuilder } from './FunctionBuilder';\n\nexport abstract class FunctionExecutionWrapper<\n TInput extends ComposableStandardSchema | undefined = undefined,\n TOutSchema extends StandardSchemaV1 | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n> {\n constructor(\n protected envParser: EnvironmentParser<{}>,\n protected readonly fn: Function<\n TInput,\n TServices,\n TLogger,\n TOutSchema,\n FunctionHandler<TInput, TServices, TLogger, TOutSchema>,\n TEventPublisher,\n TEventPublisherServiceName\n >,\n ) {}\n\n protected _logger?: TLogger;\n\n get logger(): TLogger {\n return this._logger || this.fn.logger;\n }\n\n get serviceDiscovery(): ServiceDiscovery<ServiceRecord<TServices>, Logger> {\n const serviceDiscovery = ServiceDiscovery.getInstance<\n ServiceRecord<TServices>,\n TLogger\n >(this.logger, this.envParser);\n\n return serviceDiscovery;\n }\n\n getServices(): Promise<ServiceRecord<TServices>> {\n return this.serviceDiscovery.register(this.fn.services);\n }\n\n async getFunctionInput<TEvent>(\n event: TEvent,\n ): Promise<InferComposableStandardSchema<TInput>> {\n const parsedInput = await FunctionBuilder.parseComposableStandardSchema(\n event,\n this.fn.input,\n );\n\n return parsedInput as InferComposableStandardSchema<TInput>;\n }\n\n async publishEvents(response: InferStandardSchema<TOutSchema>) {\n await publishEvents(\n this.logger,\n this.serviceDiscovery,\n this.fn.events,\n response,\n this.fn.publisherService,\n );\n }\n\n async parseComposableStandardSchema<T extends ComposableStandardSchema>(\n data: unknown,\n schema: T,\n ): Promise<InferComposableStandardSchema<T>> {\n return FunctionBuilder.parseComposableStandardSchema(data, schema);\n }\n}\n"],"mappings":";;;;;AAkBA,IAAsB,2BAAtB,MAOE;CACA,YACYA,WACSC,IASnB;EAVU;EACS;CASjB;CAEJ,AAAU;CAEV,IAAI,SAAkB;AACpB,SAAO,KAAK,WAAW,KAAK,GAAG;CAChC;CAED,IAAI,mBAAuE;EACzE,MAAM,mBAAmB,iBAAiB,YAGxC,KAAK,QAAQ,KAAK,UAAU;AAE9B,SAAO;CACR;CAED,cAAiD;AAC/C,SAAO,KAAK,iBAAiB,SAAS,KAAK,GAAG,SAAS;CACxD;CAED,MAAM,iBACJC,OACgD;EAChD,MAAM,cAAc,MAAM,gBAAgB,8BACxC,OACA,KAAK,GAAG,MACT;AAED,SAAO;CACR;CAED,MAAM,cAAcC,UAA2C;AAC7D,QAAM,cACJ,KAAK,QACL,KAAK,kBACL,KAAK,GAAG,QACR,UACA,KAAK,GAAG,iBACT;CACF;CAED,MAAM,8BACJC,MACAC,QAC2C;AAC3C,SAAO,gBAAgB,8BAA8B,MAAM,OAAO;CACnE;AACF"}
|