Experimental fix for game version ^1.99.5.2

dev
peshomir 2024-08-18 16:33:41 +03:00
parent e030456063
commit 8b01bb6642
3 changed files with 37 additions and 9 deletions

View File

@ -1,5 +1,6 @@
import beautifier from 'js-beautify'; import beautifier from 'js-beautify';
const { js: beautify } = beautifier; const { js: beautify } = beautifier;
import UglifyJS from 'uglify-js';
import fs from 'fs'; import fs from 'fs';
if (!fs.existsSync("./build")) fs.mkdirSync("./build"); if (!fs.existsSync("./build")) fs.mkdirSync("./build");
@ -9,6 +10,22 @@ fs.cpSync("./src/fx_core.js", "./build/fx_core.js");
fs.writeFileSync("./build/index.html", fs.readFileSync("./build/index.html").toString().replace(/buildTimestamp/g, Date.now())); fs.writeFileSync("./build/index.html", fs.readFileSync("./build/index.html").toString().replace(/buildTimestamp/g, Date.now()));
let script = fs.readFileSync('./game/latest.js', { encoding: 'utf8' }).replace("\n", "").trim(); let script = fs.readFileSync('./game/latest.js', { encoding: 'utf8' }).replace("\n", "").trim();
const exposeVarsToGlobalScope = true;
// need to first remove the iife wrapper so the top-level functions aren't inlined
if (exposeVarsToGlobalScope && script.startsWith("\"use strict\"; (function () {") && script.endsWith("})();"))
script = script.slice("\"use strict\"; (function () {".length, -"})();".length);
if (exposeVarsToGlobalScope && script.startsWith("(function () {") && script.endsWith("})();"))
script = script.slice("(function () {".length, -"})();".length);
// for versions ^1.99.5.2
const minificationResult = UglifyJS.minify(script, {
"compress": { "arrows": false },
"mangle": false
});
if (minificationResult.error) console.log(minificationResult.error);
if (minificationResult.warnings) console.log(minificationResult.warnings);
script = minificationResult.code;
const replaceOne = (expression, replaceValue) => { const replaceOne = (expression, replaceValue) => {
const result = matchOne(expression); const result = matchOne(expression);
// this (below) works correctly because expression.lastIndex gets reset above in matchOne when there is no match // this (below) works correctly because expression.lastIndex gets reset above in matchOne when there is no match
@ -104,13 +121,6 @@ applyPatches({ replace, replaceOne, replaceRawCode, dictionary, matchOne, matchR
console.log("Formatting code..."); console.log("Formatting code...");
const exposeVarsToGlobalScope = true;
if (exposeVarsToGlobalScope && script.startsWith("\"use strict\"; (function () {") && script.endsWith("})();"))
script = script.slice("\"use strict\"; (function () {".length, -"})();".length);
if (exposeVarsToGlobalScope && script.startsWith("(function () {") && script.endsWith("})();"))
script = script.slice("(function () {".length, -"})();".length);
script = beautify(script, { script = beautify(script, {
"indent_size": "1", "indent_size": "1",
"indent_char": "\t", "indent_char": "\t",

19
package-lock.json generated
View File

@ -9,7 +9,8 @@
"version": "0.5.3", "version": "0.5.3",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"js-beautify": "^1.14.11" "js-beautify": "^1.14.11",
"uglify-js": "^3.19.2"
} }
}, },
"node_modules/@isaacs/cliui": { "node_modules/@isaacs/cliui": {
@ -463,6 +464,17 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/uglify-js": {
"version": "3.19.2",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.2.tgz",
"integrity": "sha512-S8KA6DDI47nQXJSi2ctQ629YzwOVs+bQML6DAtvy0wgNdpi+0ySpQK0g2pxBq2xfF2z3YCscu7NNA8nXT9PlIQ==",
"bin": {
"uglifyjs": "bin/uglifyjs"
},
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/which": { "node_modules/which": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@ -878,6 +890,11 @@
} }
} }
}, },
"uglify-js": {
"version": "3.19.2",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.2.tgz",
"integrity": "sha512-S8KA6DDI47nQXJSi2ctQ629YzwOVs+bQML6DAtvy0wgNdpi+0ySpQK0g2pxBq2xfF2z3YCscu7NNA8nXT9PlIQ=="
},
"which": { "which": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",

View File

@ -19,6 +19,7 @@
}, },
"homepage": "https://github.com/fxclient/FXclient#readme", "homepage": "https://github.com/fxclient/FXclient#readme",
"dependencies": { "dependencies": {
"js-beautify": "^1.14.11" "js-beautify": "^1.14.11",
"uglify-js": "^3.19.2"
} }
} }