Skip to content

Commit 03b2080

Browse files
committed
Universalify fs-extra methods
1 parent dba0cbb commit 03b2080

File tree

15 files changed

+111
-75
lines changed

15 files changed

+111
-75
lines changed

lib/__tests__/promise.test.js

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
'use strict'
2+
3+
/* eslint-env mocha */
4+
5+
const fse = require('..')
6+
7+
const methods = [
8+
'copy',
9+
'emptyDir',
10+
'ensureFile',
11+
'ensureDir',
12+
'ensureLink',
13+
'ensureSymlink',
14+
'mkdirs',
15+
'move',
16+
'readJson',
17+
'readJSON',
18+
'remove',
19+
'writeJson',
20+
'writeJSON'
21+
]
22+
23+
describe('promise support', () => {
24+
methods.forEach(method => {
25+
it(method, done => {
26+
fse[method]().catch(() => done())
27+
})
28+
})
29+
})

lib/copy/index.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
const u = require('universalify').fromCallback
12
module.exports = {
2-
copy: require('./copy')
3+
copy: u(require('./copy'))
34
}

lib/empty/index.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
'use strict'
22

3+
const u = require('universalify').fromCallback
34
const fs = require('fs')
45
const path = require('path')
56
const mkdir = require('../mkdirs')
67
const remove = require('../remove')
78

8-
function emptyDir (dir, callback) {
9+
const emptyDir = u(function emptyDir (dir, callback) {
910
callback = callback || function () {}
1011
fs.readdir(dir, (err, items) => {
1112
if (err) return mkdir.mkdirs(dir, callback)
@@ -23,7 +24,7 @@ function emptyDir (dir, callback) {
2324
})
2425
}
2526
})
26-
}
27+
})
2728

