@tsed/platform-serverless-testing 7.0.0-beta.11 → 7.0.0-beta.14

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.
@@ -6,11 +6,8 @@ const createFakeEvent_1 = require("./createFakeEvent");
6
6
  const createFakeContext_1 = require("./createFakeContext");
7
7
  const core_1 = require("@tsed/core");
8
8
  class LambdaClientRequest extends Promise {
9
- constructor() {
10
- super(...arguments);
11
- this.event = (0, createFakeEvent_1.createFakeEvent)();
12
- this.context = (0, createFakeContext_1.createFakeContext)();
13
- }
9
+ event = (0, createFakeEvent_1.createFakeEvent)();
10
+ context = (0, createFakeContext_1.createFakeContext)();
14
11
  static call(lambdaName) {
15
12
  const resolvers = {};
16
13
  const promise = new LambdaClientRequest((resolve, reject) => {
@@ -111,6 +108,9 @@ class LambdaClientRequest extends Promise {
111
108
  }
112
109
  exports.LambdaClientRequest = LambdaClientRequest;
113
110
  class PlatformServerlessTest extends di_1.DITest {
111
+ static callbacks = {};
112
+ static instance;
113
+ static request = LambdaClientRequest;
114
114
  static bootstrap(serverless, { server, ...settings }) {
115
115
  return async function before() {
116
116
  settings = di_1.DITest.configure(settings);
@@ -142,6 +142,4 @@ class PlatformServerlessTest extends di_1.DITest {
142
142
  }
143
143
  }
144
144
  exports.PlatformServerlessTest = PlatformServerlessTest;
145
- PlatformServerlessTest.callbacks = {};
146
- PlatformServerlessTest.request = LambdaClientRequest;
147
145
  //# sourceMappingURL=PlatformServerlessTest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlatformServerlessTest.js","sourceRoot":"","sources":["../../src/PlatformServerlessTest.ts"],"names":[],"mappings":"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","sourcesContent":["import {DITest} from \"@tsed/di\";\nimport {APIGatewayEventDefaultAuthorizerContext, APIGatewayProxyEventBase, APIGatewayProxyHandler} from \"aws-lambda\";\nimport {APIGatewayProxyResult} from \"aws-lambda/trigger/api-gateway-proxy\";\nimport {createFakeEvent} from \"./createFakeEvent\";\nimport {createFakeContext} from \"./createFakeContext\";\nimport {nameOf, Type} from \"@tsed/core\";\nimport {PlatformBuilder, PlatformBuilderSettings} from \"@tsed/common\";\n\nexport interface LambdaPromiseResult extends Promise<APIGatewayProxyResult> {}\n\nexport class LambdaClientRequest extends Promise<APIGatewayProxyResult> {\n event = createFakeEvent();\n context = createFakeContext();\n\n static call(lambdaName: string) {\n const resolvers: any = {};\n const promise = new LambdaClientRequest((resolve, reject) => {\n resolvers.resolve = resolve;\n resolvers.reject = reject;\n });\n\n promise.init(lambdaName, resolvers.resolve, resolvers.reject);\n\n return promise;\n }\n\n static get(path: string, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").get(path, options);\n }\n\n static post(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").post(path, body, options);\n }\n\n static put(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").put(path, body, options);\n }\n\n static patch(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").patch(path, body, options);\n }\n\n static delete(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").delete(path, body, options);\n }\n\n get(path: string, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"GET\";\n\n return this;\n }\n\n post(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"POST\";\n\n this.body(body);\n\n return this;\n }\n\n patch(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"PATCH\";\n\n this.body(body);\n\n return this;\n }\n\n put(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"PUT\";\n\n this.body(body);\n\n return this;\n }\n\n delete(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"DELETE\";\n\n this.body(body);\n\n return this;\n }\n\n query(query: any) {\n this.event.queryStringParameters = {\n ...this.event.queryStringParameters,\n ...JSON.parse(JSON.stringify(query))\n };\n\n return this;\n }\n\n params(pathParameters: any) {\n this.event.pathParameters = {\n ...this.event.pathParameters,\n ...JSON.parse(JSON.stringify(pathParameters))\n };\n\n return this;\n }\n\n headers(headers: Record<string, any>) {\n this.event.headers = {\n ...this.event.headers,\n ...JSON.parse(JSON.stringify(headers))\n };\n\n return this;\n }\n\n body(body: any) {\n if (body !== undefined) {\n this.event.headers[\"content-type\"] = \"application/json\";\n\n this.event.body = JSON.stringify(body);\n }\n\n return this;\n }\n\n protected init(lambda: string, resolve: Function, reject: Function) {\n setTimeout(async () => {\n try {\n const result = await PlatformServerlessTest.callbacks[lambda](this.event, this.context, resolve as any);\n resolve(result as any);\n } catch (er) {\n reject(er);\n }\n });\n }\n}\n\nexport class PlatformServerlessTest extends DITest {\n static callbacks: Record<string, APIGatewayProxyHandler> = {};\n static instance: any;\n static request = LambdaClientRequest;\n\n static bootstrap(\n serverless: {bootstrap: (server: Type<any>, settings: PlatformBuilderSettings<any, any>) => PlatformBuilder},\n {server, ...settings}: PlatformBuilderSettings<any, any> & {server: Type<any>}\n ): () => Promise<any>;\n static bootstrap(\n serverless: {bootstrap: (settings: Partial<TsED.Configuration> & {lambda?: Type[]}) => any},\n {server, ...settings}: PlatformBuilderSettings<any, any>\n ): () => Promise<any>;\n static bootstrap(serverless: any, {server, ...settings}: PlatformBuilderSettings<any, any>) {\n return async function before(): Promise<void> {\n settings = DITest.configure(settings);\n\n const isServerlessHttp = nameOf(serverless).includes(\"Http\");\n\n // @ts-ignore\n const instance = isServerlessHttp ? serverless.bootstrap(server, settings) : serverless.bootstrap(settings);\n\n PlatformServerlessTest.instance = instance;\n PlatformServerlessTest.callbacks = {};\n\n if (!isServerlessHttp) {\n PlatformServerlessTest.callbacks = instance.callbacks();\n }\n\n PlatformServerlessTest.callbacks.handler = instance.handler();\n // used by inject method\n DITest.injector = instance.injector;\n\n return instance.promise;\n };\n }\n\n /**\n * Resets the test injector of the test context, so it won't pollute your next test. Call this in your `tearDown` logic.\n */\n static async reset() {\n if (PlatformServerlessTest.instance) {\n await PlatformServerlessTest.instance.stop();\n }\n if (DITest.hasInjector()) {\n await DITest.injector.destroy();\n DITest._injector = null;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"PlatformServerlessTest.js","sourceRoot":"","sources":["../../src/PlatformServerlessTest.ts"],"names":[],"mappings":"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","sourcesContent":["import {DITest} from \"@tsed/di\";\nimport {APIGatewayEventDefaultAuthorizerContext, APIGatewayProxyEventBase, APIGatewayProxyHandler} from \"aws-lambda\";\nimport {APIGatewayProxyResult} from \"aws-lambda/trigger/api-gateway-proxy\";\nimport {createFakeEvent} from \"./createFakeEvent\";\nimport {createFakeContext} from \"./createFakeContext\";\nimport {nameOf, Type} from \"@tsed/core\";\nimport {PlatformBuilder, PlatformBuilderSettings} from \"@tsed/common\";\n\nexport interface LambdaPromiseResult extends Promise<APIGatewayProxyResult> {}\n\nexport class LambdaClientRequest extends Promise<APIGatewayProxyResult> {\n event = createFakeEvent();\n context = createFakeContext();\n\n static call(lambdaName: string) {\n const resolvers: any = {};\n const promise = new LambdaClientRequest((resolve, reject) => {\n resolvers.resolve = resolve;\n resolvers.reject = reject;\n });\n\n promise.init(lambdaName, resolvers.resolve, resolvers.reject);\n\n return promise;\n }\n\n static get(path: string, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").get(path, options);\n }\n\n static post(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").post(path, body, options);\n }\n\n static put(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").put(path, body, options);\n }\n\n static patch(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").patch(path, body, options);\n }\n\n static delete(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").delete(path, body, options);\n }\n\n get(path: string, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"GET\";\n\n return this;\n }\n\n post(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"POST\";\n\n this.body(body);\n\n return this;\n }\n\n patch(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"PATCH\";\n\n this.body(body);\n\n return this;\n }\n\n put(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"PUT\";\n\n this.body(body);\n\n return this;\n }\n\n delete(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"DELETE\";\n\n this.body(body);\n\n return this;\n }\n\n query(query: any) {\n this.event.queryStringParameters = {\n ...this.event.queryStringParameters,\n ...JSON.parse(JSON.stringify(query))\n };\n\n return this;\n }\n\n params(pathParameters: any) {\n this.event.pathParameters = {\n ...this.event.pathParameters,\n ...JSON.parse(JSON.stringify(pathParameters))\n };\n\n return this;\n }\n\n headers(headers: Record<string, any>) {\n this.event.headers = {\n ...this.event.headers,\n ...JSON.parse(JSON.stringify(headers))\n };\n\n return this;\n }\n\n body(body: any) {\n if (body !== undefined) {\n this.event.headers[\"content-type\"] = \"application/json\";\n\n this.event.body = JSON.stringify(body);\n }\n\n return this;\n }\n\n protected init(lambda: string, resolve: Function, reject: Function) {\n setTimeout(async () => {\n try {\n const result = await PlatformServerlessTest.callbacks[lambda](this.event, this.context, resolve as any);\n resolve(result as any);\n } catch (er) {\n reject(er);\n }\n });\n }\n}\n\nexport class PlatformServerlessTest extends DITest {\n static callbacks: Record<string, APIGatewayProxyHandler> = {};\n static instance: any;\n static request = LambdaClientRequest;\n\n static bootstrap(\n serverless: {bootstrap: (server: Type<any>, settings: PlatformBuilderSettings<any>) => PlatformBuilder},\n {server, ...settings}: PlatformBuilderSettings<any> & {server: Type<any>}\n ): () => Promise<any>;\n static bootstrap(\n serverless: {bootstrap: (settings: Partial<TsED.Configuration> & {lambda?: Type[]}) => any},\n {server, ...settings}: PlatformBuilderSettings<any>\n ): () => Promise<any>;\n static bootstrap(serverless: any, {server, ...settings}: PlatformBuilderSettings<any>) {\n return async function before(): Promise<void> {\n settings = DITest.configure(settings);\n\n const isServerlessHttp = nameOf(serverless).includes(\"Http\");\n\n // @ts-ignore\n const instance = isServerlessHttp ? serverless.bootstrap(server, settings) : serverless.bootstrap(settings);\n\n PlatformServerlessTest.instance = instance;\n PlatformServerlessTest.callbacks = {};\n\n if (!isServerlessHttp) {\n PlatformServerlessTest.callbacks = instance.callbacks();\n }\n\n PlatformServerlessTest.callbacks.handler = instance.handler();\n // used by inject method\n DITest.injector = instance.injector;\n\n return instance.promise;\n };\n }\n\n /**\n * Resets the test injector of the test context, so it won't pollute your next test. Call this in your `tearDown` logic.\n */\n static async reset() {\n if (PlatformServerlessTest.instance) {\n await PlatformServerlessTest.instance.stop();\n }\n if (DITest.hasInjector()) {\n await DITest.injector.destroy();\n DITest._injector = null;\n }\n }\n}\n"]}
@@ -16,7 +16,7 @@ function createFakeEvent(event = {}) {
16
16
  stageVariables: {},
17
17
  ...event,
18
18
  requestContext: {
19
- ...event === null || event === void 0 ? void 0 : event.requestContext,
19
+ ...event?.requestContext,
20
20
  accountId: "",
21
21
  apiId: "",
22
22
  protocol: "https",
@@ -1 +1 @@
1
- {"version":3,"file":"createFakeEvent.js","sourceRoot":"","sources":["../../src/createFakeEvent.ts"],"names":[],"mappings":";;;AAEA,SAAgB,eAAe,CAAC,QAAoF,EAAE;IACpH,OAAO;QACL,IAAI,EAAE,EAAE;QACR,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;QACd,eAAe,EAAE,KAAK;QACtB,iBAAiB,EAAE,EAAE;QACrB,+BAA+B,EAAE,EAAE;QACnC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,GAAG;QACvB,cAAc,EAAE,EAAE;QAClB,qBAAqB,EAAE,EAAE;QACzB,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,EAAE;QAClB,GAAG,KAAK;QACR,cAAc,EAAE;YACd,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc;YACxB,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAS;YACnB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,GAAG;YACvB,KAAK,EAAE,EAAE;YACT,SAAS,EAAE,WAAW;YACtB,gBAAgB,EAAE,CAAC;YACnB,UAAU,EAAE,CAAC;YACb,YAAY,EAAE,KAAK,CAAC,IAAI,IAAI,GAAG;SACzB;KAC4D,CAAC;AACzE,CAAC;AA7BD,0CA6BC","sourcesContent":["import {APIGatewayEventDefaultAuthorizerContext, APIGatewayProxyEventBase} from \"aws-lambda\";\n\nexport function 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"]}
1
+ {"version":3,"file":"createFakeEvent.js","sourceRoot":"","sources":["../../src/createFakeEvent.ts"],"names":[],"mappings":";;;AAEA,SAAgB,eAAe,CAAC,QAAoF,EAAE;IACpH,OAAO;QACL,IAAI,EAAE,EAAE;QACR,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;QACd,eAAe,EAAE,KAAK;QACtB,iBAAiB,EAAE,EAAE;QACrB,+BAA+B,EAAE,EAAE;QACnC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,GAAG;QACvB,cAAc,EAAE,EAAE;QAClB,qBAAqB,EAAE,EAAE;QACzB,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,EAAE;QAClB,GAAG,KAAK;QACR,cAAc,EAAE;YACd,GAAG,KAAK,EAAE,cAAc;YACxB,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAS;YACnB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,GAAG;YACvB,KAAK,EAAE,EAAE;YACT,SAAS,EAAE,WAAW;YACtB,gBAAgB,EAAE,CAAC;YACnB,UAAU,EAAE,CAAC;YACb,YAAY,EAAE,KAAK,CAAC,IAAI,IAAI,GAAG;SACzB;KAC4D,CAAC;AACzE,CAAC;AA7BD,0CA6BC","sourcesContent":["import {APIGatewayEventDefaultAuthorizerContext, APIGatewayProxyEventBase} from \"aws-lambda\";\n\nexport function 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"]}
@@ -3,11 +3,8 @@ import { createFakeEvent } from "./createFakeEvent.js";
3
3
  import { createFakeContext } from "./createFakeContext.js";
4
4
  import { nameOf } from "@tsed/core";
5
5
  export class LambdaClientRequest extends Promise {
6
- constructor() {
7
- super(...arguments);
8
- this.event = createFakeEvent();
9
- this.context = createFakeContext();
10
- }
6
+ event = createFakeEvent();
7
+ context = createFakeContext();
11
8
  static call(lambdaName) {
12
9
  const resolvers = {};
13
10
  const promise = new LambdaClientRequest((resolve, reject) => {
@@ -107,6 +104,9 @@ export class LambdaClientRequest extends Promise {
107
104
  }
108
105
  }
109
106
  export class PlatformServerlessTest extends DITest {
107
+ static callbacks = {};
108
+ static instance;
109
+ static request = LambdaClientRequest;
110
110
  static bootstrap(serverless, { server, ...settings }) {
111
111
  return async function before() {
112
112
  settings = DITest.configure(settings);
@@ -137,6 +137,4 @@ export class PlatformServerlessTest extends DITest {
137
137
  }
138
138
  }
139
139
  }
140
- PlatformServerlessTest.callbacks = {};
141
- PlatformServerlessTest.request = LambdaClientRequest;
142
140
  //# sourceMappingURL=PlatformServerlessTest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlatformServerlessTest.js","sourceRoot":"","sources":["../../src/PlatformServerlessTest.ts"],"names":[],"mappings":"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","sourcesContent":["import {DITest} from \"@tsed/di\";\nimport {APIGatewayEventDefaultAuthorizerContext, APIGatewayProxyEventBase, APIGatewayProxyHandler} from \"aws-lambda\";\nimport {APIGatewayProxyResult} from \"aws-lambda/trigger/api-gateway-proxy\";\nimport {createFakeEvent} from \"./createFakeEvent\";\nimport {createFakeContext} from \"./createFakeContext\";\nimport {nameOf, Type} from \"@tsed/core\";\nimport {PlatformBuilder, PlatformBuilderSettings} from \"@tsed/common\";\n\nexport interface LambdaPromiseResult extends Promise<APIGatewayProxyResult> {}\n\nexport class LambdaClientRequest extends Promise<APIGatewayProxyResult> {\n event = createFakeEvent();\n context = createFakeContext();\n\n static call(lambdaName: string) {\n const resolvers: any = {};\n const promise = new LambdaClientRequest((resolve, reject) => {\n resolvers.resolve = resolve;\n resolvers.reject = reject;\n });\n\n promise.init(lambdaName, resolvers.resolve, resolvers.reject);\n\n return promise;\n }\n\n static get(path: string, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").get(path, options);\n }\n\n static post(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").post(path, body, options);\n }\n\n static put(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").put(path, body, options);\n }\n\n static patch(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").patch(path, body, options);\n }\n\n static delete(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").delete(path, body, options);\n }\n\n get(path: string, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"GET\";\n\n return this;\n }\n\n post(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"POST\";\n\n this.body(body);\n\n return this;\n }\n\n patch(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"PATCH\";\n\n this.body(body);\n\n return this;\n }\n\n put(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"PUT\";\n\n this.body(body);\n\n return this;\n }\n\n delete(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"DELETE\";\n\n this.body(body);\n\n return this;\n }\n\n query(query: any) {\n this.event.queryStringParameters = {\n ...this.event.queryStringParameters,\n ...JSON.parse(JSON.stringify(query))\n };\n\n return this;\n }\n\n params(pathParameters: any) {\n this.event.pathParameters = {\n ...this.event.pathParameters,\n ...JSON.parse(JSON.stringify(pathParameters))\n };\n\n return this;\n }\n\n headers(headers: Record<string, any>) {\n this.event.headers = {\n ...this.event.headers,\n ...JSON.parse(JSON.stringify(headers))\n };\n\n return this;\n }\n\n body(body: any) {\n if (body !== undefined) {\n this.event.headers[\"content-type\"] = \"application/json\";\n\n this.event.body = JSON.stringify(body);\n }\n\n return this;\n }\n\n protected init(lambda: string, resolve: Function, reject: Function) {\n setTimeout(async () => {\n try {\n const result = await PlatformServerlessTest.callbacks[lambda](this.event, this.context, resolve as any);\n resolve(result as any);\n } catch (er) {\n reject(er);\n }\n });\n }\n}\n\nexport class PlatformServerlessTest extends DITest {\n static callbacks: Record<string, APIGatewayProxyHandler> = {};\n static instance: any;\n static request = LambdaClientRequest;\n\n static bootstrap(\n serverless: {bootstrap: (server: Type<any>, settings: PlatformBuilderSettings<any, any>) => PlatformBuilder},\n {server, ...settings}: PlatformBuilderSettings<any, any> & {server: Type<any>}\n ): () => Promise<any>;\n static bootstrap(\n serverless: {bootstrap: (settings: Partial<TsED.Configuration> & {lambda?: Type[]}) => any},\n {server, ...settings}: PlatformBuilderSettings<any, any>\n ): () => Promise<any>;\n static bootstrap(serverless: any, {server, ...settings}: PlatformBuilderSettings<any, any>) {\n return async function before(): Promise<void> {\n settings = DITest.configure(settings);\n\n const isServerlessHttp = nameOf(serverless).includes(\"Http\");\n\n // @ts-ignore\n const instance = isServerlessHttp ? serverless.bootstrap(server, settings) : serverless.bootstrap(settings);\n\n PlatformServerlessTest.instance = instance;\n PlatformServerlessTest.callbacks = {};\n\n if (!isServerlessHttp) {\n PlatformServerlessTest.callbacks = instance.callbacks();\n }\n\n PlatformServerlessTest.callbacks.handler = instance.handler();\n // used by inject method\n DITest.injector = instance.injector;\n\n return instance.promise;\n };\n }\n\n /**\n * Resets the test injector of the test context, so it won't pollute your next test. Call this in your `tearDown` logic.\n */\n static async reset() {\n if (PlatformServerlessTest.instance) {\n await PlatformServerlessTest.instance.stop();\n }\n if (DITest.hasInjector()) {\n await DITest.injector.destroy();\n DITest._injector = null;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"PlatformServerlessTest.js","sourceRoot":"","sources":["../../src/PlatformServerlessTest.ts"],"names":[],"mappings":"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","sourcesContent":["import {DITest} from \"@tsed/di\";\nimport {APIGatewayEventDefaultAuthorizerContext, APIGatewayProxyEventBase, APIGatewayProxyHandler} from \"aws-lambda\";\nimport {APIGatewayProxyResult} from \"aws-lambda/trigger/api-gateway-proxy\";\nimport {createFakeEvent} from \"./createFakeEvent\";\nimport {createFakeContext} from \"./createFakeContext\";\nimport {nameOf, Type} from \"@tsed/core\";\nimport {PlatformBuilder, PlatformBuilderSettings} from \"@tsed/common\";\n\nexport interface LambdaPromiseResult extends Promise<APIGatewayProxyResult> {}\n\nexport class LambdaClientRequest extends Promise<APIGatewayProxyResult> {\n event = createFakeEvent();\n context = createFakeContext();\n\n static call(lambdaName: string) {\n const resolvers: any = {};\n const promise = new LambdaClientRequest((resolve, reject) => {\n resolvers.resolve = resolve;\n resolvers.reject = reject;\n });\n\n promise.init(lambdaName, resolvers.resolve, resolvers.reject);\n\n return promise;\n }\n\n static get(path: string, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").get(path, options);\n }\n\n static post(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").post(path, body, options);\n }\n\n static put(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").put(path, body, options);\n }\n\n static patch(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").patch(path, body, options);\n }\n\n static delete(path: string, body?: any, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n return this.call(\"handler\").delete(path, body, options);\n }\n\n get(path: string, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"GET\";\n\n return this;\n }\n\n post(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"POST\";\n\n this.body(body);\n\n return this;\n }\n\n patch(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"PATCH\";\n\n this.body(body);\n\n return this;\n }\n\n put(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"PUT\";\n\n this.body(body);\n\n return this;\n }\n\n delete(path: string, body: any = {}, options: Partial<APIGatewayProxyEventBase<APIGatewayEventDefaultAuthorizerContext>> = {}) {\n Object.assign(this.event, options);\n\n this.event.path = path;\n this.event.httpMethod = \"DELETE\";\n\n this.body(body);\n\n return this;\n }\n\n query(query: any) {\n this.event.queryStringParameters = {\n ...this.event.queryStringParameters,\n ...JSON.parse(JSON.stringify(query))\n };\n\n return this;\n }\n\n params(pathParameters: any) {\n this.event.pathParameters = {\n ...this.event.pathParameters,\n ...JSON.parse(JSON.stringify(pathParameters))\n };\n\n return this;\n }\n\n headers(headers: Record<string, any>) {\n this.event.headers = {\n ...this.event.headers,\n ...JSON.parse(JSON.stringify(headers))\n };\n\n return this;\n }\n\n body(body: any) {\n if (body !== undefined) {\n this.event.headers[\"content-type\"] = \"application/json\";\n\n this.event.body = JSON.stringify(body);\n }\n\n return this;\n }\n\n protected init(lambda: string, resolve: Function, reject: Function) {\n setTimeout(async () => {\n try {\n const result = await PlatformServerlessTest.callbacks[lambda](this.event, this.context, resolve as any);\n resolve(result as any);\n } catch (er) {\n reject(er);\n }\n });\n }\n}\n\nexport class PlatformServerlessTest extends DITest {\n static callbacks: Record<string, APIGatewayProxyHandler> = {};\n static instance: any;\n static request = LambdaClientRequest;\n\n static bootstrap(\n serverless: {bootstrap: (server: Type<any>, settings: PlatformBuilderSettings<any>) => PlatformBuilder},\n {server, ...settings}: PlatformBuilderSettings<any> & {server: Type<any>}\n ): () => Promise<any>;\n static bootstrap(\n serverless: {bootstrap: (settings: Partial<TsED.Configuration> & {lambda?: Type[]}) => any},\n {server, ...settings}: PlatformBuilderSettings<any>\n ): () => Promise<any>;\n static bootstrap(serverless: any, {server, ...settings}: PlatformBuilderSettings<any>) {\n return async function before(): Promise<void> {\n settings = DITest.configure(settings);\n\n const isServerlessHttp = nameOf(serverless).includes(\"Http\");\n\n // @ts-ignore\n const instance = isServerlessHttp ? serverless.bootstrap(server, settings) : serverless.bootstrap(settings);\n\n PlatformServerlessTest.instance = instance;\n PlatformServerlessTest.callbacks = {};\n\n if (!isServerlessHttp) {\n PlatformServerlessTest.callbacks = instance.callbacks();\n }\n\n PlatformServerlessTest.callbacks.handler = instance.handler();\n // used by inject method\n DITest.injector = instance.injector;\n\n return instance.promise;\n };\n }\n\n /**\n * Resets the test injector of the test context, so it won't pollute your next test. Call this in your `tearDown` logic.\n */\n static async reset() {\n if (PlatformServerlessTest.instance) {\n await PlatformServerlessTest.instance.stop();\n }\n if (DITest.hasInjector()) {\n await DITest.injector.destroy();\n DITest._injector = null;\n }\n }\n}\n"]}
@@ -13,7 +13,7 @@ export function createFakeEvent(event = {}) {
13
13
  stageVariables: {},
14
14
  ...event,
15
15
  requestContext: {
16
- ...event === null || event === void 0 ? void 0 : event.requestContext,
16
+ ...event?.requestContext,
17
17
  accountId: "",
18
18
  apiId: "",
19
19
  protocol: "https",
@@ -1 +1 @@
1
- {"version":3,"file":"createFakeEvent.js","sourceRoot":"","sources":["../../src/createFakeEvent.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,eAAe,CAAC,QAAoF,EAAE;IACpH,OAAO;QACL,IAAI,EAAE,EAAE;QACR,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;QACd,eAAe,EAAE,KAAK;QACtB,iBAAiB,EAAE,EAAE;QACrB,+BAA+B,EAAE,EAAE;QACnC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,GAAG;QACvB,cAAc,EAAE,EAAE;QAClB,qBAAqB,EAAE,EAAE;QACzB,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,EAAE;QAClB,GAAG,KAAK;QACR,cAAc,EAAE;YACd,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc;YACxB,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAS;YACnB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,GAAG;YACvB,KAAK,EAAE,EAAE;YACT,SAAS,EAAE,WAAW;YACtB,gBAAgB,EAAE,CAAC;YACnB,UAAU,EAAE,CAAC;YACb,YAAY,EAAE,KAAK,CAAC,IAAI,IAAI,GAAG;SACzB;KAC4D,CAAC;AACzE,CAAC","sourcesContent":["import {APIGatewayEventDefaultAuthorizerContext, APIGatewayProxyEventBase} from \"aws-lambda\";\n\nexport function 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"]}
1
+ {"version":3,"file":"createFakeEvent.js","sourceRoot":"","sources":["../../src/createFakeEvent.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,eAAe,CAAC,QAAoF,EAAE;IACpH,OAAO;QACL,IAAI,EAAE,EAAE;QACR,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;QACd,eAAe,EAAE,KAAK;QACtB,iBAAiB,EAAE,EAAE;QACrB,+BAA+B,EAAE,EAAE;QACnC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,GAAG;QACvB,cAAc,EAAE,EAAE;QAClB,qBAAqB,EAAE,EAAE;QACzB,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,EAAE;QAClB,GAAG,KAAK;QACR,cAAc,EAAE;YACd,GAAG,KAAK,EAAE,cAAc;YACxB,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAS;YACnB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,GAAG;YACvB,KAAK,EAAE,EAAE;YACT,SAAS,EAAE,WAAW;YACtB,gBAAgB,EAAE,CAAC;YACnB,UAAU,EAAE,CAAC;YACb,YAAY,EAAE,KAAK,CAAC,IAAI,IAAI,GAAG;SACzB;KAC4D,CAAC;AACzE,CAAC","sourcesContent":["import {APIGatewayEventDefaultAuthorizerContext, APIGatewayProxyEventBase} from \"aws-lambda\";\n\nexport function 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"]}
@@ -30,15 +30,15 @@ export declare class PlatformServerlessTest extends DITest {
30
30
  static instance: any;
31
31
  static request: typeof LambdaClientRequest;
32
32
  static bootstrap(serverless: {
33
- bootstrap: (server: Type<any>, settings: PlatformBuilderSettings<any, any>) => PlatformBuilder;
34
- }, { server, ...settings }: PlatformBuilderSettings<any, any> & {
33
+ bootstrap: (server: Type<any>, settings: PlatformBuilderSettings<any>) => PlatformBuilder;
34
+ }, { server, ...settings }: PlatformBuilderSettings<any> & {
35
35
  server: Type<any>;
36
36
  }): () => Promise<any>;
37
37
  static bootstrap(serverless: {
38
38
  bootstrap: (settings: Partial<TsED.Configuration> & {
39
39
  lambda?: Type[];
40
40
  }) => any;
41
- }, { server, ...settings }: PlatformBuilderSettings<any, any>): () => Promise<any>;
41
+ }, { server, ...settings }: PlatformBuilderSettings<any>): () => Promise<any>;
42
42
  /**
43
43
  * Resets the test injector of the test context, so it won't pollute your next test. Call this in your `tearDown` logic.
44
44
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tsed/platform-serverless-testing",
3
- "version": "7.0.0-beta.11",
3
+ "version": "7.0.0-beta.14",
4
4
  "description": "Module to test Serverless function with Ts.ED",
5
5
  "source": "./src/index.ts",
6
6
  "main": "./lib/cjs/index.js",
@@ -51,22 +51,25 @@
51
51
  "homepage": "https://github.com/tsedio/tsed/tree/beta/packages/platform/platform-serverless-testing",
52
52
  "repository": "https://github.com/tsedio/tsed",
53
53
  "devDependencies": {
54
- "@tsed/common": "7.0.0-beta.11",
55
- "@tsed/core": "7.0.0-beta.11",
56
- "@tsed/di": "7.0.0-beta.11",
57
- "@tsed/schema": "7.0.0-beta.11"
54
+ "@tsed/common": "7.0.0-beta.14",
55
+ "@tsed/core": "7.0.0-beta.14",
56
+ "@tsed/di": "7.0.0-beta.14",
57
+ "@tsed/schema": "7.0.0-beta.14"
58
58
  },
59
59
  "dependencies": {
60
60
  "aws-lambda": "^1.0.7",
61
- "tslib": "2.3.1"
61
+ "tslib": "2.4.0"
62
62
  },
63
63
  "peerDependencies": {
64
- "@tsed/common": "^7.0.0-beta.11",
65
- "@tsed/core": "^7.0.0-beta.11",
66
- "@tsed/di": "^7.0.0-beta.11",
67
- "@tsed/json-mapper": "^7.0.0-beta.11",
68
- "@tsed/logger": ">=6.1.1",
69
- "@tsed/openspec": "^7.0.0-beta.11",
70
- "@tsed/schema": "^7.0.0-beta.11"
64
+ "@tsed/common": "^7.0.0-beta.14",
65
+ "@tsed/core": "^7.0.0-beta.14",
66
+ "@tsed/di": "^7.0.0-beta.14",
67
+ "@tsed/json-mapper": "^7.0.0-beta.14",
68
+ "@tsed/logger": ">=6.2.0",
69
+ "@tsed/openspec": "^7.0.0-beta.14",
70
+ "@tsed/schema": "^7.0.0-beta.14"
71
+ },
72
+ "publishConfig": {
73
+ "tag": "beta"
71
74
  }
72
75
  }
package/readme.md CHANGED
@@ -11,7 +11,8 @@
11
11
  [![npm version](https://badge.fury.io/js/%40tsed%2Fcommon.svg)](https://badge.fury.io/js/%40tsed%2Fcommon)
12
12
  [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)
13
13
  [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)
14
- [![backers](https://opencollective.com/tsed/tiers/badge.svg)](https://opencollective.com/tsed)
14
+ [![github](https://img.shields.io/static/v1?label=Github%20sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/romakita)
15
+ [![opencollective](https://img.shields.io/static/v1?label=OpenCollective%20sponsor&message=%E2%9D%A4&logo=OpenCollective&color=%23fe8e86)](https://opencollective.com/tsed)
15
16
 
16
17
  </div>
17
18
 
@@ -152,14 +152,14 @@ export class PlatformServerlessTest extends DITest {
152
152
  static request = LambdaClientRequest;
153
153
 
154
154
  static bootstrap(
155
- serverless: {bootstrap: (server: Type<any>, settings: PlatformBuilderSettings<any, any>) => PlatformBuilder},
156
- {server, ...settings}: PlatformBuilderSettings<any, any> & {server: Type<any>}
155
+ serverless: {bootstrap: (server: Type<any>, settings: PlatformBuilderSettings<any>) => PlatformBuilder},
156
+ {server, ...settings}: PlatformBuilderSettings<any> & {server: Type<any>}
157
157
  ): () => Promise<any>;
158
158
  static bootstrap(
159
159
  serverless: {bootstrap: (settings: Partial<TsED.Configuration> & {lambda?: Type[]}) => any},
160
- {server, ...settings}: PlatformBuilderSettings<any, any>
160
+ {server, ...settings}: PlatformBuilderSettings<any>
161
161
  ): () => Promise<any>;
162
- static bootstrap(serverless: any, {server, ...settings}: PlatformBuilderSettings<any, any>) {
162
+ static bootstrap(serverless: any, {server, ...settings}: PlatformBuilderSettings<any>) {
163
163
  return async function before(): Promise<void> {
164
164
  settings = DITest.configure(settings);
165
165