142 lines
2.5 KiB
JavaScript
142 lines
2.5 KiB
JavaScript
|
|
|
|
import fs from "fs";
|
|
|
|
import path from "path";
|
|
|
|
import tools from "../../unify/tools.js";
|
|
|
|
|
|
function copyRecursiveSync(src, dest) {
|
|
var exists = fs.existsSync(src);
|
|
var stats = exists && fs.statSync(src);
|
|
var isDirectory = exists && stats.isDirectory();
|
|
if (isDirectory) {
|
|
fs.mkdirSync(dest);
|
|
fs.readdirSync(src).forEach(function(childItemName) {
|
|
|
|
copyRecursiveSync(path.join(src, childItemName),
|
|
path.join(dest, childItemName));
|
|
|
|
});
|
|
} else {
|
|
fs.copyFileSync(src, dest);
|
|
}
|
|
};
|
|
|
|
const deleteFolderRecursive = function (directoryPath) {
|
|
if (fs.existsSync(directoryPath)) {
|
|
fs.readdirSync(directoryPath).forEach((file, index) => {
|
|
const curPath = path.join(directoryPath, file);
|
|
if (fs.lstatSync(curPath).isDirectory()) {
|
|
// recurse
|
|
deleteFolderRecursive(curPath);
|
|
} else {
|
|
// delete file
|
|
fs.unlinkSync(curPath);
|
|
}
|
|
});
|
|
fs.rmdirSync(directoryPath);
|
|
}
|
|
};
|
|
|
|
|
|
class fsExtra{
|
|
|
|
dirLower( parts, partsOriginal, level = 0 ) {
|
|
|
|
var absolutePath = path.resolve( parts.join("/") );
|
|
|
|
if ( !fs.existsSync( absolutePath ) ) {
|
|
|
|
parts.pop();
|
|
|
|
return this.dirLower( parts, partsOriginal, ++level );
|
|
|
|
} else {
|
|
|
|
return level;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
async ensureDirSync( dir ) {
|
|
|
|
dir = tools.slash( dir );
|
|
|
|
var parts = dir.split("/")
|
|
|
|
var partsCopy = parts.slice();
|
|
|
|
var depth = this.dirLower( parts, parts )
|
|
|
|
if( depth == 0 ) {
|
|
|
|
return true;
|
|
}
|
|
|
|
for (var i = 0; i < depth; i++) {
|
|
|
|
var negative = depth - i - 1;
|
|
|
|
var pathToDir = partsCopy.slice( 0, partsCopy.length - negative );
|
|
|
|
fs.mkdirSync(pathToDir.join("/"));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
copyFileSync( source, target ) {
|
|
|
|
var 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));
|
|
}
|
|
|
|
copySync( source, target ) {
|
|
|
|
var isDirectory = fs.lstatSync( source ).isDirectory();
|
|
|
|
if ( fs.existsSync( target ) ) {
|
|
|
|
deleteFolderRecursive( target );
|
|
|
|
}
|
|
|
|
if( isDirectory ){
|
|
|
|
copyRecursiveSync( source, target );
|
|
|
|
} else {
|
|
|
|
this.copyFileSync( source, target )
|
|
|
|
}
|
|
|
|
// console.log("isDirectory", isDirectory);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
var a = new fsExtra();
|
|
|
|
fs.dirLower = a.dirLower;
|
|
|
|
fs.ensureDirSync = a.ensureDirSync;
|
|
|
|
|
|
fs.copySync = a.copySync;
|
|
|
|
|
|
|
|
export default fs; |