diff --git a/lib/build.js b/lib/build.js index 4b799c7..b9e329f 100644 --- a/lib/build.js +++ b/lib/build.js @@ -1,10 +1,9 @@ 'use strict' -const gracefulFs = require('graceful-fs') -const fs = gracefulFs.promises const path = require('path') const { glob } = require('./glob') const log = require('./log') +const { promises: fs } = require('./fs') const which = require('which') const win = process.platform === 'win32' diff --git a/lib/clean.js b/lib/clean.js index 523f801..0641b28 100644 --- a/lib/clean.js +++ b/lib/clean.js @@ -1,7 +1,7 @@ 'use strict' -const fs = require('graceful-fs').promises const log = require('./log') +const { promises: fs } = require('./fs') async function clean (gyp, argv) { // Remove the 'build' dir diff --git a/lib/configure.js b/lib/configure.js index ee672cf..6cd31da 100644 --- a/lib/configure.js +++ b/lib/configure.js @@ -1,6 +1,6 @@ 'use strict' -const { promises: fs, readFileSync } = require('graceful-fs') +const { promises: fs, readFileSync } = require('./fs') const path = require('path') const log = require('./log') const os = require('os') diff --git a/lib/create-config-gypi.js b/lib/create-config-gypi.js index d598dea..239ee90 100644 --- a/lib/create-config-gypi.js +++ b/lib/create-config-gypi.js @@ -1,6 +1,6 @@ 'use strict' -const fs = require('graceful-fs').promises +const { promises: fs } = require('./fs') const log = require('./log') const path = require('path') diff --git a/lib/download.js b/lib/download.js index ed0aa37..9b36ec7 100644 --- a/lib/download.js +++ b/lib/download.js @@ -1,5 +1,5 @@ const fetch = require('make-fetch-happen') -const { promises: fs } = require('graceful-fs') +const { promises: fs } = require('./fs') const log = require('./log') async function download (gyp, url) { diff --git a/lib/find-visualstudio.js b/lib/find-visualstudio.js index 2dc1930..1b5ddf3 100644 --- a/lib/find-visualstudio.js +++ b/lib/find-visualstudio.js @@ -1,7 +1,7 @@ 'use strict' const log = require('./log') -const { existsSync } = require('fs') +const { existsSync } = require('./fs') const { win32: path } = require('path') const { regSearchKeys, execFile } = require('./util') diff --git a/lib/fs.js b/lib/fs.js new file mode 100644 index 0000000..7c3998f --- /dev/null +++ b/lib/fs.js @@ -0,0 +1,35 @@ +const gracefulFs = require('graceful-fs') +const promises = gracefulFs.promises + +/** + * Add fs.rm for older versions of node + */ +async function rm(...args) { + const pathToRemove = args[0] + const options = args[1] || {} + + try { + const stat = await promises.stat(pathToRemove, { throwIfNoEntry: false }) + const isDirectory = stat.isDirectory() + + if (isDirectory) { + await promises.rmdir(pathToRemove, options) + } else { + await promises.unlink(pathToRemove) + } + } catch (err) { + if (err.code === 'ENOENT' && options.force) { + return + } + + throw err + } +} + +module.exports = { + ...gracefulFs, + promises: { + rm, + ...promises, + } +} diff --git a/lib/install.js b/lib/install.js index e583b60..4a5d07b 100644 --- a/lib/install.js +++ b/lib/install.js @@ -1,6 +1,6 @@ 'use strict' -const { createWriteStream, promises: fs } = require('graceful-fs') +const { promises: fs, createWriteStream } = require('./fs') const os = require('os') const { backOff } = require('exponential-backoff') const tar = require('tar') diff --git a/lib/list.js b/lib/list.js index 36889ad..c16bd89 100644 --- a/lib/list.js +++ b/lib/list.js @@ -1,6 +1,6 @@ 'use strict' -const fs = require('graceful-fs').promises +const { promises: fs } = require('./fs') const log = require('./log') async function list (gyp, args) { diff --git a/lib/remove.js b/lib/remove.js index 7efdb01..0365351 100644 --- a/lib/remove.js +++ b/lib/remove.js @@ -1,6 +1,6 @@ 'use strict' -const fs = require('graceful-fs').promises +const { promises: fs } = require('./fs') const path = require('path') const log = require('./log') const semver = require('semver') diff --git a/lib/util.js b/lib/util.js index 3f6aeeb..f66f7e2 100644 --- a/lib/util.js +++ b/lib/util.js @@ -2,7 +2,7 @@ const cp = require('child_process') const path = require('path') -const { openSync, closeSync } = require('graceful-fs') +const { openSync, closeSync } = require('./fs') const log = require('./log') const execFile = async (...args) => new Promise((resolve) => { diff --git a/test/test-configure-nodedir.js b/test/test-configure-nodedir.js index a6debde..e74cc65 100644 --- a/test/test-configure-nodedir.js +++ b/test/test-configure-nodedir.js @@ -10,7 +10,7 @@ const semver = require('semver') const versionSemver = semver.parse(process.version) -const configure = requireInject('../lib/configure', { +const configure = requireInject.withEmptyCache('../lib/configure', { 'graceful-fs': { openSync: () => 0, closeSync: () => {}, @@ -26,7 +26,7 @@ const configure = requireInject('../lib/configure', { } }) -const configure2 = requireInject('../lib/configure', { +const configure2 = requireInject.withEmptyCache('../lib/configure', { 'graceful-fs': { openSync: () => 0, closeSync: () => {}, diff --git a/test/test-configure-python.js b/test/test-configure-python.js index 094e791..8767c04 100644 --- a/test/test-configure-python.js +++ b/test/test-configure-python.js @@ -7,7 +7,7 @@ const { devDir } = require('./common') const gyp = require('../lib/node-gyp') const requireInject = require('require-inject') -const configure = requireInject('../lib/configure', { +const configure = requireInject.withEmptyCache('../lib/configure', { 'graceful-fs': { openSync: () => 0, closeSync: () => {}, diff --git a/test/test-find-accessible-sync.js b/test/test-find-accessible-sync.js index 0c8a5dd..5d0013a 100644 --- a/test/test-find-accessible-sync.js +++ b/test/test-find-accessible-sync.js @@ -4,7 +4,7 @@ const { describe, it } = require('mocha') const assert = require('assert') const path = require('path') const requireInject = require('require-inject') -const { findAccessibleSync } = requireInject('../lib/util', { +const { findAccessibleSync } = requireInject.withEmptyCache('../lib/util', { 'graceful-fs': { closeSync: function () { return undefined }, openSync: function (path) { diff --git a/test/test-install.js b/test/test-install.js index de91b26..d6882c9 100644 --- a/test/test-install.js +++ b/test/test-install.js @@ -16,7 +16,7 @@ const { download } = require('../lib/download') describe('install', function () { it('EACCES retry once', async () => { let statCalled = 0 - const mockInstall = requireInject('../lib/install', { + const mockInstall = requireInject.withEmptyCache('../lib/install', { 'graceful-fs': { promises: { stat (_) {