/
fs.js
34 lines (29 loc) · 985 Bytes
/
fs.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/* @flow */
import MemoryFileSystem from 'memory-fs';
import path from 'path';
function createNewMemoryFileSystem(): MemoryFileSystem {
const _fs = new MemoryFileSystem();
// Note: binding all methods of _fs
// some libs use individual fs method
// e.g const writeFileSync = fs.writeFileSync
// writeFileSync() // this will call method with wrong this
// happening in find-config package
Object.keys(MemoryFileSystem.prototype).forEach((key) => {
if (typeof _fs[key] === 'function') {
_fs[key] = _fs[key].bind(_fs);
}
});
return _fs;
}
const fs = createNewMemoryFileSystem();
// This is a custom function that our tests can use during setup to create
// files in memory
function __setMockFiles(newMockFiles) {
Object.keys(newMockFiles).forEach((file) => {
const dirname = path.dirname(file);
fs.mkdirpSync(dirname);
fs.writeFileSync(file, newMockFiles[file], 'utf8');
});
}
fs.__setMockFiles = __setMockFiles;
module.exports = fs;