vite-plugin-fflate-zip
Version:
Vite plugin for packaging build folder into zip file via fflate
2 lines • 1.83 kB
JavaScript
import{existsSync as m,mkdirSync as O,readFileSync as d,readdirSync as S,statSync as v,writeFileSync as E}from"node:fs";import{join as p}from"node:path";import{cwd as $}from"node:process";import{cyan as f,getRootByPackageName as h,gray as w,green as z,red as D}from"@heybrostudio/utils";import{zipSync as F}from"fflate";var x=$(),b=["zip","gz","png","jpg","jpeg","pdf","doc","docx","ppt","pptx","xls","xlsx","heic","heif","7z","bz2","rar","gif","webp","webm","mp4","mov","mp3","aifc"];function N(a,i=[]){let o=p(x,a),n=new Map;function e(t){let l=S(t);for(let s of l){if(i?.includes(s))continue;let c=p(t,s);if(v(c).isDirectory())e(c);else{let u=s.slice(s.lastIndexOf(".")+1).toLowerCase();n.set(c.replace(o,"").slice(1),[d(c),{level:b.includes(u)?0:6}])}}}return e(o),n}var r={inDir:"",outDir:"dist-zip",zipName:"",excludedFiles:[],onArchived:()=>{},onError:()=>{}};function j(a={}){return{name:"vite-plugin-fflate-zip",apply:"build",enforce:"post",configResolved(i){try{let{root:o,build:n}=i;if(Object.assign(r,{inDir:n.outDir},{...a}),!r?.zipName){let e=d(p(o,"package.json")),t=JSON.parse(e.toString());r.zipName=`${t.name}-${t.version}`}}catch(o){o&&D(o),r.onError(o)}},closeBundle(){try{let i="fflate",o=h(i),n=JSON.parse(d(p(o,"package.json")).toString()).version;console.log(f(`\u26A1\uFE0F${i} v${n}`),z("zipping for production..."));let{inDir:e,outDir:t,zipName:l}=r;if(!m(e))throw new Error(`"${e}" folder does not exist!`);m(t)||O(t,{recursive:!0});let s=Date.now(),c=N(e,a.excludedFiles),u=F(Object.fromEntries(c),{level:6}),g=p(x,t,`${l}.zip`);E(g,u);let y=`${(v(g).size/1024).toFixed(2)} kB`;console.log(w(`${t}/${f(l)}${f(".zip")}`),f(`| ${y}`)),r.onArchived(),console.log(z(`\u2713 zip in ${Date.now()-s}ms`))}catch(i){i&&console.log(D(i)),r.onError(i)}}}}export{j as default};
//# sourceMappingURL=index.js.map