Colonise/DataSource

View on GitHub
source/processors/debug-processor.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { ComplexProcessor } from './complex-processor';

export interface Loggers<TData> {
    before(debugProcessor: DebugProcessor<TData>, input: TData): void;
    after(debugProcessor: DebugProcessor<TData>, input: TData, output: TData): void;
}

export class DebugProcessor<TData> extends ComplexProcessor<TData> {
    public constructor(
        public readonly name: string,
        public readonly wrapperProcessor: ComplexProcessor<TData>,
        public readonly loggers: Loggers<TData> = {
            before(debugProcessor, input) {
                // eslint-disable-next-line no-console
                console.debug(`DebugProcess(before): ${debugProcessor.name}`, input);
            },
            after(debugProcessor, _input, output) {
                // eslint-disable-next-line no-console
                console.debug(`DebugProcess(after): ${debugProcessor.name}`, output);
            }
        }
    ) {
        super(wrapperProcessor.original, wrapperProcessor.value);
    }

    protected processor(input: TData): TData {
        this.loggers.before(this, input);

        const output = this.wrapperProcessor.process(input);

        this.loggers.after(this, input, output);

        return output;
    }
}