"use strict"; 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 { name: "vite-plugin-javascript-obfuscator", enforce: "post", apply: (obOptions === null || obOptions === void 0 ? void 0 : obOptions.apply) || (() => true), async writeBundle(output_options, bundle) { for (let output_file in bundle) { if (bundle[output_file].type != "chunk") { continue; } let chunk = bundle[output_file]; if (output_file.match(/\.(js|mjs|cjs)$/)) { if (excludeChunks.indexOf(chunk.name) == -1) { console.log( `[briq-vite-obfuscator-plugin] Obfuscating chunk ${chunk.name} (${output_file}) ...` ); let abs_path = path.join(output_options.dir, output_file); const obfuscationResult = javascriptObfuscator.obfuscate( chunk.code, { ...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(); 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" ); } 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)` ); } } } }, }; } module.exports = obfuscatorPlugin;