Generazione delle source map in cascata (se abilitate)

master
Pietro Brenna 2025-10-08 16:22:42 +02:00
parent 8d9cf61ca7
commit 0e0e5caf85
3 changed files with 70 additions and 15 deletions

View File

@ -3,6 +3,7 @@
var javascriptObfuscator = require("javascript-obfuscator"); var javascriptObfuscator = require("javascript-obfuscator");
var fs = require("node:fs"); var fs = require("node:fs");
var path = require("node:path"); var path = require("node:path");
let { SourceMapConsumer, SourceMapGenerator } = require("source-map");
function obfuscatorPlugin(obOptions) { function obfuscatorPlugin(obOptions) {
let { excludeChunks, options } = obOptions || {}; let { excludeChunks, options } = obOptions || {};
return { return {
@ -25,18 +26,51 @@ function obfuscatorPlugin(obOptions) {
let abs_path = path.join(output_options.dir, output_file); let abs_path = path.join(output_options.dir, output_file);
const obfuscationResult = javascriptObfuscator.obfuscate( const obfuscationResult = javascriptObfuscator.obfuscate(
chunk.code, chunk.code,
options {
...options,
sourceMapFileName: "sourceMap", // questo lo fa indipendentemente da quello che gli metto (ed è importante per quello che succede dopo), quindi esplicito quello che lui fa già
}
); );
let code = obfuscationResult.getObfuscatedCode(); let code = obfuscationResult.getObfuscatedCode();
await new Promise((resolve, reject) => { fs.writeFileSync(abs_path, code);
fs.writeFile(abs_path, code, (err) => { console.log(
if (err) { ` Obufuscated file written to ${abs_path}`
reject(err); );
return; if (options.sourceMap) {
let smap = obfuscationResult.getSourceMap();
let abs_path_src = path.join(
output_options.dir,
output_file + ".map"
);
// let abs_path_dst = path.join(output_options.dir, 'obf-'+output_file+'.map');
if (smap) {
// leggo source map precedente
let consumer1 = null;
try {
let content = fs.readFileSync(abs_path_src, {
encoding: "utf-8",
});
consumer1 = await new SourceMapConsumer(JSON.parse(content));
} catch (e) {
console.error(
" can't read original source map"
);
} }
resolve(); let write_map = "";
}); if (consumer1) {
}); let consumer2 = await new SourceMapConsumer(JSON.parse(smap));
let generator = SourceMapGenerator.fromSourceMap(consumer2);
generator.applySourceMap(consumer1, "sourceMap");
write_map = generator.toString();
} else {
write_map = smap;
}
fs.writeFileSync(abs_path_src, write_map);
console.log(
` Source map written to ${abs_path_src}`
);
}
}
} else { } else {
console.log( console.log(
`[briq-vite-obfuscator-plugin] Ignoring chunk ${chunk.name} (explicitly excluded)` `[briq-vite-obfuscator-plugin] Ignoring chunk ${chunk.name} (explicitly excluded)`

30
package-lock.json generated
View File

@ -9,7 +9,8 @@
"version": "0.1.0", "version": "0.1.0",
"license": "BSD-2-Clause", "license": "BSD-2-Clause",
"dependencies": { "dependencies": {
"javascript-obfuscator": "^4.1.1" "javascript-obfuscator": "^4.1.1",
"source-map": "^0.7.6"
} }
}, },
"node_modules/@javascript-obfuscator/escodegen": { "node_modules/@javascript-obfuscator/escodegen": {
@ -30,6 +31,16 @@
"source-map": "~0.6.1" "source-map": "~0.6.1"
} }
}, },
"node_modules/@javascript-obfuscator/escodegen/node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"license": "BSD-3-Clause",
"optional": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/@javascript-obfuscator/estraverse": { "node_modules/@javascript-obfuscator/estraverse": {
"version": "5.4.0", "version": "5.4.0",
"resolved": "https://registry.npmjs.org/@javascript-obfuscator/estraverse/-/estraverse-5.4.0.tgz", "resolved": "https://registry.npmjs.org/@javascript-obfuscator/estraverse/-/estraverse-5.4.0.tgz",
@ -961,12 +972,12 @@
} }
}, },
"node_modules/source-map": { "node_modules/source-map": {
"version": "0.6.1", "version": "0.7.6",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
"license": "BSD-3-Clause", "license": "BSD-3-Clause",
"engines": { "engines": {
"node": ">=0.10.0" "node": ">= 12"
} }
}, },
"node_modules/source-map-support": { "node_modules/source-map-support": {
@ -979,6 +990,15 @@
"source-map": "^0.6.0" "source-map": "^0.6.0"
} }
}, },
"node_modules/source-map-support/node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/string-template": { "node_modules/string-template": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz",

View File

@ -9,6 +9,7 @@
"license": "BSD-2-Clause", "license": "BSD-2-Clause",
"description": "", "description": "",
"dependencies": { "dependencies": {
"javascript-obfuscator": "^4.1.1" "javascript-obfuscator": "^4.1.1",
"source-map": "^0.7.6"
} }
} }