Skip to content

Commit 705727e

Browse files
committed
webpack#172 - Support alternative fs implementations.
1 parent 5c1495a commit 705727e

File tree

1 file changed

+23
-20
lines changed

1 file changed

+23
-20
lines changed

lib/NodeJsInputFileSystem.js

+23-20
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,31 @@
44
*/
55
"use strict";
66

7-
const fs = require("graceful-fs");
7+
const defaultFs = require("graceful-fs");
8+
9+
const fsMethods = [
10+
"stat",
11+
"statSync",
12+
"readFile",
13+
"readFileSync",
14+
"readlink",
15+
"readlinkSync"
16+
];
817

918
class NodeJsInputFileSystem {
19+
constructor(fs) {
20+
this.fs = fs || defaultFs;
21+
for (const key of fsMethods) {
22+
Object.defineProperty(this, key, {
23+
configurable: true,
24+
writable: true,
25+
value: this.fs[key].bind(this.fs)
26+
});
27+
}
28+
}
29+
1030
readdir(path, callback) {
11-
fs.readdir(path, (err, files) => {
31+
this.fs.readdir(path, (err, files) => {
1232
callback(
1333
err,
1434
files &&
@@ -20,7 +40,7 @@ class NodeJsInputFileSystem {
2040
}
2141

2242
readdirSync(path) {
23-
const files = fs.readdirSync(path);
43+
const files = this.fs.readdirSync(path);
2444
return (
2545
files &&
2646
files.map(file => {
@@ -30,21 +50,4 @@ class NodeJsInputFileSystem {
3050
}
3151
}
3252

33-
const fsMethods = [
34-
"stat",
35-
"statSync",
36-
"readFile",
37-
"readFileSync",
38-
"readlink",
39-
"readlinkSync"
40-
];
41-
42-
for (const key of fsMethods) {
43-
Object.defineProperty(NodeJsInputFileSystem.prototype, key, {
44-
configurable: true,
45-
writable: true,
46-
value: fs[key].bind(fs)
47-
});
48-
}
49-
5053
module.exports = NodeJsInputFileSystem;

0 commit comments

Comments
 (0)