Skip to content

Commit 0f89ad0

Browse files
authored
fix: Resolve dependency issues on Node.js 20 (#62)
* fix: Resolve dependency issues on Node.js 20 We drop the requirement for a native module, and make use of fs.statfs where available (Node.js >=18) * fix: Fix incorrect checkSync implementation Rewrites the checkSync implementation under Node 18+
1 parent a405ef4 commit 0f89ad0

File tree

3 files changed

+71
-24
lines changed

3 files changed

+71
-24
lines changed

fallback.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
var native = require("./build/Release/diskusage.node");
2+
var promise = typeof Promise !== "undefined" ? Promise : require("es6-promise").Promise;
3+
4+
exports.check = function(path, callback) {
5+
if (callback) {
6+
return check(path, callback);
7+
}
8+
9+
return new promise(function (resolve, reject) {
10+
check(path, function (err, result) {
11+
err ? reject(err) : resolve(result);
12+
});
13+
});
14+
};
15+
16+
exports.checkSync = native.getDiskUsage;
17+
18+
function check(path, callback) {
19+
var result = undefined;
20+
var error = undefined;
21+
22+
try {
23+
result = native.getDiskUsage(path);
24+
} catch (error_) {
25+
error = error_;
26+
}
27+
28+
callback(error, result);
29+
}

index.js

Lines changed: 39 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,47 @@
1-
var native = require("./build/Release/diskusage.node");
2-
var promise = typeof Promise !== "undefined" ? Promise : require("es6-promise").Promise;
1+
var fs = require('fs');
32

4-
exports.check = function(path, callback) {
5-
if (callback) {
6-
return check(path, callback);
7-
}
3+
// Detect presence of fs.statfs
4+
if(typeof fs.statfs === 'function') {
5+
exports.check = function(path, callback) {
6+
if (callback) {
7+
return check(path, callback);
8+
}
89

9-
return new promise(function (resolve, reject) {
10-
check(path, function (err, result) {
11-
err ? reject(err) : resolve(result);
10+
return new Promise(function (resolve, reject) {
11+
check(path, function (err, result) {
12+
err ? reject(err) : resolve(result);
13+
});
1214
});
13-
});
14-
};
15+
}
16+
17+
function check(path, callback) {
18+
fs.statfs(path, function (err, result_) {
19+
var result = undefined;
1520

16-
exports.checkSync = native.getDiskUsage;
21+
if (!err) {
22+
result = {
23+
available: result_.bavail * result_.bsize,
24+
free: result_.bfree * result_.bsize,
25+
total: result_.blocks * result_.bsize
26+
};
27+
}
28+
29+
callback(err, result);
30+
});
31+
}
1732

18-
function check(path, callback) {
19-
var result = undefined;
20-
var error = undefined;
33+
exports.checkSync = function(path) {
34+
var result = fs.statfsSync(path);
2135

22-
try {
23-
result = native.getDiskUsage(path);
24-
} catch (error_) {
25-
error = error_;
36+
return {
37+
available: result.bavail * result.bsize,
38+
free: result.bfree * result.bsize,
39+
total: result.blocks * result.bsize
40+
}
2641
}
42+
} else {
43+
var diskusage = require('./fallback.js');
2744

28-
callback(error, result);
29-
}
45+
exports.check = diskusage.check;
46+
exports.checkSync = diskusage.checkSync;
47+
}

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
"typings": "index.d.ts",
77
"gypfile": true,
88
"dependencies": {
9-
"es6-promise": "^4.2.5",
10-
"nan": "^2.14.0"
9+
"es6-promise": "^4.2.8",
10+
"nan": "^2.18.0"
1111
},
1212
"devDependencies": {
13-
"eslint": "^6.0.1"
13+
"eslint": "^8.49.0"
1414
},
1515
"repository": {
1616
"type": "git",

0 commit comments

Comments
 (0)