From 0e0e5caf855f6e6c666e0a840a08ecf6267abe1a Mon Sep 17 00:00:00 2001 From: Pietro Brenna Date: Wed, 8 Oct 2025 16:22:42 +0200 Subject: [PATCH] Generazione delle source map in cascata (se abilitate) --- index.js | 52 +++++++++++++++++++++++++++++++++++++++-------- package-lock.json | 30 ++++++++++++++++++++++----- package.json | 3 ++- 3 files changed, 70 insertions(+), 15 deletions(-) diff --git a/index.js b/index.js index a726e1d..33ec7ae 100644 --- a/index.js +++ b/index.js @@ -3,6 +3,7 @@ var javascriptObfuscator = require("javascript-obfuscator"); var fs = require("node:fs"); var path = require("node:path"); +let { SourceMapConsumer, SourceMapGenerator } = require("source-map"); function obfuscatorPlugin(obOptions) { let { excludeChunks, options } = obOptions || {}; return { @@ -25,18 +26,51 @@ function obfuscatorPlugin(obOptions) { let abs_path = path.join(output_options.dir, output_file); const obfuscationResult = javascriptObfuscator.obfuscate( 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(); - await new Promise((resolve, reject) => { - fs.writeFile(abs_path, code, (err) => { - if (err) { - reject(err); - return; + fs.writeFileSync(abs_path, code); + console.log( + ` Obufuscated file written to ${abs_path}` + ); + 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 { console.log( `[briq-vite-obfuscator-plugin] Ignoring chunk ${chunk.name} (explicitly excluded)` diff --git a/package-lock.json b/package-lock.json index 2621dbb..b2990a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,8 @@ "version": "0.1.0", "license": "BSD-2-Clause", "dependencies": { - "javascript-obfuscator": "^4.1.1" + "javascript-obfuscator": "^4.1.1", + "source-map": "^0.7.6" } }, "node_modules/@javascript-obfuscator/escodegen": { @@ -30,6 +31,16 @@ "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": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/@javascript-obfuscator/estraverse/-/estraverse-5.4.0.tgz", @@ -961,12 +972,12 @@ } }, "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==", + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", "license": "BSD-3-Clause", "engines": { - "node": ">=0.10.0" + "node": ">= 12" } }, "node_modules/source-map-support": { @@ -979,6 +990,15 @@ "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": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/string-template/-/string-template-1.0.0.tgz", diff --git a/package.json b/package.json index 03ea622..fc326b2 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "license": "BSD-2-Clause", "description": "", "dependencies": { - "javascript-obfuscator": "^4.1.1" + "javascript-obfuscator": "^4.1.1", + "source-map": "^0.7.6" } }