UNPKG

dynamodb-toolbox

Version:

Lightweight and type-safe query builder for DynamoDB and TypeScript.

34 lines (33 loc) 1.19 kB
import { isSerializableTransformer } from './utils.js'; const composeLeft = (left, right) => arg => right(left(arg)); const composeRight = (left, right) => arg => left(right(arg)); const identity = arg => arg; export class Pipe { constructor(transformers) { this.transformerId = 'pipe'; this.transformers = transformers; this.encode = this.transformers .map(transformer => (arg) => transformer.encode(arg)) .reduce(composeLeft, identity); this.decode = this.transformers .map(transformer => (arg) => transformer.decode(arg)) .reduce(composeRight, identity); } pipe(transformer) { return pipe(...this.transformers, transformer); } } export class SerializablePipe extends Pipe { constructor(transformers) { super(transformers); } toJSON() { return { transformerId: this.transformerId, transformers: this.transformers.map(transformer => transformer.toJSON()) }; } } export const pipe = (...transformers) => (transformers.every(isSerializableTransformer) ? new SerializablePipe(transformers) : new Pipe(transformers));