All files / src/rspack-html target-setting.ts

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

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 49 50 51 52 53                    1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x   19x 19x 19x 19x 19x 11x 11x 8x 8x   1x 25x 25x 25x 25x 3x 3x   25x 11x 11x   11x 25x 3x 3x   8x 8x  
import type { BuildTarget } from '../rspack/build-target';
 
export type TargetPreset = 'compatible' | 'modern';
 
export type TargetSpec = TargetPreset | string[];
 
export type TargetSetting =
    | TargetSpec
    | Partial<Record<BuildTarget, TargetSpec>>;
 
export const PRESET_TARGETS = {
    compatible: {
        client: ['chrome>=64', 'edge>=79', 'firefox>=67', 'safari>=11.1'],
        server: ['node>=24'],
        node: ['node>=24']
    },
    modern: {
        client: ['chrome>=89', 'edge>=89', 'firefox>=108', 'safari>=16.4'],
        server: ['node>=24'],
        node: ['node>=24']
    }
} as const;
 
function resolveTargetSpec(
    spec: TargetSpec,
    buildTarget: BuildTarget
): string[] {
    if (typeof spec === 'string') {
        return [...PRESET_TARGETS[spec][buildTarget]];
    }
    return spec;
}
 
export function getTargetSetting(
    setting: TargetSetting | undefined,
    buildTarget: BuildTarget
): string[] {
    if (!setting) {
        return [...PRESET_TARGETS.compatible[buildTarget]];
    }
 
    if (typeof setting === 'string' || Array.isArray(setting)) {
        return resolveTargetSpec(setting, buildTarget);
    }
 
    const targetSpec = setting[buildTarget];
    if (!targetSpec) {
        return [...PRESET_TARGETS.compatible[buildTarget]];
    }
 
    return resolveTargetSpec(targetSpec, buildTarget);
}