-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathstream-event.ts
48 lines (46 loc) · 1.45 KB
/
stream-event.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import * as lambda from "aws-lambda";
import { ToAttributeMap } from "./attribute-value";
export interface DynamoDBStreamEvent<
Item extends object,
PartitionKey extends keyof Item,
RangeKey extends keyof Item | undefined,
StreamViewType extends Exclude<
lambda.StreamRecord["StreamViewType"],
undefined
>
> {
Records: DynamoDBRecord<Item, PartitionKey, RangeKey, StreamViewType>[];
}
export interface DynamoDBRecord<
Item extends object,
PartitionKey extends keyof Item,
RangeKey extends keyof Item | undefined,
StreamViewType extends lambda.StreamRecord["StreamViewType"] = undefined
> extends Omit<lambda.DynamoDBRecord, "dynamodb"> {
dynamodb?: StreamRecord<Item, PartitionKey, RangeKey, StreamViewType>;
}
// @ts-ignore
export type StreamRecord<
Item extends object,
PartitionKey extends keyof Item,
RangeKey extends keyof Item | undefined,
StreamViewType extends lambda.StreamRecord["StreamViewType"] = undefined
> = Omit<
lambda.StreamRecord,
"Keys" | "NewImage" | "OldImage" | "StreamViewType"
> & {
Keys: ToAttributeMap<Pick<Item, Exclude<PartitionKey | RangeKey, undefined>>>;
} & (StreamViewType extends "NEW_IMAGE"
? {
NewImage: ToAttributeMap<Item>;
}
: StreamViewType extends "OLD_IMAGE"
? {
OldImage: ToAttributeMap<Item>;
}
: StreamViewType extends "NEW_AND_OLD_IMAGES"
? {
NewImage?: ToAttributeMap<Item>;
OldImage: ToAttributeMap<Item>;
}
: {});