Typed DynamoDB Streams decoding for @patternmeshjs/core entity shapes.
This package is intentionally small: decode stream records, enforce stream view contracts, and route by entity discriminator.
pnpm add @patternmeshjs/streams
Requirements:
@types/aws-lambda dependency is required for consumersdecodeStreamRecord(record, options)decodeStreamEvent(event, options)handleStreamByEntity(event, options)isTtlRemove(record)StreamDecodeErrorStreamViewTypeErrorUnknownEntityErrorimport { decodeStreamEvent, isTtlRemove } from "@patternmeshjs/streams";
const decoded = decodeStreamEvent(event, {
decoders: {
User: (item) => item,
Order: (item) => item,
},
requiredViewType: ["NEW_AND_OLD_IMAGES"],
unknownEntityMode: "strict",
});
const ttlRemovals = event.Records.filter(isTtlRemove);
import type { DynamoDBStreamHandler } from "aws-lambda";
import { handleStreamByEntity } from "@patternmeshjs/streams";
export const handler: DynamoDBStreamHandler = async (event) => {
await handleStreamByEntity(event, {
decoders: {
User: (item) => item,
},
requiredViewType: ["NEW_IMAGE", "NEW_AND_OLD_IMAGES"],
handlers: {
INSERT: async (evt) => {
console.log("created", evt.entityName, evt.newItem);
},
MODIFY: async (evt) => {
console.log("changed", evt.entityName, evt.oldItem, evt.newItem);
},
REMOVE: async (evt) => {
console.log("removed", evt.entityName, evt.oldItem);
},
},
});
};
requiredViewType is ["NEW_AND_OLD_IMAGES"]requiredViewType: "any" to opt out explicitlynewItem consumers typically want NEW_IMAGE or NEW_AND_OLD_IMAGESoldItem consumers typically want OLD_IMAGE or NEW_AND_OLD_IMAGESStreamViewTypeErrorunknownEntityMode: "strict" is the defaultUnknownEntityErrorDynamoDB TTL removals appear as service-originated REMOVE records. Use
isTtlRemove(record) to distinguish them from user-initiated deletes.
The decode functions operate on the event shape, not on Lambda runtime globals.
Anything that provides a DynamoDBStreamEvent-compatible object can use this
package: Lambda, local tests, replay tools, or custom consumers.
requiredViewType: "any"