UNPKG

vite-plugin-bundle-obfuscator

Version:
3 lines (2 loc) 11.5 kB
"use strict";var Ee=Object.create;var _=Object.defineProperty;var we=Object.getOwnPropertyDescriptor;var Le=Object.getOwnPropertyNames;var Fe=Object.getPrototypeOf,Pe=Object.prototype.hasOwnProperty;var Ae=(t,e)=>{for(var n in e)_(t,n,{get:e[n],enumerable:!0})},Y=(t,e,n,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Le(e))!Pe.call(t,r)&&r!==n&&_(t,r,{get:()=>e[r],enumerable:!(o=we(e,r))||o.enumerable});return t};var E=(t,e,n)=>(n=t!=null?Ee(Fe(t)):{},Y(e||!t||!t.__esModule?_(n,"default",{value:t,enumerable:!0}):n,t)),je=t=>Y(_({},"__esModule",{value:!0}),t);var We={};Ae(We,{default:()=>Ce});module.exports=je(We);var U=E(require("vite")),ue=require("worker_threads"),D=E(require("path")),le=E(require("os")),ce=require("zlib"),G=E(require("javascript-obfuscator")),pe=E(require("@jridgewell/remapping"));var b=require("fs"),m=require("path"),{toString:L}=Object.prototype;function T(t){return L.call(t)==="[object RegExp]"}function w(t){return L.call(t)==="[object String]"}function g(t){return L.call(t)==="[object Object]"}function y(t){return Array.isArray(t)}function V(t){let e=L.call(t);return e==="[object Function]"||e==="[object AsyncFunction]"}function $(t){return L.call(t)==="[object Boolean]"}function Z(t,e){return e?y(e)?e.some(n=>w(n)?t.includes(n):T(n)?n.test(t):!1):w(e)?t.includes(e):T(e)?e.test(t):!1:!1}function ee(t){return!!t.build?.lib}function Ne(t){if(!(0,b.existsSync)(t))return!1;try{let e=JSON.parse((0,b.readFileSync)(t,"utf-8"));return!!{...e.dependencies,...e.devDependencies}?.nuxt}catch{return!1}}function _e(t){return[(0,m.resolve)(t,"nuxt.config.js"),(0,m.resolve)(t,"nuxt.config.ts"),(0,m.resolve)(t,"nuxt.config.mjs"),(0,m.resolve)(t,"nuxt.config.cjs")].some(e=>(0,b.existsSync)(e))}function*te(t){let e=t;for(;;){yield e;let n=(0,m.dirname)(e);if(n===e)break;e=n}}function Te(t){let e=t?.plugins;return Array.isArray(e)?e.some(n=>typeof n?.name=="string"&&(n.name==="nuxt"||n.name.startsWith("nuxt:"))):!1}function ne(t={}){if(Te(t))return!0;let e=t.root||process.cwd();for(let n of te(e)){if(_e(n))return!0;let o=(0,m.resolve)(n,"package.json");if((0,b.existsSync)(o))return Ne(o)}return!1}function $e(t){if(!(0,b.existsSync)(t))return!1;try{let e=JSON.parse((0,b.readFileSync)(t,"utf-8"));return!!{...e.dependencies,...e.devDependencies}?.["laravel-vite-plugin"]}catch{return!1}}function Ie(t){let e=t?.plugins;return Array.isArray(e)?e.some(n=>typeof n?.name=="string"&&(n.name==="laravel"||n.name.startsWith("laravel:"))):!1}function oe(t={}){if(Ie(t))return!0;let e=t.root||process.cwd();for(let n of te(e)){let o=(0,m.resolve)(n,"package.json");if((0,b.existsSync)(o))return $e(o)}return!1}var re={excludes:[],enable:!0,log:!0,apply:"build",autoExcludeNodeModules:!1,threadPool:!1,obfuscateWorker:!1,obfuscateWorkerExcludes:[],options:{compact:!0,controlFlowFlattening:!0,controlFlowFlatteningThreshold:1,deadCodeInjection:!1,debugProtection:!1,debugProtectionInterval:0,disableConsoleOutput:!1,identifierNamesGenerator:"hexadecimal",log:!1,numbersToExpressions:!1,renameGlobals:!1,selfDefending:!0,simplify:!0,splitStrings:!1,ignoreImports:!0,stringArray:!0,stringArrayCallsTransform:!0,stringArrayCallsTransformThreshold:.5,stringArrayEncoding:[],stringArrayIndexShift:!0,stringArrayRotate:!0,stringArrayShuffle:!0,stringArrayWrappersCount:1,stringArrayWrappersChainedCalls:!0,stringArrayWrappersParametersMaxCount:2,stringArrayWrappersType:"variable",stringArrayThreshold:.75,unicodeEscapeSequence:!1}},se="node_modules",I="vendor-modules",ie="vendor-",J=(o=>(o.B="B",o.KB="KB",o.MB="MB",o))(J||{}),R=Object.freeze({info:"\x1B[36m",warn:"\x1B[33m",success:"\x1B[32m"});var k=class{constructor(e){this._log=e?console.log.bind(console):this.noop}noop(){}forceLog(...e){console.log(...e)}info(e){this._log(e)}};function B(){return U?.version?Number(U.version.split(".")[0]):2}function fe(t){return B()>=8?t.rolldownOptions??t.rollupOptions:t.rollupOptions}function ge(t){return B()>=8?t.rolldownOptions?t.rolldownOptions:t.rollupOptions?t.rollupOptions:(t.rolldownOptions={},t.rolldownOptions):(t.rollupOptions=t.rollupOptions||{},t.rollupOptions)}function de(t){if(!g(t)||!("groups"in t))return[];let e=t.groups;if(!y(e)||e.length===0)return[];let n=[];for(let o of e){if(!g(o)||!("name"in o)||!("test"in o))continue;let r=o.name,l=o.test;w(r)&&r.length>0&&me(l)&&n.push(r)}return n}function me(t){return w(t)?t.includes("node_modules"):T(t)?t.source.includes("node_modules"):y(t)?t.some(e=>me(e)):!1}function De(t){let e=Math.floor(t/36e5),n=Math.floor(t%36e5/6e4),o=Math.floor(t%6e4/1e3);return[e?`${e}h `:"",n?`${n}m `:"",o||!e&&!n?`${o}s`:""].filter(Boolean).join("")}function H(t){return $(t)?t:g(t)&&"enable"in t?t.enable:!1}function be(t){return H(t.threadPool)}function he(t){return H(t.autoExcludeNodeModules)}function ye(t){let{autoExcludeNodeModules:e}=t;return $(e)?[]:g(e)&&e.enable?e.manualChunks||[]:[]}function K(t){return ie+t}function xe(t){let{threadPool:e}=t,n=le.default.cpus().length;return $(e)?n:g(e)&&e.enable&&e.size?e.size:n}function Oe(t,e){let n=[];return Object.entries(e).forEach(([o,r])=>{"code"in r&&r.code&&!Z(o,t.excludes)&&n.push([o,r])}),n}function Se(t,e){for(let n of e)if(t.includes(n))return K(n);return I}function He(t,e,n){return t?e?(n?.("composing source maps..."),(0,pe.default)([e,t],()=>null)):t:e}var F=class t{constructor(){this.obfuscatedFiles=new Set}static getInstance(){return t.instance||(t.instance=new t),t.instance}markAsObfuscated(e){e&&this.obfuscatedFiles.add(e)}isObfuscated(e){return e?this.obfuscatedFiles.has(e):!1}getAllObfuscatedFiles(){return Array.from(this.obfuscatedFiles)}clear(){this.obfuscatedFiles.clear()}serialize(){return Array.from(this.obfuscatedFiles)}updateFromSerialized(e){!e||!Array.isArray(e)||e.forEach(n=>{this.obfuscatedFiles.add(n)})}};function ze(t,e,n){let o=new k(t.log),r=F.getInstance();if(r.isObfuscated(e))return o.info(`skipping ${e} (already in obfuscated registry)`),{code:n.code,map:n.map};o.info(`obfuscating ${e}...`);let l=t.options.sourceMap?{...t.options,inputFileName:e,sourceMapFileName:`${D.default.basename(e)}.map`}:t.options,s=G.default.obfuscate(n.code,l);return o.info(`obfuscation complete for ${e}.`),r.markAsObfuscated(e),o.info(`added ${e} to obfuscated files registry`),{code:s.getObfuscatedCode(),map:He(JSON.parse(JSON.stringify(n.map)||"null"),JSON.parse(s.getSourceMap()||"null"),o.info.bind(o))}}function ke(t,e,n){let o=new k(t.log),r=F.getInstance();if(r.isObfuscated(e))return o.info(`skipping ${e} (already in obfuscated registry)`),{code:n,map:null};o.info(`obfuscating ${e}...`);let l=t.options.sourceMap?{...t.options,inputFileName:e,sourceMapFileName:`${D.default.basename(e)}.map`}:t.options,s=G.default.obfuscate(n,l);return o.info(`obfuscation complete for ${e}.`),r.markAsObfuscated(e),o.info(`added ${e} to obfuscated files registry`),{code:s.getObfuscatedCode(),map:JSON.parse(s.getSourceMap()||"null")}}function ve(t,e){return new Promise((n,o)=>{let r=new ue.Worker(D.default.join(__dirname,"./worker/index.js")),l=F.getInstance();r.postMessage({config:t,chunk:JSON.parse(JSON.stringify(e)),registryState:l.serialize()}),r.on("message",s=>{s.results&&Array.isArray(s.results)&&e.forEach(([x,A])=>{let v=s.results.find(j=>j.fileName===x);v&&v.obfuscatedCode&&(A.code=v.obfuscatedCode,A.map=v.map||null)}),s.registryState&&Array.isArray(s.registryState)&&l.updateFromSerialized(s.registryState),n(s),r.unref()}),r.on("error",s=>{o(s),r.unref()})})}function ae(t){let e=Object.values(J),n=0;for(;t>=1024&&n<e.length-1;)t/=1024,n++;return{value:Number(t.toFixed(2)),unit:e[n]}}var P=class{constructor(e){this._log=e,this.originalSize=this.createEmptySizeResult(),this.obfuscatedSize=this.createEmptySizeResult(),this.originalBytes={total:0,gzip:0},this.obfuscatedBytes={total:0,gzip:0},this.startTime=0,this.endTime=0}createEmptySizeResult(){return{original:{value:0,unit:"B"},gzip:{value:0,unit:"B"}}}start(e){this.startTime=performance.now();let{size:n,bytes:o}=this.calculateBundleSize(e);this.originalSize=n,this.originalBytes=o}end(e){let{size:n,bytes:o}=this.calculateBundleSize(e);this.obfuscatedSize=n,this.obfuscatedBytes=o,this.endTime=performance.now(),this.logResult()}calculateBundleSize(e){let{totalSize:n,gzipSize:o}=e.reduce((r,[,l])=>{if(l.code){let{code:s}=l;r.totalSize+=Buffer.byteLength(s,"utf-8"),r.gzipSize+=(0,ce.gzipSync)(s,{level:9}).byteLength}return r},{totalSize:0,gzipSize:0});return{size:{original:ae(n),gzip:ae(o)},bytes:{total:n,gzip:o}}}analyze(){let{originalSize:e,obfuscatedSize:n,originalBytes:o,obfuscatedBytes:r}=this,l=De(this.endTime-this.startTime),s=o.total>0?((r.total-o.total)/o.total*100).toFixed(2):"0.00",x=o.gzip>0?((r.gzip-o.gzip)/o.gzip*100).toFixed(2):"0.00";return`\u2713 obfuscated in ${l} | \u{1F4E6} ${e.original.value}${e.original.unit} (gzip: ${e.gzip.value}${e.gzip.unit}) \u2192 \u{1F512} ${n.original.value}${n.original.unit} (gzip: ${n.gzip.value}${n.gzip.unit}) | \u{1F4C8} ${s}% (gzip: ${x}%)`}logResult(){this._log.forceLog(R.success+"%s\x1B[0m",this.analyze())}};function Ce(t){let e={...re,...t},n=new k(e.log),o=!1,r=!1,l=!1,s=!1,x=async(i,c={})=>{let p=c.config??e,a=c.log??n;a.forceLog(R.info+` starting obfuscation process...`);let O=new P(a),f=Oe(p,i);if(O.start(f),be(p)){let h=Math.min(xe(p),f.length),d=Math.ceil(f.length/h),S=[];for(let u=0;u<h;u++){let z=f.slice(u*d,(u+1)*d);S.push(ve(p,z))}await Promise.all(S)}else f.forEach(([h,d])=>{let{code:S,map:u}=ze(p,h,d);d.code=S,d.map=u});O.end(f)},A=(i,c)=>{if(s=!!c.isSsrBuild,o=ee(i),r=ne(i),l=oe(i),e.enable&&H(e.obfuscateWorker)){let u=i.worker?.plugins;i.worker=i.worker||{},i.worker.plugins=()=>{let z=u??[],M=V(z)?z():z,C=(y(M)?M:[M]).filter(Boolean);return C.some(N=>g(N)&&"name"in N&&N.name==="vite-plugin-bundle-obfuscator:worker")?C:[...C,{name:"vite-plugin-bundle-obfuscator:worker",apply:e.apply,enforce:"post",async generateBundle(N,q){if(!e.enable||!q||s)return;let Q={...e,excludes:[...e.excludes,...e.obfuscateWorkerExcludes]};await x(q,{config:Q,log:new k(Q.log)})}}]}}if(!e.enable||!he(e)||o||r)return;i.build=i.build||{};let p=ge(i.build),{output:a}=p,O=[...ye(e)],f=(u=[])=>{e.excludes.push(I,...O.map(K),...u)},h=u=>{if(u.includes(se))return Se(u,O)};if(!a){f(),p.output={manualChunks:h};return}let d=B()>=8&&i.build.rolldownOptions?"rolldownOptions":"rollupOptions",S=B()>=8;if(y(a)){n.forceLog(R.warn,`${d}.output is an array, ignoring autoExcludeNodeModules configuration.`);return}if(g(a)){let u=S?de(a.codeSplitting):[],z=S&&u.length>0&&!a.manualChunks;if(!a.manualChunks)z?f(u):(f(),a.manualChunks=h);else if(g(a.manualChunks))n.forceLog(R.warn,`${d}.output.manualChunks is an object, ignoring autoExcludeNodeModules configuration.`);else if(V(a.manualChunks)){let M=a.manualChunks;f(u),a.manualChunks=(C,X)=>h(C)||M(C,X)}}},v=i=>{let c=i.build.sourcemap;if(c){let p=fe(i.build)?.output,a=y(p)?void 0:p?.sourcemapBaseUrl;e.options={...e.options,sourceMap:!0,sourceMapMode:c==="inline"?"inline":"separate",...a&&{sourceMapBaseUrl:a}}}},j=async(i,{bundle:c})=>(!e.enable||!c||r||s||await x(c),i),Re=async(i,c)=>{!e.enable||!c||o||s||!r&&!l||await x(c)},Be=(i,c)=>{if(!e.enable||!o||s)return null;let p=new P(n),a=[[c.name,{code:i}]];p.start(a);let{code:O,map:f}=ke(e,c.name,i);return p.end(a),{code:O,map:f}},Me=()=>B()>=5?{order:"post",handler:j}:{enforce:"post",transform:j};return{name:"vite-plugin-bundle-obfuscator",apply:e.apply,config:A,configResolved:v,renderChunk:Be,transformIndexHtml:Me(),generateBundle:Re}}