All files / src/PerfectWSAdvanced TransformAll.ts

100% Statements 25/25
100% Branches 6/6
100% Functions 4/4
100% Lines 25/25

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 362x 2x 2x 2x 2x               2x   1284x 1284x 1284x 1284x 1284x 1284x 1284x 1284x 1284x 1284x   1284x 2959x 14795x 2959x 2959x   1284x 2877x 2877x 1284x  
import { TransformAbortSignal } from './transform/TransformAbortSignal.js';
import { TransformBinaryData } from './transform/TransformBinaryData.js';
import { TransformCallbacks } from './transform/TransformCallbacks.js';
import { TransformCircularObjects } from './transform/TransformCircularObjects.js';
import { TransformInstruction, CustomTransformers } from './transform/CustomTransformers.js';
import { NetworkEventListener } from '../utils/NetworkEventListener.js';
 
interface TransformData {
    serialize(data: any): any;
    deserialize(data: any): any;
}
 
export class TransformAll {
 
    private _transforms: TransformData[] = [];
    constructor(events: NetworkEventListener, transformers: TransformInstruction<any>[] = [], maxDepth: number = 100) {
        this._transforms = [
            new TransformBinaryData(maxDepth),
            new TransformAbortSignal(events, maxDepth),
            new CustomTransformers(transformers, maxDepth),
            new TransformCircularObjects(maxDepth),
            new TransformCallbacks(events, maxDepth),
        ];
    }
 
    serialize(data: any) {
        return this._transforms.reduce((data, transform) => {
            return transform.serialize(data);
        }, data);
    }
 
    deserialize(data: any) {
        return this._transforms.reduce((data, transform) => transform.deserialize(data), data);
    }
}