From dc2ca45d922a1ca0499b26fb893b14f05e886329 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Mon, 8 Feb 2021 13:49:04 -0800 Subject: [PATCH] [fix] node v10.0 lacks `fs.promises` In this node version, fall back to `util.promisify` of the callback version. Maybe fixes https://github.com/npm/cli/issues/2623. Maybe fixes https://github.com/npm/cli/issues/2652. Maybe fixes https://github.com/npm/cli/issues/2625. --- .github/workflows/ci.yml | 2 +- lib/utils/reify-finish.js | 4 +++- test/lib/utils/reify-finish.js | 8 ++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6cbf5d3a40ee9..6e2b87104a203 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,7 +7,7 @@ jobs: strategy: fail-fast: false matrix: - node-version: [10.x, 12.x, 14.x] + node-version: ['10.0', 10.x, '12.0', 12.x, '14.0', 14.x] platform: - os: ubuntu-latest shell: bash diff --git a/lib/utils/reify-finish.js b/lib/utils/reify-finish.js index 76dba06cb570c..9c95e9fcff24e 100644 --- a/lib/utils/reify-finish.js +++ b/lib/utils/reify-finish.js @@ -1,7 +1,9 @@ const reifyOutput = require('./reify-output.js') const npm = require('../npm.js') const ini = require('ini') -const {writeFile} = require('fs').promises +const util = require('util') +const fs = require('fs') +const { writeFile } = fs.promises || { writeFile: util.promisify(fs.writeFile) } const {resolve} = require('path') const reifyFinish = async arb => { diff --git a/test/lib/utils/reify-finish.js b/test/lib/utils/reify-finish.js index d6c7d2e7b2d6d..dc87050d4b229 100644 --- a/test/lib/utils/reify-finish.js +++ b/test/lib/utils/reify-finish.js @@ -78,3 +78,11 @@ t.test('should write if everything above passes', async t => { const data = fs.readFileSync(`${path}/npmrc`, 'utf8').replace(/\r\n/g, '\n') t.matchSnapshot(data, 'written config') }) + +t.test('works without fs.promises', async t => { + t.doesNotThrow(() => requireInject('../../../lib/utils/reify-finish.js', { + fs: { ...fs, promises: null }, + '../../../lib/npm.js': npm, + '../../../lib/utils/reify-output.js': reifyOutput, + })) +})