merge.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. 'use strict'
  2. const fs = require('fs')
  3. const path = require('path')
  4. const makeDir = require('make-dir')
  5. var NYC
  6. try {
  7. NYC = require('../../index.covered.js')
  8. } catch (e) {
  9. NYC = require('../../index.js')
  10. }
  11. exports.command = 'merge <input-directory> [output-file]'
  12. exports.describe = 'merge istanbul format coverage output in a given folder'
  13. exports.builder = function (yargs) {
  14. return yargs
  15. .positional('input-directory', {
  16. describe: 'directory containing multiple istanbul coverage files',
  17. type: 'text',
  18. default: './.nyc_output'
  19. })
  20. .positional('output-file', {
  21. describe: 'file to output combined istanbul format coverage to',
  22. type: 'text',
  23. default: 'coverage.json'
  24. })
  25. .option('temp-dir', {
  26. alias: 't',
  27. describe: 'directory to read raw coverage information from',
  28. default: './.nyc_output'
  29. })
  30. .option('temp-directory', {
  31. hidden: true
  32. })
  33. .example('$0 merge ./out coverage.json', 'merge together reports in ./out and output as coverage.json')
  34. }
  35. exports.handler = function (argv) {
  36. process.env.NYC_CWD = process.cwd()
  37. const nyc = new NYC(argv)
  38. let inputStat
  39. try {
  40. inputStat = fs.statSync(argv.inputDirectory)
  41. if (!inputStat.isDirectory()) {
  42. console.error(`${argv.inputDirectory} was not a directory`)
  43. process.exit(1)
  44. }
  45. } catch (err) {
  46. console.error(`failed access input directory ${argv.inputDirectory} with error:\n\n${err.message}`)
  47. process.exit(1)
  48. }
  49. makeDir.sync(path.dirname(argv.outputFile))
  50. const map = nyc.getCoverageMapFromAllCoverageFiles(argv.inputDirectory)
  51. fs.writeFileSync(argv.outputFile, JSON.stringify(map, null, 2), 'utf8')
  52. console.info(`coverage files in ${argv.inputDirectory} merged into ${argv.outputFile}`)
  53. }