import { FunctionCov, ProcessCov, RangeCov, ScriptCov } from "./types"; /** * Creates a deep copy of a process coverage. * * @param processCov Process coverage to clone. * @return Cloned process coverage. */ export function cloneProcessCov(processCov: Readonly): ProcessCov { const result: ScriptCov[] = []; for (const scriptCov of processCov.result) { result.push(cloneScriptCov(scriptCov)); } return { result, }; } /** * Creates a deep copy of a script coverage. * * @param scriptCov Script coverage to clone. * @return Cloned script coverage. */ export function cloneScriptCov(scriptCov: Readonly): ScriptCov { const functions: FunctionCov[] = []; for (const functionCov of scriptCov.functions) { functions.push(cloneFunctionCov(functionCov)); } return { scriptId: scriptCov.scriptId, url: scriptCov.url, functions, }; } /** * Creates a deep copy of a function coverage. * * @param functionCov Function coverage to clone. * @return Cloned function coverage. */ export function cloneFunctionCov(functionCov: Readonly): FunctionCov { const ranges: RangeCov[] = []; for (const rangeCov of functionCov.ranges) { ranges.push(cloneRangeCov(rangeCov)); } return { functionName: functionCov.functionName, ranges, isBlockCoverage: functionCov.isBlockCoverage, }; } /** * Creates a deep copy of a function coverage. * * @param rangeCov Range coverage to clone. * @return Cloned range coverage. */ export function cloneRangeCov(rangeCov: Readonly): RangeCov { return { startOffset: rangeCov.startOffset, endOffset: rangeCov.endOffset, count: rangeCov.count, }; }