c8.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #!/usr/bin/env node
  2. 'use strict'
  3. const foreground = require('foreground-child')
  4. const { outputReport } = require('../lib/commands/report')
  5. const { promises } = require('fs')
  6. const { promisify } = require('util')
  7. const rimraf = require('rimraf')
  8. const {
  9. buildYargs,
  10. hideInstrumenteeArgs,
  11. hideInstrumenterArgs
  12. } = require('../lib/parse-args')
  13. const instrumenterArgs = hideInstrumenteeArgs()
  14. let argv = buildYargs().parse(instrumenterArgs)
  15. async function run () {
  16. if ([
  17. 'check-coverage', 'report'
  18. ].indexOf(argv._[0]) !== -1) {
  19. argv = buildYargs(true).parse(process.argv.slice(2))
  20. } else {
  21. // fs.promises was not added until Node.js v10.0.0, if it doesn't
  22. // exist, assume we're Node.js v8.x and skip coverage.
  23. if (!promises) {
  24. foreground(hideInstrumenterArgs(argv))
  25. return
  26. }
  27. if (argv.clean) {
  28. await promisify(rimraf)(argv.tempDirectory)
  29. }
  30. await promises.mkdir(argv.tempDirectory, { recursive: true })
  31. process.env.NODE_V8_COVERAGE = argv.tempDirectory
  32. foreground(hideInstrumenterArgs(argv), async (done) => {
  33. try {
  34. await outputReport(argv)
  35. } catch (err) {
  36. console.error(err.stack)
  37. process.exitCode = 1
  38. }
  39. done()
  40. })
  41. }
  42. }
  43. run().catch((err) => {
  44. console.error(err.stack)
  45. process.exitCode = 1
  46. })