Skip to content

Commit 55aeb06

Browse files
committed
fixed line highlight
1 parent 0caf05a commit 55aeb06

13 files changed

+73
-45
lines changed

docs/snippets/parser/decorator.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ import type { Context } from 'aws-lambda';
22
import type { LambdaInterface } from '@aws-lambda-powertools/commons/types';
33
import { parser } from '@aws-lambda-powertools/parser';
44
import { z } from 'zod';
5+
import { Logger } from '@aws-lambda-powertools/logger';
6+
7+
const logger = new Logger();
58

69
const orderSchema = z.object({
710
id: z.number().positive(),
@@ -23,7 +26,7 @@ class Lambda implements LambdaInterface {
2326
public async handler(event: Order, _context: Context): Promise<void> {
2427
// event is now typed as Order
2528
for (const item of event.items) {
26-
console.log(item.id);
29+
logger.info('Processing item', { item });
2730
}
2831
}
2932
}

docs/snippets/parser/envelopeDecorator.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ import type { LambdaInterface } from '@aws-lambda-powertools/commons/types';
33
import { parser } from '@aws-lambda-powertools/parser';
44
import { z } from 'zod';
55
import { EventBridgeEnvelope } from '@aws-lambda-powertools/parser/envelopes';
6+
import { Logger } from '@aws-lambda-powertools/logger';
7+
8+
const logger = new Logger();
69

710
const orderSchema = z.object({
811
id: z.number().positive(),
@@ -24,7 +27,7 @@ class Lambda implements LambdaInterface {
2427
public async handler(event: Order, _context: Context): Promise<void> {
2528
// event is now typed as Order
2629
for (const item of event.items) {
27-
console.log(item.id); // (2)!
30+
logger.info('Processing item', item); // (2)!
2831
}
2932
}
3033
}

docs/snippets/parser/envelopeMiddy.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ import { parser } from '@aws-lambda-powertools/parser/middleware';
33
import { z } from 'zod';
44
import middy from '@middy/core';
55
import { EventBridgeEnvelope } from '@aws-lambda-powertools/parser/envelopes';
6+
import { Logger } from '@aws-lambda-powertools/logger';
7+
8+
const logger = new Logger();
69

710
const orderSchema = z.object({
811
id: z.number().positive(),
@@ -25,7 +28,7 @@ const lambdaHandler = async (
2528
): Promise<void> => {
2629
for (const item of event.items) {
2730
// item is parsed as OrderItem
28-
console.log(item.id);
31+
logger.info('Processing item', { item });
2932
}
3033
};
3134

docs/snippets/parser/extend.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ import type { LambdaInterface } from '@aws-lambda-powertools/commons/types';
33
import { parser } from '@aws-lambda-powertools/parser';
44
import { z } from 'zod';
55
import { EventBridgeSchema } from '@aws-lambda-powertools/parser/schemas';
6+
import { Logger } from '@aws-lambda-powertools/logger';
7+
8+
const logger = new Logger();
69

710
const orderSchema = z.object({
811
id: z.number().positive(),
@@ -28,7 +31,7 @@ class Lambda implements LambdaInterface {
2831
public async handler(event: OrderEvent, _context: Context): Promise<void> {
2932
for (const item of event.detail.items) {
3033
// process OrderItem
31-
console.log(item); // (3)!
34+
logger.info('Processing item', { item }); // (3)!
3235
}
3336
}
3437
}

docs/snippets/parser/manual.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ import { z } from 'zod';
33
import { EventBridgeEnvelope } from '@aws-lambda-powertools/parser/envelopes';
44
import { EventBridgeSchema } from '@aws-lambda-powertools/parser/schemas';
55
import type { EventBridgeEvent } from '@aws-lambda-powertools/parser/types';
6+
import { Logger } from '@aws-lambda-powertools/logger';
7+
8+
const logger = new Logger();
69

710
const orderSchema = z.object({
811
id: z.number().positive(),
@@ -23,8 +26,8 @@ export const handler = async (
2326
_context: Context
2427
): Promise<void> => {
2528
const parsedEvent = EventBridgeSchema.parse(event); // (1)!
26-
console.log(parsedEvent);
29+
logger.info('Parsed event', parsedEvent);
2730

2831
const orders: Order = EventBridgeEnvelope.parse(event, orderSchema); // (2)!
29-
console.log(orders);
32+
logger.info('Parsed orders', orders);
3033
};

docs/snippets/parser/manualSafeParse.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ import { z } from 'zod';
33
import { EventBridgeEnvelope } from '@aws-lambda-powertools/parser/envelopes';
44
import { EventBridgeSchema } from '@aws-lambda-powertools/parser/schemas';
55
import type { EventBridgeEvent } from '@aws-lambda-powertools/parser/types';
6+
import { Logger } from '@aws-lambda-powertools/logger';
7+
8+
const logger = new Logger();
69

710
const orderSchema = z.object({
811
id: z.number().positive(),
@@ -23,11 +26,10 @@ export const handler = async (
2326
): Promise<void> => {
2427
const parsedEvent = EventBridgeSchema.safeParse(event); // (1)!
2528
parsedEvent.success
26-
? console.log(parsedEvent.data)
27-
: console.log(parsedEvent.error.message);
28-
29+
? logger.info('Event parsed successfully', parsedEvent.data)
30+
: logger.error('Event parsing failed', parsedEvent.error);
2931
const parsedEvenlope = EventBridgeEnvelope.safeParse(event, orderSchema); // (2)!
3032
parsedEvenlope.success
31-
? console.log(parsedEvenlope.data)
32-
: console.log(parsedEvenlope.error.message);
33+
? logger.info('Event envelope parsed successfully', parsedEvenlope.data)
34+
: logger.error('Event envelope parsing failed', parsedEvenlope.error);
3335
};

docs/snippets/parser/middy.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ import type { Context } from 'aws-lambda';
22
import { parser } from '@aws-lambda-powertools/parser/middleware';
33
import { z } from 'zod';
44
import middy from '@middy/core';
5+
import { Logger } from '@aws-lambda-powertools/logger';
6+
7+
const logger = new Logger();
58

69
const orderSchema = z.object({
710
id: z.number().positive(),
@@ -24,7 +27,7 @@ const lambdaHandler = async (
2427
): Promise<void> => {
2528
for (const item of event.items) {
2629
// item is parsed as OrderItem
27-
console.log(item.id);
30+
logger.info('Processing item', { item });
2831
}
2932
};
3033

docs/snippets/parser/refine.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ export const orderSchema = z
1111
id: z.number().positive(),
1212
description: z.string(),
1313
items: z.array(orderItemSchema).refine((items) => items.length > 0, {
14-
message: 'Order must have at least one item',
14+
message: 'Order must have at least one item', // (1)!
1515
}),
1616
optionalField: z.string().optional(),
1717
})
1818
.refine((order) => order.id > 100 && order.items.length > 100, {
1919
message:
20-
'All orders with more than 100 items must have an id greater than 100',
20+
'All orders with more than 100 items must have an id greater than 100', // (2)!
2121
});

docs/snippets/parser/safeParseDecorator.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ import type {
66
ParsedResult,
77
EventBridgeEvent,
88
} from '@aws-lambda-powertools/parser/types';
9+
import { Logger } from '@aws-lambda-powertools/logger';
10+
11+
const logger = new Logger();
912

1013
const orderSchema = z.object({
1114
id: z.number().positive(),
@@ -31,11 +34,11 @@ class Lambda implements LambdaInterface {
3134
if (event.success) {
3235
// (2)!
3336
for (const item of event.data.items) {
34-
console.log(item.id); // (3)!
37+
logger.info('Processing item', { item }); // (3)!
3538
}
3639
} else {
37-
console.error(event.error); // (4)!
38-
console.log(event.originalEvent); // (5)!
40+
logger.error('Failed to parse event', event.error); // (4)!
41+
logger.error('Original event is: ', event.originalEvent); // (5)!
3942
}
4043
}
4144
}

docs/snippets/parser/safeParseMiddy.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ import type {
66
ParsedResult,
77
EventBridgeEvent,
88
} from '@aws-lambda-powertools/parser/types';
9+
import { Logger } from '@aws-lambda-powertools/logger';
10+
11+
const logger = new Logger();
912

1013
const orderSchema = z.object({
1114
id: z.number().positive(),
@@ -29,11 +32,11 @@ const lambdaHandler = async (
2932
if (event.success) {
3033
// (2)!
3134
for (const item of event.data.items) {
32-
console.log(item.id); // (3)!
35+
logger.info('Processing item', { item }); // (3)!
3336
}
3437
} else {
35-
console.error(event.error); // (4)!
36-
console.log(event.originalEvent); // (5)!
38+
logger.error('Error parsing event', { event: event.error }); // (4)!
39+
logger.error('Original event', { event: event.originalEvent }); // (5)!
3740
}
3841
};
3942

docs/snippets/parser/types.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ import type { Context } from 'aws-lambda';
22
import { parser } from '@aws-lambda-powertools/parser/middleware';
33
import { z } from 'zod';
44
import middy from '@middy/core';
5+
import { Logger } from '@aws-lambda-powertools/logger';
6+
7+
const logger = new Logger();
58

69
const orderSchema = z.object({
710
id: z.number().positive(),
@@ -24,7 +27,7 @@ const lambdaHandler = async (
2427
): Promise<void> => {
2528
for (const item of event.items) {
2629
// item is parsed as OrderItem
27-
console.log(item.id); // (3)!
30+
logger.info('Processing item', { item }); // (3)!
2831
}
2932
};
3033

docs/snippets/tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@
3434
"@aws-lambda-powertools/jmespath/envelopes": [
3535
"../../packages/jmespath/lib/envelopes"
3636
],
37-
"@aws-lambda-powertools/parser": ["../../packages/parser/lib"]
37+
"@aws-lambda-powertools/parser": ["../../packages/parser/lib"],
38+
"@aws-lambda-powertools/logger": ["../../packages/logger/lib"]
3839
}
3940
}
4041
}

docs/utilities/parser.md

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,15 @@ Both are also able to parse either an object or JSON string as an input.
4747

4848
???+ warning
4949
The decorator and middleware will replace the event object with the parsed schema if successful.
50-
Be careful when using multiple decorators that expect event to have a specific structure, the order of evaluation for decorators is from bottom to top.
50+
Be cautious when using multiple decorators that expect event to have a specific structure, the order of evaluation for decorators is from bottom to top.
5151

5252
=== "Middy middleware"
53-
```typescript hl_lines="32"
53+
```typescript hl_lines="34"
5454
--8<-- "docs/snippets/parser/middy.ts"
5555
```
5656

5757
=== "Decorator"
58-
```typescript hl_lines="22"
58+
```typescript hl_lines="25"
5959
--8<-- "docs/snippets/parser/decorator.ts"
6060
```
6161

@@ -96,7 +96,7 @@ Parser comes with the following built-in schemas:
9696
You can extend every built-in schema to include your own schema, and yet have all other known fields parsed along the way.
9797

9898
=== "handler.ts"
99-
```typescript hl_lines="20-22 27 30"
99+
```typescript hl_lines="23-25 30 34"
100100
--8<-- "docs/snippets/parser/extend.ts"
101101
```
102102

@@ -124,12 +124,12 @@ Envelopes can be used via envelope parameter available in middy and decorator.
124124
Here's an example of parsing a custom schema in an event coming from EventBridge, where all you want is what's inside the detail key.
125125

126126
=== "Middy middleware"
127-
```typescript hl_lines="5 33"
127+
```typescript hl_lines="5 36"
128128
--8<-- "docs/snippets/parser/envelopeMiddy.ts"
129129
```
130130

131131
=== "Decorator"
132-
```typescript hl_lines="5 23"
132+
```typescript hl_lines="5 26 30"
133133
--8<-- "docs/snippets/parser/envelopeDecorator.ts"
134134
```
135135

@@ -177,7 +177,7 @@ The `ParsedResult` object will have `success`, `data`, or `error` and `original
177177
If the parsing is successful, the `data` field will contain the parsed event, otherwise you can access the `error` field and the `originalEvent` to handle the error and recover the original event.
178178

179179
=== "Middy middleware"
180-
```typescript hl_lines="29 32 35 36 41"
180+
```typescript hl_lines="32 35 38 39 44"
181181
--8<-- "docs/snippets/parser/safeParseMiddy.ts"
182182
```
183183

@@ -188,7 +188,7 @@ If the parsing is successful, the `data` field will contain the parsed event, ot
188188
5. Use `originalEvent` to get the original event and recover
189189

190190
=== "Decorator"
191-
```typescript hl_lines="26 31 34 37 38"
191+
```typescript hl_lines="29 35 37 40 41"
192192
--8<-- "docs/snippets/parser/safeParseDecorator.ts"
193193
```
194194

@@ -205,15 +205,15 @@ You can use built-in envelopes and schemas to parse the incoming events manually
205205

206206

207207
=== "Manual parse"
208-
```typescript hl_lines="25 28"
208+
```typescript hl_lines="28 31"
209209
--8<-- "docs/snippets/parser/manual.ts"
210210
```
211211

212212
1. Use `EventBridgeSchema` to parse the event, the `details` fields will be parsed as a generic record.
213213
2. Use `eventBridgeEnvelope` with a combination of `orderSchema` to get `Order` object from the `details` field.
214214

215215
=== "Manual safeParse"
216-
```typescript hl_lines="24 29"
216+
```typescript hl_lines="27 31"
217217
--8<-- "docs/snippets/parser/manualSafeParse.ts"
218218
```
219219

@@ -230,31 +230,29 @@ For example, you can use `refine` to validate a field or a combination of fields
230230
--8<-- "docs/snippets/parser/refine.ts"
231231
```
232232

233+
1. validate a single field
234+
2. validate an object with multiple fields
235+
233236
Zod provides a lot of other features and customization, see [Zod documentation](https://zod.dev) for more details.
234237

235238

236239
## Types
237240

238241
### Schema and Type inference
239-
Zod provides a way to extract the type of schema, so you can use it in your handler:
242+
Use `z.infer` to extract the type of the schema, so you can use types during development and avoid type errors.
240243

241244
=== "Types"
242-
```typescript hl_lines="19 22 27"
245+
```typescript hl_lines="22 25 30"
243246
--8<-- "docs/snippets/parser/types.ts"
244247
```
245248

246-
1. Use `z.infer` to extract the type of the schema
247-
2. `event` is typed as `Order` object
248-
3. we can infer deeply nested types, here `Order` and `OrderItem` are inferred
249+
1. Use `z.infer` to extract the type of the schema, also works for nested schemas
250+
2. `event` is of type `Order`
251+
3. infer types from deeply nested schemas
249252

250253
### Compatibility with @types/aws-lambda
251254

252-
The package `@types/aws-lambda` contains type definitions for AWS service event invocations.
253-
Powertools parser utility also bring AWS Lambda event types based on the built-in schema definitions.
254-
Both libraries try to provide types for the same event structure, but they might not be compatible with each other yet.
255-
We are working on a sustainable solution to make them compatible and avoid any breaking changes in the future.
256-
257-
We recommend to use the types provided by the parser utility.
255+
The package `@types/aws-lambda` is a popular project that contains type definitions for many AWS service event invocations.
256+
Powertools parser utility also bring AWS Lambda event types based on the built-in schema definitions.
258257

259-
## Error handling
260-
We don't have any error handling in the utility and propagate all errors from Zod, which are thrown as `ZodError`.
258+
We recommend to use the types provided by the parser utilit. If you encounter any issues or have any feedback, please [submit an issue](https://github.com/aws-powertools/powertools-lambda-typescript/issues/new/choose).

0 commit comments

Comments
 (0)