You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

82 lines
2.2 KiB

// @ts-nocheck
const path = require("path")
const fs = require("fs")
export function removeIndex(ss:any) {
const remove = (str:any) => {
if (str.endsWith("/index")) {
return str.slice(0, -6);
}
if (str.endsWith("index")) {
return str.slice(0, -5);
}
return str ? str : "/";
};
let r = true;
let rr = ss;
while (r) {
if (rr.endsWith("/index")) {
rr = remove(rr);
} else {
r = false;
}
}
return rr ? rr : "/";
}
export function isIndexEnd(str:any) {
return str.length == 1 && str.endsWith("/");
}
export function walkDir(
filePath:any,
exclude = ["node_modules", "^_", ".git", ".idea", ".gitignore", "client","\.txt$","\.test\.js$","\.test\.ts$"]
) {
let files:any[] = [];
function Data(opts:any) {
this.relativeDir = opts.relativeDir;
this.relativeFile = opts.relativeFile;
this.filename = opts.filename;
this.file = opts.file;
this.absoluteFile = opts.absoluteFile;
this.relativeFileNoExt = opts.relativeFileNoExt;
this.absoluteDir = opts.absoluteDir;
}
function readDir(filePath, dirname = ".") {
let res = fs.readdirSync(filePath);
res.forEach((filename) => {
const filepath = path.resolve(filePath, filename);
const stat = fs.statSync(filepath);
const name = filepath.split(path.sep).slice(-1)[0];
if (typeof exclude === "string" && new RegExp(exclude).test(name)) {
return;
}
if (Array.isArray(exclude)) {
for (let i = 0; i < exclude.length; i++) {
const excludeItem = exclude[i];
if (new RegExp(excludeItem).test(name)) {
return;
}
}
}
if (!stat.isFile()) {
readDir(filepath, dirname + path.sep + name);
} else {
const data = new Data({
relativeDir: dirname,
relativeFile: dirname + path.sep + path.parse(filepath).base,
relativeFileNoExt: dirname + path.sep + path.parse(filepath).name,
file: path.parse(filepath).base,
filename: path.parse(filepath).name,
absoluteFile: filepath,
absoluteDir: path.parse(filepath).dir,
});
files.push(data);
}
});
}
readDir(filePath);
return files;
}