diff --git a/types/lambda-tester/index.d.ts b/types/lambda-tester/index.d.ts index 8f942ddd19..5fb93c0560 100644 --- a/types/lambda-tester/index.d.ts +++ b/types/lambda-tester/index.d.ts @@ -1,34 +1,50 @@ -// Type definitions for lambda-tester 3.5 +// Type definitions for lambda-tester 3.6 // Project: https://github.com/vandium-io/lambda-tester#readme // Definitions by: Ivan Kerin // Hajo Aho-Mantila +// Suntharesan Mohan // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -// TypeScript Version: 2.3 +// TypeScript Version: 3.1 -import { Context, ClientContext, CognitoIdentity, Handler } from "aws-lambda"; +/* tslint:disable:no-unnecessary-generics */ + +import { Context, ClientContext, CognitoIdentity, Handler, Callback } from 'aws-lambda'; declare namespace lambdaTester { - type Verifier = (result: any) => void; + type HandlerEvent = T extends Handler ? TEvent : never; + type HandlerResult = T extends Handler ? TResult : never; + type HandlerError = T extends Handler + ? NonNullable>['0']> + : never; - class LambdaTester { - event(event: any): this; + interface VerifierFn { + (result: S, additional?: any): void | Promise; + (result: S, additional?: any, done?: () => {}): void; + } + type Verifier = S extends HandlerError + ? S extends string + ? VerifierFn + : S extends Error + ? VerifierFn + : never + : VerifierFn; + + class LambdaTester { + event(event: HandlerEvent): this; context(context: Context): this; clientContext(clientContext: ClientContext): this; - identity( - cognitoIdentityId: string, - cognitoIdentityPoolId: string - ): this; + identity(cognitoIdentityId: string, cognitoIdentityPoolId: string): this; timeout(seconds: number): this; xray(): this; - expectSucceed(verifier: Verifier): Promise; - expectFail(verifier: Verifier): Promise; - expectError(verifier: Verifier): Promise; - expectResult(verifier: Verifier): Promise; - expectReject(verifier: Verifier): Promise; - expectResolve(verifier: Verifier): Promise; + expectSucceed(verifier: Verifier>): Promise; + expectFail(verifier: Verifier>): Promise; + expectResult(verifier: Verifier>): Promise; + expectError(verifier: Verifier>): Promise; + expectResolve(verifier: Verifier>): Promise; + expectReject(verifier: Verifier>): Promise; } } -declare function lambdaTester(handler: Handler): lambdaTester.LambdaTester; +declare function lambdaTester(handler: T): lambdaTester.LambdaTester; export = lambdaTester; diff --git a/types/lambda-tester/lambda-tester-tests.ts b/types/lambda-tester/lambda-tester-tests.ts index 61a9815fe0..60584318ee 100644 --- a/types/lambda-tester/lambda-tester-tests.ts +++ b/types/lambda-tester/lambda-tester-tests.ts @@ -1,5 +1,14 @@ -import * as lambdaTester from "lambda-tester"; -import { Handler, Context, ClientContext } from "aws-lambda"; +/* tslint:disable:no-object-literal-type-assertion */ + +import * as lambdaTester from 'lambda-tester'; +import { + Handler, + Context, + ClientContext, + APIGatewayProxyHandler, + APIGatewayProxyEvent, + APIGatewayProxyResult, +} from 'aws-lambda'; const handler: Handler = () => Promise.resolve(); const context: Context = {} as any; @@ -13,14 +22,14 @@ interface TError { } function lambdaTesterInstance() { - return lambdaTester(handler).event({ test: "123" }); + return lambdaTester(handler).event({ test: '123' }); } lambdaTesterInstance() .context(context) .clientContext(clientContext) .xray() - .identity("123", "123") + .identity('123', '123') .expectSucceed((result: TResult) => { const t: string = result.data; }); @@ -44,3 +53,20 @@ lambdaTesterInstance().expectResult((result: TResult) => { lambdaTesterInstance().expectError((error: TError) => { const t: string = error.message; }); + +const apiGateway: APIGatewayProxyHandler = (event, _context) => {}; + +const s3Lambda = lambdaTester(apiGateway).event({} as APIGatewayProxyEvent); + +s3Lambda + .context(context) + .clientContext(clientContext) + .xray() + .identity('123', '123') + .expectSucceed((result: APIGatewayProxyResult) => {}); + +s3Lambda.expectResolve((result: APIGatewayProxyResult) => {}); + +s3Lambda.expectReject((error: TError) => { + const t: string = error.message; +});