diff --git a/lib/__tests__/promise.test.js b/lib/__tests__/promise.test.js index 724dbad8..eb6ad339 100644 --- a/lib/__tests__/promise.test.js +++ b/lib/__tests__/promise.test.js @@ -2,6 +2,8 @@ /* eslint-env mocha */ +const assert = require('assert') +const fs = require('fs') const fse = require('..') const methods = [ @@ -22,4 +24,12 @@ describe('promise support', () => { fse[method]().catch(() => done()) }) }) + + if (Object.getOwnPropertyDescriptor(fs, 'promises')) { + it('provides fse.promises API', () => { + const desc = Object.getOwnPropertyDescriptor(fse, 'promises') + assert.ok(desc) + assert.equal(typeof desc.get, 'function') + }) + } }) diff --git a/lib/fs/index.js b/lib/fs/index.js index 2ca50a64..d99f768f 100644 --- a/lib/fs/index.js +++ b/lib/fs/index.js @@ -46,6 +46,11 @@ const api = [ // Export all keys: Object.keys(fs).forEach(key => { + if (key === 'promises') { + // fs.promises is a getter property that triggers ExperimentalWarning + // Don't re-export it here, the getter is defined in "lib/index.js" + return + } exports[key] = fs[key] }) diff --git a/lib/index.js b/lib/index.js index 5f4222d7..40e37b18 100644 --- a/lib/index.js +++ b/lib/index.js @@ -17,3 +17,12 @@ module.exports = Object.assign( require('./path-exists'), require('./remove') ) + +// Export fs.promises as a getter property so that we don't trigger +// ExperimentalWarning before fs.promises is actually accessed. +const fs = require('fs') +if (Object.getOwnPropertyDescriptor(fs, 'promises')) { + Object.defineProperty(module.exports, 'promises', { + get () { return fs.promises } + }) +}