UNPKG

@flowlab/all

Version:

A cool library focusing on handling various flows

45 lines (39 loc) 1.66 kB
// 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; } }