@tsed/platform-serverless 6.83.0 → 6.86.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/builder/PlatformServerlessHandler.d.ts +2 -2
- package/lib/{index-9055b0a3.js → index-a6c91998.js} +10 -9
- package/lib/index-a6c91998.js.map +1 -0
- package/lib/{index-bc7d5a4b.js → index-a7574150.js} +9 -8
- package/lib/index-a7574150.js.map +1 -0
- package/lib/{index-236f098e.js → index-b255dcf0.js} +2 -2
- package/lib/{index-236f098e.js.map → index-b255dcf0.js.map} +1 -1
- package/lib/{index-7e9dc924.js → index-eeb85309.js} +2 -2
- package/lib/{index-7e9dc924.js.map → index-eeb85309.js.map} +1 -1
- package/lib/index.js +1 -2
- package/lib/index.js.map +1 -1
- package/lib/index.modern.js +1 -2
- package/lib/index.modern.js.map +1 -1
- package/package.json +8 -8
- package/lib/index-9055b0a3.js.map +0 -1
- package/lib/index-bc7d5a4b.js.map +0 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { InjectorService, TokenProvider } from "@tsed/di";
|
|
2
2
|
import { PlatformParams } from "@tsed/platform-params";
|
|
3
|
-
import { PlatformExceptions } from "@tsed/platform-exceptions";
|
|
3
|
+
import type { PlatformExceptions } from "@tsed/platform-exceptions";
|
|
4
4
|
import { ServerlessContext } from "../domain/ServerlessContext";
|
|
5
5
|
export declare class PlatformServerlessHandler {
|
|
6
6
|
protected injector: InjectorService;
|
|
7
7
|
protected params: PlatformParams;
|
|
8
|
-
protected exceptionsManager: PlatformExceptions
|
|
8
|
+
protected exceptionsManager: Promise<PlatformExceptions>;
|
|
9
9
|
createHandler(token: TokenProvider, propertyKey: string | symbol): ($ctx: ServerlessContext) => Promise<{
|
|
10
10
|
statusCode: number;
|
|
11
11
|
body: any;
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { Inject, InjectorService, Injectable, ProviderScope, DIContext, createContainer, setLoggerLevel, DITest } from '@tsed/di';
|
|
1
|
+
import { Inject, InjectorService, LazyInject, Injectable, ProviderScope, DIContext, createContainer, setLoggerLevel, DITest } from '@tsed/di';
|
|
2
2
|
import { getStatusMessage, getOperationsRoutes, JsonEntityStore } from '@tsed/schema';
|
|
3
3
|
import { PlatformParams, DeserializerPipe, ValidationPipe } from '@tsed/platform-params';
|
|
4
4
|
import { __decorate, __metadata } from 'tslib';
|
|
5
5
|
import { AnyToPromise, isSerializable, getValue, Env } from '@tsed/core';
|
|
6
6
|
import { serialize } from '@tsed/json-mapper';
|
|
7
|
-
import { PlatformExceptions } from '@tsed/platform-exceptions';
|
|
8
7
|
import { $log } from '@tsed/logger';
|
|
9
8
|
import encodeUrl from 'encodeurl';
|
|
10
9
|
import * as mime from 'mime';
|
|
@@ -117,7 +116,8 @@ let PlatformServerlessHandler = class PlatformServerlessHandler {
|
|
|
117
116
|
_this.processResult(result, $ctx);
|
|
118
117
|
} catch (er) {
|
|
119
118
|
$ctx.response.status(500).body(er);
|
|
120
|
-
await _this.exceptionsManager
|
|
119
|
+
const exceptions = await _this.exceptionsManager;
|
|
120
|
+
await exceptions.catch(er, $ctx);
|
|
121
121
|
}
|
|
122
122
|
});
|
|
123
123
|
await _this.injector.emit("$onResponse", $ctx);
|
|
@@ -179,7 +179,7 @@ __decorate([Inject(), __metadata("design:type", InjectorService)], PlatformServe
|
|
|
179
179
|
|
|
180
180
|
__decorate([Inject(), __metadata("design:type", PlatformParams)], PlatformServerlessHandler.prototype, "params", void 0);
|
|
181
181
|
|
|
182
|
-
__decorate([
|
|
182
|
+
__decorate([LazyInject("PlatformExceptions", () => import('@tsed/platform-exceptions')), __metadata("design:type", Promise)], PlatformServerlessHandler.prototype, "exceptionsManager", void 0);
|
|
183
183
|
|
|
184
184
|
PlatformServerlessHandler = __decorate([Injectable({
|
|
185
185
|
scope: ProviderScope.SINGLETON,
|
|
@@ -648,7 +648,7 @@ class PlatformServerless {
|
|
|
648
648
|
token,
|
|
649
649
|
propertyName,
|
|
650
650
|
method,
|
|
651
|
-
|
|
651
|
+
url
|
|
652
652
|
} = operationRoute; // istanbul ignore next
|
|
653
653
|
|
|
654
654
|
if (method === "USE") {
|
|
@@ -656,7 +656,7 @@ class PlatformServerless {
|
|
|
656
656
|
}
|
|
657
657
|
|
|
658
658
|
const callback = this.callback(token, propertyName);
|
|
659
|
-
(_this$_router = this._router) == null ? void 0 : _this$_router.on(method,
|
|
659
|
+
(_this$_router = this._router) == null ? void 0 : _this$_router.on(method, url, callback);
|
|
660
660
|
return _extends({}, callbacks, {
|
|
661
661
|
[operationId]: callback
|
|
662
662
|
});
|
|
@@ -711,9 +711,10 @@ class PlatformServerless {
|
|
|
711
711
|
if (!this._router) {
|
|
712
712
|
const {
|
|
713
713
|
default: FindMyMay
|
|
714
|
-
} = await import('./index-
|
|
714
|
+
} = await import('./index-b255dcf0.js').then(function (n) { return n.i; });
|
|
715
715
|
this._router = FindMyMay({
|
|
716
|
-
caseSensitive: false
|
|
716
|
+
caseSensitive: false,
|
|
717
|
+
ignoreTrailingSlash: true
|
|
717
718
|
});
|
|
718
719
|
this.callbacks();
|
|
719
720
|
}
|
|
@@ -951,4 +952,4 @@ PlatformServerlessTest.callbacks = {};
|
|
|
951
952
|
PlatformServerlessTest.request = LambdaClientRequest;
|
|
952
953
|
|
|
953
954
|
export { LambdaClientRequest as L, PlatformServerlessHandler as P, ServerlessContext as S, _extends as _, PlatformServerless as a, PlatformServerlessTest as b, ServerlessResponse as c };
|
|
954
|
-
//# sourceMappingURL=index-
|
|
955
|
+
//# sourceMappingURL=index-a6c91998.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-a6c91998.js","sources":["../src/utils/setResponseHeaders.ts","../src/builder/PlatformServerlessHandler.ts","../src/domain/ServerlessRequest.ts","../src/domain/ServerlessResponse.ts","../src/domain/ServerlessContext.ts","../src/utils/getRequestId.ts","../src/builder/PlatformServerless.ts","../src/services/PlatformServerlessTest.ts"],"sourcesContent":["import {JsonHeader} from \"@tsed/schema\";\nimport {ServerlessContext} from \"../domain/ServerlessContext\";\nimport {HeaderValue} from \"../domain/ServerlessResponse\";\n\nfunction mergeHeaders(specHeaders: Record<string, JsonHeader & {example: string}>, headers: Record<string, HeaderValue>) {\n return Object.entries(specHeaders).reduce((headers, [key, item]) => {\n key = key.toLowerCase();\n return {\n ...headers,\n [key]: headers[key] === undefined ? String(item.example) : headers[key]\n };\n }, headers);\n}\n\n/**\n * @ignore\n */\nexport function setResponseHeaders(ctx: ServerlessContext) {\n const {response, endpoint} = ctx;\n const operation = endpoint.operation!;\n\n if (response.isDone()) {\n return;\n }\n\n if (!response.hasStatus()) {\n // apply status only if the isn't already modified\n response.status(operation.getStatus());\n }\n\n const statusCode = response.statusCode;\n const headers = operation.getHeadersOf(response.statusCode);\n const mergedHeaders = mergeHeaders(headers, response.getHeaders());\n\n response.setHeaders(mergedHeaders);\n\n if (operation.isRedirection(statusCode)) {\n response.redirect(statusCode, String(mergedHeaders[\"location\"]));\n }\n}\n","import {AnyPromiseResult, AnyToPromise, isSerializable} from \"@tsed/core\";\nimport {BaseContext, Inject, Injectable, InjectorService, LazyInject, ProviderScope, TokenProvider} from \"@tsed/di\";\nimport {serialize} from \"@tsed/json-mapper\";\nimport {DeserializerPipe, PlatformParams, ValidationPipe} from \"@tsed/platform-params\";\nimport type {PlatformExceptions} from \"@tsed/platform-exceptions\";\nimport {ServerlessContext} from \"../domain/ServerlessContext\";\nimport {setResponseHeaders} from \"../utils/setResponseHeaders\";\n\n@Injectable({\n scope: ProviderScope.SINGLETON,\n imports: [DeserializerPipe, ValidationPipe]\n})\nexport class PlatformServerlessHandler {\n @Inject()\n protected injector: InjectorService;\n\n @Inject()\n protected params: PlatformParams;\n\n @LazyInject(\"PlatformExceptions\", () => import(\"@tsed/platform-exceptions\"))\n protected exceptionsManager: Promise<PlatformExceptions>;\n\n createHandler(token: TokenProvider, propertyKey: string | symbol) {\n const promisedHandler = this.params.compileHandler({\n token,\n propertyKey\n });\n\n return async ($ctx: ServerlessContext) => {\n await this.injector.emit(\"$onRequest\", $ctx);\n\n await this.injector.runInContext($ctx, async () => {\n try {\n const resolver = new AnyToPromise();\n const handler = await promisedHandler;\n const result = await resolver.call(() => handler({$ctx}));\n\n this.processResult(result, $ctx);\n } catch (er) {\n $ctx.response.status(500).body(er);\n const exceptions = await this.exceptionsManager;\n\n await exceptions.catch(er, ($ctx as unknown) as BaseContext);\n }\n });\n\n await this.injector.emit(\"$onResponse\", $ctx);\n\n return this.flush($ctx);\n };\n }\n\n private flush($ctx: ServerlessContext) {\n setResponseHeaders($ctx);\n\n let body: any = $ctx.response.getBody();\n\n if (isSerializable(body)) {\n $ctx.response.set(\"content-type\", \"application/json\");\n body = JSON.stringify(body);\n }\n\n const response = {\n statusCode: $ctx.response.getStatus(),\n body: body === undefined ? \"\" : body,\n headers: {\n ...$ctx.response.getHeaders(),\n \"x-request-id\": $ctx.id\n },\n isBase64Encoded: false\n };\n\n $ctx.destroy();\n\n return response;\n }\n\n private processResult({status, headers, data}: AnyPromiseResult, $ctx: ServerlessContext) {\n if (status) {\n $ctx.response.status(status);\n }\n\n if (headers) {\n $ctx.response.setHeaders(headers);\n }\n\n if (data !== undefined) {\n data = $ctx.response.getStatus() !== 204 ? data : \"\";\n\n if (isSerializable(data)) {\n data = serialize(data, {\n ...$ctx.endpoint.getResponseOptions($ctx.response.getStatus()),\n useAlias: true,\n endpoint: true\n });\n }\n\n $ctx.response.body(data);\n }\n }\n}\n","import type {APIGatewayEventDefaultAuthorizerContext, APIGatewayProxyEventBase, Context} from \"aws-lambda\";\nimport {getValue} from \"@tsed/core\";\n\nexport interface ServerlessRequestOptions {\n event: APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>;\n context: Context;\n}\n/**\n * @platform\n */\nexport class ServerlessRequest {\n readonly raw: APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>;\n\n constructor({event}: ServerlessRequestOptions) {\n this.raw = event;\n }\n\n get secure(): boolean {\n return true;\n }\n\n get host(): string {\n return this.get(\"host\");\n }\n\n get protocol(): string {\n return \"https\";\n }\n\n /**\n * Get the url of the request.\n *\n * Is equivalent of `express.response.originalUrl || express.response.url`.\n */\n get url(): string {\n return this.raw.path;\n }\n\n get headers() {\n return this.raw.headers;\n }\n\n get method(): string {\n return this.raw.httpMethod;\n }\n\n /**\n * Contains key-value pairs of data submitted in the request body. By default, it is `undefined`, and is populated when you use\n * `body-parsing` middleware such as `express.json()` or `express.urlencoded()`.\n */\n get body(): any {\n try {\n return this.raw.body ? JSON.parse(this.raw.body) : {};\n } catch (er) {\n return this.raw.body;\n }\n }\n\n get rawBody(): any {\n return this.raw.body;\n }\n\n /**\n * This property is an object containing properties mapped to the named route `parameters`.\n * For example, if you have the route `/user/:name`, then the `name` property is available as `req.params.name`.\n * This object defaults to `{}`.\n */\n get params(): {[key: string]: any} {\n return this.raw.pathParameters || {};\n }\n\n /**\n * This property is an object containing a property for each query string parameter in the route.\n * When query parser is set to disabled, it is an empty object `{}`, otherwise it is the result of the configured query parser.\n */\n get query(): {[key: string]: any} {\n return this.raw.queryStringParameters || {};\n }\n\n /**\n * Returns the HTTP request header specified by field. The match is case-insensitive.\n *\n * ```typescript\n * request.get('Content-Type') // => \"text/plain\"\n * ```\n *\n * @param name\n */\n get(name: string) {\n return getValue(this.raw.headers, name);\n }\n\n destroy() {}\n}\n","import {getValue} from \"@tsed/core\";\nimport {getStatusMessage} from \"@tsed/schema\";\nimport type {APIGatewayEventDefaultAuthorizerContext, APIGatewayProxyEventBase, Context} from \"aws-lambda\";\nimport encodeUrl from \"encodeurl\";\nimport * as mime from \"mime\";\nimport type {ServerlessRequest} from \"./ServerlessRequest\";\n\nexport interface ServerlessResponseOptions {\n event: APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>;\n context: Context;\n request: ServerlessRequest;\n}\n\nexport type HeaderValue = boolean | number | string;\n\n/**\n * @platform\n */\nexport class ServerlessResponse {\n readonly event: APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>;\n readonly request: ServerlessRequest;\n\n #status: number = 200;\n #body: any = undefined;\n #headers: Record<string, HeaderValue> = {};\n #locals: Record<string, any> = {};\n #isHeadersSent = false;\n #endListeners: Function[] = [];\n\n constructor({event, request}: ServerlessResponseOptions) {\n this.event = event;\n this.request = request;\n }\n\n /**\n * Get the current statusCode\n */\n get statusCode() {\n return this.#status;\n }\n\n set statusCode(status) {\n this.#status = status;\n }\n\n /**\n * An object that contains response local variables scoped to the request, and therefore available only to the view(s) rendered during that request / response cycle (if any). Otherwise, this property is identical to app.locals.\n *\n * This property is useful for exposing request-level information such as the request path name, authenticated user, user settings, and so on.\n */\n get locals() {\n return this.#locals;\n }\n\n get isHeadersSent() {\n return this.#isHeadersSent;\n }\n\n getStatus() {\n return this.#status;\n }\n\n /**\n * Sets the HTTP status for the response.\n *\n * @param status\n */\n status(status: number) {\n this.#status = status;\n return this;\n }\n\n set(name: string, value: any) {\n return this.setHeader(name, value);\n }\n\n /**\n * Returns the HTTP response header specified by field. The match is case-insensitive.\n *\n * ```typescript\n * response.get('Content-Type') // => \"text/plain\"\n * ```\n *\n * @param name\n */\n get(name: string): string | number | boolean | undefined {\n return getValue(this.#headers, name.toLowerCase());\n }\n\n getHeaders(): Record<string, HeaderValue> {\n return {\n ...this.#headers\n };\n }\n\n hasStatus() {\n return this.#status !== 200;\n }\n\n /**\n * Set header `field` to `val`, or pass\n * an object of header fields.\n *\n * Examples:\n * ```typescript\n * response.setHeaders({ Accept: 'text/plain', 'X-API-Key': 'tobi' });\n * ```\n *\n * Aliased as `res.header()`.\n */\n setHeaders(headers: Record<string, HeaderValue>) {\n // apply headers\n Object.entries(headers).forEach(([key, item]) => {\n this.setHeader(key, item);\n });\n\n return this;\n }\n\n setHeader(key: string, item: HeaderValue | null | undefined) {\n if (item !== null && item !== undefined) {\n key = key.toLowerCase();\n\n if (key === \"location\") {\n // \"back\" is an alias for the referrer\n if (item === \"back\") {\n item = this.request.get(\"Referrer\") || \"/\";\n }\n\n item = encodeUrl(String(item));\n }\n\n this.#headers = {\n ...this.#headers,\n [key.toLowerCase()]: item as any\n };\n }\n\n return this;\n }\n\n /**\n * Set `Content-Type` response header with `type` through `mime.lookup()`\n * when it does not contain \"/\", or set the Content-Type to `type` otherwise.\n *\n * Examples:\n *\n * res.type('.html');\n * res.type('html');\n * res.type('json');\n * res.type('application/json');\n * res.type('png');\n */\n contentType(contentType: string) {\n this.setHeader(\"Content-Type\", mime.getType(contentType));\n\n return this;\n }\n\n contentLength(length: number) {\n this.setHeader(\"Content-Length\", length);\n return this;\n }\n\n getContentLength() {\n if (this.get(\"Content-Length\")) {\n return parseInt(this.get(\"Content-Length\") as any, 10) || 0;\n }\n }\n\n getContentType() {\n return String(this.get(\"Content-Type\") || \"\").split(\";\")[0];\n }\n\n /**\n * Redirects to the URL derived from the specified path, with specified status, a positive integer that corresponds to an [HTTP status code](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html).\n * If not specified, status defaults to `302 Found`.\n *\n * @param status\n * @param url\n */\n redirect(status: number, url: string) {\n // Set location header\n const address = this.location(url).get(\"Location\");\n const body = `${getStatusMessage(status)}. Redirecting to ${address}`;\n\n this.status(status).set(\"Content-Length\", Buffer.byteLength(body)).body(body);\n\n return this;\n }\n\n /**\n * Sets the response Location HTTP header to the specified path parameter.\n *\n * @param url\n */\n location(url: string) {\n return this.set(\"Location\", url);\n }\n\n /**\n * Send any data to your consumer.\n *\n * This method accept a ReadableStream, a plain object, boolean, string, number, null and undefined data.\n * It choose the better way to send the data.\n *\n * @param body\n */\n body(body: any) {\n this.#body = body;\n\n return this;\n }\n\n getBody() {\n return this.#body;\n }\n\n isDone(): boolean {\n return this.#isHeadersSent;\n }\n\n onEnd(cb: Function) {\n this.#endListeners.push(cb);\n\n return this;\n }\n\n destroy() {\n this.#endListeners.forEach((cb: Function) => cb());\n this.#isHeadersSent = true;\n }\n}\n","import {DIContext, DIContextOptions, LocalsContainer} from \"@tsed/di\";\nimport {JsonEntityStore} from \"@tsed/schema\";\nimport {APIGatewayEventDefaultAuthorizerContext, APIGatewayProxyEventBase, Context} from \"aws-lambda\";\nimport {ServerlessRequest} from \"./ServerlessRequest\";\nimport {ServerlessResponse} from \"./ServerlessResponse\";\n\nexport interface ServerlessContextOptions extends DIContextOptions {\n event: APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>;\n context: Context;\n endpoint: JsonEntityStore;\n}\n\nexport class ServerlessContext extends DIContext {\n readonly response: ServerlessResponse;\n readonly request: ServerlessRequest;\n readonly context: Context;\n readonly event: APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>;\n readonly endpoint: JsonEntityStore;\n\n constructor({event, context, endpoint, ...options}: ServerlessContextOptions) {\n super({\n ...options,\n maxStackSize: 0\n });\n this.context = context;\n this.event = event;\n this.request = new ServerlessRequest({event, context});\n this.response = new ServerlessResponse({event, context, request: this.request});\n this.endpoint = endpoint;\n }\n\n async destroy() {\n await super.destroy();\n\n this.request.destroy();\n this.response.destroy();\n }\n}\n","import {APIGatewayEventDefaultAuthorizerContext, APIGatewayProxyEventBase, Context} from \"aws-lambda\";\nimport {v4} from \"uuid\";\n\nexport function getRequestId(event: APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>, context: Context) {\n if (event?.headers && event.headers[\"x-request-id\"]) {\n return event.headers[\"x-request-id\"];\n }\n\n return event?.requestContext?.requestId || context?.awsRequestId || v4().replace(/-/gi, \"\");\n}\n","import {Env, Type} from \"@tsed/core\";\nimport {createContainer, InjectorService, setLoggerLevel} from \"@tsed/di\";\nimport {$log, Logger} from \"@tsed/logger\";\nimport {getOperationsRoutes, JsonEntityStore} from \"@tsed/schema\";\nimport type {HTTPMethod, Instance} from \"find-my-way\";\nimport type {APIGatewayProxyResult, Handler} from \"aws-lambda\";\nimport {ServerlessContext} from \"../domain/ServerlessContext\";\nimport {PlatformServerlessHandler} from \"./PlatformServerlessHandler\";\nimport {getRequestId} from \"../utils/getRequestId\";\n\nexport interface PlatformServerlessSettings extends Partial<TsED.Configuration> {\n lambda?: Type[];\n}\n\n/**\n * @platform\n */\nexport class PlatformServerless {\n readonly name: string = \"PlatformServerless\";\n\n private _injector: InjectorService;\n private _router: Instance<any>;\n private _promise: Promise<any>;\n\n get injector(): InjectorService {\n return this._injector;\n }\n\n get settings() {\n return this.injector.settings;\n }\n\n get promise() {\n return this._promise;\n }\n\n static bootstrap(settings: Partial<TsED.Configuration> & {lambda?: Type[]} = {}): PlatformServerless {\n const platform = new PlatformServerless();\n platform.createInjector(settings);\n\n return platform;\n }\n\n public handler(): Handler {\n return async (event, context) => {\n const [router] = await Promise.all([this.initRouter(), this.init()]);\n const result = router.find(event.httpMethod as any, event.path);\n\n if (result) {\n const {handler, params} = result;\n\n event.pathParameters = {\n ...(event.pathParameters || {}),\n ...params\n };\n\n return (handler as any)(event, context);\n }\n\n return {\n statusCode: 404,\n body: \"Not found\",\n headers: {\n \"x-request-id\": getRequestId(event, context)\n },\n isBase64Encoded: false\n };\n };\n }\n\n public callbacks(tokens: Type | Type[] = [], callbacks: any = {}): Record<string, Handler> {\n return this.settings\n .get<Type[]>(\"lambda\", [])\n .concat(tokens)\n .reduce((callbacks, token) => {\n const routes = getOperationsRoutes(token);\n\n return routes.reduce((callbacks, operationRoute) => {\n const {operationId, token, propertyName, method, url} = operationRoute;\n\n // istanbul ignore next\n if (method === \"USE\") {\n return callbacks;\n }\n\n const callback = this.callback(token, propertyName);\n\n this._router?.on(method as HTTPMethod, url as string, callback as any);\n\n return {\n ...callbacks,\n [operationId]: callback\n };\n }, callbacks);\n }, callbacks);\n }\n\n public async ready() {\n await this.injector.emit(\"$onReady\");\n }\n\n public async stop() {\n await this.injector.emit(\"$onDestroy\");\n return this.injector.destroy();\n }\n\n public async init() {\n if (!this._promise) {\n this._promise = this.loadInjector().then(() => this.ready());\n }\n\n return this._promise;\n }\n\n protected callback(token: Type<any>, propertyKey: string): Handler {\n const entity = JsonEntityStore.fromMethod(token, propertyKey);\n let handler: ($ctx: ServerlessContext) => Promise<APIGatewayProxyResult>;\n\n return async (event, context) => {\n await this.init();\n\n if (!handler) {\n const platformHandler = this.injector.get<PlatformServerlessHandler>(PlatformServerlessHandler)!;\n handler = await platformHandler.createHandler(token, propertyKey);\n }\n\n const $ctx = new ServerlessContext({\n event,\n context,\n id: getRequestId(event, context),\n logger: this.injector.logger as Logger,\n injector: this.injector,\n endpoint: entity\n });\n\n return handler($ctx);\n };\n }\n\n protected async initRouter() {\n if (!this._router) {\n const {default: FindMyMay} = await import(\"find-my-way\");\n\n this._router = FindMyMay({caseSensitive: false, ignoreTrailingSlash: true});\n\n this.callbacks();\n }\n\n return this._router;\n }\n\n protected createInjector(settings: any) {\n this._injector = new InjectorService();\n this.injector.logger = $log;\n this.injector.settings.set(settings);\n\n // istanbul ignore next\n if (this.injector.settings.get(\"env\") === Env.TEST && !settings?.logger?.level) {\n $log.stop();\n }\n\n return this;\n }\n\n protected async loadInjector() {\n const container = createContainer();\n\n setLoggerLevel(this.injector);\n\n await this.injector.emit(\"$beforeInit\");\n\n await this.injector.load(container);\n\n await this.injector.emit(\"$afterInit\");\n }\n}\n","import {Type} from \"@tsed/core\";\nimport {DITest} from \"@tsed/di\";\nimport {Logger} from \"@tsed/logger\";\nimport {JsonEntityStore} from \"@tsed/schema\";\nimport {APIGatewayEventDefaultAuthorizerContext, APIGatewayProxyEventBase, APIGatewayProxyHandler, Context} from \"aws-lambda\";\nimport {APIGatewayProxyResult} from \"aws-lambda/trigger/api-gateway-proxy\";\nimport {PlatformServerless} from \"../builder/PlatformServerless\";\nimport {ServerlessContext} from \"../domain/ServerlessContext\";\n\nexport interface LambdaPromiseResult extends Promise<APIGatewayProxyResult> {}\n\nexport class LambdaClientRequest extends Promise<APIGatewayProxyResult> {\n event = LambdaClientRequest.createFakeEvent();\n context = LambdaClientRequest.createFakeContext();\n\n static call(lambdaName: string) {\n const resolvers: any = {};\n const promise = new LambdaClientRequest((resolve, reject) => {\n resolvers.resolve = resolve;\n resolvers.reject = reject;\n });\n\n promise.init(lambdaName, resolvers.resolve, resolvers.reject);\n\n return promise;\n }\n\n static get(path: string, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").get(path, options);\n }\n\n static post(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").post(path, body, options);\n }\n\n static put(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").put(path, body, options);\n }\n\n static patch(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").patch(path, body, options);\n }\n\n static delete(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").delete(path, body, options);\n }\n\n static createFakeEvent(event: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return {\n body: \"\",\n headers: {},\n httpMethod: \"\",\n isBase64Encoded: false,\n multiValueHeaders: {},\n multiValueQueryStringParameters: {},\n path: event.path || \"/\",\n pathParameters: {},\n queryStringParameters: {},\n resource: \"\",\n stageVariables: {},\n ...event,\n requestContext: {\n ...event?.requestContext,\n accountId: \"\",\n apiId: \"\",\n protocol: \"https\",\n httpMethod: \"\",\n identity: {} as any,\n path: event.path || \"/\",\n stage: \"\",\n requestId: \"requestId\",\n requestTimeEpoch: 0,\n resourceId: 1,\n resourcePath: event.path || \"/\"\n } as any\n } as APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>;\n }\n\n static createFakeContext(context?: Context): Context {\n return {\n awsRequestId: \"awsRequestId\",\n callbackWaitsForEmptyEventLoop: false,\n functionName: \"\",\n functionVersion: \"\",\n invokedFunctionArn: \"\",\n logGroupName: \"\",\n logStreamName: \"\",\n memoryLimitInMB: \"\",\n ...(context || {})\n } as Context;\n }\n\n get(path: string, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"GET\";\n\n return this;\n }\n\n post(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"POST\";\n\n this.body(body);\n\n return this;\n }\n\n patch(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"PATCH\";\n\n this.body(body);\n\n return this;\n }\n\n put(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"PUT\";\n\n this.body(body);\n\n return this;\n }\n\n delete(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"DELETE\";\n\n this.body(body);\n\n return this;\n }\n\n query(query: any) {\n this.event.queryStringParameters = {\n ...this.event.queryStringParameters,\n ...JSON.parse(JSON.stringify(query))\n };\n\n return this;\n }\n\n params(pathParameters: any) {\n this.event.pathParameters = {\n ...this.event.pathParameters,\n ...JSON.parse(JSON.stringify(pathParameters))\n };\n\n return this;\n }\n\n headers(headers: Record<string, any>) {\n this.event.headers = {\n ...this.event.headers,\n ...JSON.parse(JSON.stringify(headers))\n };\n\n return this;\n }\n\n body(body: any) {\n if (body !== undefined) {\n this.event.headers[\"content-type\"] = \"application/json\";\n\n this.event.body = JSON.stringify(body);\n }\n\n return this;\n }\n\n protected init(lambda: string, resolve: Function, reject: Function) {\n setTimeout(async () => {\n try {\n const result = await PlatformServerlessTest.callbacks[lambda](this.event, this.context, resolve as any);\n resolve(result as any);\n } catch (er) {\n reject(er);\n }\n });\n }\n}\n\nexport class PlatformServerlessTest extends DITest {\n static callbacks: Record<string, APIGatewayProxyHandler> = {};\n static instance: PlatformServerless;\n static request = LambdaClientRequest;\n\n static bootstrap(settings: Partial<TsED.Configuration & {lambda: Type[]}> = {}) {\n return async function before(): Promise<void> {\n // @ts-ignore\n const instance = PlatformServerless.bootstrap(DITest.configure(settings));\n PlatformServerlessTest.instance = instance;\n PlatformServerlessTest.callbacks = instance.callbacks();\n PlatformServerlessTest.callbacks.handler = instance.handler();\n // used by inject method\n DITest.injector = instance.injector;\n\n return instance.promise;\n };\n }\n\n /**\n * Resets the test injector of the test context, so it won't pollute your next test. Call this in your `tearDown` logic.\n */\n static async reset() {\n if (PlatformServerlessTest.instance) {\n await PlatformServerlessTest.instance.stop();\n }\n if (DITest.hasInjector()) {\n await DITest.injector.destroy();\n DITest._injector = null;\n }\n }\n\n static createServerlessContext({endpoint}: {endpoint: JsonEntityStore}) {\n const context: any = LambdaClientRequest.createFakeContext();\n const event: any = LambdaClientRequest.createFakeEvent();\n\n return new ServerlessContext({\n event,\n context,\n id: context.awsRequestId,\n logger: PlatformServerlessTest.injector.logger as Logger,\n injector: PlatformServerlessTest.injector,\n endpoint\n });\n }\n}\n"],"names":["mergeHeaders","specHeaders","headers","Object","entries","reduce","key","item","toLowerCase","undefined","String","example","setResponseHeaders","ctx","response","endpoint","operation","isDone","hasStatus","status","getStatus","statusCode","getHeadersOf","mergedHeaders","getHeaders","setHeaders","isRedirection","redirect","PlatformServerlessHandler","createHandler","token","propertyKey","promisedHandler","params","compileHandler","$ctx","injector","emit","runInContext","resolver","AnyToPromise","handler","result","call","processResult","er","body","exceptions","exceptionsManager","catch","flush","getBody","isSerializable","set","JSON","stringify","id","isBase64Encoded","destroy","data","serialize","getResponseOptions","useAlias","__decorate","Inject","InjectorService","PlatformParams","LazyInject","Injectable","scope","ProviderScope","SINGLETON","imports","DeserializerPipe","ValidationPipe","ServerlessRequest","constructor","event","raw","secure","host","get","protocol","url","path","method","httpMethod","parse","rawBody","pathParameters","query","queryStringParameters","name","getValue","ServerlessResponse","request","locals","isHeadersSent","value","setHeader","forEach","encodeUrl","contentType","mime","getType","contentLength","length","getContentLength","parseInt","getContentType","split","address","location","getStatusMessage","Buffer","byteLength","onEnd","cb","push","ServerlessContext","DIContext","context","options","maxStackSize","getRequestId","requestContext","requestId","awsRequestId","v4","replace","PlatformServerless","_injector","settings","promise","_promise","bootstrap","platform","createInjector","router","Promise","all","initRouter","init","find","callbacks","tokens","concat","routes","getOperationsRoutes","operationRoute","operationId","propertyName","callback","_router","on","ready","stop","loadInjector","then","entity","JsonEntityStore","fromMethod","platformHandler","logger","default","FindMyMay","caseSensitive","ignoreTrailingSlash","$log","Env","TEST","level","container","createContainer","setLoggerLevel","load","LambdaClientRequest","createFakeEvent","createFakeContext","lambdaName","resolvers","resolve","reject","post","put","patch","delete","multiValueHeaders","multiValueQueryStringParameters","resource","stageVariables","accountId","apiId","identity","stage","requestTimeEpoch","resourceId","resourcePath","callbackWaitsForEmptyEventLoop","functionName","functionVersion","invokedFunctionArn","logGroupName","logStreamName","memoryLimitInMB","assign","lambda","setTimeout","PlatformServerlessTest","DITest","before","instance","configure","reset","hasInjector","createServerlessContext"],"mappings":"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"}
|
|
@@ -4,7 +4,6 @@ var platformParams = require('@tsed/platform-params');
|
|
|
4
4
|
var tslib = require('tslib');
|
|
5
5
|
var core = require('@tsed/core');
|
|
6
6
|
var jsonMapper = require('@tsed/json-mapper');
|
|
7
|
-
var platformExceptions = require('@tsed/platform-exceptions');
|
|
8
7
|
var logger = require('@tsed/logger');
|
|
9
8
|
var encodeUrl = require('encodeurl');
|
|
10
9
|
var mime = require('mime');
|
|
@@ -139,7 +138,8 @@ exports.PlatformServerlessHandler = class PlatformServerlessHandler {
|
|
|
139
138
|
this.processResult(result, $ctx);
|
|
140
139
|
} catch (er) {
|
|
141
140
|
$ctx.response.status(500).body(er);
|
|
142
|
-
await this.exceptionsManager
|
|
141
|
+
const exceptions = await this.exceptionsManager;
|
|
142
|
+
await exceptions.catch(er, $ctx);
|
|
143
143
|
}
|
|
144
144
|
});
|
|
145
145
|
await this.injector.emit("$onResponse", $ctx);
|
|
@@ -201,7 +201,7 @@ tslib.__decorate([di.Inject(), tslib.__metadata("design:type", di.InjectorServic
|
|
|
201
201
|
|
|
202
202
|
tslib.__decorate([di.Inject(), tslib.__metadata("design:type", platformParams.PlatformParams)], exports.PlatformServerlessHandler.prototype, "params", void 0);
|
|
203
203
|
|
|
204
|
-
tslib.__decorate([di.
|
|
204
|
+
tslib.__decorate([di.LazyInject("PlatformExceptions", () => Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@tsed/platform-exceptions')); })), tslib.__metadata("design:type", Promise)], exports.PlatformServerlessHandler.prototype, "exceptionsManager", void 0);
|
|
205
205
|
|
|
206
206
|
exports.PlatformServerlessHandler = tslib.__decorate([di.Injectable({
|
|
207
207
|
scope: di.ProviderScope.SINGLETON,
|
|
@@ -668,7 +668,7 @@ class PlatformServerless {
|
|
|
668
668
|
token,
|
|
669
669
|
propertyName,
|
|
670
670
|
method,
|
|
671
|
-
|
|
671
|
+
url
|
|
672
672
|
} = operationRoute; // istanbul ignore next
|
|
673
673
|
|
|
674
674
|
if (method === "USE") {
|
|
@@ -676,7 +676,7 @@ class PlatformServerless {
|
|
|
676
676
|
}
|
|
677
677
|
|
|
678
678
|
const callback = this.callback(token, propertyName);
|
|
679
|
-
(_this$_router = this._router) == null ? void 0 : _this$_router.on(method,
|
|
679
|
+
(_this$_router = this._router) == null ? void 0 : _this$_router.on(method, url, callback);
|
|
680
680
|
return _extends({}, callbacks, {
|
|
681
681
|
[operationId]: callback
|
|
682
682
|
});
|
|
@@ -728,9 +728,10 @@ class PlatformServerless {
|
|
|
728
728
|
if (!this._router) {
|
|
729
729
|
const {
|
|
730
730
|
default: FindMyMay
|
|
731
|
-
} = await Promise.resolve().then(function () { return require('./index-
|
|
731
|
+
} = await Promise.resolve().then(function () { return require('./index-eeb85309.js'); }).then(function (n) { return n.index; });
|
|
732
732
|
this._router = FindMyMay({
|
|
733
|
-
caseSensitive: false
|
|
733
|
+
caseSensitive: false,
|
|
734
|
+
ignoreTrailingSlash: true
|
|
734
735
|
});
|
|
735
736
|
this.callbacks();
|
|
736
737
|
}
|
|
@@ -971,4 +972,4 @@ exports.PlatformServerlessTest = PlatformServerlessTest;
|
|
|
971
972
|
exports.ServerlessContext = ServerlessContext;
|
|
972
973
|
exports.ServerlessResponse = ServerlessResponse;
|
|
973
974
|
exports._extends = _extends;
|
|
974
|
-
//# sourceMappingURL=index-
|
|
975
|
+
//# sourceMappingURL=index-a7574150.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-a7574150.js","sources":["../src/utils/setResponseHeaders.ts","../src/builder/PlatformServerlessHandler.ts","../src/domain/ServerlessRequest.ts","../src/domain/ServerlessResponse.ts","../src/domain/ServerlessContext.ts","../src/utils/getRequestId.ts","../src/builder/PlatformServerless.ts","../src/services/PlatformServerlessTest.ts"],"sourcesContent":["import {JsonHeader} from \"@tsed/schema\";\nimport {ServerlessContext} from \"../domain/ServerlessContext\";\nimport {HeaderValue} from \"../domain/ServerlessResponse\";\n\nfunction mergeHeaders(specHeaders: Record<string, JsonHeader & {example: string}>, headers: Record<string, HeaderValue>) {\n return Object.entries(specHeaders).reduce((headers, [key, item]) => {\n key = key.toLowerCase();\n return {\n ...headers,\n [key]: headers[key] === undefined ? String(item.example) : headers[key]\n };\n }, headers);\n}\n\n/**\n * @ignore\n */\nexport function setResponseHeaders(ctx: ServerlessContext) {\n const {response, endpoint} = ctx;\n const operation = endpoint.operation!;\n\n if (response.isDone()) {\n return;\n }\n\n if (!response.hasStatus()) {\n // apply status only if the isn't already modified\n response.status(operation.getStatus());\n }\n\n const statusCode = response.statusCode;\n const headers = operation.getHeadersOf(response.statusCode);\n const mergedHeaders = mergeHeaders(headers, response.getHeaders());\n\n response.setHeaders(mergedHeaders);\n\n if (operation.isRedirection(statusCode)) {\n response.redirect(statusCode, String(mergedHeaders[\"location\"]));\n }\n}\n","import {AnyPromiseResult, AnyToPromise, isSerializable} from \"@tsed/core\";\nimport {BaseContext, Inject, Injectable, InjectorService, LazyInject, ProviderScope, TokenProvider} from \"@tsed/di\";\nimport {serialize} from \"@tsed/json-mapper\";\nimport {DeserializerPipe, PlatformParams, ValidationPipe} from \"@tsed/platform-params\";\nimport type {PlatformExceptions} from \"@tsed/platform-exceptions\";\nimport {ServerlessContext} from \"../domain/ServerlessContext\";\nimport {setResponseHeaders} from \"../utils/setResponseHeaders\";\n\n@Injectable({\n scope: ProviderScope.SINGLETON,\n imports: [DeserializerPipe, ValidationPipe]\n})\nexport class PlatformServerlessHandler {\n @Inject()\n protected injector: InjectorService;\n\n @Inject()\n protected params: PlatformParams;\n\n @LazyInject(\"PlatformExceptions\", () => import(\"@tsed/platform-exceptions\"))\n protected exceptionsManager: Promise<PlatformExceptions>;\n\n createHandler(token: TokenProvider, propertyKey: string | symbol) {\n const promisedHandler = this.params.compileHandler({\n token,\n propertyKey\n });\n\n return async ($ctx: ServerlessContext) => {\n await this.injector.emit(\"$onRequest\", $ctx);\n\n await this.injector.runInContext($ctx, async () => {\n try {\n const resolver = new AnyToPromise();\n const handler = await promisedHandler;\n const result = await resolver.call(() => handler({$ctx}));\n\n this.processResult(result, $ctx);\n } catch (er) {\n $ctx.response.status(500).body(er);\n const exceptions = await this.exceptionsManager;\n\n await exceptions.catch(er, ($ctx as unknown) as BaseContext);\n }\n });\n\n await this.injector.emit(\"$onResponse\", $ctx);\n\n return this.flush($ctx);\n };\n }\n\n private flush($ctx: ServerlessContext) {\n setResponseHeaders($ctx);\n\n let body: any = $ctx.response.getBody();\n\n if (isSerializable(body)) {\n $ctx.response.set(\"content-type\", \"application/json\");\n body = JSON.stringify(body);\n }\n\n const response = {\n statusCode: $ctx.response.getStatus(),\n body: body === undefined ? \"\" : body,\n headers: {\n ...$ctx.response.getHeaders(),\n \"x-request-id\": $ctx.id\n },\n isBase64Encoded: false\n };\n\n $ctx.destroy();\n\n return response;\n }\n\n private processResult({status, headers, data}: AnyPromiseResult, $ctx: ServerlessContext) {\n if (status) {\n $ctx.response.status(status);\n }\n\n if (headers) {\n $ctx.response.setHeaders(headers);\n }\n\n if (data !== undefined) {\n data = $ctx.response.getStatus() !== 204 ? data : \"\";\n\n if (isSerializable(data)) {\n data = serialize(data, {\n ...$ctx.endpoint.getResponseOptions($ctx.response.getStatus()),\n useAlias: true,\n endpoint: true\n });\n }\n\n $ctx.response.body(data);\n }\n }\n}\n","import type {APIGatewayEventDefaultAuthorizerContext, APIGatewayProxyEventBase, Context} from \"aws-lambda\";\nimport {getValue} from \"@tsed/core\";\n\nexport interface ServerlessRequestOptions {\n event: APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>;\n context: Context;\n}\n/**\n * @platform\n */\nexport class ServerlessRequest {\n readonly raw: APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>;\n\n constructor({event}: ServerlessRequestOptions) {\n this.raw = event;\n }\n\n get secure(): boolean {\n return true;\n }\n\n get host(): string {\n return this.get(\"host\");\n }\n\n get protocol(): string {\n return \"https\";\n }\n\n /**\n * Get the url of the request.\n *\n * Is equivalent of `express.response.originalUrl || express.response.url`.\n */\n get url(): string {\n return this.raw.path;\n }\n\n get headers() {\n return this.raw.headers;\n }\n\n get method(): string {\n return this.raw.httpMethod;\n }\n\n /**\n * Contains key-value pairs of data submitted in the request body. By default, it is `undefined`, and is populated when you use\n * `body-parsing` middleware such as `express.json()` or `express.urlencoded()`.\n */\n get body(): any {\n try {\n return this.raw.body ? JSON.parse(this.raw.body) : {};\n } catch (er) {\n return this.raw.body;\n }\n }\n\n get rawBody(): any {\n return this.raw.body;\n }\n\n /**\n * This property is an object containing properties mapped to the named route `parameters`.\n * For example, if you have the route `/user/:name`, then the `name` property is available as `req.params.name`.\n * This object defaults to `{}`.\n */\n get params(): {[key: string]: any} {\n return this.raw.pathParameters || {};\n }\n\n /**\n * This property is an object containing a property for each query string parameter in the route.\n * When query parser is set to disabled, it is an empty object `{}`, otherwise it is the result of the configured query parser.\n */\n get query(): {[key: string]: any} {\n return this.raw.queryStringParameters || {};\n }\n\n /**\n * Returns the HTTP request header specified by field. The match is case-insensitive.\n *\n * ```typescript\n * request.get('Content-Type') // => \"text/plain\"\n * ```\n *\n * @param name\n */\n get(name: string) {\n return getValue(this.raw.headers, name);\n }\n\n destroy() {}\n}\n","import {getValue} from \"@tsed/core\";\nimport {getStatusMessage} from \"@tsed/schema\";\nimport type {APIGatewayEventDefaultAuthorizerContext, APIGatewayProxyEventBase, Context} from \"aws-lambda\";\nimport encodeUrl from \"encodeurl\";\nimport * as mime from \"mime\";\nimport type {ServerlessRequest} from \"./ServerlessRequest\";\n\nexport interface ServerlessResponseOptions {\n event: APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>;\n context: Context;\n request: ServerlessRequest;\n}\n\nexport type HeaderValue = boolean | number | string;\n\n/**\n * @platform\n */\nexport class ServerlessResponse {\n readonly event: APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>;\n readonly request: ServerlessRequest;\n\n #status: number = 200;\n #body: any = undefined;\n #headers: Record<string, HeaderValue> = {};\n #locals: Record<string, any> = {};\n #isHeadersSent = false;\n #endListeners: Function[] = [];\n\n constructor({event, request}: ServerlessResponseOptions) {\n this.event = event;\n this.request = request;\n }\n\n /**\n * Get the current statusCode\n */\n get statusCode() {\n return this.#status;\n }\n\n set statusCode(status) {\n this.#status = status;\n }\n\n /**\n * An object that contains response local variables scoped to the request, and therefore available only to the view(s) rendered during that request / response cycle (if any). Otherwise, this property is identical to app.locals.\n *\n * This property is useful for exposing request-level information such as the request path name, authenticated user, user settings, and so on.\n */\n get locals() {\n return this.#locals;\n }\n\n get isHeadersSent() {\n return this.#isHeadersSent;\n }\n\n getStatus() {\n return this.#status;\n }\n\n /**\n * Sets the HTTP status for the response.\n *\n * @param status\n */\n status(status: number) {\n this.#status = status;\n return this;\n }\n\n set(name: string, value: any) {\n return this.setHeader(name, value);\n }\n\n /**\n * Returns the HTTP response header specified by field. The match is case-insensitive.\n *\n * ```typescript\n * response.get('Content-Type') // => \"text/plain\"\n * ```\n *\n * @param name\n */\n get(name: string): string | number | boolean | undefined {\n return getValue(this.#headers, name.toLowerCase());\n }\n\n getHeaders(): Record<string, HeaderValue> {\n return {\n ...this.#headers\n };\n }\n\n hasStatus() {\n return this.#status !== 200;\n }\n\n /**\n * Set header `field` to `val`, or pass\n * an object of header fields.\n *\n * Examples:\n * ```typescript\n * response.setHeaders({ Accept: 'text/plain', 'X-API-Key': 'tobi' });\n * ```\n *\n * Aliased as `res.header()`.\n */\n setHeaders(headers: Record<string, HeaderValue>) {\n // apply headers\n Object.entries(headers).forEach(([key, item]) => {\n this.setHeader(key, item);\n });\n\n return this;\n }\n\n setHeader(key: string, item: HeaderValue | null | undefined) {\n if (item !== null && item !== undefined) {\n key = key.toLowerCase();\n\n if (key === \"location\") {\n // \"back\" is an alias for the referrer\n if (item === \"back\") {\n item = this.request.get(\"Referrer\") || \"/\";\n }\n\n item = encodeUrl(String(item));\n }\n\n this.#headers = {\n ...this.#headers,\n [key.toLowerCase()]: item as any\n };\n }\n\n return this;\n }\n\n /**\n * Set `Content-Type` response header with `type` through `mime.lookup()`\n * when it does not contain \"/\", or set the Content-Type to `type` otherwise.\n *\n * Examples:\n *\n * res.type('.html');\n * res.type('html');\n * res.type('json');\n * res.type('application/json');\n * res.type('png');\n */\n contentType(contentType: string) {\n this.setHeader(\"Content-Type\", mime.getType(contentType));\n\n return this;\n }\n\n contentLength(length: number) {\n this.setHeader(\"Content-Length\", length);\n return this;\n }\n\n getContentLength() {\n if (this.get(\"Content-Length\")) {\n return parseInt(this.get(\"Content-Length\") as any, 10) || 0;\n }\n }\n\n getContentType() {\n return String(this.get(\"Content-Type\") || \"\").split(\";\")[0];\n }\n\n /**\n * Redirects to the URL derived from the specified path, with specified status, a positive integer that corresponds to an [HTTP status code](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html).\n * If not specified, status defaults to `302 Found`.\n *\n * @param status\n * @param url\n */\n redirect(status: number, url: string) {\n // Set location header\n const address = this.location(url).get(\"Location\");\n const body = `${getStatusMessage(status)}. Redirecting to ${address}`;\n\n this.status(status).set(\"Content-Length\", Buffer.byteLength(body)).body(body);\n\n return this;\n }\n\n /**\n * Sets the response Location HTTP header to the specified path parameter.\n *\n * @param url\n */\n location(url: string) {\n return this.set(\"Location\", url);\n }\n\n /**\n * Send any data to your consumer.\n *\n * This method accept a ReadableStream, a plain object, boolean, string, number, null and undefined data.\n * It choose the better way to send the data.\n *\n * @param body\n */\n body(body: any) {\n this.#body = body;\n\n return this;\n }\n\n getBody() {\n return this.#body;\n }\n\n isDone(): boolean {\n return this.#isHeadersSent;\n }\n\n onEnd(cb: Function) {\n this.#endListeners.push(cb);\n\n return this;\n }\n\n destroy() {\n this.#endListeners.forEach((cb: Function) => cb());\n this.#isHeadersSent = true;\n }\n}\n","import {DIContext, DIContextOptions, LocalsContainer} from \"@tsed/di\";\nimport {JsonEntityStore} from \"@tsed/schema\";\nimport {APIGatewayEventDefaultAuthorizerContext, APIGatewayProxyEventBase, Context} from \"aws-lambda\";\nimport {ServerlessRequest} from \"./ServerlessRequest\";\nimport {ServerlessResponse} from \"./ServerlessResponse\";\n\nexport interface ServerlessContextOptions extends DIContextOptions {\n event: APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>;\n context: Context;\n endpoint: JsonEntityStore;\n}\n\nexport class ServerlessContext extends DIContext {\n readonly response: ServerlessResponse;\n readonly request: ServerlessRequest;\n readonly context: Context;\n readonly event: APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>;\n readonly endpoint: JsonEntityStore;\n\n constructor({event, context, endpoint, ...options}: ServerlessContextOptions) {\n super({\n ...options,\n maxStackSize: 0\n });\n this.context = context;\n this.event = event;\n this.request = new ServerlessRequest({event, context});\n this.response = new ServerlessResponse({event, context, request: this.request});\n this.endpoint = endpoint;\n }\n\n async destroy() {\n await super.destroy();\n\n this.request.destroy();\n this.response.destroy();\n }\n}\n","import {APIGatewayEventDefaultAuthorizerContext, APIGatewayProxyEventBase, Context} from \"aws-lambda\";\nimport {v4} from \"uuid\";\n\nexport function getRequestId(event: APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>, context: Context) {\n if (event?.headers && event.headers[\"x-request-id\"]) {\n return event.headers[\"x-request-id\"];\n }\n\n return event?.requestContext?.requestId || context?.awsRequestId || v4().replace(/-/gi, \"\");\n}\n","import {Env, Type} from \"@tsed/core\";\nimport {createContainer, InjectorService, setLoggerLevel} from \"@tsed/di\";\nimport {$log, Logger} from \"@tsed/logger\";\nimport {getOperationsRoutes, JsonEntityStore} from \"@tsed/schema\";\nimport type {HTTPMethod, Instance} from \"find-my-way\";\nimport type {APIGatewayProxyResult, Handler} from \"aws-lambda\";\nimport {ServerlessContext} from \"../domain/ServerlessContext\";\nimport {PlatformServerlessHandler} from \"./PlatformServerlessHandler\";\nimport {getRequestId} from \"../utils/getRequestId\";\n\nexport interface PlatformServerlessSettings extends Partial<TsED.Configuration> {\n lambda?: Type[];\n}\n\n/**\n * @platform\n */\nexport class PlatformServerless {\n readonly name: string = \"PlatformServerless\";\n\n private _injector: InjectorService;\n private _router: Instance<any>;\n private _promise: Promise<any>;\n\n get injector(): InjectorService {\n return this._injector;\n }\n\n get settings() {\n return this.injector.settings;\n }\n\n get promise() {\n return this._promise;\n }\n\n static bootstrap(settings: Partial<TsED.Configuration> & {lambda?: Type[]} = {}): PlatformServerless {\n const platform = new PlatformServerless();\n platform.createInjector(settings);\n\n return platform;\n }\n\n public handler(): Handler {\n return async (event, context) => {\n const [router] = await Promise.all([this.initRouter(), this.init()]);\n const result = router.find(event.httpMethod as any, event.path);\n\n if (result) {\n const {handler, params} = result;\n\n event.pathParameters = {\n ...(event.pathParameters || {}),\n ...params\n };\n\n return (handler as any)(event, context);\n }\n\n return {\n statusCode: 404,\n body: \"Not found\",\n headers: {\n \"x-request-id\": getRequestId(event, context)\n },\n isBase64Encoded: false\n };\n };\n }\n\n public callbacks(tokens: Type | Type[] = [], callbacks: any = {}): Record<string, Handler> {\n return this.settings\n .get<Type[]>(\"lambda\", [])\n .concat(tokens)\n .reduce((callbacks, token) => {\n const routes = getOperationsRoutes(token);\n\n return routes.reduce((callbacks, operationRoute) => {\n const {operationId, token, propertyName, method, url} = operationRoute;\n\n // istanbul ignore next\n if (method === \"USE\") {\n return callbacks;\n }\n\n const callback = this.callback(token, propertyName);\n\n this._router?.on(method as HTTPMethod, url as string, callback as any);\n\n return {\n ...callbacks,\n [operationId]: callback\n };\n }, callbacks);\n }, callbacks);\n }\n\n public async ready() {\n await this.injector.emit(\"$onReady\");\n }\n\n public async stop() {\n await this.injector.emit(\"$onDestroy\");\n return this.injector.destroy();\n }\n\n public async init() {\n if (!this._promise) {\n this._promise = this.loadInjector().then(() => this.ready());\n }\n\n return this._promise;\n }\n\n protected callback(token: Type<any>, propertyKey: string): Handler {\n const entity = JsonEntityStore.fromMethod(token, propertyKey);\n let handler: ($ctx: ServerlessContext) => Promise<APIGatewayProxyResult>;\n\n return async (event, context) => {\n await this.init();\n\n if (!handler) {\n const platformHandler = this.injector.get<PlatformServerlessHandler>(PlatformServerlessHandler)!;\n handler = await platformHandler.createHandler(token, propertyKey);\n }\n\n const $ctx = new ServerlessContext({\n event,\n context,\n id: getRequestId(event, context),\n logger: this.injector.logger as Logger,\n injector: this.injector,\n endpoint: entity\n });\n\n return handler($ctx);\n };\n }\n\n protected async initRouter() {\n if (!this._router) {\n const {default: FindMyMay} = await import(\"find-my-way\");\n\n this._router = FindMyMay({caseSensitive: false, ignoreTrailingSlash: true});\n\n this.callbacks();\n }\n\n return this._router;\n }\n\n protected createInjector(settings: any) {\n this._injector = new InjectorService();\n this.injector.logger = $log;\n this.injector.settings.set(settings);\n\n // istanbul ignore next\n if (this.injector.settings.get(\"env\") === Env.TEST && !settings?.logger?.level) {\n $log.stop();\n }\n\n return this;\n }\n\n protected async loadInjector() {\n const container = createContainer();\n\n setLoggerLevel(this.injector);\n\n await this.injector.emit(\"$beforeInit\");\n\n await this.injector.load(container);\n\n await this.injector.emit(\"$afterInit\");\n }\n}\n","import {Type} from \"@tsed/core\";\nimport {DITest} from \"@tsed/di\";\nimport {Logger} from \"@tsed/logger\";\nimport {JsonEntityStore} from \"@tsed/schema\";\nimport {APIGatewayEventDefaultAuthorizerContext, APIGatewayProxyEventBase, APIGatewayProxyHandler, Context} from \"aws-lambda\";\nimport {APIGatewayProxyResult} from \"aws-lambda/trigger/api-gateway-proxy\";\nimport {PlatformServerless} from \"../builder/PlatformServerless\";\nimport {ServerlessContext} from \"../domain/ServerlessContext\";\n\nexport interface LambdaPromiseResult extends Promise<APIGatewayProxyResult> {}\n\nexport class LambdaClientRequest extends Promise<APIGatewayProxyResult> {\n event = LambdaClientRequest.createFakeEvent();\n context = LambdaClientRequest.createFakeContext();\n\n static call(lambdaName: string) {\n const resolvers: any = {};\n const promise = new LambdaClientRequest((resolve, reject) => {\n resolvers.resolve = resolve;\n resolvers.reject = reject;\n });\n\n promise.init(lambdaName, resolvers.resolve, resolvers.reject);\n\n return promise;\n }\n\n static get(path: string, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").get(path, options);\n }\n\n static post(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").post(path, body, options);\n }\n\n static put(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").put(path, body, options);\n }\n\n static patch(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").patch(path, body, options);\n }\n\n static delete(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").delete(path, body, options);\n }\n\n static createFakeEvent(event: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return {\n body: \"\",\n headers: {},\n httpMethod: \"\",\n isBase64Encoded: false,\n multiValueHeaders: {},\n multiValueQueryStringParameters: {},\n path: event.path || \"/\",\n pathParameters: {},\n queryStringParameters: {},\n resource: \"\",\n stageVariables: {},\n ...event,\n requestContext: {\n ...event?.requestContext,\n accountId: \"\",\n apiId: \"\",\n protocol: \"https\",\n httpMethod: \"\",\n identity: {} as any,\n path: event.path || \"/\",\n stage: \"\",\n requestId: \"requestId\",\n requestTimeEpoch: 0,\n resourceId: 1,\n resourcePath: event.path || \"/\"\n } as any\n } as APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>;\n }\n\n static createFakeContext(context?: Context): Context {\n return {\n awsRequestId: \"awsRequestId\",\n callbackWaitsForEmptyEventLoop: false,\n functionName: \"\",\n functionVersion: \"\",\n invokedFunctionArn: \"\",\n logGroupName: \"\",\n logStreamName: \"\",\n memoryLimitInMB: \"\",\n ...(context || {})\n } as Context;\n }\n\n get(path: string, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"GET\";\n\n return this;\n }\n\n post(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"POST\";\n\n this.body(body);\n\n return this;\n }\n\n patch(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"PATCH\";\n\n this.body(body);\n\n return this;\n }\n\n put(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"PUT\";\n\n this.body(body);\n\n return this;\n }\n\n delete(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"DELETE\";\n\n this.body(body);\n\n return this;\n }\n\n query(query: any) {\n this.event.queryStringParameters = {\n ...this.event.queryStringParameters,\n ...JSON.parse(JSON.stringify(query))\n };\n\n return this;\n }\n\n params(pathParameters: any) {\n this.event.pathParameters = {\n ...this.event.pathParameters,\n ...JSON.parse(JSON.stringify(pathParameters))\n };\n\n return this;\n }\n\n headers(headers: Record<string, any>) {\n this.event.headers = {\n ...this.event.headers,\n ...JSON.parse(JSON.stringify(headers))\n };\n\n return this;\n }\n\n body(body: any) {\n if (body !== undefined) {\n this.event.headers[\"content-type\"] = \"application/json\";\n\n this.event.body = JSON.stringify(body);\n }\n\n return this;\n }\n\n protected init(lambda: string, resolve: Function, reject: Function) {\n setTimeout(async () => {\n try {\n const result = await PlatformServerlessTest.callbacks[lambda](this.event, this.context, resolve as any);\n resolve(result as any);\n } catch (er) {\n reject(er);\n }\n });\n }\n}\n\nexport class PlatformServerlessTest extends DITest {\n static callbacks: Record<string, APIGatewayProxyHandler> = {};\n static instance: PlatformServerless;\n static request = LambdaClientRequest;\n\n static bootstrap(settings: Partial<TsED.Configuration & {lambda: Type[]}> = {}) {\n return async function before(): Promise<void> {\n // @ts-ignore\n const instance = PlatformServerless.bootstrap(DITest.configure(settings));\n PlatformServerlessTest.instance = instance;\n PlatformServerlessTest.callbacks = instance.callbacks();\n PlatformServerlessTest.callbacks.handler = instance.handler();\n // used by inject method\n DITest.injector = instance.injector;\n\n return instance.promise;\n };\n }\n\n /**\n * Resets the test injector of the test context, so it won't pollute your next test. Call this in your `tearDown` logic.\n */\n static async reset() {\n if (PlatformServerlessTest.instance) {\n await PlatformServerlessTest.instance.stop();\n }\n if (DITest.hasInjector()) {\n await DITest.injector.destroy();\n DITest._injector = null;\n }\n }\n\n static createServerlessContext({endpoint}: {endpoint: JsonEntityStore}) {\n const context: any = LambdaClientRequest.createFakeContext();\n const event: any = LambdaClientRequest.createFakeEvent();\n\n return new ServerlessContext({\n event,\n context,\n id: context.awsRequestId,\n logger: PlatformServerlessTest.injector.logger as Logger,\n injector: PlatformServerlessTest.injector,\n endpoint\n });\n }\n}\n"],"names":["mergeHeaders","specHeaders","headers","Object","entries","reduce","key","item","toLowerCase","undefined","String","example","setResponseHeaders","ctx","response","endpoint","operation","isDone","hasStatus","status","getStatus","statusCode","getHeadersOf","mergedHeaders","getHeaders","setHeaders","isRedirection","redirect","PlatformServerlessHandler","createHandler","token","propertyKey","promisedHandler","params","compileHandler","$ctx","injector","emit","runInContext","resolver","AnyToPromise","handler","result","call","processResult","er","body","exceptions","exceptionsManager","catch","flush","getBody","isSerializable","set","JSON","stringify","id","isBase64Encoded","destroy","data","serialize","getResponseOptions","useAlias","__decorate","Inject","InjectorService","PlatformParams","LazyInject","Injectable","scope","ProviderScope","SINGLETON","imports","DeserializerPipe","ValidationPipe","ServerlessRequest","constructor","event","raw","secure","host","get","protocol","url","path","method","httpMethod","parse","rawBody","pathParameters","query","queryStringParameters","name","getValue","ServerlessResponse","request","locals","isHeadersSent","value","setHeader","forEach","encodeUrl","contentType","mime","getType","contentLength","length","getContentLength","parseInt","getContentType","split","address","location","getStatusMessage","Buffer","byteLength","onEnd","cb","push","ServerlessContext","DIContext","context","options","maxStackSize","getRequestId","requestContext","requestId","awsRequestId","v4","replace","PlatformServerless","_injector","settings","promise","_promise","bootstrap","platform","createInjector","router","Promise","all","initRouter","init","find","callbacks","tokens","concat","routes","getOperationsRoutes","operationRoute","operationId","propertyName","callback","_router","on","ready","stop","loadInjector","then","entity","JsonEntityStore","fromMethod","platformHandler","logger","default","FindMyMay","caseSensitive","ignoreTrailingSlash","$log","Env","TEST","level","container","createContainer","setLoggerLevel","load","LambdaClientRequest","createFakeEvent","createFakeContext","lambdaName","resolvers","resolve","reject","post","put","patch","delete","multiValueHeaders","multiValueQueryStringParameters","resource","stageVariables","accountId","apiId","identity","stage","requestTimeEpoch","resourceId","resourcePath","callbackWaitsForEmptyEventLoop","functionName","functionVersion","invokedFunctionArn","logGroupName","logStreamName","memoryLimitInMB","assign","lambda","setTimeout","PlatformServerlessTest","DITest","before","instance","configure","reset","hasInjector","createServerlessContext"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import assert from 'assert';
|
|
2
2
|
import http from 'http';
|
|
3
|
-
import { _ as _extends } from './index-
|
|
3
|
+
import { _ as _extends } from './index-a6c91998.js';
|
|
4
4
|
|
|
5
5
|
var UTF8_ACCEPT = 12;
|
|
6
6
|
var UTF8_REJECT = 0;
|
|
@@ -2347,4 +2347,4 @@ var index = /*#__PURE__*/Object.assign(/*#__PURE__*/Object.create(null), findMyW
|
|
|
2347
2347
|
});
|
|
2348
2348
|
|
|
2349
2349
|
export { index as i };
|
|
2350
|
-
//# sourceMappingURL=index-
|
|
2350
|
+
//# sourceMappingURL=index-b255dcf0.js.map
|