game2 / client / scripts / normalize-gensyms.mjs
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// The CLJS compiler numbers protocol `…$dyn_<N>` vars with the JVM-global
// gensym counter, so two otherwise-identical release builds differ in those
// digits alone (verified: renumbering them is the ONLY delta between clean
// builds). These vars are file-local and only ever referenced within the
// same file, so a consistent per-file renumbering in first-occurrence order
// is semantics-preserving. Canon copy (train-kit), adapted: an app's emitted
// JS lives in dist/assets.
import { readdirSync, readFileSync, writeFileSync } from "node:fs";
import { join } from "node:path";

const DIST = new URL("../dist/assets", import.meta.url).pathname;
const DYN = /([A-Za-z0-9_$]+\$dyn)_(\d+)/g;

for (const name of readdirSync(DIST)) {
  if (!name.endsWith(".js")) continue;
  const file = join(DIST, name);
  const src = readFileSync(file, "utf8");
  const mapping = new Map();
  const out = src.replace(DYN, (m, stem) => {
    if (!mapping.has(m)) mapping.set(m, `${stem}_${mapping.size + 1}`);
    return mapping.get(m);
  });
  if (out !== src) writeFileSync(file, out);
}
console.log("normalize-gensyms: dyn vars renumbered deterministically");

static mirror of HEAD · about · clone: git clone https://git.ardegazu.ro/game2.git