2829
function emptyDirSync (dir) {
2930
let items

lib/ensure/file.js

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
'use strict'
22

3+
const u = require('universalify').fromCallback
34
const path = require('path')
45
const fs = require('graceful-fs')
56
const mkdir = require('../mkdirs')
@@ -37,9 +38,6 @@ function createFileSync (file) {
3738
}
3839

3940
module.exports = {
40-
createFile,
41-
createFileSync,
42-
// alias
43-
ensureFile: createFile,
44-
ensureFileSync: createFileSync
41+
createFile: u(createFile),
42+
createFileSync
4543
}

lib/ensure/link.js

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
'use strict'
22

3+
const u = require('universalify').fromCallback
34
const path = require('path')
45
const fs = require('graceful-fs')
56
const mkdir = require('../mkdirs')
@@ -52,9 +53,6 @@ function createLinkSync (srcpath, dstpath, callback) {
5253
}
5354

5455
module.exports = {
55-
createLink,
56-
createLinkSync,
57-
// alias
58-
ensureLink: createLink,
59-
ensureLinkSync: createLinkSync
56+
createLink: u(createLink),
57+
createLinkSync
6058
}

lib/ensure/symlink.js

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
'use strict'
22

3+
const u = require('universalify').fromCallback
34
const path = require('path')
45
const fs = require('graceful-fs')
56
const _mkdirs = require('../mkdirs')
@@ -56,9 +57,6 @@ function createSymlinkSync (srcpath, dstpath, type, callback) {
5657
}
5758

5859
module.exports = {
59-
createSymlink,
60-
createSymlinkSync,
61-
// alias
62-
ensureSymlink: createSymlink,
63-
ensureSymlinkSync: createSymlinkSync
60+
createSymlink: u(createSymlink),
61+
createSymlinkSync
6462
}

lib/fs/index.js

+25-28
Original file line numberDiff line numberDiff line change
@@ -4,36 +4,37 @@ const u = require('universalify').fromCallback
44
const fs = require('graceful-fs')
55

66
const api = [
7-
'rename',
8-
'ftruncate',
9-
'chown',
10-
'fchown',
11-
'lchown',
7+
'access',
8+
'appendFile',
129
'chmod',
10+
'chown',
11+
'close',
1312
'fchmod',
14-
'stat',
15-
'lstat',
13+
'fchown',
14+
'fdatasync',
1615
'fstat',
16+
'fsync',
17+
'ftruncate',
18+
'futimes',
19+
'lchown',
1720
'link',
18-
'symlink',
21+
'lstat',
22+
'mkdir',
23+
'open',
24+
'read',
25+
'readFile',
26+
'readdir',
1927
'readlink',
2028
'realpath',
21-
'unlink',
29+
'rename',
2230
'rmdir',
23-
'mkdir',
24-
'readdir',
25-
'close',
26-
'open',
31+
'stat',
32+
'symlink',
33+
'truncate',
34+
'unlink',
2735
'utimes',
28-
'futimes',
29-
'fsync',
30-
'fdatasync',
3136
'write',
32-
'read',
33-
'readFile',
34-
'writeFile',
35-
'appendFile',
36-
'truncate'
37+
'writeFile'
3738
]
3839
// fs.mkdtemp() was added in Node.js v5.10.0, so check if it exists
3940
typeof fs.mkdtemp === 'function' && api.push('mkdtemp')
@@ -52,13 +53,9 @@ api.forEach(method => {
5253
// since we are a drop-in replacement for the native module
5354
exports.exists = function (filename, callback) {
5455
if (typeof callback === 'function') {
55-
return fs.exists(filename, function (exists) {
56-
callback(exists)
57-
})
56+
return fs.exists(filename, callback)
5857
}
59-
return new Promise(function (resolve) {
60-
return fs.exists(filename, function (exists) {
61-
resolve(exists)
62-
})
58+
return new Promise(resolve => {
59+
return fs.exists(filename, resolve)
6360
})
6461
}

lib/json/__tests__/output-json.test.js

+8
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,14 @@ describe('json', () => {
3434
})
3535
})
3636

37+
it('should support Promises', () => {
38+
const file = path.join(TEST_DIR, 'this-dir', 'prob-does-not', 'exist', 'file.json')
39+
assert(!fs.existsSync(file))
40+
41+
const data = {name: 'JP'}
42+
return outputJson(file, data)
43+
})
44+
3745
describe('> when an option is passed, like JSON replacer', () => {
3846
it('should pass the option along to jsonfile module', done => {
3947
const file = path.join(TEST_DIR, 'this-dir', 'does-not', 'exist', 'really', 'file.json')

lib/json/index.js

+8-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
'use strict'
22

3+
const u = require('universalify').fromCallback
34
const jsonFile = require('./jsonfile')
45

56
jsonFile.outputJsonSync = require('./output-json-sync')
6-
jsonFile.outputJson = require('./output-json')
7+
jsonFile.outputJson = u(require('./output-json'))
78
// aliases
8-
jsonFile.outputJSONSync = require('./output-json-sync')
9-
jsonFile.outputJSON = require('./output-json')
9+
jsonFile.outputJSONSync = jsonFile.outputJSONSync
10+
jsonFile.outputJSON = jsonFile.outputJson
11+
jsonFile.writeJSON = jsonFile.writeJson
12+
jsonFile.writeJSONSync = jsonFile.writeJsonSync
13+
jsonFile.readJSON = jsonFile.readJson
14+
jsonFile.readJSONSync = jsonFile.readJsonSync
1015

1116
module.exports = jsonFile

lib/json/jsonfile.js

+4-7
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
'use strict'
22

3+
const u = require('universalify').fromCallback
34
const jsonFile = require('jsonfile')
45

56
module.exports = {
67
// jsonfile exports
7-
readJson: jsonFile.readFile,
8-
readJSON: jsonFile.readFile,
8+
readJson: u(jsonFile.readFile),
99
readJsonSync: jsonFile.readFileSync,
10-
readJSONSync: jsonFile.readFileSync,
11-
writeJson: jsonFile.writeFile,
12-
writeJSON: jsonFile.writeFile,
13-
writeJsonSync: jsonFile.writeFileSync,
14-
writeJSONSync: jsonFile.writeFileSync
10+
writeJson: u(jsonFile.writeFile),
11+
writeJsonSync: jsonFile.writeFileSync
1512
}

lib/mkdirs/index.js

+11-6
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
1+
'use strict'
2+
const u = require('universalify').fromCallback
3+
const mkdirs = u(require('./mkdirs'))
4+
const mkdirsSync = require('./mkdirs-sync')
5+
16
module.exports = {
2-
mkdirs: require('./mkdirs'),
3-
mkdirsSync: require('./mkdirs-sync'),
7+
mkdirs: mkdirs,
8+
mkdirsSync: mkdirsSync,
49
// alias
5-
mkdirp: require('./mkdirs'),
6-
mkdirpSync: require('./mkdirs-sync'),
7-
ensureDir: require('./mkdirs'),
8-
ensureDirSync: require('./mkdirs-sync')
10+
mkdirp: mkdirs,
11+
mkdirpSync: mkdirsSync,
12+
ensureDir: mkdirs,
13+
ensureDirSync: mkdirsSync
914
}

lib/move/index.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
// this needs a cleanup
88

9+
const u = require('universalify').fromCallback
910
const fs = require('graceful-fs')
1011
const ncp = require('../copy/ncp')
1112
const path = require('path')
@@ -157,5 +158,5 @@ function moveDirAcrossDevice (source, dest, overwrite, callback) {
157158
}
158159

159160
module.exports = {
160-
move
161+
move: u(move)
161162
}

lib/output/__tests__/output.test.js

+5
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ describe('output', () => {
3030
done()
3131
})
3232
})
33+
it('should support promises', () => {
34+
const file = path.join(TEST_DIR, Math.random() + 't-ne', Math.random() + '.txt')
35+
assert(!fs.existsSync(file))
36+
return fse.outputFile(file, 'hi jp')
37+
})
3338
})
3439

3540
describe('> when the file does exist', () => {

lib/output/index.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
'use strict'
22

3+
const u = require('universalify').fromCallback
34
const fs = require('graceful-fs')
45
const path = require('path')
56
const mkdir = require('../mkdirs')
@@ -32,6 +33,6 @@ function outputFileSync (file, data, encoding) {
3233
}
3334

3435
module.exports = {
35-
outputFile,
36+
outputFile: u(outputFile),
3637
outputFileSync
3738
}

lib/remove/index.js

+3-11
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,9 @@
11
'use strict'
22

3+
const u = require('universalify').fromCallback
34
const rimraf = require('./rimraf')
45

5-
function removeSync (dir) {
6-
return rimraf.sync(dir, {disableGlob: true})
7-
}
8-
9-
function remove (dir, callback) {
10-
const options = {disableGlob: true}
11-
return callback ? rimraf(dir, options, callback) : rimraf(dir, options, function () {})
12-
}
13-
146
module.exports = {
15-
remove,
16-
removeSync
7+
remove: u(rimraf),
8+
removeSync: rimraf.sync
179
}

0 commit comments

Comments
 (0)