mirror of
https://github.com/klxf/eext-jiepei-helper.git
synced 2025-12-07 22:54:13 +08:00
initial commit
This commit is contained in:
2
build/dist/.gitignore
vendored
Normal file
2
build/dist/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
*.zip
|
||||
*.eext
|
||||
90
build/packaged.ts
Normal file
90
build/packaged.ts
Normal file
@@ -0,0 +1,90 @@
|
||||
import fs from 'fs-extra';
|
||||
import ignore from 'ignore';
|
||||
import JSZip from 'jszip';
|
||||
|
||||
import * as extensionConfig from '../extension.json';
|
||||
|
||||
/**
|
||||
* 将多行字符串拆分成字符串数组
|
||||
*
|
||||
* @param str - 多行字符串
|
||||
* @returns 字符串数组
|
||||
*/
|
||||
function multiLineStrToArray(str: string): Array<string> {
|
||||
return str.split(/[\r\n]+/);
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查 UUID 是否合法
|
||||
*
|
||||
* @param uuid - UUID
|
||||
* @returns 是否合法
|
||||
*/
|
||||
function testUuid(uuid?: string): uuid is string {
|
||||
const regExp = /^[a-z0-9]{32}$/g;
|
||||
if (uuid && uuid !== '00000000000000000000000000000000') {
|
||||
return regExp.test(uuid.trim());
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取正确的 UUID
|
||||
*
|
||||
* @param uuid - UUID
|
||||
* @returns UUID
|
||||
*/
|
||||
function fixUuid(uuid?: string): string {
|
||||
uuid = uuid?.trim() || undefined;
|
||||
if (testUuid(uuid)) {
|
||||
return uuid.trim();
|
||||
} else {
|
||||
return crypto.randomUUID().replaceAll('-', '');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 主逻辑方法
|
||||
*/
|
||||
function main() {
|
||||
if (!testUuid(extensionConfig.uuid)) {
|
||||
const newExtensionConfig = { ...extensionConfig };
|
||||
// @ts-ignore
|
||||
delete newExtensionConfig.default;
|
||||
newExtensionConfig.uuid = fixUuid(extensionConfig.uuid);
|
||||
fs.writeJsonSync(__dirname + '/../extension.json', newExtensionConfig, { spaces: '\t', EOL: '\n', encoding: 'utf-8' });
|
||||
}
|
||||
const filepathListWithoutFilter = fs.readdirSync(__dirname + '/../', { encoding: 'utf-8', recursive: true });
|
||||
const edaignoreListWithoutResolve = multiLineStrToArray(fs.readFileSync(__dirname + '/../.edaignore', { encoding: 'utf-8' }));
|
||||
const edaignoreList: Array<string> = [];
|
||||
for (const edaignoreLine of edaignoreListWithoutResolve) {
|
||||
if (edaignoreLine.endsWith('/') || edaignoreLine.endsWith('\\')) {
|
||||
edaignoreList.push(edaignoreLine.slice(0, edaignoreLine.length - 1));
|
||||
} else {
|
||||
edaignoreList.push(edaignoreLine);
|
||||
}
|
||||
}
|
||||
const edaignore = ignore().add(edaignoreList);
|
||||
const filepathListWithoutResolve = edaignore.filter(filepathListWithoutFilter);
|
||||
const fileList: Array<string> = [];
|
||||
const folderList: Array<string> = []; // 无用数据
|
||||
for (const filepath of filepathListWithoutResolve) {
|
||||
if (fs.lstatSync(filepath).isFile()) {
|
||||
fileList.push(filepath.replace(/\\/g, '/'));
|
||||
} else {
|
||||
folderList.push(filepath.replace(/\\/g, '/'));
|
||||
}
|
||||
}
|
||||
|
||||
const zip = new JSZip();
|
||||
for (const file of fileList) {
|
||||
zip.file(file, fs.createReadStream(__dirname + '/../' + file));
|
||||
}
|
||||
|
||||
zip.generateNodeStream({ type: 'nodebuffer', streamFiles: true }).pipe(
|
||||
fs.createWriteStream(__dirname + '/dist/' + extensionConfig.name + '_v' + extensionConfig.version + '.eext'),
|
||||
);
|
||||
}
|
||||
|
||||
main();
|
||||
Reference in New Issue
Block a user