Skip to content

Commit 7cce60b

Browse files
authored
fix(parser): EventBridge envelope uses correct path (#3504)
1 parent 5833270 commit 7cce60b

33 files changed

+163
-1502
lines changed

Diff for: packages/parser/src/envelopes/event-bridge.ts

+27-20
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import type { ZodSchema, z } from 'zod';
1+
import type { ZodError, ZodSchema, z } from 'zod';
22
import { ParseError } from '../errors.js';
33
import { EventBridgeSchema } from '../schemas/index.js';
44
import type { ParsedResult } from '../types/index.js';
5-
import { Envelope, envelopeDiscriminator } from './envelope.js';
5+
import { envelopeDiscriminator } from './envelope.js';
66

77
/**
88
* Envelope for EventBridge schema that extracts and parses data from the `detail` key.
@@ -14,34 +14,41 @@ export const EventBridgeEnvelope = {
1414
*/
1515
[envelopeDiscriminator]: 'object' as const,
1616
parse<T extends ZodSchema>(data: unknown, schema: T): z.infer<T> {
17-
return Envelope.parse(EventBridgeSchema.parse(data).detail, schema);
17+
const extendedSchema = EventBridgeSchema.extend({
18+
detail: schema,
19+
});
20+
try {
21+
const parsed = extendedSchema.parse(data);
22+
return parsed.detail;
23+
} catch (error) {
24+
throw new ParseError('Failed to parse EventBridge envelope', {
25+
cause: error as ZodError,
26+
});
27+
}
1828
},
1929

20-
safeParse<T extends ZodSchema>(data: unknown, schema: T): ParsedResult<unknown, z.infer<T>> {
21-
const parsedEnvelope = EventBridgeSchema.safeParse(data);
30+
safeParse<T extends ZodSchema>(
31+
data: unknown,
32+
schema: T
33+
): ParsedResult<unknown, z.infer<T>> {
34+
const extendedSchema = EventBridgeSchema.extend({
35+
detail: schema,
36+
});
2237

23-
if (!parsedEnvelope.success) {
38+
const parsedResult = extendedSchema.safeParse(data);
39+
if (!parsedResult.success) {
2440
return {
2541
success: false,
2642
error: new ParseError('Failed to parse EventBridge envelope', {
27-
cause: parsedEnvelope.error,
28-
}),
29-
originalEvent: data,
30-
};
31-
}
32-
33-
const parsedDetail = Envelope.safeParse(parsedEnvelope.data.detail, schema);
34-
35-
if (!parsedDetail.success) {
36-
return {
37-
success: false,
38-
error: new ParseError('Failed to parse EventBridge envelope detail', {
39-
cause: parsedDetail.error,
43+
cause: parsedResult.error,
4044
}),
4145
originalEvent: data,
4246
};
4347
}
4448

45-
return parsedDetail;
49+
return {
50+
success: true,
51+
data: parsedResult.data.detail,
52+
};
4653
},
4754
};

Diff for: packages/parser/tests/events/apiGatewayAuthorizerRequestEvent.json

-72
This file was deleted.

Diff for: packages/parser/tests/events/apiGatewayAuthorizerTokenEvent.json

-5
This file was deleted.

Diff for: packages/parser/tests/events/apiGatewayAuthorizerV2Event.json

-52
This file was deleted.

Diff for: packages/parser/tests/events/apiGatewayProxyEvent.json

-71
This file was deleted.

Diff for: packages/parser/tests/events/apiGatewayProxyEventAnotherPath.json

-70
This file was deleted.

0 commit comments

Comments
 (0)