All files / src/classes/decorators Helper.ts

100% Statements 10/10
100% Branches 8/8
100% Functions 2/2
100% Lines 10/10

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            2x       1x   1x 1x     6x 5x         5x 4x       1x     1x    
/**
 * Copies static properties from the source to the target.
 * @param target The target to copy the properties to.
 * @param source The source to copy the properties from.
 * @returns The target with the copied properties as type SourceType.
 */
export function copyStaticProperties<SourceType>(
    target: unknown,
    source: SourceType,
): SourceType {
    let currentSource = source as unknown;
 
    while (currentSource && currentSource !== Function.prototype) {
        Object.getOwnPropertyNames(currentSource)
            .concat(Object.getOwnPropertySymbols(currentSource).toString())
            .forEach((prop) => {
                if (prop !== 'prototype') {
                    const descriptor = Object.getOwnPropertyDescriptor(
                        currentSource,
                        prop,
                    );
 
                    if (descriptor?.configurable) {
                        Object.defineProperty(target, prop, descriptor);
                    }
                }
            });
        currentSource = Object.getPrototypeOf(currentSource);
    }
 
    return target as SourceType;
}
 
Zur TypeDoc-Dokumentation