@tsed/platform-serverless 6.71.1 → 6.72.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/jest.config.js +1 -1
- package/lib/index.js +16 -4
- package/lib/index.js.map +1 -1
- package/lib/index.modern.js +16 -4
- package/lib/index.modern.js.map +1 -1
- package/lib/services/PlatformServerlessTest.d.ts +1 -0
- package/package.json +8 -8
package/jest.config.js
CHANGED
package/lib/index.js
CHANGED
|
@@ -599,10 +599,20 @@ class ServerlessContext extends di.DIContext {
|
|
|
599
599
|
|
|
600
600
|
}
|
|
601
601
|
|
|
602
|
+
function getReqId(event, context) {
|
|
603
|
+
var _event$requestContext;
|
|
604
|
+
|
|
605
|
+
if (event != null && event.headers && event.headers["x-request-id"]) {
|
|
606
|
+
return event.headers["x-request-id"];
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
return (event == null ? void 0 : (_event$requestContext = event.requestContext) == null ? void 0 : _event$requestContext.requestId) || (context == null ? void 0 : context.awsRequestId) || uuid.v4().replace(/-/gi, "");
|
|
610
|
+
}
|
|
602
611
|
/**
|
|
603
612
|
* @platform
|
|
604
613
|
*/
|
|
605
614
|
|
|
615
|
+
|
|
606
616
|
var _injector = /*#__PURE__*/_classPrivateFieldLooseKey("injector");
|
|
607
617
|
|
|
608
618
|
var _promise = /*#__PURE__*/_classPrivateFieldLooseKey("promise");
|
|
@@ -664,8 +674,6 @@ class PlatformServerless {
|
|
|
664
674
|
const entity = schema.JsonEntityStore.fromMethod(token, propertyKey);
|
|
665
675
|
let handler;
|
|
666
676
|
return async (event, context) => {
|
|
667
|
-
var _event$requestContext;
|
|
668
|
-
|
|
669
677
|
await _classPrivateFieldLooseBase(this, _promise)[_promise];
|
|
670
678
|
|
|
671
679
|
if (!handler) {
|
|
@@ -674,11 +682,10 @@ class PlatformServerless {
|
|
|
674
682
|
handler = await platformHandler.createHandler(token, propertyKey);
|
|
675
683
|
}
|
|
676
684
|
|
|
677
|
-
const reqId = (event == null ? void 0 : (_event$requestContext = event.requestContext) == null ? void 0 : _event$requestContext.requestId) || uuid.v4().replace(/-/gi, "");
|
|
678
685
|
const $ctx = new ServerlessContext({
|
|
679
686
|
event,
|
|
680
687
|
context,
|
|
681
|
-
id:
|
|
688
|
+
id: getReqId(event, context),
|
|
682
689
|
logger: this.injector.logger,
|
|
683
690
|
injector: this.injector,
|
|
684
691
|
endpoint: entity
|
|
@@ -837,6 +844,11 @@ class LambdaClientRequest extends Promise {
|
|
|
837
844
|
return this;
|
|
838
845
|
}
|
|
839
846
|
|
|
847
|
+
headers(headers) {
|
|
848
|
+
this.event.headers = _extends({}, this.event.headers, JSON.parse(JSON.stringify(headers)));
|
|
849
|
+
return this;
|
|
850
|
+
}
|
|
851
|
+
|
|
840
852
|
body(body) {
|
|
841
853
|
if (body !== undefined) {
|
|
842
854
|
this.event.headers["content-type"] = "application/json";
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/utils/setResponseHeaders.ts","../src/builder/PlatformServerlessHandler.ts","../src/domain/ServerlessRequest.ts","../src/domain/ServerlessResponse.ts","../src/domain/ServerlessContext.ts","../src/builder/PlatformServerless.ts","../src/services/PlatformServerlessTest.ts","../src/decorators/lambda.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, isBoolean, isNumber, isStream, isString} from \"@tsed/core\";\nimport {BaseContext, Inject, Injectable, InjectorService, ProviderScope, TokenProvider} from \"@tsed/di\";\nimport {serialize} from \"@tsed/json-mapper\";\nimport {PlatformExceptions} from \"@tsed/platform-exceptions\";\nimport {DeserializerPipe, PlatformParams, ValidationPipe} from \"@tsed/platform-params\";\nimport {ServerlessContext} from \"../domain/ServerlessContext\";\nimport {setResponseHeaders} from \"../utils/setResponseHeaders\";\n\nfunction shouldBeSent(data: any) {\n return Buffer.isBuffer(data) || isBoolean(data) || isNumber(data) || isString(data) || data === null;\n}\n\nfunction shouldBeSerialized(data: any) {\n return !(isStream(data) || shouldBeSent(data) || data === undefined);\n}\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 @Inject()\n protected exceptions: 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 await this.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 (shouldBeSerialized(body)) {\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 (shouldBeSerialized(data)) {\n data = serialize(data, {\n ...$ctx.endpoint.getResponseOptions()\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 {};\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 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 isHeadersSent() {\n return this.#isHeadersSent;\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 {Env, Type} from \"@tsed/core\";\nimport {createContainer, InjectorService, setLoggerLevel} from \"@tsed/di\";\nimport {$log, Logger} from \"@tsed/logger\";\nimport {JsonEntityStore} from \"@tsed/schema\";\nimport type {\n APIGatewayEventDefaultAuthorizerContext,\n APIGatewayProxyEventBase,\n APIGatewayProxyHandler,\n APIGatewayProxyResult,\n Context\n} from \"aws-lambda\";\nimport {v4} from \"uuid\";\nimport {ServerlessContext} from \"../domain/ServerlessContext\";\nimport {PlatformServerlessHandler} from \"./PlatformServerlessHandler\";\n\n/**\n * @platform\n */\nexport class PlatformServerless {\n readonly name: string = \"PlatformServerless\";\n\n #injector: InjectorService;\n #promise: Promise<void>;\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\n platform.bootstrap(settings);\n\n return platform;\n }\n\n public callbacks(tokens: Type | Type[] = [], exports = {}): Record<string, APIGatewayProxyHandler> {\n return this.settings\n .get<Type[]>(\"lambda\", [])\n .concat(tokens)\n .map((token) => {\n const store = JsonEntityStore.from(token);\n\n return [...store.children.values()].reduce((list, store) => {\n const operationId = store.operation?.get(\"operationId\");\n\n return operationId ? [...list, {store, operationId}] : list;\n }, []);\n })\n .flat()\n .reduce((exports, {store, operationId}) => {\n return {\n ...exports,\n [operationId]: this.callback(store.token, store.propertyName)\n };\n }, exports);\n }\n\n public callback(token: Type<any>, propertyKey: string): APIGatewayProxyHandler {\n const entity = JsonEntityStore.fromMethod(token, propertyKey);\n let handler: ($ctx: ServerlessContext) => Promise<APIGatewayProxyResult>;\n\n return async (event: APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>, context: Context) => {\n await this.#promise;\n\n if (!handler) {\n const platformHandler = this.#injector.get<PlatformServerlessHandler>(PlatformServerlessHandler)!;\n handler = await platformHandler.createHandler(token, propertyKey);\n }\n\n const reqId = event?.requestContext?.requestId || v4().replace(/-/gi, \"\");\n\n const $ctx = new ServerlessContext({\n event,\n context,\n id: reqId,\n logger: this.injector.logger as Logger,\n injector: this.injector,\n endpoint: entity\n });\n\n return handler($ctx);\n };\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 protected bootstrap(settings: Partial<TsED.Configuration> = {}) {\n this.#promise = this.createInjector({\n ...settings,\n PLATFORM_NAME: this.name\n })\n .loadInjector()\n .then(() => this.ready());\n\n return this;\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 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 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 = \"POST\";\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 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 = await PlatformServerless.bootstrap(DITest.configure(settings));\n PlatformServerlessTest.instance = instance;\n PlatformServerlessTest.callbacks = instance.callbacks();\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","import {useDecorators} from \"@tsed/core\";\nimport {JsonEntityFn, JsonSchemaObject, OperationId, OperationMethods, OperationPath} from \"@tsed/schema\";\n\nexport interface LambdaOptions {\n name?: string;\n path: string;\n method: OperationMethods | string;\n}\n\nexport interface LambdaChainedDecorators {\n <T>(target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>): TypedPropertyDescriptor<T> | void;\n\n /**\n *\n * @param name\n */\n Name(name: string): this;\n\n Method(method: string): this;\n\n Path(path: string): this;\n}\n/**\n * Declare a lambda endpoint.\n *\n * ```typescript\n * export class Lambda {\n *\n * }\n * ```\n *\n * @decorator\n */\nexport function Lambda(name?: string): LambdaChainedDecorators {\n const options: LambdaOptions = {\n path: \"/\",\n method: \"\",\n name\n };\n\n const decorator: any = JsonEntityFn((entity) => {\n return useDecorators(OperationPath(options.method, options.path), OperationId(options.name || String(entity.propertyKey)));\n });\n\n decorator.Name = (name: string) => {\n options.name = name;\n return decorator;\n };\n\n decorator.Path = (path: string) => {\n options.path = path;\n return decorator;\n };\n\n decorator.Method = (method: string) => {\n options.method = method;\n return decorator;\n };\n\n return decorator;\n}\n\n/**\n * @param path\n * @decorators\n * @ignore\n */\nexport function Get(path: string = \"/\") {\n return Lambda().Path(path).Method(OperationMethods.GET);\n}\n\n/**\n * @param path\n * @decorators\n * @ignore\n */\nexport function Post(path: string = \"/\") {\n return Lambda().Path(path).Method(OperationMethods.POST);\n}\n\n/**\n * @param path\n * @decorators\n * @ignore\n */\nexport function Put(path: string = \"/\") {\n return Lambda().Path(path).Method(OperationMethods.PUT);\n}\n\n/**\n * @param path\n * @decorators\n * @ignore\n */\nexport function Patch(path: string = \"/\") {\n return Lambda().Path(path).Method(OperationMethods.PATCH);\n}\n\n/**\n * @param path\n * @decorators\n * @ignore\n */\nexport function Delete(path: string = \"/\") {\n return Lambda().Path(path).Method(OperationMethods.DELETE);\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","shouldBeSent","data","Buffer","isBuffer","isBoolean","isNumber","isString","shouldBeSerialized","isStream","PlatformServerlessHandler","createHandler","token","propertyKey","promisedHandler","params","compileHandler","$ctx","injector","emit","runInContext","resolver","AnyToPromise","handler","result","call","processResult","er","body","exceptions","catch","flush","getBody","JSON","stringify","id","isBase64Encoded","destroy","serialize","getResponseOptions","__decorate","Inject","InjectorService","PlatformParams","PlatformExceptions","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","set","value","setHeader","forEach","encodeUrl","contentType","mime","getType","contentLength","length","getContentLength","parseInt","getContentType","split","address","location","getStatusMessage","byteLength","onEnd","cb","push","isHeadersSent","ServerlessContext","DIContext","context","options","maxStackSize","PlatformServerless","settings","promise","bootstrap","platform","callbacks","tokens","exports","concat","map","store","JsonEntityStore","from","children","values","list","operationId","flat","callback","propertyName","entity","fromMethod","platformHandler","reqId","requestContext","requestId","v4","replace","logger","ready","stop","createInjector","PLATFORM_NAME","loadInjector","then","$log","Env","TEST","level","container","createContainer","setLoggerLevel","load","LambdaClientRequest","Promise","createFakeEvent","createFakeContext","lambdaName","resolvers","resolve","reject","init","multiValueHeaders","multiValueQueryStringParameters","resource","stageVariables","accountId","apiId","identity","stage","requestTimeEpoch","resourceId","resourcePath","awsRequestId","callbackWaitsForEmptyEventLoop","functionName","functionVersion","invokedFunctionArn","logGroupName","logStreamName","memoryLimitInMB","assign","post","patch","put","delete","lambda","setTimeout","PlatformServerlessTest","DITest","before","instance","configure","reset","hasInjector","_injector","createServerlessContext","Lambda","decorator","JsonEntityFn","useDecorators","OperationPath","OperationId","Name","Path","Method","Get","OperationMethods","GET","Post","POST","Put","PUT","Patch","PATCH","Delete","DELETE"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/utils/setResponseHeaders.ts","../src/builder/PlatformServerlessHandler.ts","../src/domain/ServerlessRequest.ts","../src/domain/ServerlessResponse.ts","../src/domain/ServerlessContext.ts","../src/builder/PlatformServerless.ts","../src/services/PlatformServerlessTest.ts","../src/decorators/lambda.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, isBoolean, isNumber, isStream, isString} from \"@tsed/core\";\nimport {BaseContext, Inject, Injectable, InjectorService, ProviderScope, TokenProvider} from \"@tsed/di\";\nimport {serialize} from \"@tsed/json-mapper\";\nimport {PlatformExceptions} from \"@tsed/platform-exceptions\";\nimport {DeserializerPipe, PlatformParams, ValidationPipe} from \"@tsed/platform-params\";\nimport {ServerlessContext} from \"../domain/ServerlessContext\";\nimport {setResponseHeaders} from \"../utils/setResponseHeaders\";\n\nfunction shouldBeSent(data: any) {\n return Buffer.isBuffer(data) || isBoolean(data) || isNumber(data) || isString(data) || data === null;\n}\n\nfunction shouldBeSerialized(data: any) {\n return !(isStream(data) || shouldBeSent(data) || data === undefined);\n}\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 @Inject()\n protected exceptions: 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 await this.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 (shouldBeSerialized(body)) {\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 (shouldBeSerialized(data)) {\n data = serialize(data, {\n ...$ctx.endpoint.getResponseOptions()\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 {};\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 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 isHeadersSent() {\n return this.#isHeadersSent;\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 {Env, Type} from \"@tsed/core\";\nimport {createContainer, InjectorService, setLoggerLevel} from \"@tsed/di\";\nimport {$log, Logger} from \"@tsed/logger\";\nimport {JsonEntityStore} from \"@tsed/schema\";\nimport type {\n APIGatewayEventDefaultAuthorizerContext,\n APIGatewayProxyEventBase,\n APIGatewayProxyHandler,\n APIGatewayProxyResult,\n Context\n} from \"aws-lambda\";\nimport {v4} from \"uuid\";\nimport {ServerlessContext} from \"../domain/ServerlessContext\";\nimport {PlatformServerlessHandler} from \"./PlatformServerlessHandler\";\n\nfunction getReqId(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\n/**\n * @platform\n */\nexport class PlatformServerless {\n readonly name: string = \"PlatformServerless\";\n\n #injector: InjectorService;\n #promise: Promise<void>;\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\n platform.bootstrap(settings);\n\n return platform;\n }\n\n public callbacks(tokens: Type | Type[] = [], exports = {}): Record<string, APIGatewayProxyHandler> {\n return this.settings\n .get<Type[]>(\"lambda\", [])\n .concat(tokens)\n .map((token) => {\n const store = JsonEntityStore.from(token);\n\n return [...store.children.values()].reduce((list, store) => {\n const operationId = store.operation?.get(\"operationId\");\n\n return operationId ? [...list, {store, operationId}] : list;\n }, []);\n })\n .flat()\n .reduce((exports, {store, operationId}) => {\n return {\n ...exports,\n [operationId]: this.callback(store.token, store.propertyName)\n };\n }, exports);\n }\n\n public callback(token: Type<any>, propertyKey: string): APIGatewayProxyHandler {\n const entity = JsonEntityStore.fromMethod(token, propertyKey);\n let handler: ($ctx: ServerlessContext) => Promise<APIGatewayProxyResult>;\n\n return async (event: APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>, context: Context) => {\n await this.#promise;\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: getReqId(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 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 protected bootstrap(settings: Partial<TsED.Configuration> = {}) {\n this.#promise = this.createInjector({\n ...settings,\n PLATFORM_NAME: this.name\n })\n .loadInjector()\n .then(() => this.ready());\n\n return this;\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 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 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 = \"POST\";\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 = await PlatformServerless.bootstrap(DITest.configure(settings));\n PlatformServerlessTest.instance = instance;\n PlatformServerlessTest.callbacks = instance.callbacks();\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","import {useDecorators} from \"@tsed/core\";\nimport {JsonEntityFn, JsonSchemaObject, OperationId, OperationMethods, OperationPath} from \"@tsed/schema\";\n\nexport interface LambdaOptions {\n name?: string;\n path: string;\n method: OperationMethods | string;\n}\n\nexport interface LambdaChainedDecorators {\n <T>(target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>): TypedPropertyDescriptor<T> | void;\n\n /**\n *\n * @param name\n */\n Name(name: string): this;\n\n Method(method: string): this;\n\n Path(path: string): this;\n}\n/**\n * Declare a lambda endpoint.\n *\n * ```typescript\n * export class Lambda {\n *\n * }\n * ```\n *\n * @decorator\n */\nexport function Lambda(name?: string): LambdaChainedDecorators {\n const options: LambdaOptions = {\n path: \"/\",\n method: \"\",\n name\n };\n\n const decorator: any = JsonEntityFn((entity) => {\n return useDecorators(OperationPath(options.method, options.path), OperationId(options.name || String(entity.propertyKey)));\n });\n\n decorator.Name = (name: string) => {\n options.name = name;\n return decorator;\n };\n\n decorator.Path = (path: string) => {\n options.path = path;\n return decorator;\n };\n\n decorator.Method = (method: string) => {\n options.method = method;\n return decorator;\n };\n\n return decorator;\n}\n\n/**\n * @param path\n * @decorators\n * @ignore\n */\nexport function Get(path: string = \"/\") {\n return Lambda().Path(path).Method(OperationMethods.GET);\n}\n\n/**\n * @param path\n * @decorators\n * @ignore\n */\nexport function Post(path: string = \"/\") {\n return Lambda().Path(path).Method(OperationMethods.POST);\n}\n\n/**\n * @param path\n * @decorators\n * @ignore\n */\nexport function Put(path: string = \"/\") {\n return Lambda().Path(path).Method(OperationMethods.PUT);\n}\n\n/**\n * @param path\n * @decorators\n * @ignore\n */\nexport function Patch(path: string = \"/\") {\n return Lambda().Path(path).Method(OperationMethods.PATCH);\n}\n\n/**\n * @param path\n * @decorators\n * @ignore\n */\nexport function Delete(path: string = \"/\") {\n return Lambda().Path(path).Method(OperationMethods.DELETE);\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","shouldBeSent","data","Buffer","isBuffer","isBoolean","isNumber","isString","shouldBeSerialized","isStream","PlatformServerlessHandler","createHandler","token","propertyKey","promisedHandler","params","compileHandler","$ctx","injector","emit","runInContext","resolver","AnyToPromise","handler","result","call","processResult","er","body","exceptions","catch","flush","getBody","JSON","stringify","id","isBase64Encoded","destroy","serialize","getResponseOptions","__decorate","Inject","InjectorService","PlatformParams","PlatformExceptions","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","set","value","setHeader","forEach","encodeUrl","contentType","mime","getType","contentLength","length","getContentLength","parseInt","getContentType","split","address","location","getStatusMessage","byteLength","onEnd","cb","push","isHeadersSent","ServerlessContext","DIContext","context","options","maxStackSize","getReqId","requestContext","requestId","awsRequestId","v4","replace","PlatformServerless","settings","promise","bootstrap","platform","callbacks","tokens","exports","concat","map","store","JsonEntityStore","from","children","values","list","operationId","flat","callback","propertyName","entity","fromMethod","platformHandler","logger","ready","stop","createInjector","PLATFORM_NAME","loadInjector","then","$log","Env","TEST","level","container","createContainer","setLoggerLevel","load","LambdaClientRequest","Promise","createFakeEvent","createFakeContext","lambdaName","resolvers","resolve","reject","init","multiValueHeaders","multiValueQueryStringParameters","resource","stageVariables","accountId","apiId","identity","stage","requestTimeEpoch","resourceId","resourcePath","callbackWaitsForEmptyEventLoop","functionName","functionVersion","invokedFunctionArn","logGroupName","logStreamName","memoryLimitInMB","assign","post","patch","put","delete","lambda","setTimeout","PlatformServerlessTest","DITest","before","instance","configure","reset","hasInjector","_injector","createServerlessContext","Lambda","decorator","JsonEntityFn","useDecorators","OperationPath","OperationId","Name","Path","Method","Get","OperationMethods","GET","Post","POST","Put","PUT","Patch","PATCH","Delete","DELETE"],"mappings":"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"}
|
package/lib/index.modern.js
CHANGED
|
@@ -579,10 +579,20 @@ class ServerlessContext extends DIContext {
|
|
|
579
579
|
|
|
580
580
|
}
|
|
581
581
|
|
|
582
|
+
function getReqId(event, context) {
|
|
583
|
+
var _event$requestContext;
|
|
584
|
+
|
|
585
|
+
if (event != null && event.headers && event.headers["x-request-id"]) {
|
|
586
|
+
return event.headers["x-request-id"];
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
return (event == null ? void 0 : (_event$requestContext = event.requestContext) == null ? void 0 : _event$requestContext.requestId) || (context == null ? void 0 : context.awsRequestId) || v4().replace(/-/gi, "");
|
|
590
|
+
}
|
|
582
591
|
/**
|
|
583
592
|
* @platform
|
|
584
593
|
*/
|
|
585
594
|
|
|
595
|
+
|
|
586
596
|
var _injector = /*#__PURE__*/_classPrivateFieldLooseKey("injector");
|
|
587
597
|
|
|
588
598
|
var _promise = /*#__PURE__*/_classPrivateFieldLooseKey("promise");
|
|
@@ -646,8 +656,6 @@ class PlatformServerless {
|
|
|
646
656
|
const entity = JsonEntityStore.fromMethod(token, propertyKey);
|
|
647
657
|
let handler;
|
|
648
658
|
return async function (event, context) {
|
|
649
|
-
var _event$requestContext;
|
|
650
|
-
|
|
651
659
|
await _classPrivateFieldLooseBase(_this, _promise)[_promise];
|
|
652
660
|
|
|
653
661
|
if (!handler) {
|
|
@@ -656,11 +664,10 @@ class PlatformServerless {
|
|
|
656
664
|
handler = await platformHandler.createHandler(token, propertyKey);
|
|
657
665
|
}
|
|
658
666
|
|
|
659
|
-
const reqId = (event == null ? void 0 : (_event$requestContext = event.requestContext) == null ? void 0 : _event$requestContext.requestId) || v4().replace(/-/gi, "");
|
|
660
667
|
const $ctx = new ServerlessContext({
|
|
661
668
|
event,
|
|
662
669
|
context,
|
|
663
|
-
id:
|
|
670
|
+
id: getReqId(event, context),
|
|
664
671
|
logger: _this.injector.logger,
|
|
665
672
|
injector: _this.injector,
|
|
666
673
|
endpoint: entity
|
|
@@ -819,6 +826,11 @@ class LambdaClientRequest extends Promise {
|
|
|
819
826
|
return this;
|
|
820
827
|
}
|
|
821
828
|
|
|
829
|
+
headers(headers) {
|
|
830
|
+
this.event.headers = _extends({}, this.event.headers, JSON.parse(JSON.stringify(headers)));
|
|
831
|
+
return this;
|
|
832
|
+
}
|
|
833
|
+
|
|
822
834
|
body(body) {
|
|
823
835
|
if (body !== undefined) {
|
|
824
836
|
this.event.headers["content-type"] = "application/json";
|
package/lib/index.modern.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.modern.js","sources":["../src/utils/setResponseHeaders.ts","../src/builder/PlatformServerlessHandler.ts","../src/domain/ServerlessRequest.ts","../src/domain/ServerlessResponse.ts","../src/domain/ServerlessContext.ts","../src/builder/PlatformServerless.ts","../src/services/PlatformServerlessTest.ts","../src/decorators/lambda.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, isBoolean, isNumber, isStream, isString} from \"@tsed/core\";\nimport {BaseContext, Inject, Injectable, InjectorService, ProviderScope, TokenProvider} from \"@tsed/di\";\nimport {serialize} from \"@tsed/json-mapper\";\nimport {PlatformExceptions} from \"@tsed/platform-exceptions\";\nimport {DeserializerPipe, PlatformParams, ValidationPipe} from \"@tsed/platform-params\";\nimport {ServerlessContext} from \"../domain/ServerlessContext\";\nimport {setResponseHeaders} from \"../utils/setResponseHeaders\";\n\nfunction shouldBeSent(data: any) {\n return Buffer.isBuffer(data) || isBoolean(data) || isNumber(data) || isString(data) || data === null;\n}\n\nfunction shouldBeSerialized(data: any) {\n return !(isStream(data) || shouldBeSent(data) || data === undefined);\n}\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 @Inject()\n protected exceptions: 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 await this.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 (shouldBeSerialized(body)) {\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 (shouldBeSerialized(data)) {\n data = serialize(data, {\n ...$ctx.endpoint.getResponseOptions()\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 {};\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 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 isHeadersSent() {\n return this.#isHeadersSent;\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 {Env, Type} from \"@tsed/core\";\nimport {createContainer, InjectorService, setLoggerLevel} from \"@tsed/di\";\nimport {$log, Logger} from \"@tsed/logger\";\nimport {JsonEntityStore} from \"@tsed/schema\";\nimport type {\n APIGatewayEventDefaultAuthorizerContext,\n APIGatewayProxyEventBase,\n APIGatewayProxyHandler,\n APIGatewayProxyResult,\n Context\n} from \"aws-lambda\";\nimport {v4} from \"uuid\";\nimport {ServerlessContext} from \"../domain/ServerlessContext\";\nimport {PlatformServerlessHandler} from \"./PlatformServerlessHandler\";\n\n/**\n * @platform\n */\nexport class PlatformServerless {\n readonly name: string = \"PlatformServerless\";\n\n #injector: InjectorService;\n #promise: Promise<void>;\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\n platform.bootstrap(settings);\n\n return platform;\n }\n\n public callbacks(tokens: Type | Type[] = [], exports = {}): Record<string, APIGatewayProxyHandler> {\n return this.settings\n .get<Type[]>(\"lambda\", [])\n .concat(tokens)\n .map((token) => {\n const store = JsonEntityStore.from(token);\n\n return [...store.children.values()].reduce((list, store) => {\n const operationId = store.operation?.get(\"operationId\");\n\n return operationId ? [...list, {store, operationId}] : list;\n }, []);\n })\n .flat()\n .reduce((exports, {store, operationId}) => {\n return {\n ...exports,\n [operationId]: this.callback(store.token, store.propertyName)\n };\n }, exports);\n }\n\n public callback(token: Type<any>, propertyKey: string): APIGatewayProxyHandler {\n const entity = JsonEntityStore.fromMethod(token, propertyKey);\n let handler: ($ctx: ServerlessContext) => Promise<APIGatewayProxyResult>;\n\n return async (event: APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>, context: Context) => {\n await this.#promise;\n\n if (!handler) {\n const platformHandler = this.#injector.get<PlatformServerlessHandler>(PlatformServerlessHandler)!;\n handler = await platformHandler.createHandler(token, propertyKey);\n }\n\n const reqId = event?.requestContext?.requestId || v4().replace(/-/gi, \"\");\n\n const $ctx = new ServerlessContext({\n event,\n context,\n id: reqId,\n logger: this.injector.logger as Logger,\n injector: this.injector,\n endpoint: entity\n });\n\n return handler($ctx);\n };\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 protected bootstrap(settings: Partial<TsED.Configuration> = {}) {\n this.#promise = this.createInjector({\n ...settings,\n PLATFORM_NAME: this.name\n })\n .loadInjector()\n .then(() => this.ready());\n\n return this;\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 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 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 = \"POST\";\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 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 = await PlatformServerless.bootstrap(DITest.configure(settings));\n PlatformServerlessTest.instance = instance;\n PlatformServerlessTest.callbacks = instance.callbacks();\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","import {useDecorators} from \"@tsed/core\";\nimport {JsonEntityFn, JsonSchemaObject, OperationId, OperationMethods, OperationPath} from \"@tsed/schema\";\n\nexport interface LambdaOptions {\n name?: string;\n path: string;\n method: OperationMethods | string;\n}\n\nexport interface LambdaChainedDecorators {\n <T>(target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>): TypedPropertyDescriptor<T> | void;\n\n /**\n *\n * @param name\n */\n Name(name: string): this;\n\n Method(method: string): this;\n\n Path(path: string): this;\n}\n/**\n * Declare a lambda endpoint.\n *\n * ```typescript\n * export class Lambda {\n *\n * }\n * ```\n *\n * @decorator\n */\nexport function Lambda(name?: string): LambdaChainedDecorators {\n const options: LambdaOptions = {\n path: \"/\",\n method: \"\",\n name\n };\n\n const decorator: any = JsonEntityFn((entity) => {\n return useDecorators(OperationPath(options.method, options.path), OperationId(options.name || String(entity.propertyKey)));\n });\n\n decorator.Name = (name: string) => {\n options.name = name;\n return decorator;\n };\n\n decorator.Path = (path: string) => {\n options.path = path;\n return decorator;\n };\n\n decorator.Method = (method: string) => {\n options.method = method;\n return decorator;\n };\n\n return decorator;\n}\n\n/**\n * @param path\n * @decorators\n * @ignore\n */\nexport function Get(path: string = \"/\") {\n return Lambda().Path(path).Method(OperationMethods.GET);\n}\n\n/**\n * @param path\n * @decorators\n * @ignore\n */\nexport function Post(path: string = \"/\") {\n return Lambda().Path(path).Method(OperationMethods.POST);\n}\n\n/**\n * @param path\n * @decorators\n * @ignore\n */\nexport function Put(path: string = \"/\") {\n return Lambda().Path(path).Method(OperationMethods.PUT);\n}\n\n/**\n * @param path\n * @decorators\n * @ignore\n */\nexport function Patch(path: string = \"/\") {\n return Lambda().Path(path).Method(OperationMethods.PATCH);\n}\n\n/**\n * @param path\n * @decorators\n * @ignore\n */\nexport function Delete(path: string = \"/\") {\n return Lambda().Path(path).Method(OperationMethods.DELETE);\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","shouldBeSent","data","Buffer","isBuffer","isBoolean","isNumber","isString","shouldBeSerialized","isStream","PlatformServerlessHandler","createHandler","token","propertyKey","promisedHandler","params","compileHandler","$ctx","injector","emit","runInContext","resolver","AnyToPromise","handler","result","call","processResult","er","body","exceptions","catch","flush","getBody","JSON","stringify","id","isBase64Encoded","destroy","serialize","getResponseOptions","__decorate","Inject","InjectorService","PlatformParams","PlatformExceptions","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","set","value","setHeader","forEach","encodeUrl","contentType","mime","getType","contentLength","length","getContentLength","parseInt","getContentType","split","address","location","getStatusMessage","byteLength","onEnd","cb","push","isHeadersSent","ServerlessContext","DIContext","context","options","maxStackSize","PlatformServerless","settings","promise","bootstrap","platform","callbacks","tokens","exports","concat","map","store","JsonEntityStore","from","children","values","list","operationId","flat","callback","propertyName","entity","fromMethod","platformHandler","reqId","requestContext","requestId","v4","replace","logger","ready","stop","createInjector","PLATFORM_NAME","loadInjector","then","$log","Env","TEST","level","container","createContainer","setLoggerLevel","load","LambdaClientRequest","Promise","createFakeEvent","createFakeContext","lambdaName","resolvers","resolve","reject","init","multiValueHeaders","multiValueQueryStringParameters","resource","stageVariables","accountId","apiId","identity","stage","requestTimeEpoch","resourceId","resourcePath","awsRequestId","callbackWaitsForEmptyEventLoop","functionName","functionVersion","invokedFunctionArn","logGroupName","logStreamName","memoryLimitInMB","assign","post","patch","put","delete","lambda","setTimeout","PlatformServerlessTest","DITest","before","instance","configure","reset","hasInjector","_injector","createServerlessContext","Lambda","decorator","JsonEntityFn","useDecorators","OperationPath","OperationId","Name","Path","Method","Get","OperationMethods","GET","Post","POST","Put","PUT","Patch","PATCH","Delete","DELETE"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.modern.js","sources":["../src/utils/setResponseHeaders.ts","../src/builder/PlatformServerlessHandler.ts","../src/domain/ServerlessRequest.ts","../src/domain/ServerlessResponse.ts","../src/domain/ServerlessContext.ts","../src/builder/PlatformServerless.ts","../src/services/PlatformServerlessTest.ts","../src/decorators/lambda.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, isBoolean, isNumber, isStream, isString} from \"@tsed/core\";\nimport {BaseContext, Inject, Injectable, InjectorService, ProviderScope, TokenProvider} from \"@tsed/di\";\nimport {serialize} from \"@tsed/json-mapper\";\nimport {PlatformExceptions} from \"@tsed/platform-exceptions\";\nimport {DeserializerPipe, PlatformParams, ValidationPipe} from \"@tsed/platform-params\";\nimport {ServerlessContext} from \"../domain/ServerlessContext\";\nimport {setResponseHeaders} from \"../utils/setResponseHeaders\";\n\nfunction shouldBeSent(data: any) {\n return Buffer.isBuffer(data) || isBoolean(data) || isNumber(data) || isString(data) || data === null;\n}\n\nfunction shouldBeSerialized(data: any) {\n return !(isStream(data) || shouldBeSent(data) || data === undefined);\n}\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 @Inject()\n protected exceptions: 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 await this.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 (shouldBeSerialized(body)) {\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 (shouldBeSerialized(data)) {\n data = serialize(data, {\n ...$ctx.endpoint.getResponseOptions()\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 {};\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 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 isHeadersSent() {\n return this.#isHeadersSent;\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 {Env, Type} from \"@tsed/core\";\nimport {createContainer, InjectorService, setLoggerLevel} from \"@tsed/di\";\nimport {$log, Logger} from \"@tsed/logger\";\nimport {JsonEntityStore} from \"@tsed/schema\";\nimport type {\n APIGatewayEventDefaultAuthorizerContext,\n APIGatewayProxyEventBase,\n APIGatewayProxyHandler,\n APIGatewayProxyResult,\n Context\n} from \"aws-lambda\";\nimport {v4} from \"uuid\";\nimport {ServerlessContext} from \"../domain/ServerlessContext\";\nimport {PlatformServerlessHandler} from \"./PlatformServerlessHandler\";\n\nfunction getReqId(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\n/**\n * @platform\n */\nexport class PlatformServerless {\n readonly name: string = \"PlatformServerless\";\n\n #injector: InjectorService;\n #promise: Promise<void>;\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\n platform.bootstrap(settings);\n\n return platform;\n }\n\n public callbacks(tokens: Type | Type[] = [], exports = {}): Record<string, APIGatewayProxyHandler> {\n return this.settings\n .get<Type[]>(\"lambda\", [])\n .concat(tokens)\n .map((token) => {\n const store = JsonEntityStore.from(token);\n\n return [...store.children.values()].reduce((list, store) => {\n const operationId = store.operation?.get(\"operationId\");\n\n return operationId ? [...list, {store, operationId}] : list;\n }, []);\n })\n .flat()\n .reduce((exports, {store, operationId}) => {\n return {\n ...exports,\n [operationId]: this.callback(store.token, store.propertyName)\n };\n }, exports);\n }\n\n public callback(token: Type<any>, propertyKey: string): APIGatewayProxyHandler {\n const entity = JsonEntityStore.fromMethod(token, propertyKey);\n let handler: ($ctx: ServerlessContext) => Promise<APIGatewayProxyResult>;\n\n return async (event: APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>, context: Context) => {\n await this.#promise;\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: getReqId(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 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 protected bootstrap(settings: Partial<TsED.Configuration> = {}) {\n this.#promise = this.createInjector({\n ...settings,\n PLATFORM_NAME: this.name\n })\n .loadInjector()\n .then(() => this.ready());\n\n return this;\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 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 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 = \"POST\";\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 = await PlatformServerless.bootstrap(DITest.configure(settings));\n PlatformServerlessTest.instance = instance;\n PlatformServerlessTest.callbacks = instance.callbacks();\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","import {useDecorators} from \"@tsed/core\";\nimport {JsonEntityFn, JsonSchemaObject, OperationId, OperationMethods, OperationPath} from \"@tsed/schema\";\n\nexport interface LambdaOptions {\n name?: string;\n path: string;\n method: OperationMethods | string;\n}\n\nexport interface LambdaChainedDecorators {\n <T>(target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>): TypedPropertyDescriptor<T> | void;\n\n /**\n *\n * @param name\n */\n Name(name: string): this;\n\n Method(method: string): this;\n\n Path(path: string): this;\n}\n/**\n * Declare a lambda endpoint.\n *\n * ```typescript\n * export class Lambda {\n *\n * }\n * ```\n *\n * @decorator\n */\nexport function Lambda(name?: string): LambdaChainedDecorators {\n const options: LambdaOptions = {\n path: \"/\",\n method: \"\",\n name\n };\n\n const decorator: any = JsonEntityFn((entity) => {\n return useDecorators(OperationPath(options.method, options.path), OperationId(options.name || String(entity.propertyKey)));\n });\n\n decorator.Name = (name: string) => {\n options.name = name;\n return decorator;\n };\n\n decorator.Path = (path: string) => {\n options.path = path;\n return decorator;\n };\n\n decorator.Method = (method: string) => {\n options.method = method;\n return decorator;\n };\n\n return decorator;\n}\n\n/**\n * @param path\n * @decorators\n * @ignore\n */\nexport function Get(path: string = \"/\") {\n return Lambda().Path(path).Method(OperationMethods.GET);\n}\n\n/**\n * @param path\n * @decorators\n * @ignore\n */\nexport function Post(path: string = \"/\") {\n return Lambda().Path(path).Method(OperationMethods.POST);\n}\n\n/**\n * @param path\n * @decorators\n * @ignore\n */\nexport function Put(path: string = \"/\") {\n return Lambda().Path(path).Method(OperationMethods.PUT);\n}\n\n/**\n * @param path\n * @decorators\n * @ignore\n */\nexport function Patch(path: string = \"/\") {\n return Lambda().Path(path).Method(OperationMethods.PATCH);\n}\n\n/**\n * @param path\n * @decorators\n * @ignore\n */\nexport function Delete(path: string = \"/\") {\n return Lambda().Path(path).Method(OperationMethods.DELETE);\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","shouldBeSent","data","Buffer","isBuffer","isBoolean","isNumber","isString","shouldBeSerialized","isStream","PlatformServerlessHandler","createHandler","token","propertyKey","promisedHandler","params","compileHandler","$ctx","injector","emit","runInContext","resolver","AnyToPromise","handler","result","call","processResult","er","body","exceptions","catch","flush","getBody","JSON","stringify","id","isBase64Encoded","destroy","serialize","getResponseOptions","__decorate","Inject","InjectorService","PlatformParams","PlatformExceptions","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","set","value","setHeader","forEach","encodeUrl","contentType","mime","getType","contentLength","length","getContentLength","parseInt","getContentType","split","address","location","getStatusMessage","byteLength","onEnd","cb","push","isHeadersSent","ServerlessContext","DIContext","context","options","maxStackSize","getReqId","requestContext","requestId","awsRequestId","v4","replace","PlatformServerless","settings","promise","bootstrap","platform","callbacks","tokens","exports","concat","map","store","JsonEntityStore","from","children","values","list","operationId","flat","callback","propertyName","entity","fromMethod","platformHandler","logger","ready","stop","createInjector","PLATFORM_NAME","loadInjector","then","$log","Env","TEST","level","container","createContainer","setLoggerLevel","load","LambdaClientRequest","Promise","createFakeEvent","createFakeContext","lambdaName","resolvers","resolve","reject","init","multiValueHeaders","multiValueQueryStringParameters","resource","stageVariables","accountId","apiId","identity","stage","requestTimeEpoch","resourceId","resourcePath","callbackWaitsForEmptyEventLoop","functionName","functionVersion","invokedFunctionArn","logGroupName","logStreamName","memoryLimitInMB","assign","post","patch","put","delete","lambda","setTimeout","PlatformServerlessTest","DITest","before","instance","configure","reset","hasInjector","_injector","createServerlessContext","Lambda","decorator","JsonEntityFn","useDecorators","OperationPath","OperationId","Name","Path","Method","Get","OperationMethods","GET","Post","POST","Put","PUT","Patch","PATCH","Delete","DELETE"],"mappings":"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"}
|
|
@@ -20,6 +20,7 @@ export declare class LambdaClientRequest extends Promise<APIGatewayProxyResult>
|
|
|
20
20
|
delete(path: string, body?: any, options?: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>>): this;
|
|
21
21
|
query(query: any): this;
|
|
22
22
|
params(pathParameters: any): this;
|
|
23
|
+
headers(headers: Record<string, any>): this;
|
|
23
24
|
body(body: any): this;
|
|
24
25
|
protected init(lambda: string, resolve: Function, reject: Function): void;
|
|
25
26
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tsed/platform-serverless",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.72.0",
|
|
4
4
|
"description": "Platform serverless module for Ts.ED Framework",
|
|
5
5
|
"private": false,
|
|
6
6
|
"source": "./src/index.ts",
|
|
@@ -15,14 +15,14 @@
|
|
|
15
15
|
"test": "cross-env NODE_ENV=test jest"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@tsed/core": "6.
|
|
19
|
-
"@tsed/di": "6.
|
|
20
|
-
"@tsed/exceptions": "6.
|
|
21
|
-
"@tsed/json-mapper": "6.
|
|
18
|
+
"@tsed/core": "6.72.0",
|
|
19
|
+
"@tsed/di": "6.72.0",
|
|
20
|
+
"@tsed/exceptions": "6.72.0",
|
|
21
|
+
"@tsed/json-mapper": "6.72.0",
|
|
22
22
|
"@tsed/logger": "^5.17.0",
|
|
23
|
-
"@tsed/platform-exceptions": "6.
|
|
24
|
-
"@tsed/platform-params": "6.
|
|
25
|
-
"@tsed/schema": "6.
|
|
23
|
+
"@tsed/platform-exceptions": "6.72.0",
|
|
24
|
+
"@tsed/platform-params": "6.72.0",
|
|
25
|
+
"@tsed/schema": "6.72.0",
|
|
26
26
|
"encodeurl": "^1.0.2",
|
|
27
27
|
"mime": "^2.5.2",
|
|
28
28
|
"tslib": "2.2.0",
|