Skip to content

Commit 868954a

Browse files
ljharbwraithgar
authored andcommitted
[fix] node v10.0 lacks fs.promises
In this node version, fall back to `util.promisify` of the callback version. Maybe fixes #2623. Maybe fixes #2652. Maybe fixes #2625. PR-URL: #2654 Credit: @ljharb Close: #2654 Reviewed-by: @wraithgar, @ruyadorno
1 parent 37e8cc5 commit 868954a

File tree

5 files changed

+24
-4
lines changed

5 files changed

+24
-4
lines changed

.github/workflows/ci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ jobs:
4141
strategy:
4242
fail-fast: false
4343
matrix:
44-
node-version: [10.x, 12.x, 14.x]
44+
node-version: ['10.1', 10.x, '12.1', 12.x, '14.1', 14.x]
4545
platform:
4646
- os: ubuntu-latest
4747
shell: bash

lib/shrinkwrap.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
const { resolve, basename } = require('path')
2-
const { promises: { unlink } } = require('fs')
2+
const util = require('util')
3+
const fs = require('fs')
4+
const { unlink } = fs.promises || util.promisify(fs.unlink)
35
const Arborist = require('@npmcli/arborist')
46
const log = require('npmlog')
57

lib/utils/reify-finish.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
const reifyOutput = require('./reify-output.js')
22
const npm = require('../npm.js')
33
const ini = require('ini')
4-
const {writeFile} = require('fs').promises
4+
const util = require('util')
5+
const fs = require('fs')
6+
const { writeFile } = fs.promises || { writeFile: util.promisify(fs.writeFile) }
57
const {resolve} = require('path')
68

79
const reifyFinish = async arb => {

test/lib/shrinkwrap.js

+8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
const t = require('tap')
2+
const fs = require('fs')
23
const requireInject = require('require-inject')
34

45
const npm = {
@@ -327,3 +328,10 @@ t.test('shrinkwrap --global', t => {
327328
t.end()
328329
})
329330
})
331+
332+
t.test('works without fs.promises', async t => {
333+
t.doesNotThrow(() => requireInject('../../lib/shrinkwrap.js', {
334+
...mocks,
335+
fs: { ...fs, promises: null },
336+
}))
337+
})

test/lib/utils/reify-finish.js

+9-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ let expectWrite = false
2020
const realFs = require('fs')
2121
const fs = {
2222
...realFs,
23-
promises: {
23+
promises: realFs.promises && {
2424
...realFs.promises,
2525
writeFile: async (path, data) => {
2626
if (!expectWrite)
@@ -78,3 +78,11 @@ t.test('should write if everything above passes', async t => {
7878
const data = fs.readFileSync(`${path}/npmrc`, 'utf8').replace(/\r\n/g, '\n')
7979
t.matchSnapshot(data, 'written config')
8080
})
81+
82+
t.test('works without fs.promises', async t => {
83+
t.doesNotThrow(() => requireInject('../../../lib/utils/reify-finish.js', {
84+
fs: { ...fs, promises: null },
85+
'../../../lib/npm.js': npm,
86+
'../../../lib/utils/reify-output.js': reifyOutput,
87+
}))
88+
})

0 commit comments

Comments
 (0)