@gahojin-inc/aws-lambda-mock-context 2025.1.0 → 2025.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -5,12 +5,21 @@
5
5
 
6
6
  AWS Lambda mock context object
7
7
 
8
+ ## Installation
8
9
 
9
- ## 参考
10
+ ```shell
11
+ $ npm install --save-dev @gahojin-inc/aws-lambda-mock-context
12
+ ```
13
+
14
+ ## Usage
10
15
 
11
- - https://github.com/SamVerschueren/aws-lambda-mock-context
16
+ ```typescript
17
+ import mockContext from '@gahojin-inc/aws-lambda-mock-context'
18
+
19
+ await index.handler({hello: 'world'}, mockContext())
20
+ ```
12
21
 
13
- ## ライセンス
22
+ ## License
14
23
 
15
24
  [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0)
16
25
 
@@ -30,8 +39,8 @@ See the License for the specific language governing permissions and
30
39
  limitations under the License.
31
40
  ```
32
41
 
33
- ### オリジナルコード
42
+ ### Original Code
34
43
 
35
- ```
36
- MIT © Sam Verschueren
37
- ```
44
+ Special Thanks.
45
+
46
+ https://github.com/SamVerschueren/aws-lambda-mock-context
@@ -1,5 +1,7 @@
1
1
  'use strict';
2
2
 
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
3
5
  var uuid = require('uuid');
4
6
 
5
7
  // src/index.ts
@@ -16,17 +18,29 @@ var defer = () => {
16
18
  };
17
19
  }, lambdaTimeout = (context, timeout) => setTimeout(() => {
18
20
  Math.round(context.getRemainingTimeInMillis() / 1e3) === 0 && context.fail(new Error(`Task timed out after ${timeout}.00 seconds`));
19
- }, timeout * 1e3), src_default = (options, overrides) => {
20
- let id = uuid.v1(), stream = uuid.v4().replace(/-/g, ""), opts = {
21
- region: "us-west-1",
22
- account: "123456789012",
23
- functionName: "aws-lambda-mock-context",
24
- functionVersion: "$LATEST",
25
- memoryLimitInMB: "128",
26
- timeout: 3,
27
- ...options
28
- }, deferred = defer(), d = /* @__PURE__ */ new Date(), logDate = [d.getFullYear(), `0${d.getMonth() + 1}`.slice(-2), `0${d.getDate()}`.slice(-2)].join("/"), start = d.getTime(), end = null, timeout = null, context = {
29
- callbackWaitsForEmptyEventLoop: !0,
21
+ }, timeout * 1e3), globalOptions = {}, setGlobalOptions = (options) => (Object.assign(globalOptions, options), globalOptions), resetGlobalOptions = () => {
22
+ globalOptions = {};
23
+ }, getStrictKeys = (object) => Object.keys(object), removeUndefinedValues = (options) => {
24
+ if (!options)
25
+ return {};
26
+ for (let key of getStrictKeys(options))
27
+ options[key] === undefined && delete options[key];
28
+ return options;
29
+ }, mockContext = (options, overrides) => {
30
+ let id = uuid.v1(), stream = uuid.v4().replace(/-/g, ""), opts = Object.assign(
31
+ {
32
+ region: "us-west-1",
33
+ account: "123456789012",
34
+ functionName: "aws-lambda-mock-context",
35
+ functionVersion: "$LATEST",
36
+ memoryLimitInMB: "128",
37
+ timeout: 3,
38
+ handleTimeout: false
39
+ },
40
+ removeUndefinedValues(globalOptions),
41
+ removeUndefinedValues(options)
42
+ ), deferred = defer(), d = /* @__PURE__ */ new Date(), logDate = [d.getFullYear(), `0${d.getMonth() + 1}`.slice(-2), `0${d.getDate()}`.slice(-2)].join("/"), start = d.getTime(), end = null, timeout = null, context = {
43
+ callbackWaitsForEmptyEventLoop: true,
30
44
  functionName: opts.functionName,
31
45
  functionVersion: opts.functionVersion,
32
46
  invokedFunctionArn: `arn:aws:lambda:${opts.region}:${opts.account}:function:${opts.functionName}:${opts.alias || opts.functionVersion}`,
@@ -55,11 +69,12 @@ var defer = () => {
55
69
  },
56
70
  Promise: deferred.promise
57
71
  };
58
- return opts.timeout > 0 && (timeout = lambdaTimeout(context, opts.timeout)), Object.assign(context, overrides);
72
+ return opts.handleTimeout && opts.timeout > 0 && (timeout = lambdaTimeout(context, opts.timeout)), Object.assign(context, overrides);
59
73
  };
74
+ var index_default = mockContext;
60
75
 
61
- module.exports = src_default;
76
+ exports.default = index_default;
77
+ exports.resetGlobalOptions = resetGlobalOptions;
78
+ exports.setGlobalOptions = setGlobalOptions;
62
79
  //# sourceMappingURL=index.cjs.map
63
-
64
- module.exports = exports.default;
65
80
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"names":["uuidv1","uuidv4"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ClientContext, CognitoIdentity, Context } from 'aws-lambda'\nimport { v1 as uuidv1, v4 as uuidv4 } from 'uuid'\n\ntype Options = {\n region?: string\n account?: string\n alias?: string\n functionName?: string\n functionVersion?: string\n memoryLimitInMB?: string\n identity?: CognitoIdentity\n clientContext?: ClientContext\n timeout?: number\n}\n\ninterface MockContext extends Context {\n Promise: Promise<any>\n}\n\ntype Deferred = {\n promise: Promise<unknown>\n resolve: (value: unknown) => void\n reject: (reason?: any) => void\n}\nconst defer = (): Deferred => {\n const deferred: Partial<Deferred> = {}\n const promise = new Promise((resolve, reject) => {\n deferred.resolve = resolve\n deferred.reject = reject\n })\n return {\n promise,\n // biome-ignore lint/style/noNonNullAssertion: <explanation>\n resolve: deferred.resolve!,\n // biome-ignore lint/style/noNonNullAssertion: <explanation>\n reject: deferred.reject!,\n }\n}\n\nconst lambdaTimeout = (context: MockContext, timeout: number): NodeJS.Timeout => {\n return setTimeout(() => {\n if (Math.round(context.getRemainingTimeInMillis() / 1000) === 0) {\n context.fail(new Error(`Task timed out after ${timeout}.00 seconds`))\n }\n }, timeout * 1000)\n}\n\nexport default <E = Record<string, any>>(options?: Options, overrides?: E): MockContext & E => {\n const id = uuidv1()\n const stream = uuidv4().replace(/-/g, '')\n\n const opts = {\n region: 'us-west-1',\n account: '123456789012',\n functionName: 'aws-lambda-mock-context',\n functionVersion: '$LATEST',\n memoryLimitInMB: '128',\n timeout: 3,\n ...options,\n }\n\n const deferred = defer()\n\n const d = new Date()\n const logDate = [d.getFullYear(), `0${d.getMonth() + 1}`.slice(-2), `0${d.getDate()}`.slice(-2)].join('/')\n const start = d.getTime()\n let end: number | null = null\n let timeout: NodeJS.Timeout | null = null\n\n // https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/nodejs-context.html\n const context: MockContext = {\n callbackWaitsForEmptyEventLoop: true,\n functionName: opts.functionName,\n functionVersion: opts.functionVersion,\n invokedFunctionArn: `arn:aws:lambda:${opts.region}:${opts.account}:function:${opts.functionName}:${opts.alias || opts.functionVersion}`,\n memoryLimitInMB: opts.memoryLimitInMB,\n awsRequestId: id,\n logGroupName: `/aws/lambda/${opts.functionName}`,\n logStreamName: `${logDate}/[${opts.functionVersion}]/${stream}`,\n identity: opts.identity,\n clientContext: opts.clientContext,\n getRemainingTimeInMillis: () => {\n const endTime = end || Date.now()\n const remainingTime = opts.timeout * 1000 - (endTime - start)\n\n return Math.max(0, remainingTime)\n },\n succeed: (messageOrObject) => {\n end = Date.now()\n\n deferred.resolve(messageOrObject)\n },\n fail: (error) => {\n end = Date.now()\n\n deferred.reject(typeof error === 'string' ? new Error(error) : error)\n },\n done: (error, result) => {\n if (timeout) {\n clearTimeout(timeout)\n }\n\n if (error) {\n context.fail(error)\n return\n }\n\n context.succeed(result)\n },\n Promise: deferred.promise,\n }\n\n // Lambda Timeout\n if (opts.timeout > 0) {\n timeout = lambdaTimeout(context, opts.timeout)\n }\n\n return Object.assign(context, overrides)\n}\n"]}
1
+ {"version":3,"sources":["../../src/index.ts"],"names":["uuidv1","uuidv4"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ClientContext, CognitoIdentity, Context } from 'aws-lambda'\nimport { v1 as uuidv1, v4 as uuidv4 } from 'uuid'\n\ntype Options = {\n region?: string\n account?: string\n alias?: string\n functionName?: string\n functionVersion?: string\n memoryLimitInMB?: string\n identity?: CognitoIdentity\n clientContext?: ClientContext\n timeout?: number\n handleTimeout?: boolean\n}\n\ninterface MockContext extends Context {\n Promise: Promise<any>\n}\n\ntype Deferred = {\n promise: Promise<unknown>\n resolve: (value: unknown) => void\n reject: (reason?: any) => void\n}\n\nconst defer = (): Deferred => {\n const deferred: Partial<Deferred> = {}\n const promise = new Promise((resolve, reject) => {\n deferred.resolve = resolve\n deferred.reject = reject\n })\n return {\n promise,\n // biome-ignore lint/style/noNonNullAssertion: <explanation>\n resolve: deferred.resolve!,\n // biome-ignore lint/style/noNonNullAssertion: <explanation>\n reject: deferred.reject!,\n }\n}\n\nconst lambdaTimeout = (context: MockContext, timeout: number): NodeJS.Timeout => {\n return setTimeout(() => {\n if (Math.round(context.getRemainingTimeInMillis() / 1000) === 0) {\n context.fail(new Error(`Task timed out after ${timeout}.00 seconds`))\n }\n }, timeout * 1000)\n}\n\nlet globalOptions: Options = {}\n\nconst setGlobalOptions = (options: Options): Options => {\n Object.assign(globalOptions, options)\n return globalOptions\n}\n\nconst resetGlobalOptions = () => {\n globalOptions = {}\n}\n\nconst getStrictKeys = <T extends Record<string, any>>(object: T): (keyof T)[] => Object.keys(object)\n\nconst removeUndefinedValues = (options?: Options): Options => {\n if (!options) {\n return {}\n }\n for (const key of getStrictKeys(options)) {\n options[key] === undefined && delete options[key]\n }\n return options\n}\n\nconst mockContext = <E = Record<string, any>>(options?: Options, overrides?: E): MockContext & E => {\n const id = uuidv1()\n const stream = uuidv4().replace(/-/g, '')\n\n const opts = Object.assign(\n {\n region: 'us-west-1',\n account: '123456789012',\n functionName: 'aws-lambda-mock-context',\n functionVersion: '$LATEST',\n memoryLimitInMB: '128',\n timeout: 3,\n handleTimeout: false,\n },\n removeUndefinedValues(globalOptions),\n removeUndefinedValues(options),\n )\n\n const deferred = defer()\n\n const d = new Date()\n const logDate = [d.getFullYear(), `0${d.getMonth() + 1}`.slice(-2), `0${d.getDate()}`.slice(-2)].join('/')\n const start = d.getTime()\n let end: number | null = null\n let timeout: NodeJS.Timeout | null = null\n\n // https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/nodejs-context.html\n const context: MockContext = {\n callbackWaitsForEmptyEventLoop: true,\n functionName: opts.functionName,\n functionVersion: opts.functionVersion,\n invokedFunctionArn: `arn:aws:lambda:${opts.region}:${opts.account}:function:${opts.functionName}:${opts.alias || opts.functionVersion}`,\n memoryLimitInMB: opts.memoryLimitInMB,\n awsRequestId: id,\n logGroupName: `/aws/lambda/${opts.functionName}`,\n logStreamName: `${logDate}/[${opts.functionVersion}]/${stream}`,\n identity: opts.identity,\n clientContext: opts.clientContext,\n getRemainingTimeInMillis: () => {\n const endTime = end || Date.now()\n const remainingTime = opts.timeout * 1000 - (endTime - start)\n\n return Math.max(0, remainingTime)\n },\n succeed: (messageOrObject) => {\n end = Date.now()\n\n deferred.resolve(messageOrObject)\n },\n fail: (error) => {\n end = Date.now()\n\n deferred.reject(typeof error === 'string' ? new Error(error) : error)\n },\n done: (error, result) => {\n if (timeout) {\n clearTimeout(timeout)\n }\n\n if (error) {\n context.fail(error)\n return\n }\n\n context.succeed(result)\n },\n Promise: deferred.promise,\n }\n\n // Lambda Timeout\n if (opts.handleTimeout && opts.timeout > 0) {\n timeout = lambdaTimeout(context, opts.timeout)\n }\n\n return Object.assign(context, overrides)\n}\n\nexport { setGlobalOptions, resetGlobalOptions }\nexport default mockContext\n"]}
@@ -10,10 +10,13 @@ type Options = {
10
10
  identity?: CognitoIdentity;
11
11
  clientContext?: ClientContext;
12
12
  timeout?: number;
13
+ handleTimeout?: boolean;
13
14
  };
14
15
  interface MockContext extends Context {
15
16
  Promise: Promise<any>;
16
17
  }
17
- declare const _default: <E = Record<string, any>>(options?: Options, overrides?: E) => MockContext & E;
18
+ declare const setGlobalOptions: (options: Options) => Options;
19
+ declare const resetGlobalOptions: () => void;
20
+ declare const mockContext: <E = Record<string, any>>(options?: Options, overrides?: E) => MockContext & E;
18
21
 
19
- export = _default;
22
+ export { mockContext as default, resetGlobalOptions, setGlobalOptions };
package/dist/index.d.ts CHANGED
@@ -10,10 +10,13 @@ type Options = {
10
10
  identity?: CognitoIdentity;
11
11
  clientContext?: ClientContext;
12
12
  timeout?: number;
13
+ handleTimeout?: boolean;
13
14
  };
14
15
  interface MockContext extends Context {
15
16
  Promise: Promise<any>;
16
17
  }
17
- declare const _default: <E = Record<string, any>>(options?: Options, overrides?: E) => MockContext & E;
18
+ declare const setGlobalOptions: (options: Options) => Options;
19
+ declare const resetGlobalOptions: () => void;
20
+ declare const mockContext: <E = Record<string, any>>(options?: Options, overrides?: E) => MockContext & E;
18
21
 
19
- export { _default as default };
22
+ export { mockContext as default, resetGlobalOptions, setGlobalOptions };
package/dist/index.mjs CHANGED
@@ -14,17 +14,29 @@ var defer = () => {
14
14
  };
15
15
  }, lambdaTimeout = (context, timeout) => setTimeout(() => {
16
16
  Math.round(context.getRemainingTimeInMillis() / 1e3) === 0 && context.fail(new Error(`Task timed out after ${timeout}.00 seconds`));
17
- }, timeout * 1e3), src_default = (options, overrides) => {
18
- let id = v1(), stream = v4().replace(/-/g, ""), opts = {
19
- region: "us-west-1",
20
- account: "123456789012",
21
- functionName: "aws-lambda-mock-context",
22
- functionVersion: "$LATEST",
23
- memoryLimitInMB: "128",
24
- timeout: 3,
25
- ...options
26
- }, deferred = defer(), d = /* @__PURE__ */ new Date(), logDate = [d.getFullYear(), `0${d.getMonth() + 1}`.slice(-2), `0${d.getDate()}`.slice(-2)].join("/"), start = d.getTime(), end = null, timeout = null, context = {
27
- callbackWaitsForEmptyEventLoop: !0,
17
+ }, timeout * 1e3), globalOptions = {}, setGlobalOptions = (options) => (Object.assign(globalOptions, options), globalOptions), resetGlobalOptions = () => {
18
+ globalOptions = {};
19
+ }, getStrictKeys = (object) => Object.keys(object), removeUndefinedValues = (options) => {
20
+ if (!options)
21
+ return {};
22
+ for (let key of getStrictKeys(options))
23
+ options[key] === undefined && delete options[key];
24
+ return options;
25
+ }, mockContext = (options, overrides) => {
26
+ let id = v1(), stream = v4().replace(/-/g, ""), opts = Object.assign(
27
+ {
28
+ region: "us-west-1",
29
+ account: "123456789012",
30
+ functionName: "aws-lambda-mock-context",
31
+ functionVersion: "$LATEST",
32
+ memoryLimitInMB: "128",
33
+ timeout: 3,
34
+ handleTimeout: false
35
+ },
36
+ removeUndefinedValues(globalOptions),
37
+ removeUndefinedValues(options)
38
+ ), deferred = defer(), d = /* @__PURE__ */ new Date(), logDate = [d.getFullYear(), `0${d.getMonth() + 1}`.slice(-2), `0${d.getDate()}`.slice(-2)].join("/"), start = d.getTime(), end = null, timeout = null, context = {
39
+ callbackWaitsForEmptyEventLoop: true,
28
40
  functionName: opts.functionName,
29
41
  functionVersion: opts.functionVersion,
30
42
  invokedFunctionArn: `arn:aws:lambda:${opts.region}:${opts.account}:function:${opts.functionName}:${opts.alias || opts.functionVersion}`,
@@ -53,9 +65,10 @@ var defer = () => {
53
65
  },
54
66
  Promise: deferred.promise
55
67
  };
56
- return opts.timeout > 0 && (timeout = lambdaTimeout(context, opts.timeout)), Object.assign(context, overrides);
68
+ return opts.handleTimeout && opts.timeout > 0 && (timeout = lambdaTimeout(context, opts.timeout)), Object.assign(context, overrides);
57
69
  };
70
+ var index_default = mockContext;
58
71
 
59
- export { src_default as default };
72
+ export { index_default as default, resetGlobalOptions, setGlobalOptions };
60
73
  //# sourceMappingURL=index.mjs.map
61
74
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["uuidv1","uuidv4"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { ClientContext, CognitoIdentity, Context } from 'aws-lambda'\nimport { v1 as uuidv1, v4 as uuidv4 } from 'uuid'\n\ntype Options = {\n region?: string\n account?: string\n alias?: string\n functionName?: string\n functionVersion?: string\n memoryLimitInMB?: string\n identity?: CognitoIdentity\n clientContext?: ClientContext\n timeout?: number\n}\n\ninterface MockContext extends Context {\n Promise: Promise<any>\n}\n\ntype Deferred = {\n promise: Promise<unknown>\n resolve: (value: unknown) => void\n reject: (reason?: any) => void\n}\nconst defer = (): Deferred => {\n const deferred: Partial<Deferred> = {}\n const promise = new Promise((resolve, reject) => {\n deferred.resolve = resolve\n deferred.reject = reject\n })\n return {\n promise,\n // biome-ignore lint/style/noNonNullAssertion: <explanation>\n resolve: deferred.resolve!,\n // biome-ignore lint/style/noNonNullAssertion: <explanation>\n reject: deferred.reject!,\n }\n}\n\nconst lambdaTimeout = (context: MockContext, timeout: number): NodeJS.Timeout => {\n return setTimeout(() => {\n if (Math.round(context.getRemainingTimeInMillis() / 1000) === 0) {\n context.fail(new Error(`Task timed out after ${timeout}.00 seconds`))\n }\n }, timeout * 1000)\n}\n\nexport default <E = Record<string, any>>(options?: Options, overrides?: E): MockContext & E => {\n const id = uuidv1()\n const stream = uuidv4().replace(/-/g, '')\n\n const opts = {\n region: 'us-west-1',\n account: '123456789012',\n functionName: 'aws-lambda-mock-context',\n functionVersion: '$LATEST',\n memoryLimitInMB: '128',\n timeout: 3,\n ...options,\n }\n\n const deferred = defer()\n\n const d = new Date()\n const logDate = [d.getFullYear(), `0${d.getMonth() + 1}`.slice(-2), `0${d.getDate()}`.slice(-2)].join('/')\n const start = d.getTime()\n let end: number | null = null\n let timeout: NodeJS.Timeout | null = null\n\n // https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/nodejs-context.html\n const context: MockContext = {\n callbackWaitsForEmptyEventLoop: true,\n functionName: opts.functionName,\n functionVersion: opts.functionVersion,\n invokedFunctionArn: `arn:aws:lambda:${opts.region}:${opts.account}:function:${opts.functionName}:${opts.alias || opts.functionVersion}`,\n memoryLimitInMB: opts.memoryLimitInMB,\n awsRequestId: id,\n logGroupName: `/aws/lambda/${opts.functionName}`,\n logStreamName: `${logDate}/[${opts.functionVersion}]/${stream}`,\n identity: opts.identity,\n clientContext: opts.clientContext,\n getRemainingTimeInMillis: () => {\n const endTime = end || Date.now()\n const remainingTime = opts.timeout * 1000 - (endTime - start)\n\n return Math.max(0, remainingTime)\n },\n succeed: (messageOrObject) => {\n end = Date.now()\n\n deferred.resolve(messageOrObject)\n },\n fail: (error) => {\n end = Date.now()\n\n deferred.reject(typeof error === 'string' ? new Error(error) : error)\n },\n done: (error, result) => {\n if (timeout) {\n clearTimeout(timeout)\n }\n\n if (error) {\n context.fail(error)\n return\n }\n\n context.succeed(result)\n },\n Promise: deferred.promise,\n }\n\n // Lambda Timeout\n if (opts.timeout > 0) {\n timeout = lambdaTimeout(context, opts.timeout)\n }\n\n return Object.assign(context, overrides)\n}\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["uuidv1","uuidv4"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { ClientContext, CognitoIdentity, Context } from 'aws-lambda'\nimport { v1 as uuidv1, v4 as uuidv4 } from 'uuid'\n\ntype Options = {\n region?: string\n account?: string\n alias?: string\n functionName?: string\n functionVersion?: string\n memoryLimitInMB?: string\n identity?: CognitoIdentity\n clientContext?: ClientContext\n timeout?: number\n handleTimeout?: boolean\n}\n\ninterface MockContext extends Context {\n Promise: Promise<any>\n}\n\ntype Deferred = {\n promise: Promise<unknown>\n resolve: (value: unknown) => void\n reject: (reason?: any) => void\n}\n\nconst defer = (): Deferred => {\n const deferred: Partial<Deferred> = {}\n const promise = new Promise((resolve, reject) => {\n deferred.resolve = resolve\n deferred.reject = reject\n })\n return {\n promise,\n // biome-ignore lint/style/noNonNullAssertion: <explanation>\n resolve: deferred.resolve!,\n // biome-ignore lint/style/noNonNullAssertion: <explanation>\n reject: deferred.reject!,\n }\n}\n\nconst lambdaTimeout = (context: MockContext, timeout: number): NodeJS.Timeout => {\n return setTimeout(() => {\n if (Math.round(context.getRemainingTimeInMillis() / 1000) === 0) {\n context.fail(new Error(`Task timed out after ${timeout}.00 seconds`))\n }\n }, timeout * 1000)\n}\n\nlet globalOptions: Options = {}\n\nconst setGlobalOptions = (options: Options): Options => {\n Object.assign(globalOptions, options)\n return globalOptions\n}\n\nconst resetGlobalOptions = () => {\n globalOptions = {}\n}\n\nconst getStrictKeys = <T extends Record<string, any>>(object: T): (keyof T)[] => Object.keys(object)\n\nconst removeUndefinedValues = (options?: Options): Options => {\n if (!options) {\n return {}\n }\n for (const key of getStrictKeys(options)) {\n options[key] === undefined && delete options[key]\n }\n return options\n}\n\nconst mockContext = <E = Record<string, any>>(options?: Options, overrides?: E): MockContext & E => {\n const id = uuidv1()\n const stream = uuidv4().replace(/-/g, '')\n\n const opts = Object.assign(\n {\n region: 'us-west-1',\n account: '123456789012',\n functionName: 'aws-lambda-mock-context',\n functionVersion: '$LATEST',\n memoryLimitInMB: '128',\n timeout: 3,\n handleTimeout: false,\n },\n removeUndefinedValues(globalOptions),\n removeUndefinedValues(options),\n )\n\n const deferred = defer()\n\n const d = new Date()\n const logDate = [d.getFullYear(), `0${d.getMonth() + 1}`.slice(-2), `0${d.getDate()}`.slice(-2)].join('/')\n const start = d.getTime()\n let end: number | null = null\n let timeout: NodeJS.Timeout | null = null\n\n // https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/nodejs-context.html\n const context: MockContext = {\n callbackWaitsForEmptyEventLoop: true,\n functionName: opts.functionName,\n functionVersion: opts.functionVersion,\n invokedFunctionArn: `arn:aws:lambda:${opts.region}:${opts.account}:function:${opts.functionName}:${opts.alias || opts.functionVersion}`,\n memoryLimitInMB: opts.memoryLimitInMB,\n awsRequestId: id,\n logGroupName: `/aws/lambda/${opts.functionName}`,\n logStreamName: `${logDate}/[${opts.functionVersion}]/${stream}`,\n identity: opts.identity,\n clientContext: opts.clientContext,\n getRemainingTimeInMillis: () => {\n const endTime = end || Date.now()\n const remainingTime = opts.timeout * 1000 - (endTime - start)\n\n return Math.max(0, remainingTime)\n },\n succeed: (messageOrObject) => {\n end = Date.now()\n\n deferred.resolve(messageOrObject)\n },\n fail: (error) => {\n end = Date.now()\n\n deferred.reject(typeof error === 'string' ? new Error(error) : error)\n },\n done: (error, result) => {\n if (timeout) {\n clearTimeout(timeout)\n }\n\n if (error) {\n context.fail(error)\n return\n }\n\n context.succeed(result)\n },\n Promise: deferred.promise,\n }\n\n // Lambda Timeout\n if (opts.handleTimeout && opts.timeout > 0) {\n timeout = lambdaTimeout(context, opts.timeout)\n }\n\n return Object.assign(context, overrides)\n}\n\nexport { setGlobalOptions, resetGlobalOptions }\nexport default mockContext\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gahojin-inc/aws-lambda-mock-context",
3
- "version": "2025.1.0",
3
+ "version": "2025.1.1",
4
4
  "description": "AWS Lambda mock context object",
5
5
  "author": "GAHOJIN, Inc.",
6
6
  "license": "Apache-2.0",
@@ -38,25 +38,25 @@
38
38
  }
39
39
  },
40
40
  "dependencies": {
41
- "uuid": "11.0.4"
41
+ "uuid": "11.0.5"
42
42
  },
43
43
  "devDependencies": {
44
- "@arethetypeswrong/cli": "0.17.2",
44
+ "@arethetypeswrong/cli": "0.17.3",
45
45
  "@biomejs/biome": "1.9.4",
46
46
  "@commitlint/cli": "19.6.1",
47
47
  "@commitlint/config-conventional": "19.6.0",
48
48
  "@types/aws-lambda": "8.10.147",
49
- "@types/node": "20.17.12",
49
+ "@types/node": "20.17.16",
50
50
  "@types/uuid": "10.0.0",
51
- "@vitest/coverage-v8": "2.1.8",
51
+ "@vitest/coverage-v8": "3.0.4",
52
52
  "husky": "9.1.7",
53
53
  "jest-extended": "4.0.2",
54
- "npm-check-updates": "17.1.13",
54
+ "npm-check-updates": "17.1.14",
55
55
  "rimraf": "6.0.1",
56
- "tsup": "8.3.5",
57
- "typescript": "5.7.2",
56
+ "tsup": "8.3.6",
57
+ "typescript": "5.7.3",
58
58
  "vite-tsconfig-paths": "5.1.4",
59
- "vitest": "2.1.8"
59
+ "vitest": "3.0.4"
60
60
  },
61
61
  "peerDependencies": {
62
62
  "uuid": ">=8.0.0"