|  | const fs = require('fs'); | 
|  | const { Collector } = require('istanbul'); | 
|  |  | 
|  | /** | 
|  | * Takes sources of coverage information and adds them to a collector which then can be subsequently | 
|  | * remapped. | 
|  | * @param {Array|string} sources The source(s) of the JSON coverage information | 
|  | * @param {Object} [options] A hash of options that can be set: | 
|  | *		readJSON?: A function that can read and parse a JSON file | 
|  | *		warn?: A function that logs warning messages | 
|  | * @return {Object} The loaded coverage object | 
|  | */ | 
|  | module.exports = function loadCoverage(sources, options = {}) { | 
|  | const warn = options.warn || console.warn; | 
|  |  | 
|  | const readJSON = options.readJSON | 
|  | || function (filePath) { | 
|  | if (!fs.existsSync(filePath)) { | 
|  | warn(new Error(`Cannot find file: "${filePath}"`)); | 
|  | return {}; | 
|  | } | 
|  | return JSON.parse(fs.readFileSync(filePath)); | 
|  | }; | 
|  |  | 
|  | if (typeof sources === 'string') { | 
|  | sources = [sources]; | 
|  | } | 
|  | if (!sources.length) { | 
|  | warn(new SyntaxError('No coverage files supplied!')); | 
|  | } | 
|  | const collector = new Collector(); | 
|  | sources.forEach((filePath) => { | 
|  | collector.add(readJSON(filePath)); | 
|  | }); | 
|  |  | 
|  | return collector.getFinalCoverage(); | 
|  | }; |