Files
subgame-packager/dist/utils/FileUtils.js
2025-07-11 14:49:28 +08:00

121 lines
4.5 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const archiver_1 = __importDefault(require("archiver"));
var FileUtils;
(function (FileUtils) {
function copy(srcFileOrDir, destFileOrDir) {
if (!fs_1.default.existsSync(srcFileOrDir))
return;
const stat = fs_1.default.statSync(srcFileOrDir);
if (stat.isDirectory()) {
mkdir(destFileOrDir);
const files = fs_1.default.readdirSync(srcFileOrDir);
files.forEach(item => copy(path_1.default.join(srcFileOrDir, item), path_1.default.join(destFileOrDir, item)));
}
else {
mkdir(path_1.default.dirname(destFileOrDir));
fs_1.default.copyFileSync(srcFileOrDir, destFileOrDir);
}
}
FileUtils.copy = copy;
function mkdir(dir) {
if (fs_1.default.existsSync(dir))
return;
let parentDir = path_1.default.dirname(dir);
mkdir(parentDir);
fs_1.default.mkdirSync(dir);
}
FileUtils.mkdir = mkdir;
function rm(fileOrDir) {
if (!fs_1.default.existsSync(fileOrDir))
return;
const stat = fs_1.default.statSync(fileOrDir);
if (stat.isDirectory()) {
const files = fs_1.default.readdirSync(fileOrDir);
files.forEach(item => rm(path_1.default.join(fileOrDir, item)));
fs_1.default.rmdirSync(fileOrDir);
}
else {
fs_1.default.unlinkSync(fileOrDir);
}
}
FileUtils.rm = rm;
function find(dir, nameOrRegExp, deepFind = false) {
if (!fs_1.default.existsSync(dir))
return null;
const files = fs_1.default.readdirSync(dir);
const check = typeof nameOrRegExp === 'string' ? (value) => value === nameOrRegExp : (value) => nameOrRegExp.test(value);
for (const file of files) {
const fullPath = path_1.default.join(dir, file);
const stat = fs_1.default.statSync(fullPath);
if (!stat.isDirectory()) {
if (check(file))
return fullPath;
}
else if (deepFind) {
const result = find(fullPath, nameOrRegExp);
if (result)
return result;
}
}
return null;
}
FileUtils.find = find;
function fileCount(dir, includeFolder = false) {
if (!fs_1.default.existsSync(dir))
return 0;
const stat = fs_1.default.statSync(dir);
if (!stat.isDirectory()) {
return 1;
}
let count = includeFolder ? 1 : 0;
const files = fs_1.default.readdirSync(dir);
files.forEach(item => count += fileCount(path_1.default.join(dir, item)));
return count;
}
FileUtils.fileCount = fileCount;
function checkFileNameIndex(fileFullPath, indexGen = index => `(${index})`) {
if (!fs_1.default.existsSync(fileFullPath))
return fileFullPath;
const extname = path_1.default.extname(fileFullPath);
const basename = path_1.default.basename(fileFullPath, extname);
const dirname = path_1.default.dirname(fileFullPath);
let i = 1;
let limit = 1000;
while (limit-- > 0) {
const newPath = path_1.default.join(dirname, `${basename}${indexGen(i)}${extname}`);
if (!fs_1.default.existsSync(newPath))
return newPath;
i++;
}
return null;
}
FileUtils.checkFileNameIndex = checkFileNameIndex;
function zipdir(srcDir, outputFile) {
mkdir(path_1.default.dirname(outputFile));
var promise = new Promise((resolve, reject) => {
const writeStream = fs_1.default.createWriteStream(outputFile);
const archive = (0, archiver_1.default)('zip', {
zlib: { level: 9 }
});
writeStream.on('close', () => {
resolve();
});
archive.on('error', function (error) {
reject(error);
});
archive.pipe(writeStream);
archive.directory(srcDir, false);
archive.finalize();
});
return promise;
}
FileUtils.zipdir = zipdir;
})(FileUtils || (FileUtils = {}));
exports.default = FileUtils;