@scloud/lambda-api 1.2.2 → 1.2.5
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/README.md +10 -7
- package/dist/event.d.ts +9 -0
- package/dist/event.js +11 -0
- package/dist/handler.d.ts +5 -2
- package/dist/handler.js +12 -42
- package/dist/helpers.d.ts +6 -2
- package/dist/helpers.js +66 -43
- package/dist/index.d.ts +1 -0
- package/dist/index.js +4 -2
- package/dist/result.d.ts +4 -0
- package/dist/result.js +45 -0
- package/dist/types.d.ts +2 -2
- package/dist/types.js +1 -1
- package/package.json +2 -3
package/README.md
CHANGED
|
@@ -6,6 +6,7 @@ This is a piece of useful boilerplate to handle the mechanics of routing, header
|
|
|
6
6
|
|
|
7
7
|
## Releae notes
|
|
8
8
|
|
|
9
|
+
* `1.2.3`: Readme update
|
|
9
10
|
* '1.2.0': Restructure so we consumers don't need to include '/dist' in the import path
|
|
10
11
|
* `1.1.8`: Trusted publishing enabled
|
|
11
12
|
* `1.1.7`: Enable sending headers in ApiError
|
|
@@ -40,15 +41,17 @@ const routes: types.Routes = {
|
|
|
40
41
|
}
|
|
41
42
|
```
|
|
42
43
|
|
|
43
|
-
Use `@scloud/lambda-api` in your Lambda handler
|
|
44
|
+
Use `@scloud/lambda-api` in your Lambda handler. `apiHandler` accepts both REST API (v1) and Function URL (v2) events and returns the matching response shape. When the event type is known at compile time, TypeScript infers the result type via overloads; you can also use `ApiGatewayProxyResultFor<E>`:
|
|
44
45
|
|
|
45
46
|
```
|
|
46
|
-
import {
|
|
47
|
-
import { apiHandler,
|
|
48
|
-
|
|
49
|
-
export async function handler(
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
import { APIGatewayProxyEventV2, Context } from 'aws-lambda';
|
|
48
|
+
import { apiHandler, ApiGatewayProxyResultFor } from '@scloud/lambda-api';
|
|
49
|
+
|
|
50
|
+
export async function handler(
|
|
51
|
+
event: APIGatewayProxyEventV2,
|
|
52
|
+
context: Context,
|
|
53
|
+
): Promise<ApiGatewayProxyResultFor<typeof event>> {
|
|
54
|
+
return apiHandler(event, context, routes);
|
|
52
55
|
}
|
|
53
56
|
```
|
|
54
57
|
|
package/dist/event.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { APIGatewayProxyEvent, APIGatewayProxyEventV2, APIGatewayProxyResult, APIGatewayProxyStructuredResultV2 } from 'aws-lambda';
|
|
2
|
+
export type ApiGatewayProxyEventAny = APIGatewayProxyEvent | APIGatewayProxyEventV2;
|
|
3
|
+
/** Result type that matches the incoming API Gateway / Function URL event format. */
|
|
4
|
+
export type ApiGatewayProxyResultFor<E extends ApiGatewayProxyEventAny> = E extends APIGatewayProxyEventV2 ? APIGatewayProxyStructuredResultV2 : APIGatewayProxyResult;
|
|
5
|
+
/**
|
|
6
|
+
* Lambda Function URLs and HTTP APIs (payload format 2.0) use `rawPath`.
|
|
7
|
+
* REST API / CloudFront proxy integrations use `path`.
|
|
8
|
+
*/
|
|
9
|
+
export declare function isApiGatewayEventV2(event: ApiGatewayProxyEventAny): event is APIGatewayProxyEventV2;
|
package/dist/event.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isApiGatewayEventV2 = isApiGatewayEventV2;
|
|
4
|
+
/**
|
|
5
|
+
* Lambda Function URLs and HTTP APIs (payload format 2.0) use `rawPath`.
|
|
6
|
+
* REST API / CloudFront proxy integrations use `path`.
|
|
7
|
+
*/
|
|
8
|
+
function isApiGatewayEventV2(event) {
|
|
9
|
+
return typeof event.rawPath === 'string';
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFpQkEsa0RBRUM7QUFORDs7O0dBR0c7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxLQUE4QjtJQUNoRSxPQUFPLE9BQVEsS0FBZ0MsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDO0FBQ3ZFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBUElHYXRld2F5UHJveHlFdmVudCxcbiAgQVBJR2F0ZXdheVByb3h5RXZlbnRWMixcbiAgQVBJR2F0ZXdheVByb3h5UmVzdWx0LFxuICBBUElHYXRld2F5UHJveHlTdHJ1Y3R1cmVkUmVzdWx0VjIsXG59IGZyb20gJ2F3cy1sYW1iZGEnO1xuXG5leHBvcnQgdHlwZSBBcGlHYXRld2F5UHJveHlFdmVudEFueSA9IEFQSUdhdGV3YXlQcm94eUV2ZW50IHwgQVBJR2F0ZXdheVByb3h5RXZlbnRWMjtcblxuLyoqIFJlc3VsdCB0eXBlIHRoYXQgbWF0Y2hlcyB0aGUgaW5jb21pbmcgQVBJIEdhdGV3YXkgLyBGdW5jdGlvbiBVUkwgZXZlbnQgZm9ybWF0LiAqL1xuZXhwb3J0IHR5cGUgQXBpR2F0ZXdheVByb3h5UmVzdWx0Rm9yPEUgZXh0ZW5kcyBBcGlHYXRld2F5UHJveHlFdmVudEFueT4gPVxuICBFIGV4dGVuZHMgQVBJR2F0ZXdheVByb3h5RXZlbnRWMiA/IEFQSUdhdGV3YXlQcm94eVN0cnVjdHVyZWRSZXN1bHRWMiA6IEFQSUdhdGV3YXlQcm94eVJlc3VsdDtcblxuLyoqXG4gKiBMYW1iZGEgRnVuY3Rpb24gVVJMcyBhbmQgSFRUUCBBUElzIChwYXlsb2FkIGZvcm1hdCAyLjApIHVzZSBgcmF3UGF0aGAuXG4gKiBSRVNUIEFQSSAvIENsb3VkRnJvbnQgcHJveHkgaW50ZWdyYXRpb25zIHVzZSBgcGF0aGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FwaUdhdGV3YXlFdmVudFYyKGV2ZW50OiBBcGlHYXRld2F5UHJveHlFdmVudEFueSk6IGV2ZW50IGlzIEFQSUdhdGV3YXlQcm94eUV2ZW50VjIge1xuICByZXR1cm4gdHlwZW9mIChldmVudCBhcyBBUElHYXRld2F5UHJveHlFdmVudFYyKS5yYXdQYXRoID09PSAnc3RyaW5nJztcbn1cbiJdfQ==
|
package/dist/handler.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import { APIGatewayProxyEvent, APIGatewayProxyResult, Context } from 'aws-lambda';
|
|
1
|
+
import { APIGatewayProxyEvent, APIGatewayProxyEventV2, APIGatewayProxyResult, APIGatewayProxyStructuredResultV2, Context } from 'aws-lambda';
|
|
2
2
|
import { Request, Response, Handler, Routes } from './types';
|
|
3
|
+
type ErrorHandler = (request: Request, e: Error) => Promise<Response | undefined>;
|
|
3
4
|
/**
|
|
4
5
|
* API route handler
|
|
5
6
|
*/
|
|
6
|
-
export declare function apiHandler(event:
|
|
7
|
+
export declare function apiHandler(event: APIGatewayProxyEventV2, context: Context, routes: Routes, errorHandler?: ErrorHandler, catchAll?: Handler): Promise<APIGatewayProxyStructuredResultV2>;
|
|
8
|
+
export declare function apiHandler(event: APIGatewayProxyEvent, context: Context, routes: Routes, errorHandler?: ErrorHandler, catchAll?: Handler): Promise<APIGatewayProxyResult>;
|
|
9
|
+
export {};
|
package/dist/handler.js
CHANGED
|
@@ -5,10 +5,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.apiHandler = apiHandler;
|
|
7
7
|
const types_1 = require("./types");
|
|
8
|
+
const event_1 = require("./event");
|
|
8
9
|
const helpers_1 = require("./helpers");
|
|
10
|
+
const result_1 = require("./result");
|
|
9
11
|
const v4_1 = __importDefault(require("zod/v4"));
|
|
10
12
|
function apiErrorResponse(e) {
|
|
11
|
-
// Intentional API error response
|
|
12
13
|
if (e instanceof types_1.ApiError) {
|
|
13
14
|
return {
|
|
14
15
|
headers: e.headers,
|
|
@@ -16,7 +17,6 @@ function apiErrorResponse(e) {
|
|
|
16
17
|
body: e.body,
|
|
17
18
|
};
|
|
18
19
|
}
|
|
19
|
-
// Unhandled error
|
|
20
20
|
if (e)
|
|
21
21
|
console.error(e);
|
|
22
22
|
return {
|
|
@@ -24,10 +24,7 @@ function apiErrorResponse(e) {
|
|
|
24
24
|
body: 'Internal server error',
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
|
-
|
|
28
|
-
* API route handler
|
|
29
|
-
*/
|
|
30
|
-
async function apiHandler(event, context, routes, errorHandler = undefined, catchAll = undefined) {
|
|
27
|
+
async function handleRequest(event, routes, errorHandler, catchAll) {
|
|
31
28
|
const request = (0, helpers_1.parseRequest)(event);
|
|
32
29
|
let response;
|
|
33
30
|
try {
|
|
@@ -38,7 +35,6 @@ async function apiHandler(event, context, routes, errorHandler = undefined, catc
|
|
|
38
35
|
const route = match.methods[request.method];
|
|
39
36
|
if (!route)
|
|
40
37
|
throw new types_1.ApiError(405, 'Method not allowed');
|
|
41
|
-
// Verify request body
|
|
42
38
|
if (route.request?.body) {
|
|
43
39
|
const parsed = route.request.body.safeParse(request.body);
|
|
44
40
|
if (!parsed.success) {
|
|
@@ -47,19 +43,17 @@ async function apiHandler(event, context, routes, errorHandler = undefined, catc
|
|
|
47
43
|
request.body = parsed.data;
|
|
48
44
|
}
|
|
49
45
|
response = await route.handler(request);
|
|
50
|
-
// Verify response body
|
|
51
46
|
if (route.response?.body) {
|
|
52
47
|
const parsed = route.response.body.safeParse(response.body);
|
|
53
48
|
if (!parsed.success) {
|
|
54
49
|
console.error('Invalid response body:', request.method, request.path, JSON.stringify(v4_1.default.treeifyError(parsed.error), null, 2));
|
|
55
|
-
response = undefined;
|
|
50
|
+
response = undefined;
|
|
56
51
|
throw new types_1.ApiError(500, 'Internal server error');
|
|
57
52
|
}
|
|
58
53
|
response.body = parsed.data;
|
|
59
54
|
}
|
|
60
55
|
}
|
|
61
56
|
else if (catchAll) {
|
|
62
|
-
// Catch-all / 404
|
|
63
57
|
response = await catchAll.handler(request);
|
|
64
58
|
}
|
|
65
59
|
else {
|
|
@@ -69,44 +63,20 @@ async function apiHandler(event, context, routes, errorHandler = undefined, catc
|
|
|
69
63
|
catch (e) {
|
|
70
64
|
if (errorHandler) {
|
|
71
65
|
try {
|
|
72
|
-
// errorHandler can optionally return undefined to request standard error handling:
|
|
73
66
|
response = await errorHandler(request, e);
|
|
74
67
|
}
|
|
75
68
|
catch (ee) {
|
|
76
69
|
response = apiErrorResponse(ee);
|
|
77
70
|
}
|
|
78
71
|
}
|
|
79
|
-
// Standard error handling
|
|
80
72
|
response = response ?? apiErrorResponse(e);
|
|
81
73
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
(0, helpers_1.setHeader)('Content-Type', 'text/plain', headers);
|
|
90
|
-
body = response.body;
|
|
91
|
-
}
|
|
92
|
-
else if (response.body) {
|
|
93
|
-
// Stringify the response object
|
|
94
|
-
// API Gateway returns application/json by default
|
|
95
|
-
body = JSON.stringify(response.body);
|
|
96
|
-
}
|
|
97
|
-
// Prepare response
|
|
98
|
-
const result = {
|
|
99
|
-
statusCode: response.statusCode ?? 200,
|
|
100
|
-
headers,
|
|
101
|
-
body: body || '',
|
|
102
|
-
};
|
|
103
|
-
// Add cookie headers
|
|
104
|
-
const cookieHeaders = (0, helpers_1.buildCookie)(response);
|
|
105
|
-
if (cookieHeaders) {
|
|
106
|
-
result.multiValueHeaders = {
|
|
107
|
-
'Set-Cookie': cookieHeaders,
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
return result;
|
|
74
|
+
return response;
|
|
75
|
+
}
|
|
76
|
+
async function apiHandler(event, context, routes, errorHandler, catchAll) {
|
|
77
|
+
const response = await handleRequest(event, routes, errorHandler, catchAll);
|
|
78
|
+
return (0, event_1.isApiGatewayEventV2)(event)
|
|
79
|
+
? (0, result_1.toApiGatewayResultV2)(response)
|
|
80
|
+
: (0, result_1.toApiGatewayResultV1)(response);
|
|
111
81
|
}
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBMkdBLGdDQVdDO0FBL0dELG1DQUdpQjtBQUNqQixtQ0FBdUU7QUFDdkUsdUNBQXFEO0FBQ3JELHFDQUFzRTtBQUN0RSxnREFBdUI7QUFJdkIsU0FBUyxnQkFBZ0IsQ0FBQyxDQUFXO0lBQ25DLElBQUksQ0FBQyxZQUFZLGdCQUFRLEVBQUUsQ0FBQztRQUMxQixPQUFPO1lBQ0wsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPO1lBQ2xCLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVTtZQUN4QixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7U0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksQ0FBQztRQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsT0FBTztRQUNMLFVBQVUsRUFBRSxHQUFHO1FBQ2YsSUFBSSxFQUFFLHVCQUF1QjtLQUM5QixDQUFDO0FBQ0osQ0FBQztBQUVELEtBQUssVUFBVSxhQUFhLENBQzFCLEtBQThCLEVBQzlCLE1BQWMsRUFDZCxZQUFzQyxFQUN0QyxRQUE2QjtJQUU3QixNQUFNLE9BQU8sR0FBRyxJQUFBLHNCQUFZLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFFcEMsSUFBSSxRQUE4QixDQUFDO0lBQ25DLElBQUksQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLElBQUEsb0JBQVUsRUFBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLElBQUksS0FBSyxDQUFDLE1BQU07WUFBRSxPQUFPLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFFeEQsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBcUIsQ0FBQyxD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SUdhdGV3YXlQcm94eUV2ZW50LFxuICBBUElHYXRld2F5UHJveHlFdmVudFYyLFxuICBBUElHYXRld2F5UHJveHlSZXN1bHQsXG4gIEFQSUdhdGV3YXlQcm94eVN0cnVjdHVyZWRSZXN1bHRWMixcbiAgQ29udGV4dCxcbn0gZnJvbSAnYXdzLWxhbWJkYSc7XG5pbXBvcnQge1xuICBSZXF1ZXN0LCBSZXNwb25zZSwgSGFuZGxlciwgUm91dGUsIFJvdXRlcyxcbiAgQXBpRXJyb3IsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQXBpR2F0ZXdheVByb3h5RXZlbnRBbnksIGlzQXBpR2F0ZXdheUV2ZW50VjIgfSBmcm9tICcuL2V2ZW50JztcbmltcG9ydCB7IG1hdGNoUm91dGUsIHBhcnNlUmVxdWVzdCB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyB0b0FwaUdhdGV3YXlSZXN1bHRWMSwgdG9BcGlHYXRld2F5UmVzdWx0VjIgfSBmcm9tICcuL3Jlc3VsdCc7XG5pbXBvcnQgeiBmcm9tICd6b2QvdjQnO1xuXG50eXBlIEVycm9ySGFuZGxlciA9IChyZXF1ZXN0OiBSZXF1ZXN0LCBlOiBFcnJvcikgPT4gUHJvbWlzZTxSZXNwb25zZSB8IHVuZGVmaW5lZD47XG5cbmZ1bmN0aW9uIGFwaUVycm9yUmVzcG9uc2UoZT86IHVua25vd24pOiBSZXNwb25zZSB7XG4gIGlmIChlIGluc3RhbmNlb2YgQXBpRXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVhZGVyczogZS5oZWFkZXJzLFxuICAgICAgc3RhdHVzQ29kZTogZS5zdGF0dXNDb2RlLFxuICAgICAgYm9keTogZS5ib2R5LFxuICAgIH07XG4gIH1cblxuICBpZiAoZSkgY29uc29sZS5lcnJvcihlKTtcbiAgcmV0dXJuIHtcbiAgICBzdGF0dXNDb2RlOiA1MDAsXG4gICAgYm9keTogJ0ludGVybmFsIHNlcnZlciBlcnJvcicsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVJlcXVlc3QoXG4gIGV2ZW50OiBBcGlHYXRld2F5UHJveHlFdmVudEFueSxcbiAgcm91dGVzOiBSb3V0ZXMsXG4gIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVyIHwgdW5kZWZpbmVkLFxuICBjYXRjaEFsbDogSGFuZGxlciB8IHVuZGVmaW5lZCxcbik6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgY29uc3QgcmVxdWVzdCA9IHBhcnNlUmVxdWVzdChldmVudCk7XG5cbiAgbGV0IHJlc3BvbnNlOiBSZXNwb25zZSB8IHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBjb25zdCBtYXRjaCA9IG1hdGNoUm91dGUocm91dGVzLCByZXF1ZXN0LnBhdGgpO1xuICAgIGlmIChtYXRjaC5wYXJhbXMpIHJlcXVlc3QucGF0aFBhcmFtZXRlcnMgPSBtYXRjaC5wYXJhbXM7XG5cbiAgICBpZiAobWF0Y2gubWV0aG9kcykge1xuICAgICAgY29uc3Qgcm91dGUgPSBtYXRjaC5tZXRob2RzW3JlcXVlc3QubWV0aG9kIGFzIGtleW9mIFJvdXRlXTtcbiAgICAgIGlmICghcm91dGUpIHRocm93IG5ldyBBcGlFcnJvcig0MDUsICdNZXRob2Qgbm90IGFsbG93ZWQnKTtcblxuICAgICAgaWYgKHJvdXRlLnJlcXVlc3Q/LmJvZHkpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gcm91dGUucmVxdWVzdC5ib2R5LnNhZmVQYXJzZShyZXF1ZXN0LmJvZHkpO1xuICAgICAgICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEFwaUVycm9yKDQwMCwgei50cmVlaWZ5RXJyb3IocGFyc2VkLmVycm9yKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdC5ib2R5ID0gcGFyc2VkLmRhdGE7XG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgcm91dGUuaGFuZGxlcihyZXF1ZXN0KTtcblxuICAgICAgaWYgKHJvdXRlLnJlc3BvbnNlPy5ib2R5KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHJvdXRlLnJlc3BvbnNlLmJvZHkuc2FmZVBhcnNlKHJlc3BvbnNlLmJvZHkpO1xuICAgICAgICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCByZXNwb25zZSBib2R5OicsIHJlcXVlc3QubWV0aG9kLCByZXF1ZXN0LnBhdGgsIEpTT04uc3RyaW5naWZ5KHoudHJlZWlmeUVycm9yKHBhcnNlZC5lcnJvciksIG51bGwsIDIpKTtcbiAgICAgICAgICByZXNwb25zZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB0aHJvdyBuZXcgQXBpRXJyb3IoNTAwLCAnSW50ZXJuYWwgc2VydmVyIGVycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzcG9uc2UuYm9keSA9IHBhcnNlZC5kYXRhO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2F0Y2hBbGwpIHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgY2F0Y2hBbGwuaGFuZGxlcihyZXF1ZXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEFwaUVycm9yKDQwNCwgJ05vdCBmb3VuZCcpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlcnJvckhhbmRsZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgZXJyb3JIYW5kbGVyKHJlcXVlc3QsIGUgYXMgRXJyb3IpO1xuICAgICAgfSBjYXRjaCAoZWUpIHtcbiAgICAgICAgcmVzcG9uc2UgPSBhcGlFcnJvclJlc3BvbnNlKGVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXNwb25zZSA9IHJlc3BvbnNlID8/IGFwaUVycm9yUmVzcG9uc2UoZSk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbi8qKlxuICogQVBJIHJvdXRlIGhhbmRsZXJcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwaUhhbmRsZXIoXG4gIGV2ZW50OiBBUElHYXRld2F5UHJveHlFdmVudFYyLFxuICBjb250ZXh0OiBDb250ZXh0LFxuICByb3V0ZXM6IFJvdXRlcyxcbiAgZXJyb3JIYW5kbGVyPzogRXJyb3JIYW5kbGVyLFxuICBjYXRjaEFsbD86IEhhbmRsZXIsXG4pOiBQcm9taXNlPEFQSUdhdGV3YXlQcm94eVN0cnVjdHVyZWRSZXN1bHRWMj47XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBpSGFuZGxlcihcbiAgZXZlbnQ6IEFQSUdhdGV3YXlQcm94eUV2ZW50LFxuICBjb250ZXh0OiBDb250ZXh0LFxuICByb3V0ZXM6IFJvdXRlcyxcbiAgZXJyb3JIYW5kbGVyPzogRXJyb3JIYW5kbGVyLFxuICBjYXRjaEFsbD86IEhhbmRsZXIsXG4pOiBQcm9taXNlPEFQSUdhdGV3YXlQcm94eVJlc3VsdD47XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBpSGFuZGxlcihcbiAgZXZlbnQ6IEFwaUdhdGV3YXlQcm94eUV2ZW50QW55LFxuICBjb250ZXh0OiBDb250ZXh0LFxuICByb3V0ZXM6IFJvdXRlcyxcbiAgZXJyb3JIYW5kbGVyPzogRXJyb3JIYW5kbGVyLFxuICBjYXRjaEFsbD86IEhhbmRsZXIsXG4pOiBQcm9taXNlPEFQSUdhdGV3YXlQcm94eVJlc3VsdCB8IEFQSUdhdGV3YXlQcm94eVN0cnVjdHVyZWRSZXN1bHRWMj4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGhhbmRsZVJlcXVlc3QoZXZlbnQsIHJvdXRlcywgZXJyb3JIYW5kbGVyLCBjYXRjaEFsbCk7XG4gIHJldHVybiBpc0FwaUdhdGV3YXlFdmVudFYyKGV2ZW50KVxuICAgID8gdG9BcGlHYXRld2F5UmVzdWx0VjIocmVzcG9uc2UpXG4gICAgOiB0b0FwaUdhdGV3YXlSZXN1bHRWMShyZXNwb25zZSk7XG59XG4iXX0=
|
package/dist/helpers.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ApiGatewayProxyEventAny } from './event';
|
|
2
2
|
import { Request, Response, Route, Routes } from './types';
|
|
3
|
+
export { ApiGatewayProxyEventAny, ApiGatewayProxyResultFor, isApiGatewayEventV2 } from './event';
|
|
3
4
|
/**
|
|
4
5
|
* Ensures the path always has a leading slash and never a trailing slash
|
|
5
6
|
* @param path APIGatewayProxyEvent.path
|
|
@@ -51,7 +52,10 @@ export declare function getHeader(name: string, headers: {
|
|
|
51
52
|
export declare function setHeader(name: string, value: string, headers: {
|
|
52
53
|
[key: string]: string | undefined;
|
|
53
54
|
} | undefined): void;
|
|
54
|
-
|
|
55
|
+
/**
|
|
56
|
+
* Parses a REST API (v1) or HTTP API / Function URL (v2) proxy event into a Request.
|
|
57
|
+
*/
|
|
58
|
+
export declare function parseRequest(event: ApiGatewayProxyEventAny): Request;
|
|
55
59
|
export declare function matchRoute(routes: Routes, path: string): {
|
|
56
60
|
methods: Route | undefined;
|
|
57
61
|
params?: {
|
package/dist/helpers.js
CHANGED
|
@@ -1,38 +1,6 @@
|
|
|
1
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isApiGatewayEventV2 = void 0;
|
|
36
4
|
exports.standardPath = standardPath;
|
|
37
5
|
exports.standardQueryParameters = standardQueryParameters;
|
|
38
6
|
exports.standardHeaders = standardHeaders;
|
|
@@ -43,7 +11,10 @@ exports.getHeader = getHeader;
|
|
|
43
11
|
exports.setHeader = setHeader;
|
|
44
12
|
exports.parseRequest = parseRequest;
|
|
45
13
|
exports.matchRoute = matchRoute;
|
|
46
|
-
const
|
|
14
|
+
const cookie_1 = require("cookie");
|
|
15
|
+
const event_1 = require("./event");
|
|
16
|
+
var event_2 = require("./event");
|
|
17
|
+
Object.defineProperty(exports, "isApiGatewayEventV2", { enumerable: true, get: function () { return event_2.isApiGatewayEventV2; } });
|
|
47
18
|
/**
|
|
48
19
|
* Ensures the path always has a leading slash and never a trailing slash
|
|
49
20
|
* @param path APIGatewayProxyEvent.path
|
|
@@ -110,7 +81,7 @@ function parseBody(body, isBase64Encoded, contentType = 'application/json') {
|
|
|
110
81
|
*/
|
|
111
82
|
function parseCookie(headers) {
|
|
112
83
|
const header = getHeader('Cookie', headers);
|
|
113
|
-
const values = header ?
|
|
84
|
+
const values = header ? (0, cookie_1.parseCookie)(header) : {};
|
|
114
85
|
// Ensure we don't return any undefined values
|
|
115
86
|
const result = {};
|
|
116
87
|
for (const [name, value] of Object.entries(values)) {
|
|
@@ -131,14 +102,14 @@ function buildCookie(response, maxAge = 60 * 60 * 24 * 365, expires = undefined,
|
|
|
131
102
|
const value = cookies[key];
|
|
132
103
|
if (value === '') {
|
|
133
104
|
// If explicitly unset, expire the cookie value
|
|
134
|
-
header.push(
|
|
135
|
-
expires: new Date(), secure, httpOnly, sameSite,
|
|
105
|
+
header.push((0, cookie_1.stringifySetCookie)({
|
|
106
|
+
name: key, value: '', expires: new Date(), secure, httpOnly, sameSite,
|
|
136
107
|
}));
|
|
137
108
|
}
|
|
138
109
|
else if (value) {
|
|
139
110
|
// Otherwise, set it only if a value was given
|
|
140
|
-
header.push(
|
|
141
|
-
maxAge, expires, secure, httpOnly, sameSite,
|
|
111
|
+
header.push((0, cookie_1.stringifySetCookie)({
|
|
112
|
+
name: key, value, maxAge, expires, secure, httpOnly, sameSite,
|
|
142
113
|
}));
|
|
143
114
|
}
|
|
144
115
|
});
|
|
@@ -176,7 +147,32 @@ function setHeader(name, value, headers) {
|
|
|
176
147
|
if (!set)
|
|
177
148
|
headers[name] = value;
|
|
178
149
|
}
|
|
179
|
-
function
|
|
150
|
+
function parseCookiesArray(cookies) {
|
|
151
|
+
if (!cookies)
|
|
152
|
+
return {};
|
|
153
|
+
const result = {};
|
|
154
|
+
cookies.forEach((entry) => {
|
|
155
|
+
const separator = entry.indexOf('=');
|
|
156
|
+
if (separator === -1)
|
|
157
|
+
return;
|
|
158
|
+
const name = entry.slice(0, separator);
|
|
159
|
+
const value = entry.slice(separator + 1);
|
|
160
|
+
if (name)
|
|
161
|
+
result[name] = value;
|
|
162
|
+
});
|
|
163
|
+
return result;
|
|
164
|
+
}
|
|
165
|
+
function standardPathParameters(params) {
|
|
166
|
+
if (!params)
|
|
167
|
+
return {};
|
|
168
|
+
const result = {};
|
|
169
|
+
Object.entries(params).forEach(([key, value]) => {
|
|
170
|
+
if (value)
|
|
171
|
+
result[key] = value;
|
|
172
|
+
});
|
|
173
|
+
return result;
|
|
174
|
+
}
|
|
175
|
+
function parseRequestV1(event) {
|
|
180
176
|
return {
|
|
181
177
|
method: event.httpMethod,
|
|
182
178
|
path: standardPath(event.path),
|
|
@@ -184,9 +180,36 @@ function parseRequest(event) {
|
|
|
184
180
|
headers: standardHeaders(event.headers),
|
|
185
181
|
body: parseBody(event.body, event.isBase64Encoded, getHeader('Content-Type', event.headers)),
|
|
186
182
|
cookies: parseCookie(event.headers),
|
|
187
|
-
pathParameters: {},
|
|
188
|
-
context: { event },
|
|
183
|
+
pathParameters: {},
|
|
184
|
+
context: { event },
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
function parseRequestV2(event) {
|
|
188
|
+
const headers = standardHeaders(event.headers);
|
|
189
|
+
const cookies = {
|
|
190
|
+
...parseCookie(event.headers),
|
|
191
|
+
...parseCookiesArray(event.cookies),
|
|
189
192
|
};
|
|
193
|
+
const query = event.queryStringParameters
|
|
194
|
+
?? (event.rawQueryString ? Object.fromEntries(new URLSearchParams(event.rawQueryString)) : null);
|
|
195
|
+
return {
|
|
196
|
+
method: event.requestContext.http.method,
|
|
197
|
+
path: standardPath(event.rawPath),
|
|
198
|
+
query: standardQueryParameters(query),
|
|
199
|
+
headers,
|
|
200
|
+
body: parseBody(event.body ?? null, event.isBase64Encoded, getHeader('content-type', headers)),
|
|
201
|
+
cookies,
|
|
202
|
+
pathParameters: standardPathParameters(event.pathParameters),
|
|
203
|
+
context: { event },
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Parses a REST API (v1) or HTTP API / Function URL (v2) proxy event into a Request.
|
|
208
|
+
*/
|
|
209
|
+
function parseRequest(event) {
|
|
210
|
+
if ((0, event_1.isApiGatewayEventV2)(event))
|
|
211
|
+
return parseRequestV2(event);
|
|
212
|
+
return parseRequestV1(event);
|
|
190
213
|
}
|
|
191
214
|
function matchRoute(routes, path) {
|
|
192
215
|
// Direct match
|
|
@@ -226,4 +249,4 @@ function matchRoute(routes, path) {
|
|
|
226
249
|
}
|
|
227
250
|
return { methods: undefined };
|
|
228
251
|
}
|
|
229
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUUEsb0NBS0M7QUFNRCwwREFRQztBQU1ELDBDQU1DO0FBT0QsOEJBa0JDO0FBTUQsa0NBVUM7QUFFRCxrQ0FpQ0M7QUFLRCw4QkFZQztBQUtELDhCQVVDO0FBRUQsb0NBV0M7QUFFRCxnQ0F5Q0M7QUExTUQsK0NBQWlDO0FBR2pDOzs7R0FHRztBQUNILFNBQWdCLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLDhDQUE4QztJQUM5QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUQsY0FBYztJQUNkLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDbEMsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLHVCQUF1QixDQUFDLEtBQXFEO0lBQzNGLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDdEIsTUFBTSxNQUFNLEdBQWdDLEVBQUUsQ0FBQztJQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQixJQUFJLEtBQUs7WUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxPQUFnRDtJQUM5RSxNQUFNLE1BQU0sR0FBZ0Ms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LEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDO1lBQzdCLENBQUM7aUJBQU0sSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLEtBQUssZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztnQkFDeEUsTUFBTTtZQUNSLENBQUM7WUFFRCxJQUFJLENBQUMsS0FBSyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNsQyx1QkFBdUI7Z0JBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ2hELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQSUdhdGV3YXlQcm94eUV2ZW50IH0gZnJvbSAnYXdzLWxhbWJkYSc7XG5pbXBvcnQgKiBhcyBjb29raWUgZnJvbSAnY29va2llJztcbmltcG9ydCB7IFJlcXVlc3QsIFJlc3BvbnNlLCBSb3V0ZSwgUm91dGVzIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogRW5zdXJlcyB0aGUgcGF0aCBhbHdheXMgaGFzIGEgbGVhZGluZyBzbGFzaCBhbmQgbmV2ZXIgYSB0cmFpbGluZyBzbGFzaFxuICogQHBhcmFtIHBhdGggQVBJR2F0ZXdheVByb3h5RXZlbnQucGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhbmRhcmRQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIEdldCBwYXRoIHNlZ21lbnRzLCBmaWx0ZXJpbmcgb3V0IGFueSBibGFua3NcbiAgY29uc3Qgc2VnbWVudHMgPSBwYXRoLnNwbGl0KCcvJykuZmlsdGVyKChzZWdtZW50KSA9PiBzZWdtZW50KTtcbiAgLy8gUmV0dXJuIHBhdGhcbiAgcmV0dXJuIGAvJHtzZWdtZW50cy5qb2luKCcvJyl9YDtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIGEgbm9uLW51bGwgb2JqZWN0IGNvbnRhaW5pbmcgb25seSBxdWVyeS1zdHJpbmcgcGFyYW1ldGVycyB0aGF0IGhhdmUgYSB2YWx1ZS5cbiAqIEBwYXJhbSBxdWVyeSBBUElHYXRld2F5UHJveHlFdmVudC5xdWVyeVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhbmRhcmRRdWVyeVBhcmFtZXRlcnMocXVlcnk6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZDsgfSB8IG51bGwpOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7IH0ge1xuICBpZiAoIXF1ZXJ5KSByZXR1cm4ge307XG4gIGNvbnN0IHJlc3VsdDogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nOyB9ID0ge307XG4gIE9iamVjdC5rZXlzKHF1ZXJ5KS5mb3JFYWNoKChwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHF1ZXJ5W3BhcmFtZXRlcl07XG4gICAgaWYgKHZhbHVlKSByZXN1bHRbcGFyYW1ldGVyXSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIGFsbCBoZWFkZXJzIGhhdmUgYSB2YWx1ZS5cbiAqIEBwYXJhbSBoZWFkZXJzIEFQSUdhdGV3YXlQcm94eUV2ZW50LmhlYWRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YW5kYXJkSGVhZGVycyhoZWFkZXJzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQ7IH0pOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7IH0ge1xuICBjb25zdCByZXN1bHQ6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZzsgfSA9IHt9O1xuICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaGVhZGVycyB8fCB7fSkpIHtcbiAgICByZXN1bHRbbmFtZV0gPSB2YWx1ZSA/PyAnJztcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgYm9keSAoaWYgcHJlc2VudCkgZnJvbSBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgb3IgSlNPTiBzdHJpbmcuXG4gKiBJZiB0aGUgYm9keSBmYWlscyB0byBwYXJzZSBhcyBKU09uLCB0aGUgcmF3IGJvZHkgaXMgcmV0dXJuZWQuXG4gKiBAcGFyYW0gYm9keSBBUElHYXRld2F5UHJveHlFdmVudC5ib2R5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUJvZHkoYm9keTogc3RyaW5nIHwgbnVsbCwgaXNCYXNlNjRFbmNvZGVkOiBib29sZWFuLCBjb250ZW50VHlwZTogc3RyaW5nID0gJ2FwcGxpY2F0aW9uL2pzb24nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBzdHJpbmcge1xuICBpZiAoIWJvZHkpIHJldHVybiB7fTtcblxuICBjb25zdCBjb250ZW50ID0gaXNCYXNlNjRFbmNvZGVkID8gQnVmZmVyLmZyb20oYm9keSwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGY4JykgOiBib2R5O1xuXG4gIHRyeSB7XG4gICAgaWYgKChjb250ZW50VHlwZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMobmV3IFVSTFNlYXJjaFBhcmFtcyhjb250ZW50KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZmF1bHQgdG8gcGFyc2luZyBhcyBKU09OOlxuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoY29udGVudCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihgRXJyb3IgcGFyc2luZyByZXF1ZXN0IGJvZHk6ICR7ZX1gKTtcbiAgfVxuXG4gIC8vIEZhbGxiYWNrIHRvIHJldHVybmluZyB0aGUgcmF3IGJvZHlcbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8qKlxuICogUGFyc2VzIHRoZSBjb29raWUsIGlmIGFueSwgcmV0dXJuaW5nIGF0IG1pbmltdW0gYW4gZW1wdHkgb2JqZWN0LlxuICogQHBhcmFtIGhlYWRlcnMgQVBJR2F0ZXdheVByb3h5RXZlbnQuaGVhZGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDb29raWUoaGVhZGVyczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkOyB9KTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nOyB9IHtcbiAgY29uc3QgaGVhZGVyID0gZ2V0SGVhZGVyKCdDb29raWUnLCBoZWFkZXJzKTtcbiAgY29uc3QgdmFsdWVzID0gaGVhZGVyID8gY29va2llLnBhcnNlKGhlYWRlcikgOiB7fTtcblxuICAvLyBFbnN1cmUgd2UgZG9uJ3QgcmV0dXJuIGFueSB1bmRlZmluZWQgdmFsdWVzXG4gIGNvbnN0IHJlc3VsdDogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nOyB9ID0ge307XG4gIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZXMpKSB7XG4gICAgaWYgKHZhbHVlKSByZXN1bHRbbmFtZV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRDb29raWUoXG4gIHJlc3BvbnNlOiBSZXNwb25zZSxcbiAgbWF4QWdlOiBudW1iZXIgfCB1bmRlZmluZWQgPSA2MCAqIDYwICogMjQgKiAzNjUsXG4gIGV4cGlyZXM6IERhdGUgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gIHNlY3VyZTogYm9vbGVhbiA9IHRydWUsXG4gIGh0dHBPbmx5OiBib29sZWFuID0gdHJ1ZSxcbiAgc2FtZVNpdGU6ICdzdHJpY3QnIHwgJ2xheCcgfCAnbm9uZScgPSAnbGF4Jyxcbik6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFyZXNwb25zZS5jb29raWVzKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGNvb2tpZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nOyB9ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlc3BvbnNlLmNvb2tpZXMpKSB7XG4gICAgY29va2llc1trZXldID0gdmFsdWU7XG4gIH1cblxuICBjb25zdCBoZWFkZXI6IHN0cmluZ1tdID0gW107XG5cbiAgT2JqZWN0LmtleXMoY29va2llcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBjb29raWVzW2tleV07XG4gICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgLy8gSWYgZXhwbGljaXRseSB1bnNldCwgZXhwaXJlIHRoZSBjb29raWUgdmFsdWVcbiAgICAgIGhlYWRlci5wdXNoKGNvb2tpZS5zZXJpYWxpemUoa2V5LCAnJywge1xuICAgICAgICBleHBpcmVzOiBuZXcgRGF0ZSgpLCBzZWN1cmUsIGh0dHBPbmx5LCBzYW1lU2l0ZSxcbiAgICAgIH0pKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICAvLyBPdGhlcndpc2UsIHNldCBpdCBvbmx5IGlmIGEgdmFsdWUgd2FzIGdpdmVuXG4gICAgICBoZWFkZXIucHVzaChjb29raWUuc2VyaWFsaXplKGtleSwgdmFsdWUsIHtcbiAgICAgICAgbWF4QWdlLCBleHBpcmVzLCBzZWN1cmUsIGh0dHBPbmx5LCBzYW1lU2l0ZSxcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBoZWFkZXI7XG59XG5cbi8qKlxuICogQ2FzZS1pbnNlbnNpdGl2ZSBoZWFkZXIgbG9va3VwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZWFkZXIobmFtZTogc3RyaW5nLCBoZWFkZXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZDsgfSB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghaGVhZGVycykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAvLyBFeGFjdCBtYXRjaFxuICBpZiAoaGVhZGVyc1tuYW1lXSkgcmV0dXJuIGhlYWRlcnNbbmFtZV07XG5cbiAgLy8gQ2FzZS1pbnNlbnNpdGl2ZSBtYXRjaFxuICBjb25zdCBsb3dlcmNhc2VkOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZDsgfSA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhoZWFkZXJzKSkge1xuICAgIGxvd2VyY2FzZWRba2V5LnRvTG93ZXJDYXNlKCldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGxvd2VyY2FzZWRbbmFtZS50b0xvd2VyQ2FzZSgpXTtcbn1cblxuLyoqXG4gKiBDYXNlLWluc2Vuc2l0aXZlIGhlYWRlciBzZXR0aW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRIZWFkZXIobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBoZWFkZXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZDsgfSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICBpZiAoIWhlYWRlcnMpIHJldHVybjtcbiAgbGV0IHNldCA9IGZhbHNlO1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkge1xuICAgIGlmIChuYW1lLnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBoZWFkZXJzW2tleV0gPSB2YWx1ZTtcbiAgICAgIHNldCA9IHRydWU7XG4gICAgfVxuICB9XG4gIGlmICghc2V0KSBoZWFkZXJzW25hbWVdID0gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVJlcXVlc3QoZXZlbnQ6IEFQSUdhdGV3YXlQcm94eUV2ZW50KTogUmVxdWVzdCB7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiBldmVudC5odHRwTWV0aG9kLFxuICAgIHBhdGg6IHN0YW5kYXJkUGF0aChldmVudC5wYXRoKSxcbiAgICBxdWVyeTogc3RhbmRhcmRRdWVyeVBhcmFtZXRlcnMoZXZlbnQucXVlcnlTdHJpbmdQYXJhbWV0ZXJzKSxcbiAgICBoZWFkZXJzOiBzdGFuZGFyZEhlYWRlcnMoZXZlbnQuaGVhZGVycyksXG4gICAgYm9keTogcGFyc2VCb2R5KGV2ZW50LmJvZHksIGV2ZW50LmlzQmFzZTY0RW5jb2RlZCwgZ2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCBldmVudC5oZWFkZXJzKSksXG4gICAgY29va2llczogcGFyc2VDb29raWUoZXZlbnQuaGVhZGVycyksXG4gICAgcGF0aFBhcmFtZXRlcnM6IHt9LCAvLyBUaGVzZSBuZWVkIHRvIGJlIHBhcnNlZCBhcyBwYXJ0IG9mIHJvdXRlIG1hdGNoaW5nXG4gICAgY29udGV4dDogeyBldmVudCB9LCAvLyBZb3UgY2FuIGFkZCBhbnkgY3VzdG9tIHZhbHVlcyB5b3UgbmVlZCB0byB0aGUgcmVxdWVzdCB2aWEgdGhpcyBjb250ZXh0XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFJvdXRlKHJvdXRlczogUm91dGVzLCBwYXRoOiBzdHJpbmcpOiB7IG1ldGhvZHM6IFJvdXRlIHwgdW5kZWZpbmVkLCBwYXJhbXM/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7IH07IH0ge1xuICAvLyBEaXJlY3QgbWF0Y2hcbiAgaWYgKHJvdXRlc1twYXRoXSkgcmV0dXJuIHsgbWV0aG9kczogcm91dGVzW3BhdGhdLCBwYXJhbXM6IHt9IH07XG5cbiAgLy8gTGlzdCBwYXRocyB0byBjaGVja1xuICBjb25zdCBwYXRocyA9IE9iamVjdC5rZXlzKHJvdXRlcyk7XG5cbiAgLy8gQ2FzZS1pbnNlbnNpdGl2ZSBtYXRjaFxuICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBwYXRocykge1xuICAgIGlmIChjYW5kaWRhdGUudG9Mb3dlckNhc2UoKSA9PT0gcGF0aC50b0xvd2VyQ2FzZSgpKSByZXR1cm4geyBtZXRob2RzOiByb3V0ZXNbY2FuZGlkYXRlXSwgcGFyYW1zOiB7fSB9O1xuICB9XG5cbiAgLy8gUGF0aC1wYXJhbWV0ZXIgbWF0Y2hpbmdcbiAgY29uc3QgcGF0aFNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLycpO1xuXG4gIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIHBhdGhzKSB7XG4gICAgY29uc3QgY2FuZGlkYXRlU2VnbWVudHMgPSBjYW5kaWRhdGUuc3BsaXQoJy8nKTtcblxuICAgIC8vIEZpcnN0IGNoZWNrOiBsZW5ndGggbWF0Y2hcbiAgICBpZiAocGF0aFNlZ21lbnRzLmxlbmd0aCAhPT0gY2FuZGlkYXRlU2VnbWVudHMubGVuZ3RoKSBjb250aW51ZTtcblxuICAgIGNvbnN0IHBhcmFtczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nOyB9ID0ge307XG4gICAgZm9yIChsZXQgcyA9IDA7IHMgPCBwYXRoU2VnbWVudHMubGVuZ3RoOyBzKyspIHtcbiAgICAgIGNvbnN0IHBhdGhTZWdtZW50ID0gcGF0aFNlZ21lbnRzW3NdO1xuICAgICAgY29uc3QgY2FuZGlkYXRlU2VnbWVudCA9IGNhbmRpZGF0ZVNlZ21lbnRzW3NdO1xuICAgICAgaWYgKGNhbmRpZGF0ZVNlZ21lbnQuc3RhcnRzV2l0aCgneycpICYmIGNhbmRpZGF0ZVNlZ21lbnQuZW5kc1dpdGgoJ30nKSkge1xuICAgICAgICAvLyBQYXRoIHBhcmFtZXRlclxuICAgICAgICBjb25zdCBuYW1lID0gY2FuZGlkYXRlU2VnbWVudC5zbGljZSgxLCAtMSk7XG4gICAgICAgIHBhcmFtc1tuYW1lXSA9IHBhdGhTZWdtZW50O1xuICAgICAgfSBlbHNlIGlmIChwYXRoU2VnbWVudC50b0xvd2VyQ2FzZSgpICE9PSBjYW5kaWRhdGVTZWdtZW50LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzID09PSBwYXRoU2VnbWVudHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAvLyBNYXRjaGVkIGFsbCBzZWdtZW50c1xuICAgICAgICByZXR1cm4geyBtZXRob2RzOiByb3V0ZXNbY2FuZGlkYXRlXSwgcGFyYW1zIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgbWV0aG9kczogdW5kZWZpbmVkIH07XG59XG4iXX0=
|
|
252
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVdBLG9DQUtDO0FBTUQsMERBUUM7QUFNRCwwQ0FNQztBQU9ELDhCQWtCQztBQU1ELGtDQVVDO0FBRUQsa0NBaUNDO0FBS0QsOEJBWUM7QUFLRCw4QkFVQztBQTZERCxvQ0FHQztBQUVELGdDQXlDQztBQWhRRCxtQ0FBOEU7QUFDOUUsbUNBQXVFO0FBR3ZFLGlDQUFpRztBQUFyQyw0R0FBQSxtQkFBbUIsT0FBQTtBQUUvRTs7O0dBR0c7QUFDSCxTQUFnQixZQUFZLENBQUMsSUFBWTtJQUN2Qyw4Q0FBOEM7SUFDOUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlELGNBQWM7SUFDZCxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQix1QkFBdUIsQ0FBQyxLQUFxRDtJQUMzRixJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3RCLE1BQU0sTUFBTSxHQUFnQyxFQUFFLENBQUM7SUFDL0MsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtRQUN2QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0IsSUFBSSxLQUFLO1lBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixlQUFlLENBQUMsT0FBZ0Q7SUFD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QzdCLENBQUM7aUJBQU0sSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLEtBQUssZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztnQkFDeEUsTUFBTTtZQUNSLENBQUM7WUFFRCxJQUFJLENBQUMsS0FBSyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNsQyx1QkFBdUI7Z0JBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ2hELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQSUdhdGV3YXlQcm94eUV2ZW50LCBBUElHYXRld2F5UHJveHlFdmVudFYyIH0gZnJvbSAnYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBwYXJzZUNvb2tpZSBhcyBwYXJzZUNvb2tpZUhlYWRlciwgc3RyaW5naWZ5U2V0Q29va2llIH0gZnJvbSAnY29va2llJztcbmltcG9ydCB7IEFwaUdhdGV3YXlQcm94eUV2ZW50QW55LCBpc0FwaUdhdGV3YXlFdmVudFYyIH0gZnJvbSAnLi9ldmVudCc7XG5pbXBvcnQgeyBSZXF1ZXN0LCBSZXNwb25zZSwgUm91dGUsIFJvdXRlcyB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgeyBBcGlHYXRld2F5UHJveHlFdmVudEFueSwgQXBpR2F0ZXdheVByb3h5UmVzdWx0Rm9yLCBpc0FwaUdhdGV3YXlFdmVudFYyIH0gZnJvbSAnLi9ldmVudCc7XG5cbi8qKlxuICogRW5zdXJlcyB0aGUgcGF0aCBhbHdheXMgaGFzIGEgbGVhZGluZyBzbGFzaCBhbmQgbmV2ZXIgYSB0cmFpbGluZyBzbGFzaFxuICogQHBhcmFtIHBhdGggQVBJR2F0ZXdheVByb3h5RXZlbnQucGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhbmRhcmRQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIEdldCBwYXRoIHNlZ21lbnRzLCBmaWx0ZXJpbmcgb3V0IGFueSBibGFua3NcbiAgY29uc3Qgc2VnbWVudHMgPSBwYXRoLnNwbGl0KCcvJykuZmlsdGVyKChzZWdtZW50KSA9PiBzZWdtZW50KTtcbiAgLy8gUmV0dXJuIHBhdGhcbiAgcmV0dXJuIGAvJHtzZWdtZW50cy5qb2luKCcvJyl9YDtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIGEgbm9uLW51bGwgb2JqZWN0IGNvbnRhaW5pbmcgb25seSBxdWVyeS1zdHJpbmcgcGFyYW1ldGVycyB0aGF0IGhhdmUgYSB2YWx1ZS5cbiAqIEBwYXJhbSBxdWVyeSBBUElHYXRld2F5UHJveHlFdmVudC5xdWVyeVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhbmRhcmRRdWVyeVBhcmFtZXRlcnMocXVlcnk6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZDsgfSB8IG51bGwpOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7IH0ge1xuICBpZiAoIXF1ZXJ5KSByZXR1cm4ge307XG4gIGNvbnN0IHJlc3VsdDogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nOyB9ID0ge307XG4gIE9iamVjdC5rZXlzKHF1ZXJ5KS5mb3JFYWNoKChwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHF1ZXJ5W3BhcmFtZXRlcl07XG4gICAgaWYgKHZhbHVlKSByZXN1bHRbcGFyYW1ldGVyXSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIGFsbCBoZWFkZXJzIGhhdmUgYSB2YWx1ZS5cbiAqIEBwYXJhbSBoZWFkZXJzIEFQSUdhdGV3YXlQcm94eUV2ZW50LmhlYWRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YW5kYXJkSGVhZGVycyhoZWFkZXJzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQ7IH0pOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7IH0ge1xuICBjb25zdCByZXN1bHQ6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZzsgfSA9IHt9O1xuICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaGVhZGVycyB8fCB7fSkpIHtcbiAgICByZXN1bHRbbmFtZV0gPSB2YWx1ZSA/PyAnJztcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgYm9keSAoaWYgcHJlc2VudCkgZnJvbSBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgb3IgSlNPTiBzdHJpbmcuXG4gKiBJZiB0aGUgYm9keSBmYWlscyB0byBwYXJzZSBhcyBKU09uLCB0aGUgcmF3IGJvZHkgaXMgcmV0dXJuZWQuXG4gKiBAcGFyYW0gYm9keSBBUElHYXRld2F5UHJveHlFdmVudC5ib2R5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUJvZHkoYm9keTogc3RyaW5nIHwgbnVsbCwgaXNCYXNlNjRFbmNvZGVkOiBib29sZWFuLCBjb250ZW50VHlwZTogc3RyaW5nID0gJ2FwcGxpY2F0aW9uL2pzb24nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBzdHJpbmcge1xuICBpZiAoIWJvZHkpIHJldHVybiB7fTtcblxuICBjb25zdCBjb250ZW50ID0gaXNCYXNlNjRFbmNvZGVkID8gQnVmZmVyLmZyb20oYm9keSwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGY4JykgOiBib2R5O1xuXG4gIHRyeSB7XG4gICAgaWYgKChjb250ZW50VHlwZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMobmV3IFVSTFNlYXJjaFBhcmFtcyhjb250ZW50KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZmF1bHQgdG8gcGFyc2luZyBhcyBKU09OOlxuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoY29udGVudCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihgRXJyb3IgcGFyc2luZyByZXF1ZXN0IGJvZHk6ICR7ZX1gKTtcbiAgfVxuXG4gIC8vIEZhbGxiYWNrIHRvIHJldHVybmluZyB0aGUgcmF3IGJvZHlcbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8qKlxuICogUGFyc2VzIHRoZSBjb29raWUsIGlmIGFueSwgcmV0dXJuaW5nIGF0IG1pbmltdW0gYW4gZW1wdHkgb2JqZWN0LlxuICogQHBhcmFtIGhlYWRlcnMgQVBJR2F0ZXdheVByb3h5RXZlbnQuaGVhZGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDb29raWUoaGVhZGVyczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkOyB9KTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nOyB9IHtcbiAgY29uc3QgaGVhZGVyID0gZ2V0SGVhZGVyKCdDb29raWUnLCBoZWFkZXJzKTtcbiAgY29uc3QgdmFsdWVzID0gaGVhZGVyID8gcGFyc2VDb29raWVIZWFkZXIoaGVhZGVyKSA6IHt9O1xuXG4gIC8vIEVuc3VyZSB3ZSBkb24ndCByZXR1cm4gYW55IHVuZGVmaW5lZCB2YWx1ZXNcbiAgY29uc3QgcmVzdWx0OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7IH0gPSB7fTtcbiAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlcykpIHtcbiAgICBpZiAodmFsdWUpIHJlc3VsdFtuYW1lXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENvb2tpZShcbiAgcmVzcG9uc2U6IFJlc3BvbnNlLFxuICBtYXhBZ2U6IG51bWJlciB8IHVuZGVmaW5lZCA9IDYwICogNjAgKiAyNCAqIDM2NSxcbiAgZXhwaXJlczogRGF0ZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgc2VjdXJlOiBib29sZWFuID0gdHJ1ZSxcbiAgaHR0cE9ubHk6IGJvb2xlYW4gPSB0cnVlLFxuICBzYW1lU2l0ZTogJ3N0cmljdCcgfCAnbGF4JyB8ICdub25lJyA9ICdsYXgnLFxuKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICBpZiAoIXJlc3BvbnNlLmNvb2tpZXMpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgY29va2llczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmc7IH0gPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmVzcG9uc2UuY29va2llcykpIHtcbiAgICBjb29raWVzW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIGNvbnN0IGhlYWRlcjogc3RyaW5nW10gPSBbXTtcblxuICBPYmplY3Qua2V5cyhjb29raWVzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvb2tpZXNba2V5XTtcbiAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAvLyBJZiBleHBsaWNpdGx5IHVuc2V0LCBleHBpcmUgdGhlIGNvb2tpZSB2YWx1ZVxuICAgICAgaGVhZGVyLnB1c2goc3RyaW5naWZ5U2V0Q29va2llKHtcbiAgICAgICAgbmFtZToga2V5LCB2YWx1ZTogJycsIGV4cGlyZXM6IG5ldyBEYXRlKCksIHNlY3VyZSwgaHR0cE9ubHksIHNhbWVTaXRlLFxuICAgICAgfSkpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgIC8vIE90aGVyd2lzZSwgc2V0IGl0IG9ubHkgaWYgYSB2YWx1ZSB3YXMgZ2l2ZW5cbiAgICAgIGhlYWRlci5wdXNoKHN0cmluZ2lmeVNldENvb2tpZSh7XG4gICAgICAgIG5hbWU6IGtleSwgdmFsdWUsIG1heEFnZSwgZXhwaXJlcywgc2VjdXJlLCBodHRwT25seSwgc2FtZVNpdGUsXG4gICAgICB9KSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gaGVhZGVyO1xufVxuXG4vKipcbiAqIENhc2UtaW5zZW5zaXRpdmUgaGVhZGVyIGxvb2t1cFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyKG5hbWU6IHN0cmluZywgaGVhZGVyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQ7IH0gfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWhlYWRlcnMpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgLy8gRXhhY3QgbWF0Y2hcbiAgaWYgKGhlYWRlcnNbbmFtZV0pIHJldHVybiBoZWFkZXJzW25hbWVdO1xuXG4gIC8vIENhc2UtaW5zZW5zaXRpdmUgbWF0Y2hcbiAgY29uc3QgbG93ZXJjYXNlZDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQ7IH0gPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaGVhZGVycykpIHtcbiAgICBsb3dlcmNhc2VkW2tleS50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBsb3dlcmNhc2VkW25hbWUudG9Mb3dlckNhc2UoKV07XG59XG5cbi8qKlxuICogQ2FzZS1pbnNlbnNpdGl2ZSBoZWFkZXIgc2V0dGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0SGVhZGVyKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgaGVhZGVyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQ7IH0gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgaWYgKCFoZWFkZXJzKSByZXR1cm47XG4gIGxldCBzZXQgPSBmYWxzZTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICBpZiAobmFtZS50b0xvd2VyQ2FzZSgpID09PSBrZXkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgaGVhZGVyc1trZXldID0gdmFsdWU7XG4gICAgICBzZXQgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAoIXNldCkgaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNvb2tpZXNBcnJheShjb29raWVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBpZiAoIWNvb2tpZXMpIHJldHVybiB7fTtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGNvb2tpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICBjb25zdCBzZXBhcmF0b3IgPSBlbnRyeS5pbmRleE9mKCc9Jyk7XG4gICAgaWYgKHNlcGFyYXRvciA9PT0gLTEpIHJldHVybjtcbiAgICBjb25zdCBuYW1lID0gZW50cnkuc2xpY2UoMCwgc2VwYXJhdG9yKTtcbiAgICBjb25zdCB2YWx1ZSA9IGVudHJ5LnNsaWNlKHNlcGFyYXRvciArIDEpO1xuICAgIGlmIChuYW1lKSByZXN1bHRbbmFtZV0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHN0YW5kYXJkUGF0aFBhcmFtZXRlcnMocGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGlmICghcGFyYW1zKSByZXR1cm4ge307XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBPYmplY3QuZW50cmllcyhwYXJhbXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGlmICh2YWx1ZSkgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVxdWVzdFYxKGV2ZW50OiBBUElHYXRld2F5UHJveHlFdmVudCk6IFJlcXVlc3Qge1xuICByZXR1cm4ge1xuICAgIG1ldGhvZDogZXZlbnQuaHR0cE1ldGhvZCxcbiAgICBwYXRoOiBzdGFuZGFyZFBhdGgoZXZlbnQucGF0aCksXG4gICAgcXVlcnk6IHN0YW5kYXJkUXVlcnlQYXJhbWV0ZXJzKGV2ZW50LnF1ZXJ5U3RyaW5nUGFyYW1ldGVycyksXG4gICAgaGVhZGVyczogc3RhbmRhcmRIZWFkZXJzKGV2ZW50LmhlYWRlcnMpLFxuICAgIGJvZHk6IHBhcnNlQm9keShldmVudC5ib2R5LCBldmVudC5pc0Jhc2U2NEVuY29kZWQsIGdldEhlYWRlcignQ29udGVudC1UeXBlJywgZXZlbnQuaGVhZGVycykpLFxuICAgIGNvb2tpZXM6IHBhcnNlQ29va2llKGV2ZW50LmhlYWRlcnMpLFxuICAgIHBhdGhQYXJhbWV0ZXJzOiB7fSxcbiAgICBjb250ZXh0OiB7IGV2ZW50IH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVxdWVzdFYyKGV2ZW50OiBBUElHYXRld2F5UHJveHlFdmVudFYyKTogUmVxdWVzdCB7XG4gIGNvbnN0IGhlYWRlcnMgPSBzdGFuZGFyZEhlYWRlcnMoZXZlbnQuaGVhZGVycyk7XG4gIGNvbnN0IGNvb2tpZXMgPSB7XG4gICAgLi4ucGFyc2VDb29raWUoZXZlbnQuaGVhZGVycyksXG4gICAgLi4ucGFyc2VDb29raWVzQXJyYXkoZXZlbnQuY29va2llcyksXG4gIH07XG4gIGNvbnN0IHF1ZXJ5ID0gZXZlbnQucXVlcnlTdHJpbmdQYXJhbWV0ZXJzXG4gICAgPz8gKGV2ZW50LnJhd1F1ZXJ5U3RyaW5nID8gT2JqZWN0LmZyb21FbnRyaWVzKG5ldyBVUkxTZWFyY2hQYXJhbXMoZXZlbnQucmF3UXVlcnlTdHJpbmcpKSA6IG51bGwpO1xuXG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiBldmVudC5yZXF1ZXN0Q29udGV4dC5odHRwLm1ldGhvZCxcbiAgICBwYXRoOiBzdGFuZGFyZFBhdGgoZXZlbnQucmF3UGF0aCksXG4gICAgcXVlcnk6IHN0YW5kYXJkUXVlcnlQYXJhbWV0ZXJzKHF1ZXJ5KSxcbiAgICBoZWFkZXJzLFxuICAgIGJvZHk6IHBhcnNlQm9keShldmVudC5ib2R5ID8/IG51bGwsIGV2ZW50LmlzQmFzZTY0RW5jb2RlZCwgZ2V0SGVhZGVyKCdjb250ZW50LXR5cGUnLCBoZWFkZXJzKSksXG4gICAgY29va2llcyxcbiAgICBwYXRoUGFyYW1ldGVyczogc3RhbmRhcmRQYXRoUGFyYW1ldGVycyhldmVudC5wYXRoUGFyYW1ldGVycyksXG4gICAgY29udGV4dDogeyBldmVudCB9LFxuICB9O1xufVxuXG4vKipcbiAqIFBhcnNlcyBhIFJFU1QgQVBJICh2MSkgb3IgSFRUUCBBUEkgLyBGdW5jdGlvbiBVUkwgKHYyKSBwcm94eSBldmVudCBpbnRvIGEgUmVxdWVzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVxdWVzdChldmVudDogQXBpR2F0ZXdheVByb3h5RXZlbnRBbnkpOiBSZXF1ZXN0IHtcbiAgaWYgKGlzQXBpR2F0ZXdheUV2ZW50VjIoZXZlbnQpKSByZXR1cm4gcGFyc2VSZXF1ZXN0VjIoZXZlbnQpO1xuICByZXR1cm4gcGFyc2VSZXF1ZXN0VjEoZXZlbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hSb3V0ZShyb3V0ZXM6IFJvdXRlcywgcGF0aDogc3RyaW5nKTogeyBtZXRob2RzOiBSb3V0ZSB8IHVuZGVmaW5lZCwgcGFyYW1zPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nOyB9OyB9IHtcbiAgLy8gRGlyZWN0IG1hdGNoXG4gIGlmIChyb3V0ZXNbcGF0aF0pIHJldHVybiB7IG1ldGhvZHM6IHJvdXRlc1twYXRoXSwgcGFyYW1zOiB7fSB9O1xuXG4gIC8vIExpc3QgcGF0aHMgdG8gY2hlY2tcbiAgY29uc3QgcGF0aHMgPSBPYmplY3Qua2V5cyhyb3V0ZXMpO1xuXG4gIC8vIENhc2UtaW5zZW5zaXRpdmUgbWF0Y2hcbiAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgcGF0aHMpIHtcbiAgICBpZiAoY2FuZGlkYXRlLnRvTG93ZXJDYXNlKCkgPT09IHBhdGgudG9Mb3dlckNhc2UoKSkgcmV0dXJuIHsgbWV0aG9kczogcm91dGVzW2NhbmRpZGF0ZV0sIHBhcmFtczoge30gfTtcbiAgfVxuXG4gIC8vIFBhdGgtcGFyYW1ldGVyIG1hdGNoaW5nXG4gIGNvbnN0IHBhdGhTZWdtZW50cyA9IHBhdGguc3BsaXQoJy8nKTtcblxuICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBwYXRocykge1xuICAgIGNvbnN0IGNhbmRpZGF0ZVNlZ21lbnRzID0gY2FuZGlkYXRlLnNwbGl0KCcvJyk7XG5cbiAgICAvLyBGaXJzdCBjaGVjazogbGVuZ3RoIG1hdGNoXG4gICAgaWYgKHBhdGhTZWdtZW50cy5sZW5ndGggIT09IGNhbmRpZGF0ZVNlZ21lbnRzLmxlbmd0aCkgY29udGludWU7XG5cbiAgICBjb25zdCBwYXJhbXM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZzsgfSA9IHt9O1xuICAgIGZvciAobGV0IHMgPSAwOyBzIDwgcGF0aFNlZ21lbnRzLmxlbmd0aDsgcysrKSB7XG4gICAgICBjb25zdCBwYXRoU2VnbWVudCA9IHBhdGhTZWdtZW50c1tzXTtcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZVNlZ21lbnQgPSBjYW5kaWRhdGVTZWdtZW50c1tzXTtcbiAgICAgIGlmIChjYW5kaWRhdGVTZWdtZW50LnN0YXJ0c1dpdGgoJ3snKSAmJiBjYW5kaWRhdGVTZWdtZW50LmVuZHNXaXRoKCd9JykpIHtcbiAgICAgICAgLy8gUGF0aCBwYXJhbWV0ZXJcbiAgICAgICAgY29uc3QgbmFtZSA9IGNhbmRpZGF0ZVNlZ21lbnQuc2xpY2UoMSwgLTEpO1xuICAgICAgICBwYXJhbXNbbmFtZV0gPSBwYXRoU2VnbWVudDtcbiAgICAgIH0gZWxzZSBpZiAocGF0aFNlZ21lbnQudG9Mb3dlckNhc2UoKSAhPT0gY2FuZGlkYXRlU2VnbWVudC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAocyA9PT0gcGF0aFNlZ21lbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgLy8gTWF0Y2hlZCBhbGwgc2VnbWVudHNcbiAgICAgICAgcmV0dXJuIHsgbWV0aG9kczogcm91dGVzW2NhbmRpZGF0ZV0sIHBhcmFtcyB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IG1ldGhvZHM6IHVuZGVmaW5lZCB9O1xufVxuIl19
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -36,8 +36,10 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
36
36
|
};
|
|
37
37
|
})();
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.types = exports.helpers = void 0;
|
|
39
|
+
exports.types = exports.helpers = exports.isApiGatewayEventV2 = void 0;
|
|
40
40
|
__exportStar(require("./handler"), exports);
|
|
41
|
+
var event_1 = require("./event");
|
|
42
|
+
Object.defineProperty(exports, "isApiGatewayEventV2", { enumerable: true, get: function () { return event_1.isApiGatewayEventV2; } });
|
|
41
43
|
exports.helpers = __importStar(require("./helpers"));
|
|
42
44
|
exports.types = __importStar(require("./types"));
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNENBQTBCO0FBQzFCLGlDQUFpRztBQUFyQyw0R0FBQSxtQkFBbUIsT0FBQTtBQUMvRSxxREFBcUM7QUFDckMsaURBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9oYW5kbGVyJztcbmV4cG9ydCB7IEFwaUdhdGV3YXlQcm94eUV2ZW50QW55LCBBcGlHYXRld2F5UHJveHlSZXN1bHRGb3IsIGlzQXBpR2F0ZXdheUV2ZW50VjIgfSBmcm9tICcuL2V2ZW50JztcbmV4cG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnLi9oZWxwZXJzJztcbmV4cG9ydCAqIGFzIHR5cGVzIGZyb20gJy4vdHlwZXMnO1xuIl19
|
package/dist/result.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { APIGatewayProxyResult, APIGatewayProxyStructuredResultV2 } from 'aws-lambda';
|
|
2
|
+
import { Response } from './types';
|
|
3
|
+
export declare function toApiGatewayResultV1(response: Response): APIGatewayProxyResult;
|
|
4
|
+
export declare function toApiGatewayResultV2(response: Response): APIGatewayProxyStructuredResultV2;
|
package/dist/result.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toApiGatewayResultV1 = toApiGatewayResultV1;
|
|
4
|
+
exports.toApiGatewayResultV2 = toApiGatewayResultV2;
|
|
5
|
+
const helpers_1 = require("./helpers");
|
|
6
|
+
function prepareResponseBody(response) {
|
|
7
|
+
const headers = { ...(response.headers || {}) };
|
|
8
|
+
let body = '';
|
|
9
|
+
if (typeof response.body === 'string') {
|
|
10
|
+
if (!(0, helpers_1.getHeader)('Content-Type', headers))
|
|
11
|
+
(0, helpers_1.setHeader)('Content-Type', 'text/plain', headers);
|
|
12
|
+
body = response.body;
|
|
13
|
+
}
|
|
14
|
+
else if (response.body) {
|
|
15
|
+
body = JSON.stringify(response.body);
|
|
16
|
+
}
|
|
17
|
+
return { headers, body };
|
|
18
|
+
}
|
|
19
|
+
function toApiGatewayResultV1(response) {
|
|
20
|
+
const { headers, body } = prepareResponseBody(response);
|
|
21
|
+
const result = {
|
|
22
|
+
statusCode: response.statusCode ?? 200,
|
|
23
|
+
headers,
|
|
24
|
+
body,
|
|
25
|
+
};
|
|
26
|
+
const cookieHeaders = (0, helpers_1.buildCookie)(response);
|
|
27
|
+
if (cookieHeaders) {
|
|
28
|
+
result.multiValueHeaders = { 'Set-Cookie': cookieHeaders };
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
function toApiGatewayResultV2(response) {
|
|
33
|
+
const { headers, body } = prepareResponseBody(response);
|
|
34
|
+
const result = {
|
|
35
|
+
statusCode: response.statusCode ?? 200,
|
|
36
|
+
headers,
|
|
37
|
+
body,
|
|
38
|
+
};
|
|
39
|
+
const cookieHeaders = (0, helpers_1.buildCookie)(response);
|
|
40
|
+
if (cookieHeaders) {
|
|
41
|
+
result.cookies = cookieHeaders;
|
|
42
|
+
}
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdWx0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Jlc3VsdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFCQSxvREFlQztBQUVELG9EQWVDO0FBakRELHVDQUE4RDtBQUc5RCxTQUFTLG1CQUFtQixDQUFDLFFBQWtCO0lBQzdDLE1BQU0sT0FBTyxHQUFHLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNoRCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7SUFFZCxJQUFJLE9BQU8sUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBQSxtQkFBUyxFQUFDLGNBQWMsRUFBRSxPQUFPLENBQUM7WUFBRSxJQUFBLG1CQUFTLEVBQUMsY0FBYyxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMxRixJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztJQUN2QixDQUFDO1NBQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzNCLENBQUM7QUFFRCxTQUFnQixvQkFBb0IsQ0FBQyxRQUFrQjtJQUNyRCxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXhELE1BQU0sTUFBTSxHQUEwQjtRQUNwQyxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsSUFBSSxHQUFHO1FBQ3RDLE9BQU87UUFDUCxJQUFJO0tBQ0wsQ0FBQztJQUVGLE1BQU0sYUFBYSxHQUFHLElBQUEscUJBQVcsRUFBQyxRQUFRLENBQUMsQ0FBQztJQUM1QyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsQ0FBQztJQUM3RCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQWdCLG9CQUFvQixDQUFDLFFBQWtCO0lBQ3JELE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFeEQsTUFBTSxNQUFNLEdBQXNDO1FBQ2hELFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxJQUFJLEdBQUc7UUFDdEMsT0FBTztRQUNQLElBQUk7S0FDTCxDQUFDO0lBRUYsTUFBTSxhQUFhLEdBQUcsSUFBQSxxQkFBVyxFQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUM7SUFDakMsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBUElHYXRld2F5UHJveHlSZXN1bHQsXG4gIEFQSUdhdGV3YXlQcm94eVN0cnVjdHVyZWRSZXN1bHRWMixcbn0gZnJvbSAnYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBidWlsZENvb2tpZSwgZ2V0SGVhZGVyLCBzZXRIZWFkZXIgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgUmVzcG9uc2UgfSBmcm9tICcuL3R5cGVzJztcblxuZnVuY3Rpb24gcHJlcGFyZVJlc3BvbnNlQm9keShyZXNwb25zZTogUmVzcG9uc2UpOiB7IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47IGJvZHk6IHN0cmluZzsgfSB7XG4gIGNvbnN0IGhlYWRlcnMgPSB7IC4uLihyZXNwb25zZS5oZWFkZXJzIHx8IHt9KSB9O1xuICBsZXQgYm9keSA9ICcnO1xuXG4gIGlmICh0eXBlb2YgcmVzcG9uc2UuYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoIWdldEhlYWRlcignQ29udGVudC1UeXBlJywgaGVhZGVycykpIHNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nLCBoZWFkZXJzKTtcbiAgICBib2R5ID0gcmVzcG9uc2UuYm9keTtcbiAgfSBlbHNlIGlmIChyZXNwb25zZS5ib2R5KSB7XG4gICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmJvZHkpO1xuICB9XG5cbiAgcmV0dXJuIHsgaGVhZGVycywgYm9keSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9BcGlHYXRld2F5UmVzdWx0VjEocmVzcG9uc2U6IFJlc3BvbnNlKTogQVBJR2F0ZXdheVByb3h5UmVzdWx0IHtcbiAgY29uc3QgeyBoZWFkZXJzLCBib2R5IH0gPSBwcmVwYXJlUmVzcG9uc2VCb2R5KHJlc3BvbnNlKTtcblxuICBjb25zdCByZXN1bHQ6IEFQSUdhdGV3YXlQcm94eVJlc3VsdCA9IHtcbiAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXNDb2RlID8/IDIwMCxcbiAgICBoZWFkZXJzLFxuICAgIGJvZHksXG4gIH07XG5cbiAgY29uc3QgY29va2llSGVhZGVycyA9IGJ1aWxkQ29va2llKHJlc3BvbnNlKTtcbiAgaWYgKGNvb2tpZUhlYWRlcnMpIHtcbiAgICByZXN1bHQubXVsdGlWYWx1ZUhlYWRlcnMgPSB7ICdTZXQtQ29va2llJzogY29va2llSGVhZGVycyB9O1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQXBpR2F0ZXdheVJlc3VsdFYyKHJlc3BvbnNlOiBSZXNwb25zZSk6IEFQSUdhdGV3YXlQcm94eVN0cnVjdHVyZWRSZXN1bHRWMiB7XG4gIGNvbnN0IHsgaGVhZGVycywgYm9keSB9ID0gcHJlcGFyZVJlc3BvbnNlQm9keShyZXNwb25zZSk7XG5cbiAgY29uc3QgcmVzdWx0OiBBUElHYXRld2F5UHJveHlTdHJ1Y3R1cmVkUmVzdWx0VjIgPSB7XG4gICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzQ29kZSA/PyAyMDAsXG4gICAgaGVhZGVycyxcbiAgICBib2R5LFxuICB9O1xuXG4gIGNvbnN0IGNvb2tpZUhlYWRlcnMgPSBidWlsZENvb2tpZShyZXNwb25zZSk7XG4gIGlmIChjb29raWVIZWFkZXJzKSB7XG4gICAgcmVzdWx0LmNvb2tpZXMgPSBjb29raWVIZWFkZXJzO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==
|
package/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { APIGatewayProxyEvent } from "aws-lambda";
|
|
2
1
|
import z from "zod/v4";
|
|
2
|
+
import { ApiGatewayProxyEventAny } from './event';
|
|
3
3
|
export interface Request<B = any> {
|
|
4
4
|
method: string;
|
|
5
5
|
path: string;
|
|
@@ -9,7 +9,7 @@ export interface Request<B = any> {
|
|
|
9
9
|
pathParameters: Record<string, string>;
|
|
10
10
|
body: B;
|
|
11
11
|
context: {
|
|
12
|
-
event:
|
|
12
|
+
event: ApiGatewayProxyEventAny;
|
|
13
13
|
[key: string]: any;
|
|
14
14
|
};
|
|
15
15
|
}
|
package/dist/types.js
CHANGED
|
@@ -15,4 +15,4 @@ class ApiError extends Error {
|
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
exports.ApiError = ApiError;
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBd0RBLE1BQWEsUUFBUyxTQUFRLEtBQUs7SUFDakMsVUFBVSxDQUFTO0lBQ25CLElBQUksQ0FBVTtJQUNkLE9BQU8sQ0FBMEI7SUFFakMsWUFBWSxVQUFrQixFQUFFLElBQWEsRUFBRSxPQUFnQztRQUM3RSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBRXZCLDJDQUEyQztRQUMzQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBZEQsNEJBY0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeiBmcm9tIFwiem9kL3Y0XCI7XG5pbXBvcnQgeyBBcGlHYXRld2F5UHJveHlFdmVudEFueSB9IGZyb20gJy4vZXZlbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3Q8QiA9IGFueT4ge1xuICBtZXRob2Q6IHN0cmluZyxcbiAgcGF0aDogc3RyaW5nLFxuICBxdWVyeTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgY29va2llczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcGF0aFBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGJvZHk6IEI7XG4gIGNvbnRleHQ6IHtcbiAgICBldmVudDogQXBpR2F0ZXdheVByb3h5RXZlbnRBbnk7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9LFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlPEIgPSBhbnk+IHtcbiAgc3RhdHVzQ29kZT86IG51bWJlcjtcbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGNvb2tpZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBib2R5PzogQjtcbn1cblxudHlwZSBBbnlTY2hlbWEgPSB6LlpvZFR5cGU8YW55LCBhbnksIGFueT47XG5leHBvcnQgaW50ZXJmYWNlIEhhbmRsZXI8U1JlcSBleHRlbmRzIEFueVNjaGVtYSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCwgU1JlcyBleHRlbmRzIEFueVNjaGVtYSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4ge1xuICByZXF1ZXN0Pzoge1xuICAgIGJvZHk/OiBTUmVxO1xuICAgIGhlYWRlcnM/OiB6LlpvZE9iamVjdDxhbnk+O1xuICAgIGNvb2tpZXM/OiB6LlpvZE9iamVjdDxhbnk+O1xuICAgIHBhdGhQYXJhbWV0ZXJzPzogei5ab2RPYmplY3Q8YW55PjtcbiAgICBxdWVyeT86IHouWm9kT2JqZWN0PGFueT47XG4gIH07XG4gIHJlc3BvbnNlPzoge1xuICAgIGJvZHk/OiBTUmVzO1xuICAgIGhlYWRlcnM/OiB6LlpvZE9iamVjdDxhbnk+O1xuICAgIGNvb2tpZXM/OiB6LlpvZE9iamVjdDxhbnk+O1xuICB9O1xuICBoYW5kbGVyOiAocmVxdWVzdDogUmVxdWVzdDx6LmluZmVyPFNSZXE+PikgPT4gUHJvbWlzZTxSZXNwb25zZTx6LmluZmVyPFNSZXM+Pj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGUge1xuICBHRVQ/OiBIYW5kbGVyPHVuZGVmaW5lZCwgQW55U2NoZW1hPjtcbiAgUE9TVD86IEhhbmRsZXI8QW55U2NoZW1hLCBBbnlTY2hlbWE+O1xuICBQVVQ/OiBIYW5kbGVyPEFueVNjaGVtYSwgQW55U2NoZW1hPjtcbiAgREVMRVRFPzogSGFuZGxlcjx1bmRlZmluZWQsIEFueVNjaGVtYT47XG4gIFBBVENIPzogSGFuZGxlcjx1bmRlZmluZWQsIEFueVNjaGVtYT47XG4gIE9QVElPTlM/OiBIYW5kbGVyPHVuZGVmaW5lZCwgQW55U2NoZW1hPjtcbiAgSEVBRD86IEhhbmRsZXI8dW5kZWZpbmVkLCBBbnlTY2hlbWE+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlcyB7XG4gIFtwYXRoOiBzdHJpbmddOiBSb3V0ZTtcbn1cblxuZXhwb3J0IGNsYXNzIEFwaUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBzdGF0dXNDb2RlOiBudW1iZXI7XG4gIGJvZHk6IHVua25vd247XG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKHN0YXR1c0NvZGU6IG51bWJlciwgYm9keTogdW5rbm93biwgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcbiAgICBzdXBlcih0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycgPyBib2R5IDogSlNPTi5zdHJpbmdpZnkoYm9keSwgbnVsbCwgMikpO1xuICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xuXG4gICAgLy8gUmVxdWlyZWQgZm9yIGluc3RhbmNlb2YgdG8gd29yayBwcm9wZXJseVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBBcGlFcnJvci5wcm90b3R5cGUpO1xuICB9XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scloud/lambda-api",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.5",
|
|
4
4
|
"description": "Lambda handler for API Gateway proxy requests",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -49,9 +49,8 @@
|
|
|
49
49
|
"@eslint/js": "*",
|
|
50
50
|
"@tsconfig/node24": "*",
|
|
51
51
|
"@types/chai": "*",
|
|
52
|
-
"@types/cookie": "*",
|
|
53
52
|
"@types/mocha": "*",
|
|
54
|
-
"@types/node": "
|
|
53
|
+
"@types/node": "^24",
|
|
55
54
|
"@types/nunjucks": "*",
|
|
56
55
|
"axios": "*",
|
|
57
56
|
"chai": "*",
|