91 lines
3.4 KiB
JavaScript
91 lines
3.4 KiB
JavaScript
"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,
|
|
sourceMapBaseUrl:
|
|
"https://dev-helper.briq.it/source-maps/" +
|
|
(process.env.PROJECT_NAME || "unknown_project") +
|
|
"/" +
|
|
(process.env.GIT_COMMIT_SHA || "unknown_commit"),
|
|
sourceMapFileName: output_file,
|
|
}
|
|
);
|
|
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;
|