From c5bcdabcf8c24a7d73a47e6bdfd71a89f2c38678 Mon Sep 17 00:00:00 2001 From: Alexander Schueren Date: Fri, 19 Jul 2024 15:53:20 +0200 Subject: [PATCH 1/4] fixed return type to array for specific envelopes --- packages/parser/src/envelopes/cloudwatch.ts | 2 +- packages/parser/src/envelopes/dynamodb.ts | 6 +----- packages/parser/src/envelopes/kafka.ts | 2 +- packages/parser/src/envelopes/kinesis-firehose.ts | 2 +- packages/parser/src/envelopes/kinesis.ts | 2 +- packages/parser/src/envelopes/sns.ts | 2 +- packages/parser/src/envelopes/sqs.ts | 4 ++-- 7 files changed, 8 insertions(+), 12 deletions(-) diff --git a/packages/parser/src/envelopes/cloudwatch.ts b/packages/parser/src/envelopes/cloudwatch.ts index 8d3182cb9c..321a115ed7 100644 --- a/packages/parser/src/envelopes/cloudwatch.ts +++ b/packages/parser/src/envelopes/cloudwatch.ts @@ -17,7 +17,7 @@ export class CloudWatchEnvelope extends Envelope { public static parse( data: unknown, schema: T - ): z.infer { + ): z.infer[] { const parsedEnvelope = CloudWatchLogsSchema.parse(data); return parsedEnvelope.awslogs.data.logEvents.map((record) => { diff --git a/packages/parser/src/envelopes/dynamodb.ts b/packages/parser/src/envelopes/dynamodb.ts index 39d3b3504e..5b27dac486 100644 --- a/packages/parser/src/envelopes/dynamodb.ts +++ b/packages/parser/src/envelopes/dynamodb.ts @@ -3,11 +3,7 @@ import { DynamoDBStreamSchema } from '../schemas/index.js'; import type { ParsedResult, ParsedResultError } from '../types/index.js'; import { Envelope } from './envelope.js'; import { ParseError } from '../errors.js'; - -type DynamoDBStreamEnvelopeResponse = { - NewImage: z.infer; - OldImage: z.infer; -}; +import type { DynamoDBStreamEnvelopeResponse } from '../types/envelope.js'; /** * DynamoDB Stream Envelope to extract data within NewImage/OldImage diff --git a/packages/parser/src/envelopes/kafka.ts b/packages/parser/src/envelopes/kafka.ts index 3481781698..c64bb13355 100644 --- a/packages/parser/src/envelopes/kafka.ts +++ b/packages/parser/src/envelopes/kafka.ts @@ -20,7 +20,7 @@ export class KafkaEnvelope extends Envelope { public static parse( data: unknown, schema: T - ): z.infer { + ): z.infer[] { // manually fetch event source to deside between Msk or SelfManaged const eventSource = (data as KafkaMskEvent)['eventSource']; diff --git a/packages/parser/src/envelopes/kinesis-firehose.ts b/packages/parser/src/envelopes/kinesis-firehose.ts index acae22347a..3517e3846f 100644 --- a/packages/parser/src/envelopes/kinesis-firehose.ts +++ b/packages/parser/src/envelopes/kinesis-firehose.ts @@ -20,7 +20,7 @@ export class KinesisFirehoseEnvelope extends Envelope { public static parse( data: unknown, schema: T - ): z.infer { + ): z.infer[] { const parsedEnvelope = KinesisFirehoseSchema.parse(data); return parsedEnvelope.records.map((record) => { diff --git a/packages/parser/src/envelopes/kinesis.ts b/packages/parser/src/envelopes/kinesis.ts index 009d28ce75..9b1f1a14b1 100644 --- a/packages/parser/src/envelopes/kinesis.ts +++ b/packages/parser/src/envelopes/kinesis.ts @@ -18,7 +18,7 @@ export class KinesisEnvelope extends Envelope { public static parse( data: unknown, schema: T - ): z.infer { + ): z.infer[] { const parsedEnvelope = KinesisDataStreamSchema.parse(data); return parsedEnvelope.Records.map((record) => { diff --git a/packages/parser/src/envelopes/sns.ts b/packages/parser/src/envelopes/sns.ts index d4b82e54e9..39ea83fdc4 100644 --- a/packages/parser/src/envelopes/sns.ts +++ b/packages/parser/src/envelopes/sns.ts @@ -18,7 +18,7 @@ export class SnsEnvelope extends Envelope { public static parse( data: unknown, schema: T - ): z.infer { + ): z.infer[] { const parsedEnvelope = SnsSchema.parse(data); return parsedEnvelope.Records.map((record) => { diff --git a/packages/parser/src/envelopes/sqs.ts b/packages/parser/src/envelopes/sqs.ts index 0863a9decf..26297a28b5 100644 --- a/packages/parser/src/envelopes/sqs.ts +++ b/packages/parser/src/envelopes/sqs.ts @@ -9,7 +9,7 @@ import { ParseError } from '../errors.js'; * * The record's body parameter is a string, though it can also be a JSON encoded string. * Regardless of its type it'll be parsed into a BaseModel object. - * + *w * Note: Records will be parsed the same way so if model is str, * all items in the list will be parsed as str and npt as JSON (and vice versa) */ @@ -17,7 +17,7 @@ export class SqsEnvelope extends Envelope { public static parse( data: unknown, schema: T - ): z.infer { + ): z.infer[] { const parsedEnvelope = SqsSchema.parse(data); return parsedEnvelope.Records.map((record) => { From 7c00d85c099e32542fc54d157670e3045b4bba93 Mon Sep 17 00:00:00 2001 From: Alexander Schueren Date: Fri, 19 Jul 2024 15:58:28 +0200 Subject: [PATCH 2/4] replace eslint comments with typecast --- .../tests/unit/parser.decorator.test.ts | 31 +++++++------------ 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/packages/parser/tests/unit/parser.decorator.test.ts b/packages/parser/tests/unit/parser.decorator.test.ts index dcc4dc6756..ab0f7fa352 100644 --- a/packages/parser/tests/unit/parser.decorator.test.ts +++ b/packages/parser/tests/unit/parser.decorator.test.ts @@ -27,7 +27,7 @@ describe('Parser Decorator', () => { public async handler( event: TestEvent, _context: Context - ): Promise { + ): Promise { return event; } @@ -60,7 +60,7 @@ describe('Parser Decorator', () => { safeParse: true, }) public async handlerWithSchemaAndSafeParse( - event: ParsedResult, + event: ParsedResult, _context: Context ): Promise { return event; @@ -99,9 +99,7 @@ describe('Parser Decorator', () => { testEvent.detail = customPayload; const resp = await lambda.handlerWithSchemaAndEnvelope( - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - testEvent, + testEvent as unknown as TestEvent, {} as Context ); @@ -130,9 +128,7 @@ describe('Parser Decorator', () => { testEvent.detail = customPayload; const resp = await lambda.handlerWithParserCallsAnotherMethod( - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - testEvent, + testEvent as unknown as TestEvent, {} as Context ); @@ -143,9 +139,7 @@ describe('Parser Decorator', () => { const testEvent = generateMock(TestSchema); const resp = await lambda.handlerWithSchemaAndSafeParse( - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - testEvent, + testEvent as unknown as ParsedResult, {} as Context ); @@ -157,9 +151,10 @@ describe('Parser Decorator', () => { it('should parse event with schema and safeParse and return error', async () => { expect( - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - await lambda.handlerWithSchemaAndSafeParse({ foo: 'bar' }, {} as Context) + await lambda.handlerWithSchemaAndSafeParse( + { foo: 'bar' } as unknown as ParsedResult, + {} as Context + ) ).toEqual({ error: expect.any(ParseError), success: false, @@ -173,9 +168,7 @@ describe('Parser Decorator', () => { event.detail = testEvent; const resp = await lambda.harndlerWithEnvelopeAndSafeParse( - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - event, + event as unknown as ParsedResult, {} as Context ); @@ -188,9 +181,7 @@ describe('Parser Decorator', () => { it('should parse event with envelope and safeParse and return error', async () => { expect( await lambda.harndlerWithEnvelopeAndSafeParse( - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - { foo: 'bar' }, + { foo: 'bar' } as unknown as ParsedResult, {} as Context ) ).toEqual({ From 95fe284e7aaf0b86fa28a5d36479d610d59776c0 Mon Sep 17 00:00:00 2001 From: Alexander Schueren Date: Fri, 19 Jul 2024 15:59:26 +0200 Subject: [PATCH 3/4] add type inference for middy middleware --- packages/parser/src/middleware/parser.ts | 15 +- packages/parser/src/parserDecorator.ts | 20 +-- packages/parser/src/types/envelope.ts | 29 +++- packages/parser/src/types/parser.ts | 53 +++++- .../parser/tests/unit/parser.middy.test.ts | 152 ++++++++++++------ 5 files changed, 198 insertions(+), 71 deletions(-) diff --git a/packages/parser/src/middleware/parser.ts b/packages/parser/src/middleware/parser.ts index 0c536b0aeb..0b51268143 100644 --- a/packages/parser/src/middleware/parser.ts +++ b/packages/parser/src/middleware/parser.ts @@ -1,8 +1,9 @@ import { type MiddyLikeRequest } from '@aws-lambda-powertools/commons/types'; import { type MiddlewareObj } from '@middy/core'; -import { type ZodSchema } from 'zod'; -import { type ParserOptions } from '../types/parser.js'; +import { ZodType } from 'zod'; +import type { ParserOptions, ParseOutput } from '../types/parser.js'; import { parse } from '../parser.js'; +import type { Envelope } from '../types/envelope.js'; /** * A middiy middleware to parse your event. @@ -32,9 +33,13 @@ import { parse } from '../parser.js'; * * @param options */ -const parser = ( - options: ParserOptions -): MiddlewareObj => { +const parser = < + TSchema extends ZodType, + TEnvelope extends Envelope = undefined, + TSafeParse extends boolean = false, +>( + options: ParserOptions +): MiddlewareObj> => { const before = (request: MiddyLikeRequest): void => { const { schema, envelope, safeParse } = options; diff --git a/packages/parser/src/parserDecorator.ts b/packages/parser/src/parserDecorator.ts index 2fdf93ed19..043ff793ff 100644 --- a/packages/parser/src/parserDecorator.ts +++ b/packages/parser/src/parserDecorator.ts @@ -1,8 +1,9 @@ import type { HandlerMethodDecorator } from '@aws-lambda-powertools/commons/types'; import type { Context, Handler } from 'aws-lambda'; -import { ZodSchema, z } from 'zod'; +import { type ZodSchema } from 'zod'; import { parse } from './parser.js'; -import type { ParserOptions, ParsedResult } from './types/index.js'; +import type { ParserOptions, Envelope } from './types/index.js'; +import type { ParseOutput } from './types/parser.js'; /** * A decorator to parse your event. @@ -67,8 +68,12 @@ import type { ParserOptions, ParsedResult } from './types/index.js'; * * @param options Configure the parser with the `schema`, `envelope` and whether to `safeParse` or not */ -export const parser = ( - options: ParserOptions +export const parser = < + TSchema extends ZodSchema, + TEnvelope extends Envelope = undefined, + TSafeParse extends boolean = false, +>( + options: ParserOptions ): HandlerMethodDecorator => { return (_target, _propertyKey, descriptor) => { const original = descriptor.value!; @@ -77,14 +82,11 @@ export const parser = ( descriptor.value = async function ( this: Handler, - event: unknown, + event: ParseOutput, context: Context, callback ) { - const parsedEvent: ParsedResult< - typeof event, - z.infer - > = parse(event, envelope, schema, safeParse); + const parsedEvent = parse(event, envelope, schema, safeParse); return original.call(this, parsedEvent, context, callback); }; diff --git a/packages/parser/src/types/envelope.ts b/packages/parser/src/types/envelope.ts index 9e049c1178..b41f6e2bf4 100644 --- a/packages/parser/src/types/envelope.ts +++ b/packages/parser/src/types/envelope.ts @@ -14,8 +14,14 @@ import type { VpcLatticeEnvelope, VpcLatticeV2Envelope, } from '../envelopes/index.js'; +import { z, type ZodSchema } from 'zod'; -export type Envelope = +type DynamoDBStreamEnvelopeResponse = { + NewImage: z.infer; + OldImage: z.infer; +}; + +type Envelope = | typeof ApiGatewayEnvelope | typeof ApiGatewayV2Envelope | typeof CloudWatchEnvelope @@ -29,4 +35,23 @@ export type Envelope = | typeof SnsSqsEnvelope | typeof SqsEnvelope | typeof VpcLatticeEnvelope - | typeof VpcLatticeV2Envelope; + | typeof VpcLatticeV2Envelope + | undefined; + +/** + * Envelopes that return an array, needed to narrow down the return type of the parser + */ +type EnvelopeArrayReturnType = + | typeof CloudWatchEnvelope + | typeof DynamoDBStreamEnvelope + | typeof KafkaEnvelope + | typeof KinesisEnvelope + | typeof KinesisFirehoseEnvelope + | typeof SnsEnvelope + | typeof SqsEnvelope; + +export type { + Envelope, + DynamoDBStreamEnvelopeResponse, + EnvelopeArrayReturnType, +}; diff --git a/packages/parser/src/types/parser.ts b/packages/parser/src/types/parser.ts index c3c6af7877..18acf98158 100644 --- a/packages/parser/src/types/parser.ts +++ b/packages/parser/src/types/parser.ts @@ -1,13 +1,17 @@ -import type { ZodSchema, ZodError } from 'zod'; -import type { Envelope } from './envelope.js'; +import { type ZodSchema, type ZodError, z } from 'zod'; +import type { Envelope, EnvelopeArrayReturnType } from './envelope.js'; /** * Options for the parser used in middy middleware and decorator */ -type ParserOptions = { - schema: S; - envelope?: Envelope; - safeParse?: boolean; +type ParserOptions< + TSchema extends ZodSchema, + TEnvelope extends Envelope, + TSafeParse extends boolean, +> = { + schema: TSchema; + envelope?: TEnvelope; + safeParse?: TSafeParse; }; /** @@ -34,9 +38,46 @@ type ParsedResult = | ParsedResultSuccess | ParsedResultError; +/** + * The inferred result of the schema, can be either an array or a single object depending on the envelope + */ +type ZodInferredResult< + TSchema extends ZodSchema, + TEnvelope extends Envelope, +> = undefined extends TEnvelope + ? z.infer + : TEnvelope extends EnvelopeArrayReturnType + ? z.infer[] + : z.infer; + +type ZodInferredSafeParseResult< + TSchema extends ZodSchema, + TEnvelope extends Envelope, +> = undefined extends TEnvelope + ? ParsedResult> + : TEnvelope extends EnvelopeArrayReturnType + ? ParsedResult> + : ParsedResult[]>; + +/** + * The output of the parser function, can be either schema inferred type or a ParsedResult + */ +type ParseOutput< + TSchema extends ZodSchema, + TEnvelope extends Envelope, + TSafeParse = false, +> = undefined extends TSafeParse + ? ZodInferredResult + : TSafeParse extends true + ? ZodInferredSafeParseResult + : TSafeParse extends false + ? ZodInferredResult + : never; + export type { ParserOptions, ParsedResult, ParsedResultError, ParsedResultSuccess, + ParseOutput, }; diff --git a/packages/parser/tests/unit/parser.middy.test.ts b/packages/parser/tests/unit/parser.middy.test.ts index d8dd4ae1b1..6d3eaee734 100644 --- a/packages/parser/tests/unit/parser.middy.test.ts +++ b/packages/parser/tests/unit/parser.middy.test.ts @@ -8,14 +8,14 @@ import middy from '@middy/core'; import { Context } from 'aws-lambda'; import { parser } from '../../src/middleware/parser.js'; import { generateMock } from '@anatine/zod-mock'; -import { SqsSchema } from '../../src/schemas/index.js'; +import { SqsSchema } from '../../src/schemas'; import { z, type ZodSchema } from 'zod'; -import { SqsEnvelope, EventBridgeEnvelope } from '../../src/envelopes/index.js'; +import { SqsEnvelope, EventBridgeEnvelope } from '../../src/envelopes'; import { TestSchema, TestEvents } from './schema/utils'; -import { EventBridgeEvent } from '../../src/types/index.js'; +import type { EventBridgeEvent, ParsedResult, SqsEvent } from '../../src/types'; describe('Middleware: parser', () => { - type schema = z.infer; + type TestEvent = z.infer; const handler = async ( event: unknown, _context: Context @@ -24,13 +24,13 @@ describe('Middleware: parser', () => { }; describe(' when envelope is provided ', () => { - const middyfiedHandlerSchemaEnvelope = middy(handler).use( - parser({ schema: TestSchema, envelope: SqsEnvelope }) - ); - + const middyfiedHandlerSchemaEnvelope = middy() + .use(parser({ schema: TestSchema, envelope: SqsEnvelope })) + .handler(async (event, _): Promise => { + return event; + }); it('should parse request body with schema and envelope', async () => { const bodyMock = generateMock(TestSchema); - parser({ schema: TestSchema, envelope: SqsEnvelope }); const event = generateMock(SqsSchema, { stringMap: { @@ -39,9 +39,9 @@ describe('Middleware: parser', () => { }); const result = (await middyfiedHandlerSchemaEnvelope( - event, + event as unknown as TestEvent[], {} as Context - )) as schema[]; + )) as TestEvent[]; result.forEach((item) => { expect(item).toEqual(bodyMock); }); @@ -50,7 +50,7 @@ describe('Middleware: parser', () => { it('should throw when envelope does not match', async () => { await expect(async () => { await middyfiedHandlerSchemaEnvelope( - { name: 'John', age: 18 }, + { name: 'John', age: 18 } as unknown as TestEvent[], {} as Context ); }).rejects.toThrow(); @@ -64,16 +64,23 @@ describe('Middleware: parser', () => { }); await expect( - middyfiedHandlerSchemaEnvelope(event, {} as Context) + middyfiedHandlerSchemaEnvelope( + event as unknown as TestEvent[], + {} as Context + ) ).rejects.toThrow(); }); + it('should throw when provided schema is invalid', async () => { const middyfiedHandler = middy(handler).use( parser({ schema: {} as ZodSchema, envelope: SqsEnvelope }) ); - await expect(middyfiedHandler(42, {} as Context)).rejects.toThrow(); + await expect( + middyfiedHandler(42 as unknown as TestEvent[], {} as Context) + ).rejects.toThrow(); }); + it('should throw when envelope is correct but schema is invalid', async () => { const event = generateMock(SqsSchema, { stringMap: { @@ -85,7 +92,9 @@ describe('Middleware: parser', () => { parser({ schema: {} as ZodSchema, envelope: SqsEnvelope }) ); - await expect(middyfiedHandler(event, {} as Context)).rejects.toThrow(); + await expect( + middyfiedHandler(event as unknown as TestEvent[], {} as Context) + ).rejects.toThrow(); }); }); @@ -93,20 +102,28 @@ describe('Middleware: parser', () => { it('should parse the event with built-in schema', async () => { const event = generateMock(SqsSchema); - const middyfiedHandler = middy(handler).use( - parser({ schema: SqsSchema }) - ); + const middyfiedHandler = middy() + .use(parser({ schema: SqsSchema })) + .handler(async (event, _) => { + return event; + }); - expect(await middyfiedHandler(event, {} as Context)).toEqual(event); + expect( + await middyfiedHandler(event as unknown as SqsEvent, {} as Context) + ).toEqual(event); }); it('should parse custom event', async () => { const event = { name: 'John', age: 18 }; - const middyfiedHandler = middy(handler).use( - parser({ schema: TestSchema }) - ); - - expect(await middyfiedHandler(event, {} as Context)).toEqual(event); + const middyfiedHandler = middy() + .use(parser({ schema: TestSchema })) + .handler(async (event, _): Promise => { + return event; + }); + + expect( + await middyfiedHandler(event as unknown as TestEvent, {} as Context) + ).toEqual(event); }); it('should throw when the schema does not match', async () => { @@ -114,7 +131,9 @@ describe('Middleware: parser', () => { parser({ schema: TestSchema }) ); - await expect(middyfiedHandler(42, {} as Context)).rejects.toThrow(); + await expect( + middyfiedHandler(42 as unknown as TestEvent, {} as Context) + ).rejects.toThrow(); }); it('should throw when provided schema is invalid', async () => { @@ -123,17 +142,26 @@ describe('Middleware: parser', () => { ); await expect( - middyfiedHandler({ foo: 'bar' }, {} as Context) + middyfiedHandler({ foo: 'bar' } as unknown as TestEvent, {} as Context) ).rejects.toThrow(); }); it('should return the event when safeParse is true', async () => { const event = { name: 'John', age: 18 }; - const middyfiedHandler = middy(handler).use( - parser({ schema: TestSchema, safeParse: true }) - ); + const middyfiedHandler = middy() + .use(parser({ schema: TestSchema, safeParse: true })) + .handler( + async (event, _): Promise> => { + return event; + } + ); - expect(await middyfiedHandler(event, {} as Context)).toEqual({ + expect( + await middyfiedHandler( + event as unknown as ParsedResult, + {} as Context + ) + ).toEqual({ success: true, data: event, }); @@ -144,7 +172,12 @@ describe('Middleware: parser', () => { parser({ schema: TestSchema, safeParse: true }) ); - expect(await middyfiedHandler(42, {} as Context)).toEqual({ + expect( + await middyfiedHandler( + 42 as unknown as ParsedResult, + {} as Context + ) + ).toEqual({ success: false, error: expect.any(Error), originalEvent: 42, @@ -157,32 +190,53 @@ describe('Middleware: parser', () => { event.detail = detail; - const middyfiedHandler = middy(handler).use( - parser({ - schema: TestSchema, - envelope: EventBridgeEnvelope, - safeParse: true, - }) - ); + const middyfiedHandler = middy() + .use( + parser({ + schema: TestSchema, + envelope: EventBridgeEnvelope, + safeParse: true, + }) + ) + .handler( + async (event, _): Promise> => { + return event; + } + ); - expect(await middyfiedHandler(event, {} as Context)).toEqual({ + expect( + await middyfiedHandler( + event as unknown as ParsedResult, + {} as Context + ) + ).toEqual({ success: true, data: detail, }); }); - it('should return error when envelope and safeParse are true and schema does not match', async () => { + it('should return error when envelope provided, safeParse is true, and schema does not match', async () => { const event = TestEvents.eventBridgeEvent as EventBridgeEvent; - const middyfiedHandler = middy(handler).use( - parser({ - schema: TestSchema, - envelope: EventBridgeEnvelope, - safeParse: true, - }) - ); - - expect(await middyfiedHandler(event, {} as Context)).toEqual({ + const middyfiedHandler = middy() + .use( + parser({ + schema: TestSchema, + envelope: EventBridgeEnvelope, + safeParse: true, + }) + ) + .handler( + async (event, _): Promise> => { + return event; + } + ); + expect( + await middyfiedHandler( + event as unknown as ParsedResult, + {} as Context + ) + ).toEqual({ success: false, error: expect.any(Error), originalEvent: event, From 1e7175a8ff201b821bc72a8725994b34e653244f Mon Sep 17 00:00:00 2001 From: Alexander Schueren Date: Mon, 22 Jul 2024 09:53:46 +0200 Subject: [PATCH 4/4] use Parsed instead of Parse for naming --- packages/parser/src/envelopes/sqs.ts | 2 +- packages/parser/src/middleware/parser.ts | 4 ++-- packages/parser/src/parserDecorator.ts | 4 ++-- packages/parser/src/types/parser.ts | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/parser/src/envelopes/sqs.ts b/packages/parser/src/envelopes/sqs.ts index 26297a28b5..93434d823b 100644 --- a/packages/parser/src/envelopes/sqs.ts +++ b/packages/parser/src/envelopes/sqs.ts @@ -9,7 +9,7 @@ import { ParseError } from '../errors.js'; * * The record's body parameter is a string, though it can also be a JSON encoded string. * Regardless of its type it'll be parsed into a BaseModel object. - *w + * * Note: Records will be parsed the same way so if model is str, * all items in the list will be parsed as str and npt as JSON (and vice versa) */ diff --git a/packages/parser/src/middleware/parser.ts b/packages/parser/src/middleware/parser.ts index 0b51268143..dcaa2b5c26 100644 --- a/packages/parser/src/middleware/parser.ts +++ b/packages/parser/src/middleware/parser.ts @@ -1,7 +1,7 @@ import { type MiddyLikeRequest } from '@aws-lambda-powertools/commons/types'; import { type MiddlewareObj } from '@middy/core'; import { ZodType } from 'zod'; -import type { ParserOptions, ParseOutput } from '../types/parser.js'; +import type { ParserOptions, ParserOutput } from '../types/parser.js'; import { parse } from '../parser.js'; import type { Envelope } from '../types/envelope.js'; @@ -39,7 +39,7 @@ const parser = < TSafeParse extends boolean = false, >( options: ParserOptions -): MiddlewareObj> => { +): MiddlewareObj> => { const before = (request: MiddyLikeRequest): void => { const { schema, envelope, safeParse } = options; diff --git a/packages/parser/src/parserDecorator.ts b/packages/parser/src/parserDecorator.ts index 043ff793ff..dabe8ff611 100644 --- a/packages/parser/src/parserDecorator.ts +++ b/packages/parser/src/parserDecorator.ts @@ -3,7 +3,7 @@ import type { Context, Handler } from 'aws-lambda'; import { type ZodSchema } from 'zod'; import { parse } from './parser.js'; import type { ParserOptions, Envelope } from './types/index.js'; -import type { ParseOutput } from './types/parser.js'; +import type { ParserOutput } from './types/parser.js'; /** * A decorator to parse your event. @@ -82,7 +82,7 @@ export const parser = < descriptor.value = async function ( this: Handler, - event: ParseOutput, + event: ParserOutput, context: Context, callback ) { diff --git a/packages/parser/src/types/parser.ts b/packages/parser/src/types/parser.ts index 18acf98158..b82a1b145a 100644 --- a/packages/parser/src/types/parser.ts +++ b/packages/parser/src/types/parser.ts @@ -62,7 +62,7 @@ type ZodInferredSafeParseResult< /** * The output of the parser function, can be either schema inferred type or a ParsedResult */ -type ParseOutput< +type ParserOutput< TSchema extends ZodSchema, TEnvelope extends Envelope, TSafeParse = false, @@ -79,5 +79,5 @@ export type { ParsedResult, ParsedResultError, ParsedResultSuccess, - ParseOutput, + ParserOutput, };