From a465b65d907b669714cfc3dca949efd667f499c3 Mon Sep 17 00:00:00 2001 From: Shinnosuke Watanabe Date: Sun, 5 May 2019 12:23:34 +0900 Subject: [PATCH] fix: remove the unmaintained mkdirp dependency (#91) --- bin/c8.js | 12 +++++++++--- package-lock.json | 1 + package.json | 1 - test/fixtures/disable-fs-promises.js | 4 ++++ test/legacy-node.js | 22 ++++++++++++++++++++++ 5 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 test/fixtures/disable-fs-promises.js create mode 100644 test/legacy-node.js diff --git a/bin/c8.js b/bin/c8.js index 21db5452..a00da7fe 100755 --- a/bin/c8.js +++ b/bin/c8.js @@ -3,7 +3,7 @@ const foreground = require('foreground-child') const { outputReport } = require('../lib/commands/report') -const mkdirp = require('mkdirp') +const { promises } = require('fs') const { promisify } = require('util') const rimraf = require('rimraf') const { @@ -21,12 +21,18 @@ async function run () { ].indexOf(argv._[0]) !== -1) { argv = buildYargs(true).parse(process.argv.slice(2)) } else { + // fs.promises was not added until Node.js v10.0.0, if it doesn't + // exist, assume we're Node.js v8.x and skip coverage. + if (!promises) { + foreground(hideInstrumenterArgs(argv)) + return + } + if (argv.clean) { await promisify(rimraf)(argv.tempDirectory) } - // allow c8 to run on Node 8 (coverage just won't work). - await promisify(mkdirp)(argv.tempDirectory) + await promises.mkdir(argv.tempDirectory, { recursive: true }) process.env.NODE_V8_COVERAGE = argv.tempDirectory foreground(hideInstrumenterArgs(argv), async (done) => { try { diff --git a/package-lock.json b/package-lock.json index b0cb175b..fac64c8c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2505,6 +2505,7 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, "requires": { "minimist": "0.0.8" } diff --git a/package.json b/package.json index 581edac6..e016a06f 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,6 @@ "istanbul-lib-coverage": "^2.0.1", "istanbul-lib-report": "^2.0.1", "istanbul-reports": "^2.0.0", - "mkdirp": "^0.5.1", "rimraf": "^2.6.2", "test-exclude": "^5.0.0", "v8-to-istanbul": "^3.1.1", diff --git a/test/fixtures/disable-fs-promises.js b/test/fixtures/disable-fs-promises.js new file mode 100644 index 00000000..0bbb0bd6 --- /dev/null +++ b/test/fixtures/disable-fs-promises.js @@ -0,0 +1,4 @@ +const fs = require('fs'); + +Object.defineProperty(fs, 'promises', {value: undefined}); +require('../../bin/c8.js'); diff --git a/test/legacy-node.js b/test/legacy-node.js new file mode 100644 index 00000000..c1daeca5 --- /dev/null +++ b/test/legacy-node.js @@ -0,0 +1,22 @@ +/* global describe, it */ + +const { execFile } = require('child_process') +const { existsSync } = require('fs') +const { join } = require('path') +const { promisify } = require('util') +const c8Path = require.resolve('./fixtures/disable-fs-promises') + +describe('c8 on Node.js < 10', () => { + it('skip coverage', async () => { + const tmp = join(__dirname, '..', 'tmp', 'legacy-nodejs') + + await promisify(execFile)(process.execPath, [ + c8Path, + `--temp-directory=${__filename}`, + process.execPath, + '--version' + ]) + + existsSync(tmp).should.equal(false) + }) +})