@flowlab/all
Version:
A cool library focusing on handling various flows
45 lines (39 loc) • 1.66 kB
text/typescript
// src/transformers/cleaner.ts
import { ICleaner, PipelineContext } from '../core/interfaces';
// Example: Remove items with null/undefined in specific required fields
export class RequiredFieldCleaner<TInput extends object> implements ICleaner<TInput> {
private requiredFields: (keyof TInput)[];
constructor(...requiredFields: (keyof TInput)[]) {
this.requiredFields = requiredFields;
}
async clean(data: TInput, context: PipelineContext): Promise<TInput | null> {
for (const field of this.requiredFields) {
if (data[field] === null || data[field] === undefined) {
context.logger.warn({ field, item: data }, `Item failed validation: Required field '${String(field)}' is missing. Filtering out.`);
return null; // Filter out this item
}
}
return data; // Item is valid
}
}
// Example: Set default values
export class DefaultValueCleaner<TInput extends object> implements ICleaner<TInput> {
private defaults: Partial<TInput>;
constructor(defaults: Partial<TInput>) {
this.defaults = defaults;
}
async clean(data: TInput, context: PipelineContext): Promise<TInput> {
let changed = false;
for(const key in this.defaults) {
const field = key as keyof TInput;
if(data[field] === null || data[field] === undefined) {
data[field] = this.defaults[field]!; // Apply default
changed = true;
}
}
if (changed) {
context.logger.trace({ item: data }, `Applied default values.`);
}
return data;
}
}