Module system for patches
parent
92980649eb
commit
eb216fd0e4
8
build.js
8
build.js
|
@ -5,7 +5,6 @@ import UglifyJS from 'uglify-js';
|
|||
import fs from 'fs';
|
||||
import webpack from 'webpack';
|
||||
import path from 'path';
|
||||
import applyPatches from './patches/patches.js';
|
||||
import ModUtils, { minifyCode } from './modUtils.js';
|
||||
|
||||
if (!fs.existsSync("./build")) fs.mkdirSync("./build");
|
||||
|
@ -56,8 +55,8 @@ script = script.replace(/\bS\[(\d+)\]/g, (_match, index) => `"${stringArray[inde
|
|||
|
||||
const modUtils = new ModUtils(minifyCode(script));
|
||||
|
||||
import customLobbyPatches from './patches/customLobby.js';
|
||||
customLobbyPatches(modUtils);
|
||||
import applyPatches from './patches/main.js';
|
||||
applyPatches(modUtils);
|
||||
|
||||
// for versions ^1.99.5.2
|
||||
const minificationResult = UglifyJS.minify(modUtils.script, {
|
||||
|
@ -101,9 +100,10 @@ rawCodeSegments.forEach(code => {
|
|||
});
|
||||
|
||||
modUtils.executePostMinifyHandlers();
|
||||
applyPatches(modUtils);
|
||||
script = modUtils.script;
|
||||
|
||||
console.log("Building client code...")
|
||||
|
||||
await buildClientCode();
|
||||
// the dictionary should maybe get embedded into one of the files in the bundle
|
||||
fs.writeFileSync(
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
import fs from 'fs'
|
||||
import ModUtils from '../modUtils.js';
|
||||
|
||||
const modules = await Promise.all(fs.readdirSync("./patches").flatMap(fileName => {
|
||||
if (fileName === "main.js") return [];
|
||||
else return import("./" + fileName);
|
||||
}));
|
||||
|
||||
const requiredVariables = new Set(modules.map(module => module.requiredVariables ?? []).flat());
|
||||
|
||||
export default function applyPatches(/** @type {ModUtils} */ modUtils) {
|
||||
const dictionary = modUtils.dictionary;
|
||||
|
||||
requiredVariables.forEach(varName => {
|
||||
if (!dictionary.hasOwnProperty(varName)) {
|
||||
throw new Error(`"${varName}" is required by a module but not defined the dictionary`);
|
||||
}
|
||||
});
|
||||
|
||||
// apply patches (default exported function)
|
||||
modules.forEach(module => module.default(modUtils))
|
||||
}
|
|
@ -1,6 +1,12 @@
|
|||
import assets from '../assets.js';
|
||||
import ModUtils from '../modUtils.js';
|
||||
export default (/** @type {ModUtils} */ { replace, replaceOne, replaceRawCode, dictionary, matchOne, matchRawCode, escapeRegExp }) => {
|
||||
|
||||
export default (/** @type {ModUtils} */ modUtils) => {
|
||||
modUtils.waitForMinification(() => applyPatches(modUtils))
|
||||
}
|
||||
//export const requiredVariables = ["game", "playerId", "playerData", "rawPlayerNames", "gIsSingleplayer", "playerTerritories"];
|
||||
|
||||
function applyPatches(/** @type {ModUtils} */ { replace, replaceOne, replaceRawCode, dictionary, matchOne, matchRawCode, escapeRegExp }) {
|
||||
|
||||
// Constants for easy usage of otherwise long variable access expressions
|
||||
const dict = dictionary;
|
||||
|
|
Loading…
Reference in New Issue