77 lines
3.9 KiB
JavaScript
77 lines
3.9 KiB
JavaScript
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.PackageScript = void 0;
|
|
const fs_1 = __importDefault(require("fs"));
|
|
const path_1 = __importDefault(require("path"));
|
|
const xxtea_node_1 = __importDefault(require("xxtea-node"));
|
|
const pako_1 = __importDefault(require("pako"));
|
|
const FileUtils_1 = __importDefault(require("../utils/FileUtils"));
|
|
const SCRIPT_PACKAGE = fs_1.default.readFileSync(path_1.default.join(__dirname, '..', '..', 'template', 'SCRIPT_PACKAGE.js')).toString();
|
|
const SETTING_GOURPLIST_REGEXP = /groupList:\s*(\[['",a-zA-Z0-9\s]+])/mg;
|
|
const SETTING_COLLISIONMATRIX_REGEXP = /collisionMatrix:\s*(\[[\[\],truefalse\s]+\])/mg;
|
|
function PackageScript(key, buildPath, isolate = false, xxtea, ungzip = false) {
|
|
const bundleDir = path_1.default.join(buildPath, 'assets', key);
|
|
if (fs_1.default.existsSync(path_1.default.join(bundleDir, 'config.subgame.json'))) {
|
|
console.warn(`Package [${key}] script packaged`);
|
|
return;
|
|
}
|
|
console.log(`Package [${key}] find config`);
|
|
const configPath = FileUtils_1.default.find(bundleDir, /config\.([a-zA-Z0-9\.]+\.)?json/);
|
|
fs_1.default.renameSync(configPath, path_1.default.join(bundleDir, 'config.subgame.json'));
|
|
console.log(`Package [${key}] config finded, renames`);
|
|
console.log(`Package [${key}] find index script`);
|
|
const scriptPath = FileUtils_1.default.find(bundleDir, /index\.([a-zA-Z0-9\.]+\.)?js/);
|
|
const scriptEncrypt = path_1.default.extname(scriptPath) === '.jsc';
|
|
let scriptBuffer = fs_1.default.readFileSync(scriptPath);
|
|
let script;
|
|
if (scriptEncrypt) {
|
|
script = decryptJSC(scriptBuffer, xxtea, ungzip);
|
|
console.log(`Package [${key}] index script decrypt result: ${script.substring(0, 100)}...`);
|
|
}
|
|
else {
|
|
script = scriptBuffer.toString();
|
|
}
|
|
if (isolate) {
|
|
console.log(`Package [${key}] find settings`);
|
|
const settingPath = FileUtils_1.default.find(path_1.default.join(buildPath, 'src'), /settings\.([a-zA-Z0-9\.]+\.)?js/);
|
|
const settingsBuffer = fs_1.default.readFileSync(settingPath);
|
|
let settings;
|
|
if (path_1.default.extname(settingPath) === '.jsc') {
|
|
settings = decryptJSC(settingsBuffer, xxtea, ungzip);
|
|
console.log(`Package [${key}] settings script decrypt result: ${settings.substring(0, 100)}...`);
|
|
}
|
|
else
|
|
settings = settingsBuffer.toString();
|
|
const groupList = SETTING_GOURPLIST_REGEXP.exec(settings)[1];
|
|
const collisionMatrix = SETTING_COLLISIONMATRIX_REGEXP.exec(settings)[1];
|
|
console.log(`Package [${key}] settings finded, saved`);
|
|
script = SCRIPT_PACKAGE
|
|
.replace('"%{subgame_key}"', key)
|
|
.replace('"%{subgame_content}"', script)
|
|
.replace('"%{subgame_group_list}"', groupList)
|
|
.replace('"%{subgame_collision_matrix}"', collisionMatrix);
|
|
console.log(`Package [${key}] class isolate`);
|
|
}
|
|
if (scriptEncrypt)
|
|
fs_1.default.writeFileSync(scriptPath, encryptJS(script, xxtea, ungzip));
|
|
else
|
|
fs_1.default.writeFileSync(scriptPath, script);
|
|
fs_1.default.renameSync(scriptPath, path_1.default.join(bundleDir, 'index.subgame' + path_1.default.extname(scriptPath)));
|
|
console.log(`Package [${key}] index script packaged`);
|
|
}
|
|
exports.PackageScript = PackageScript;
|
|
const decryptJSC = (data, key, ungzip = true) => {
|
|
let res = xxtea_node_1.default.decrypt(data, xxtea_node_1.default.toBytes(key));
|
|
res = pako_1.default.ungzip(res);
|
|
return xxtea_node_1.default.toString(res);
|
|
};
|
|
const encryptJS = (data, key, ungzip = true) => {
|
|
const res = pako_1.default.gzip(xxtea_node_1.default.toBytes(data), { level: 6 });
|
|
const result = xxtea_node_1.default.encrypt(res, xxtea_node_1.default.toBytes(key));
|
|
console.dir(result);
|
|
return result;
|
|
};
|