All files / src/PerfectWSAdvanced PerfectWSAdvanced.ts

93.54% Statements 29/31
100% Branches 7/7
85.71% Functions 6/7
93.54% Lines 29/31

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 36 37 38 39 40 41 42 43 44 45 46 47 48 492x     2x 2x             2x 110x 110x   110x 5828x 1276x 1276x   5828x 5828x   110x 2951x 2951x 2951x   110x 2872x 2872x 2872x 2872x   110x           110x 63x 63x   110x 47x 47x 110x  
import { PerfectWS, WSClientOptions, WSClientResult, WSServerResult } from '../PerfectWS.js';
import { NetworkEventListener } from '../utils/NetworkEventListener.js';
import { WSLike, WebSocketForce } from '../utils/WebSocketForce.js';
import { TransformAll } from './TransformAll.js';
import { GeneratorTransform } from './transform/BaseCustomTransformers/GeneratorTransform.js';
import { TransformInstruction } from './transform/CustomTransformers.js';
 
type PerfectWSAdvancedConfig = {
    maxTransformDepth: number;
}
 
export class PerfectWSAdvanced<WSType extends WSLike = WSLike, ExtraConfig = { [key: string]: any; }> extends PerfectWS<WSType, ExtraConfig & PerfectWSAdvancedConfig> {
    public transformers: TransformInstruction<any>[] = [new GeneratorTransform()];
    private _callbacks = new WeakMap<NetworkEventListener, TransformAll>;
 
    protected _getTransforms(events: NetworkEventListener) {
        if (!this._callbacks.has(events)) {
            this._callbacks.set(events, new TransformAll(events, this.transformers, this.config.maxTransformDepth));
        }
 
        return this._callbacks.get(events)!;
    }
 
    protected override serializeRequestData(data: any, events: NetworkEventListener) {
        data = this._getTransforms(events).serialize(data);
        return super.serializeRequestData(data, events);
    }
 
    protected override deserializeRequestData(data: any, events: NetworkEventListener) {
        data = super.deserializeRequestData(data, events);
        data = this._getTransforms(events).deserialize(data);
        return data;
    }
 
    protected static override _newInstance<WSType extends WSLike = WSLike>() {
        return new PerfectWSAdvanced<WSType>();
    }
 
    static override client<WSType extends WSLike = WSLike>(config?: WSClientOptions): WSClientResult<WSType, PerfectWSAdvanced<WSType>>;
    static override client<WSType extends WSLike = WSLike>(server: WSType | WebSocketForce<WSType>, config?: WSClientOptions): WSClientResult<WSType, PerfectWSAdvanced<WSType>>;
    static override client<WSType extends WSLike = WSLike>(server?: WSType | WebSocketForce<WSType> | WSClientOptions, config?: WSClientOptions) {
        return super.client<WSType>(server as any, config) as WSClientResult<WSType, PerfectWSAdvanced<WSType>>;
    }
 
    static override server<WSType extends WSLike = WSLike>() {
        return super.server<WSType>() as WSServerResult<WSType, PerfectWSAdvanced<WSType>>;
    }
}