UNPKG

@subrotosaha/bangla-date

Version:

A simple utility package for string manipulation in JavaScript.

87 lines (73 loc) 2.78 kB
import JavaScriptObfuscator from "javascript-obfuscator"; import fs from "fs"; import path from "path"; import { fileURLToPath } from "url"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const distDir = path.join(__dirname, "..", "dist"); // Function to recursively find all JS files function getAllJsFiles(dir) { let results: string[] = []; const list = fs.readdirSync(dir); list.forEach((file) => { const filePath = path.join(dir, file); const stat = fs.statSync(filePath); if (stat.isDirectory()) { // Recursively search subdirectories results = results.concat(getAllJsFiles(filePath)); } else if (file.endsWith(".js")) { results.push(filePath); } }); return results; } // Get all JS files recursively const files = getAllJsFiles(distDir); files.forEach((filePath) => { const code = fs.readFileSync(filePath, "utf8"); // Obfuscate the code with safer settings const obfuscatedCode = JavaScriptObfuscator.obfuscate(code, { compact: true, controlFlowFlattening: false, // Keep this false - causes const reassignment issues deadCodeInjection: false, // Set to false - can cause const issues debugProtection: false, // Safer to disable for libraries disableConsoleOutput: true, identifierNamesGenerator: "mangled", identifiersPrefix: "", log: false, numbersToExpressions: false, // Disable - can cause issues renameGlobals: false, // Safer for libraries used by others selfDefending: false, // Disable - can cause runtime errors simplify: true, splitStrings: false, stringArray: true, // Re-enable but with safe settings stringArrayCallsTransform: true, stringArrayEncoding: ["none"], // Use safe encoding stringArrayIndexShift: true, stringArrayRotate: true, stringArrayShuffle: true, stringArrayWrappersCount: 1, stringArrayWrappersChainedCalls: true, stringArrayWrappersParametersMaxCount: 2, stringArrayWrappersType: "variable", stringArrayThreshold: 0.75, transformObjectKeys: false, // Safer to disable unicodeEscapeSequence: false, target: "browser", // Remove source map for production sourceMap: false, reservedNames: [], reservedStrings: [], seed: 0, }).getObfuscatedCode(); // Post-process to fix any remaining const reassignment issues let fixedCode = obfuscatedCode; // Replace problematic const declarations that get reassigned // This is a safety net in case the obfuscator still creates them fixedCode = fixedCode.replace( /const\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=([^;]+);([^}]*)\1\s*=/g, "let $1=$2;$3$1=" ); // Write the obfuscated code back to the file fs.writeFileSync(filePath, fixedCode); });