-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfile-system.main.mjs
94 lines (85 loc) · 2.33 KB
/
file-system.main.mjs
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import fs from 'fs';
import util from 'util';
import path, { dirname } from 'path';
import { fileURLToPath } from 'url';
import child_process from 'child_process';
const projectPath = path.join(dirname(fileURLToPath(import.meta.url)), '../');
const exec = util.promisify(child_process.exec);
function isFile(path) {
return fs.lstatSync(path).isFile();
}
function isDirectory(path) {
return fs.lstatSync(path).isDirectory();
}
function copyFileSync(source, target) {
let targetFile = target;
//if target is a directory a new file with the same name will be created
if (fs.existsSync(target)) {
if (fs.lstatSync(target).isDirectory()) {
targetFile = path.join(target, path.basename(source));
}
}
fs.writeFileSync(targetFile, fs.readFileSync(source));
}
function copyFolderRecursiveSync(source, target) {
let files = [];
//check if folder needs to be created or integrated
const targetFolder = path.join(target, path.basename(source));
if (!fs.existsSync(targetFolder)) {
fs.mkdirSync(targetFolder);
}
//copy
if (fs.lstatSync(source).isDirectory()) {
files = fs.readdirSync(source);
files.forEach(function(file) {
const curSource = path.join(source, file);
if (fs.lstatSync(curSource).isDirectory()) {
copyFolderRecursiveSync(curSource, targetFolder);
} else {
copyFileSync(curSource, targetFolder);
}
});
}
}
/**
* @returns {Boolean} true if command is available; else false;
*/
async function isCommandAvailable(command) {
try {
await exec(command);
} catch ({ stderr }) {
if (
stderr ===
`'${command}' is not recognized as an internal or external command,\r\noperable program or batch file.\r\n`
) {
return false;
}
}
return true;
}
async function getFileName(filePath) {
let filepath = filePath;
if (filepath.includes(projectPath)) {
filepath = filePath.replace(projectPath, '');
}
while (filepath.includes("'")) {
filepath = filepath.replace("'", '');
}
if ((await fs.promises.lstat(`${filepath}`)).isDirectory()) {
return undefined;
} else {
return filepath.slice(filepath.lastIndexOf('\\') + 1, filepath.length);
}
}
export default {
...fs,
isDirectory,
isFile,
exec,
path,
copyFileSync,
copyFolderRecursiveSync,
isCommandAvailable,
getFileName,
__projectPath: projectPath
};