@gahojin-inc/aws-lambda-mock-context 2025.4.0 → 2025.5.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/dist/index.cjs CHANGED
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  Object.defineProperty(exports, '__esModule', { value: true });
3
2
  //#region rolldown:runtime
4
3
  var __create = Object.create;
@@ -70,7 +69,7 @@ const mockContext = (options, overrides) => {
70
69
  handleTimeout: false
71
70
  }, removeUndefinedValues(globalOptions), removeUndefinedValues(options));
72
71
  const deferred = defer();
73
- const d = new Date();
72
+ const d = /* @__PURE__ */ new Date();
74
73
  const logDate = [
75
74
  d.getFullYear(),
76
75
  `0${d.getMonth() + 1}`.slice(-2),
@@ -119,7 +118,7 @@ const mockContext = (options, overrides) => {
119
118
  var src_default = mockContext;
120
119
 
121
120
  //#endregion
122
- exports.default = src_default
123
- exports.resetGlobalOptions = resetGlobalOptions
124
- exports.setGlobalOptions = setGlobalOptions
121
+ exports.default = src_default;
122
+ exports.resetGlobalOptions = resetGlobalOptions;
123
+ exports.setGlobalOptions = setGlobalOptions;
125
124
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["deferred: Partial<Deferred>","context: MockContext","timeout: number","globalOptions: Options","options: Options","object: T","options?: Options","overrides?: E","end: number | null","timeout: NodeJS.Timeout | null"],"sources":["../src/index.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto'\nimport type { ClientContext, CognitoIdentity, Context } from 'aws-lambda'\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 = (): void => {\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 requestId = randomUUID()\n const logStream = requestId.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: requestId,\n logGroupName: `/aws/lambda/${opts.functionName}`,\n logStreamName: `${logDate}/[${opts.functionVersion}]/${logStream}`,\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"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["deferred: Partial<Deferred>","context: MockContext","timeout: number","globalOptions: Options","options: Options","object: T","options?: Options","overrides?: E","end: number | null","timeout: NodeJS.Timeout | null"],"sources":["../src/index.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto'\nimport type { ClientContext, CognitoIdentity, Context } from 'aws-lambda'\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 = (): void => {\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 requestId = randomUUID()\n const logStream = requestId.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: requestId,\n logGroupName: `/aws/lambda/${opts.functionName}`,\n logStreamName: `${logDate}/[${opts.functionVersion}]/${logStream}`,\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"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -45,7 +45,7 @@ const mockContext = (options, overrides) => {
45
45
  handleTimeout: false
46
46
  }, removeUndefinedValues(globalOptions), removeUndefinedValues(options));
47
47
  const deferred = defer();
48
- const d = new Date();
48
+ const d = /* @__PURE__ */ new Date();
49
49
  const logDate = [
50
50
  d.getFullYear(),
51
51
  `0${d.getMonth() + 1}`.slice(-2),
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["deferred: Partial<Deferred>","context: MockContext","timeout: number","globalOptions: Options","options: Options","object: T","options?: Options","overrides?: E","end: number | null","timeout: NodeJS.Timeout | null"],"sources":["../src/index.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto'\nimport type { ClientContext, CognitoIdentity, Context } from 'aws-lambda'\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 = (): void => {\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 requestId = randomUUID()\n const logStream = requestId.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: requestId,\n logGroupName: `/aws/lambda/${opts.functionName}`,\n logStreamName: `${logDate}/[${opts.functionVersion}]/${logStream}`,\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"],"mappings":";;;AA0BA,MAAM,QAAQ,MAAgB;CAC5B,MAAMA,WAA8B,CAAE;CACtC,MAAM,UAAU,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC/C,WAAS,UAAU;AACnB,WAAS,SAAS;CACnB;AACD,QAAO;EACL;EAEA,SAAS,SAAS;EAElB,QAAQ,SAAS;CAClB;AACF;AAED,MAAM,gBAAgB,CAACC,SAAsBC,YAAoC;AAC/E,QAAO,WAAW,MAAM;AACtB,MAAI,KAAK,MAAM,QAAQ,0BAA0B,GAAG,IAAK,KAAK,EAC5D,SAAQ,KAAK,IAAI,OAAO,uBAAuB,QAAQ,cAAc;CAExE,GAAE,UAAU,IAAK;AACnB;AAED,IAAIC,gBAAyB,CAAE;AAE/B,MAAM,mBAAmB,CAACC,YAA8B;AACtD,QAAO,OAAO,eAAe,QAAQ;AACrC,QAAO;AACR;AAED,MAAM,qBAAqB,MAAY;AACrC,iBAAgB,CAAE;AACnB;AAED,MAAM,gBAAgB,CAAgCC,WAA2B,OAAO,KAAK,OAAO;AAEpG,MAAM,wBAAwB,CAACC,YAA+B;AAC5D,MAAK,QACH,QAAO,CAAE;AAEX,MAAK,MAAM,OAAO,cAAc,QAAQ,CACtC,SAAQ,0BAA6B,QAAQ;AAE/C,QAAO;AACR;AAED,MAAM,cAAc,CAA0BA,SAAmBC,cAAmC;CAClG,MAAM,YAAY,YAAY;CAC9B,MAAM,YAAY,UAAU,QAAQ,MAAM,GAAG;CAE7C,MAAM,OAAO,OAAO,OAClB;EACE,QAAQ;EACR,SAAS;EACT,cAAc;EACd,iBAAiB;EACjB,iBAAiB;EACjB,SAAS;EACT,eAAe;CAChB,GACD,sBAAsB,cAAc,EACpC,sBAAsB,QAAQ,CAC/B;CAED,MAAM,WAAW,OAAO;CAExB,MAAM,IAAI,IAAI;CACd,MAAM,UAAU;EAAC,EAAE,aAAa;EAAE,CAAC,GAAG,EAAE,UAAU,GAAG,EAAE,EAAE,MAAM,GAAG;EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG;CAAC,EAAC,KAAK,IAAI;CAC1G,MAAM,QAAQ,EAAE,SAAS;CACzB,IAAIC,MAAqB;CACzB,IAAIC,UAAiC;CAGrC,MAAMR,UAAuB;EAC3B,gCAAgC;EAChC,cAAc,KAAK;EACnB,iBAAiB,KAAK;EACtB,qBAAqB,iBAAiB,KAAK,OAAO,GAAG,KAAK,QAAQ,YAAY,KAAK,aAAa,GAAG,KAAK,SAAS,KAAK,gBAAgB;EACtI,iBAAiB,KAAK;EACtB,cAAc;EACd,eAAe,cAAc,KAAK,aAAa;EAC/C,gBAAgB,EAAE,QAAQ,IAAI,KAAK,gBAAgB,IAAI,UAAU;EACjE,UAAU,KAAK;EACf,eAAe,KAAK;EACpB,0BAA0B,MAAM;GAC9B,MAAM,UAAU,OAAO,KAAK,KAAK;GACjC,MAAM,gBAAgB,KAAK,UAAU,OAAQ,UAAU;AAEvD,UAAO,KAAK,IAAI,GAAG,cAAc;EAClC;EACD,SAAS,CAAC,oBAAoB;AAC5B,SAAM,KAAK,KAAK;AAEhB,YAAS,QAAQ,gBAAgB;EAClC;EACD,MAAM,CAAC,UAAU;AACf,SAAM,KAAK,KAAK;AAEhB,YAAS,cAAc,UAAU,WAAW,IAAI,MAAM,SAAS,MAAM;EACtE;EACD,MAAM,CAAC,OAAO,WAAW;AACvB,OAAI,QACF,cAAa,QAAQ;AAGvB,OAAI,OAAO;AACT,YAAQ,KAAK,MAAM;AACnB;GACD;AAED,WAAQ,QAAQ,OAAO;EACxB;EACD,SAAS,SAAS;CACnB;AAGD,KAAI,KAAK,iBAAiB,KAAK,UAAU,EACvC,WAAU,cAAc,SAAS,KAAK,QAAQ;AAGhD,QAAO,OAAO,OAAO,SAAS,UAAU;AACzC;AAGD,kBAAe"}
1
+ {"version":3,"file":"index.mjs","names":["deferred: Partial<Deferred>","context: MockContext","timeout: number","globalOptions: Options","options: Options","object: T","options?: Options","overrides?: E","end: number | null","timeout: NodeJS.Timeout | null"],"sources":["../src/index.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto'\nimport type { ClientContext, CognitoIdentity, Context } from 'aws-lambda'\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 = (): void => {\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 requestId = randomUUID()\n const logStream = requestId.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: requestId,\n logGroupName: `/aws/lambda/${opts.functionName}`,\n logStreamName: `${logDate}/[${opts.functionVersion}]/${logStream}`,\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"],"mappings":";;;AA0BA,MAAM,QAAQ,MAAgB;CAC5B,MAAMA,WAA8B,CAAE;CACtC,MAAM,UAAU,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC/C,WAAS,UAAU;AACnB,WAAS,SAAS;CACnB;AACD,QAAO;EACL;EAEA,SAAS,SAAS;EAElB,QAAQ,SAAS;CAClB;AACF;AAED,MAAM,gBAAgB,CAACC,SAAsBC,YAAoC;AAC/E,QAAO,WAAW,MAAM;AACtB,MAAI,KAAK,MAAM,QAAQ,0BAA0B,GAAG,IAAK,KAAK,EAC5D,SAAQ,KAAK,IAAI,OAAO,uBAAuB,QAAQ,cAAc;CAExE,GAAE,UAAU,IAAK;AACnB;AAED,IAAIC,gBAAyB,CAAE;AAE/B,MAAM,mBAAmB,CAACC,YAA8B;AACtD,QAAO,OAAO,eAAe,QAAQ;AACrC,QAAO;AACR;AAED,MAAM,qBAAqB,MAAY;AACrC,iBAAgB,CAAE;AACnB;AAED,MAAM,gBAAgB,CAAgCC,WAA2B,OAAO,KAAK,OAAO;AAEpG,MAAM,wBAAwB,CAACC,YAA+B;AAC5D,MAAK,QACH,QAAO,CAAE;AAEX,MAAK,MAAM,OAAO,cAAc,QAAQ,CACtC,SAAQ,0BAA6B,QAAQ;AAE/C,QAAO;AACR;AAED,MAAM,cAAc,CAA0BA,SAAmBC,cAAmC;CAClG,MAAM,YAAY,YAAY;CAC9B,MAAM,YAAY,UAAU,QAAQ,MAAM,GAAG;CAE7C,MAAM,OAAO,OAAO,OAClB;EACE,QAAQ;EACR,SAAS;EACT,cAAc;EACd,iBAAiB;EACjB,iBAAiB;EACjB,SAAS;EACT,eAAe;CAChB,GACD,sBAAsB,cAAc,EACpC,sBAAsB,QAAQ,CAC/B;CAED,MAAM,WAAW,OAAO;CAExB,MAAM,oBAAI,IAAI;CACd,MAAM,UAAU;EAAC,EAAE,aAAa;EAAE,CAAC,GAAG,EAAE,UAAU,GAAG,EAAE,EAAE,MAAM,GAAG;EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG;CAAC,EAAC,KAAK,IAAI;CAC1G,MAAM,QAAQ,EAAE,SAAS;CACzB,IAAIC,MAAqB;CACzB,IAAIC,UAAiC;CAGrC,MAAMR,UAAuB;EAC3B,gCAAgC;EAChC,cAAc,KAAK;EACnB,iBAAiB,KAAK;EACtB,qBAAqB,iBAAiB,KAAK,OAAO,GAAG,KAAK,QAAQ,YAAY,KAAK,aAAa,GAAG,KAAK,SAAS,KAAK,gBAAgB;EACtI,iBAAiB,KAAK;EACtB,cAAc;EACd,eAAe,cAAc,KAAK,aAAa;EAC/C,gBAAgB,EAAE,QAAQ,IAAI,KAAK,gBAAgB,IAAI,UAAU;EACjE,UAAU,KAAK;EACf,eAAe,KAAK;EACpB,0BAA0B,MAAM;GAC9B,MAAM,UAAU,OAAO,KAAK,KAAK;GACjC,MAAM,gBAAgB,KAAK,UAAU,OAAQ,UAAU;AAEvD,UAAO,KAAK,IAAI,GAAG,cAAc;EAClC;EACD,SAAS,CAAC,oBAAoB;AAC5B,SAAM,KAAK,KAAK;AAEhB,YAAS,QAAQ,gBAAgB;EAClC;EACD,MAAM,CAAC,UAAU;AACf,SAAM,KAAK,KAAK;AAEhB,YAAS,cAAc,UAAU,WAAW,IAAI,MAAM,SAAS,MAAM;EACtE;EACD,MAAM,CAAC,OAAO,WAAW;AACvB,OAAI,QACF,cAAa,QAAQ;AAGvB,OAAI,OAAO;AACT,YAAQ,KAAK,MAAM;AACnB;GACD;AAED,WAAQ,QAAQ,OAAO;EACxB;EACD,SAAS,SAAS;CACnB;AAGD,KAAI,KAAK,iBAAiB,KAAK,UAAU,EACvC,WAAU,cAAc,SAAS,KAAK,QAAQ;AAGhD,QAAO,OAAO,OAAO,SAAS,UAAU;AACzC;AAGD,kBAAe"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gahojin-inc/aws-lambda-mock-context",
3
- "version": "2025.4.0",
3
+ "version": "2025.5.0",
4
4
  "description": "AWS Lambda mock context object",
5
5
  "author": "GAHOJIN, Inc.",
6
6
  "license": "Apache-2.0",
@@ -39,22 +39,22 @@
39
39
  }
40
40
  },
41
41
  "devDependencies": {
42
- "@arethetypeswrong/cli": "0.17.4",
42
+ "@arethetypeswrong/cli": "0.18.1",
43
43
  "@biomejs/biome": "1.9.4",
44
- "@commitlint/cli": "19.8.0",
45
- "@commitlint/config-conventional": "19.8.0",
44
+ "@commitlint/cli": "19.8.1",
45
+ "@commitlint/config-conventional": "19.8.1",
46
46
  "@types/aws-lambda": "8.10.149",
47
- "@types/node": "20.17.31",
48
- "@vitest/coverage-v8": "3.1.2",
49
- "jest-extended": "4.0.2",
50
- "lefthook": "1.11.11",
47
+ "@types/node": "20.17.55",
48
+ "@vitest/coverage-v8": "3.1.4",
49
+ "jest-extended": "5.0.3",
50
+ "lefthook": "1.11.13",
51
51
  "npm-check-updates": "18.0.1",
52
52
  "rimraf": "6.0.1",
53
- "rolldown": "1.0.0-beta.8",
53
+ "rolldown": "1.0.0-beta.10",
54
54
  "typescript": "5.8.3",
55
- "unplugin-isolated-decl": "0.13.10",
55
+ "unplugin-isolated-decl": "0.14.2",
56
56
  "vite-tsconfig-paths": "5.1.4",
57
- "vitest": "3.1.2"
57
+ "vitest": "3.1.4"
58
58
  },
59
59
  "engines": {
60
60
  "node": ">=18.x",