dynamodb-toolbox
Version:
Lightweight and type-safe query builder for DynamoDB and TypeScript.
34 lines (33 loc) • 1.19 kB
JavaScript
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));