Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

vite-plugin-compression2

Package Overview
Dependencies
Maintainers
1
Versions
51
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

vite-plugin-compression2 - npm Package Compare versions

Comparing version
2.3.1
to
2.4.0
+2
-2
dist/index.js

@@ -1,2 +0,2 @@

"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t,r=require("@rollup/pluginutils"),i=require("fs"),n=require("node:fs/promises"),s=require("os"),o=require("path"),a=require("tar-mini"),l=require("util"),u=require("zlib"),c={exports:{}},p=(e=function(){if(t)return c.exports;t=1;let e,r,i,{defineProperty:n,setPrototypeOf:s,create:o,keys:a}=Object,{round:l,max:u}=Math,p=e=>{let t=/([a-f\d]{3,6})/i.exec(e)?.[1],r=t?.length,i=parseInt(6^r?3^r?"0":t[0]+t[0]+t[1]+t[1]+t[2]+t[2]:t,16);return[i>>16&255,i>>8&255,255&i]},f=(e,t,r)=>e^t||t^r?16+36*l(e/51)+6*l(t/51)+l(r/51):8>e?16:e>248?231:l(24*(e-8)/247)+232,d=e=>{let t,r,i,n,s;return 8>e?30+e:16>e?e-8+90:(232>e?(s=(e-=16)%36,t=(e/36|0)/5,r=(s/6|0)/5,i=s%6/5):t=r=i=(10*(e-232)+8)/255,(n=2*u(t,r,i))?30+(l(i)<<2|l(r)<<1|l(t))+(2^n?0:60):30)},h=(()=>{let t,i,n,s=e=>u.some(t=>e.test(t)),o=globalThis,l=o.process??{},u=l.argv??[],c=l.env??{},p=-1;try{e=","+a(c).join(",")}catch(e){c={},p=0}let f="FORCE_COLOR",d={false:0,0:0,1:1,2:2,3:3}[c[f]]??-1,h=f in c&&d||s(/^--color=?(true|always)?$/);return h&&(p=d),~p||(t=c,i=!!c.PM2_HOME||c.NEXT_RUNTIME?.includes("edge")||!!l.stdout?.isTTY,n="win32"===l.platform,r=t.TERM,p=({"24bit":3,truecolor:3,ansi256:2,ansi:1})[t.COLORTERM]||(t.CI?/,GITHUB/.test(e)?3:1:i&&"dumb"!==r?n?3:/-256/.test(r)?2:1:0)),!d||c.NO_COLOR||s(/^--(no-color|color=(false|never))$/)?0:o.window?.chrome||h&&!p?3:p})(),m={open:"",close:""},g={},y=({p:e},{open:t,close:r})=>{let n=(e,...i)=>{if(!e){if(t&&t===r)return t;if((e??"")==="")return""}let s,o=e.raw?String.raw({raw:e},...i):""+e,a=n.p,l=a.o,u=a.c;if(o.includes("\x1b"))for(;a;a=a.p){let{open:e,close:t}=a,r=t.length,i="",n=0;if(r)for(;~(s=o.indexOf(t,n));n=s+r)i+=o.slice(n,s)+e;o=i+o.slice(n)}return l+(o.includes("\n")?o.replace(/(\r?\n)/g,u+"$1"+l):o)+u},o=t,a=r;return e&&(o=e.o+t,a=r+e.c),s(n,i),n.p={open:t,close:r,o:o,c:a,p:e},n.open=o,n.close=a,n},w=function(e=h){let t={Ansis:w,isSupported:()=>r,strip:e=>e.replace(/[›][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),extend(e){for(let t in e){let r=e[t],i=(typeof r)[0],s="s"===i?v(...p(r)):r;g[t]="f"===i?{get(){return(...e)=>y(this,r(...e))}}:{get(){let e=y(this,s);return n(this,t,{value:e}),e}}}return s(t,i=o({},g)),t}},r=e>0,a=(e,t)=>r?{open:`[${e}m`,close:`[${t}m`}:m,l=e=>t=>e(...p(t)),u=(e,t)=>(r,i,n)=>a(`${e}8;2;${r};${i};${n}`,t),c=(e,t)=>(r,i,n)=>a(d(f(r,i,n))+e,t),b=e=>(t,r,i)=>e(f(t,r,i)),v=u(3,39),O=u(4,49),E=e=>a("38;5;"+e,39),j=e=>a("48;5;"+e,49);2===e?(v=b(E),O=b(j)):1===e&&(v=c(0,39),O=c(10,49),E=e=>a(d(e),39),j=e=>a(d(e)+10,49));let x,P={fg:E,bg:j,rgb:v,bgRgb:O,hex:l(v),bgHex:l(O),visible:m,reset:a(0,0),bold:a(1,22),dim:a(2,22),italic:a(3,23),underline:a(4,24),inverse:a(7,27),hidden:a(8,28),strikethrough:a(9,29)},C="Bright";return"black,red,green,yellow,blue,magenta,cyan,white,gray".split(",").map((e,t)=>{x="bg"+e[0].toUpperCase()+e.slice(1),8>t?(P[e+C]=a(90+t,39),P[x+C]=a(100+t,49)):t=60,P[e]=a(30+t,39),P[x]=a(40+t,49)}),t.extend(P)},b=new w;return c.exports=b,b.default=b,c.exports}())&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e;const{Ansis:f,fg:d,bg:h,rgb:m,bgRgb:g,hex:y,bgHex:w,reset:b,inverse:v,hidden:O,visible:E,bold:j,dim:x,italic:P,underline:C,strikethrough:R,black:$,red:q,green:z,yellow:S,blue:_,magenta:k,cyan:T,white:A,gray:M,redBright:I,greenBright:B,yellowBright:F,blueBright:N,magentaBright:D,cyanBright:L,whiteBright:U,bgBlack:Z,bgRed:H,bgGreen:Y,bgYellow:Q,bgBlue:X,bgMagenta:G,bgCyan:W,bgWhite:J,bgGray:K,bgRedBright:V,bgGreenBright:ee,bgYellowBright:et,bgBlueBright:er,bgMagentaBright:ei,bgCyanBright:en,bgWhiteBright:es}=p;function eo(e){return e.length}function ea(e){return/^\\\\\?\\/.test(e)?e:e.replace(/\\/g,"/")}async function el(e){let t=await Promise.all((await n.readdir(e)).map(t=>o.join(e,t))),r=0,i=[];for(;r!==eo(t);){let e=t[r],s=await n.stat(e);if(s.isDirectory()){let r=await n.readdir(e);t.push(...r.map(t=>o.join(e,t)))}s.isFile()&&i.push(e),r++}return i}const eu=new TextEncoder;function ec(e){return"string"==typeof e?eu.encode(e):e}function ep(){}function ef(e){return"gz"===e?"gzip":"brotli"===e||"br"===e?"brotliCompress":"zstd"===e?"zstandard":e}async function ed(e,t,r){try{return await t(e,r)}catch(e){return Promise.reject(e)}}const eh={gzip:{level:u.constants.Z_BEST_COMPRESSION},brotliCompress:{params:{[u.constants.BROTLI_PARAM_QUALITY]:u.constants.BROTLI_MAX_QUALITY}},deflate:{level:u.constants.Z_BEST_COMPRESSION},deflateRaw:{level:u.constants.Z_BEST_COMPRESSION},zstandard:{}};function em(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class eg{enqueue(e){this.queue.push(e),this.run()}async run(){for(;this.running<this.maxConcurrent&&this.queue.length;){let e=this.queue.shift();this.running++;try{await e()}catch(e){this.errors.push(e)}finally{this.running--,this.run()}}}async wait(){for(;this.running;)await new Promise(e=>setTimeout(e,0));if(eo(this.errors))throw AggregateError(this.errors,"task failed")}constructor(e){em(this,"maxConcurrent",void 0),em(this,"queue",void 0),em(this,"running",void 0),em(this,"errors",void 0),this.maxConcurrent=e,this.queue=[],this.errors=[],this.running=0}}const ey="vite-plugin-compression",ew=(()=>{let e=s.cpus()||{length:1};return 1===e.length?10:Math.max(1,e.length-1)})();function eb(e){var t;let r=new Set,i=(e,t)=>ea(o.resolve(e,t));return(null==(t=e.build.rollupOptions)?void 0:t.output)?(Array.isArray(e.build.rollupOptions.output)?e.build.rollupOptions.output:[e.build.rollupOptions.output]).forEach(t=>{("object"!=typeof t||eo(Object.keys(t)))&&r.add(i(e.root,t.dir||e.build.outDir))}):r.add(i(e.root,e.build.outDir)),r}async function ev(e,t){let r=!("copyPublicDir"in e.build)||e.build.copyPublicDir;if(e.publicDir&&r&&i.existsSync(e.publicDir)){let r=await el(e.publicDir),i=o.join(e.root,o.relative(e.root,e.publicDir));r.forEach(e=>{t(ea(o.relative(i,e)),e)})}}function eO(e,t){if("AggregateError"!==e.name||!("errors"in e))return e;let r=e.errors.length,i=e.errors.map((e,t)=>{let r=e.message||"Unknown error";return`[${t+1}] ${r}`}),n=e.errors.map((e,t)=>{let r=e.stack||e.message||"No stack trace available";return`--- Error ${t+1} ---
${r}`}),s=[`Compression failed in ${t} with ${r} error(s):`,"",...i].join("\n"),o=Error(s);return o.name="CompressionError",o.stack=[`CompressionError: ${s}`,"","Combined stack traces:",...n].join("\n"),o.cause=e.errors,o}function eE(e={}){let t,{include:s=/\.(html|xml|css|json|js|mjs|svg|yaml|yml|toml)$/,exclude:a,threshold:c=0,algorithms:f=["gzip","brotliCompress"],filename:d,deleteOriginalAssets:h=!1,skipIfLargerOrEqual:m=!0,logLevel:g="info"}=e,y=[];f.forEach(e=>{"string"==typeof e?y.push(ej(e)):"object"==typeof e&&Array.isArray(e)&&y.push(e)});let w=r.createFilter(s,a),b=[],v=[],{msgs:O,cleanup:E}=function(){let e=[],t=process.stdout.write.bind(process.stdout);return process.stdout.write=function(...r){let[i]=r,n="string"==typeof i?i:i.toString();return n.includes("built in")?(e.push(n),!1):t.apply(this,r)},{cleanup:()=>process.stdout.write=t,msgs:e}}(),j=process.cwd(),x=y.map(([e,t])=>{let r="string"==typeof e?ef(e):e;return{algorithm:r,algorithmFunction:"string"==typeof r?function(e){let t=ef(e);if("zstandard"===t){let[e,t]=process.versions.node.split(".").map(e=>+e);if(!(e>23||23===e&&t>=8||22===e&&t>=15))throw Error(`Node.js ${process.versions.node} does not support zstd compression. Requires Node.js >= 22.15.0 or >= 23.8.0`);if(!u.zstdCompress)throw Error("zstd compression is not available in this Node.js build");return{algorithm:l.promisify(u.zstdCompress)}}let r=t in u?t:"gzip";return{algorithm:l.promisify(u[r])}}(r).algorithm:r,options:t,filename:null!=d?d:"brotliCompress"===r?"[path][base].br":"zstandard"===r?"[path][base].zst":"[path][base].gz"}}),P=async(e,t,r)=>{let i=eo(e);for(let n=0;n<x.length;n++){let s=x[n],a=n===x.length-1,l=function(e,t,r){let i="function"==typeof t?t(e,r):t,{dir:n,base:s}=o.parse(e);return i.replace(/\[path\]/,n?n+"/":"").replace(/\[base\]/,s)}(t,s.filename,{options:s.options,algorithm:s.algorithm}),u=await ed(e,s.algorithmFunction,s.options);if(m&&eo(u)>=i){r.skip(t);continue}await r.pass(l,a,u)}},C=new eg(ew),R=async function(e,t){for(let e in t){if(!w(e))continue;let r=t[e],i=ec("asset"===r.type?r.source:r.code);eo(i)<c||C.enqueue(async()=>{await P(i,e,{skip:ep,pass:(r,i,n)=>{i&&(h||e===r)&&Reflect.deleteProperty(t,e),this.emitFile({type:"asset",fileName:r,source:n})}})})}await C.wait().catch(e=>{"silent"!==g&&this.error(eO(e,"bundle compression"))})},$={resolve:ep},q={staticOutputs:new Set,done:new Promise(e=>{$.resolve=e})},z=new Intl.NumberFormat("en",{maximumFractionDigits:2,minimumFractionDigits:2}),S=e=>`${z.format(e/1e3)} kB`;return{name:ey,apply:"build",enforce:"post",api:q,async configResolved(e){v.push(...eb(e)),await ev(e,e=>{b.push(e)});let r=e.build.manifest?e.plugins.find(e=>"vite:manifest"===e.name):e.plugins.find(e=>"vite:build-import-analysis"===e.name);if(!r)throw Error("[vite-plugin-compression] Can't be work in versions lower than vite at 2.0.0");let i=r.generateBundle;if("object"==typeof i&&i.handler){let e=i.handler;i.handler=async function(...t){await e.apply(this,t),await R.apply(this,t)}}"function"==typeof i&&(r.generateBundle=async function(...e){await i.apply(this,e),await R.apply(this,e)}),t=e.logger,j=e.root},async closeBundle(){let r=[],s=async(e,t)=>{let i=o.join(e,t);if(!w(i)&&!q.staticOutputs.has(t))return void q.staticOutputs.add(t);let{size:s}=await n.stat(i);if(s<c){q.staticOutputs.has(t)||q.staticOutputs.add(t);return}let a=await n.readFile(i);await P(a,t,{skip:e=>{q.staticOutputs.has(e)||q.staticOutputs.add(e)},pass:async(t,s,a)=>{q.staticOutputs.has(t)||q.staticOutputs.add(t);let l=o.join(e,t);s&&h&&l!==i&&await n.rm(i,{recursive:!0,force:!0}),await n.writeFile(l,a),r.push({dest:o.relative(j,e)+"/",file:t,size:eo(a)})}})};if(e.artifacts&&"function"==typeof e.artifacts){let t=e.artifacts();for(let e of v)for(let r of t)if(i.existsSync(r.src)){let t=o.basename(r.src),n=r.replace?r.replace(e,t):o.join(e,t);i.cpSync(r.src,n,{recursive:!0}),b.push(ea(o.relative(e,n)))}}for(let e of v)for(let t of b)C.enqueue(()=>s(e,t));if(await C.wait().catch(e=>e),$.resolve(),E(),"silent"!==g&&t){let e=r.reduce((e,t)=>Math.max(e,(t.dest+t.file).length),0);for(let{dest:i,file:n,size:s}of r){let r=n.padEnd(e);t.info(p.dim(i)+p.green(r)+p.bold(p.dim(S(s))))}}for(let e of O)console.info(e)}}}function ej(e,t){if("string"==typeof e){let r=ef(e);if(r in eh){let e={...eh[r]};return t&&Object.assign(e,t),[r,e]}throw Error(`[vite-plugin-compression] Unsupported algorithm: ${e}`)}return[e,t||{}]}eE.getPluginAPI=e=>{var t;return null==(t=e.find(e=>e.name===ey))?void 0:t.api},exports.compression=eE,exports.default=eE,exports.defineAlgorithm=ej,exports.tarball=function(e={}){let t,{dest:r}=e,s=[],l=[],u=[],c=process.cwd(),p=function(){let e=a.createPack(),t=[],r={dests:[],root:""};return{add:t=>{e.add(ec(t.content),{filename:t.filename})},setup:e=>{Object.assign(r,e),r.dests.forEach(e=>{let n=ea(o.resolve(r.root,e+".tar")),s=ea(o.dirname(n));ea(r.root)!==s&&i.mkdirSync(s,{recursive:!0});let a=i.createWriteStream(n);t.push(a)})},done:async()=>{e.done(),await Promise.all(t.map(t=>new Promise((r,i)=>{t.on("error",i),t.on("finish",r),e.receiver.pipe(t)}))),t.length=0}}}(),f=new eg(ew);return{name:"vite-plugin-tarball",enforce:"post",async configResolved(e){l.push(...eb(e)),c=e.root,u=r?[r]:l,(t=eE.getPluginAPI(e.plugins))||await ev(e,e=>{s.push(e)}),p.setup({dests:u,root:c})},writeBundle(e,t){for(let e in t){let r=t[e];p.add({filename:e,content:"asset"===r.type?r.source:r.code})}},async closeBundle(){for(let e of(t&&await t.done,!s.length&&t&&t.staticOutputs.size&&s.push(...t.staticOutputs),l))for(let t of s)f.enqueue(async()=>{let r=o.join(e,t),i=await n.readFile(r);p.add({filename:t,content:i})});await f.wait().catch(e=>{this.error(eO(e,"tarball creation"))}),await p.done()}}};
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t,r=require("@rollup/pluginutils"),i=require("fs"),n=require("node:fs/promises"),s=require("os"),o=require("path"),a=require("tar-mini"),l=require("util"),u=require("zlib"),c={exports:{}},p=(e=function(){if(t)return c.exports;t=1;let e,r,i,{defineProperty:n,setPrototypeOf:s,create:o,keys:a}=Object,{round:l,max:u}=Math,p=e=>{let t=/([a-f\d]{3,6})/i.exec(e)?.[1],r=t?.length,i=parseInt(6^r?3^r?"0":t[0]+t[0]+t[1]+t[1]+t[2]+t[2]:t,16);return[i>>16&255,i>>8&255,255&i]},f=(e,t,r)=>e^t||t^r?16+36*l(e/51)+6*l(t/51)+l(r/51):8>e?16:e>248?231:l(24*(e-8)/247)+232,d=e=>{let t,r,i,n,s;return 8>e?30+e:16>e?e-8+90:(232>e?(s=(e-=16)%36,t=(e/36|0)/5,r=(s/6|0)/5,i=s%6/5):t=r=i=(10*(e-232)+8)/255,(n=2*u(t,r,i))?30+(l(i)<<2|l(r)<<1|l(t))+(2^n?0:60):30)},h=(()=>{let t,i,n,s=e=>u.some(t=>e.test(t)),o=globalThis,l=o.process??{},u=l.argv??[],c=l.env??{},p=-1;try{e=","+a(c).join(",")}catch(e){c={},p=0}let f="FORCE_COLOR",d={false:0,0:0,1:1,2:2,3:3}[c[f]]??-1,h=f in c&&d||s(/^--color=?(true|always)?$/);return h&&(p=d),~p||(t=c,i=!!c.PM2_HOME||c.NEXT_RUNTIME?.includes("edge")||!!l.stdout?.isTTY,n="win32"===l.platform,r=t.TERM,p=({"24bit":3,truecolor:3,ansi256:2,ansi:1})[t.COLORTERM]||(t.CI?/,GITHUB/.test(e)?3:1:i&&"dumb"!==r?n?3:/-256/.test(r)?2:1:0)),!d||c.NO_COLOR||s(/^--(no-color|color=(false|never))$/)?0:o.window?.chrome||h&&!p?3:p})(),m={open:"",close:""},g={},y=({p:e},{open:t,close:r})=>{let n=(e,...i)=>{if(!e){if(t&&t===r)return t;if((e??"")==="")return""}let s,o=e.raw?String.raw({raw:e},...i):""+e,a=n.p,l=a.o,u=a.c;if(o.includes("\x1b"))for(;a;a=a.p){let{open:e,close:t}=a,r=t.length,i="",n=0;if(r)for(;~(s=o.indexOf(t,n));n=s+r)i+=o.slice(n,s)+e;o=i+o.slice(n)}return l+(o.includes("\n")?o.replace(/(\r?\n)/g,u+"$1"+l):o)+u},o=t,a=r;return e&&(o=e.o+t,a=r+e.c),s(n,i),n.p={open:t,close:r,o:o,c:a,p:e},n.open=o,n.close=a,n},b=function(e=h){let t={Ansis:b,isSupported:()=>r,strip:e=>e.replace(/[›][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),extend(e){for(let t in e){let r=e[t],i=(typeof r)[0],s="s"===i?v(...p(r)):r;g[t]="f"===i?{get(){return(...e)=>y(this,r(...e))}}:{get(){let e=y(this,s);return n(this,t,{value:e}),e}}}return s(t,i=o({},g)),t}},r=e>0,a=(e,t)=>r?{open:`[${e}m`,close:`[${t}m`}:m,l=e=>t=>e(...p(t)),u=(e,t)=>(r,i,n)=>a(`${e}8;2;${r};${i};${n}`,t),c=(e,t)=>(r,i,n)=>a(d(f(r,i,n))+e,t),w=e=>(t,r,i)=>e(f(t,r,i)),v=u(3,39),O=u(4,49),E=e=>a("38;5;"+e,39),j=e=>a("48;5;"+e,49);2===e?(v=w(E),O=w(j)):1===e&&(v=c(0,39),O=c(10,49),E=e=>a(d(e),39),j=e=>a(d(e)+10,49));let x,P={fg:E,bg:j,rgb:v,bgRgb:O,hex:l(v),bgHex:l(O),visible:m,reset:a(0,0),bold:a(1,22),dim:a(2,22),italic:a(3,23),underline:a(4,24),inverse:a(7,27),hidden:a(8,28),strikethrough:a(9,29)},C="Bright";return"black,red,green,yellow,blue,magenta,cyan,white,gray".split(",").map((e,t)=>{x="bg"+e[0].toUpperCase()+e.slice(1),8>t?(P[e+C]=a(90+t,39),P[x+C]=a(100+t,49)):t=60,P[e]=a(30+t,39),P[x]=a(40+t,49)}),t.extend(P)},w=new b;return c.exports=w,w.default=w,c.exports}())&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e;const{Ansis:f,fg:d,bg:h,rgb:m,bgRgb:g,hex:y,bgHex:b,reset:w,inverse:v,hidden:O,visible:E,bold:j,dim:x,italic:P,underline:C,strikethrough:R,black:$,red:q,green:z,yellow:S,blue:T,magenta:A,cyan:_,white:k,gray:M,redBright:I,greenBright:B,yellowBright:F,blueBright:N,magentaBright:D,cyanBright:L,whiteBright:U,bgBlack:Z,bgRed:H,bgGreen:Y,bgYellow:Q,bgBlue:X,bgMagenta:G,bgCyan:V,bgWhite:W,bgGray:J,bgRedBright:K,bgGreenBright:ee,bgYellowBright:et,bgBlueBright:er,bgMagentaBright:ei,bgCyanBright:en,bgWhiteBright:es}=p;function eo(e){return e.length}function ea(e){return/^\\\\\?\\/.test(e)?e:e.replace(/\\/g,"/")}async function el(e){let t=await Promise.all((await n.readdir(e)).map(t=>o.join(e,t))),r=0,i=[];for(;r!==eo(t);){let e=t[r],s=await n.stat(e);if(s.isDirectory()){let r=await n.readdir(e);t.push(...r.map(t=>o.join(e,t)))}s.isFile()&&i.push(e),r++}return i}const eu=new TextEncoder;function ec(e){return"string"==typeof e?eu.encode(e):e}function ep(){}function ef(e){return"gz"===e?"gzip":"brotli"===e||"br"===e?"brotliCompress":"zstd"===e?"zstandard":e}async function ed(e,t,r){try{return await t(e,r)}catch(e){return Promise.reject(e)}}const eh={gzip:{level:u.constants.Z_BEST_COMPRESSION},brotliCompress:{params:{[u.constants.BROTLI_PARAM_QUALITY]:u.constants.BROTLI_MAX_QUALITY}},deflate:{level:u.constants.Z_BEST_COMPRESSION},deflateRaw:{level:u.constants.Z_BEST_COMPRESSION},zstandard:{}};function em(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class eg{enqueue(e){this.queue.push(e),this.run()}async run(){for(;this.running<this.maxConcurrent&&this.queue.length;){let e=this.queue.shift();this.running++;try{await e()}catch(e){this.errors.push(e)}finally{this.running--,this.run()}}}async wait(){for(;this.running;)await new Promise(e=>setTimeout(e,0));if(eo(this.errors))throw AggregateError(this.errors,"task failed")}constructor(e){em(this,"maxConcurrent",void 0),em(this,"queue",void 0),em(this,"running",void 0),em(this,"errors",void 0),this.maxConcurrent=e,this.queue=[],this.errors=[],this.running=0}}const ey="native:manifest",eb="vite-plugin-compression",ew=(()=>{let e=s.cpus()||{length:1};return 1===e.length?10:Math.max(1,e.length-1)})();function ev(e){var t;let r=new Set,i=(e,t)=>ea(o.resolve(e,t));return(null==(t=e.build.rollupOptions)?void 0:t.output)?(Array.isArray(e.build.rollupOptions.output)?e.build.rollupOptions.output:[e.build.rollupOptions.output]).forEach(t=>{("object"!=typeof t||eo(Object.keys(t)))&&r.add(i(e.root,t.dir||e.build.outDir))}):r.add(i(e.root,e.build.outDir)),r}async function eO(e,t){let r=!("copyPublicDir"in e.build)||e.build.copyPublicDir;if(e.publicDir&&r&&i.existsSync(e.publicDir)){let r=await el(e.publicDir),i=o.join(e.root,o.relative(e.root,e.publicDir));r.forEach(e=>{t(ea(o.relative(i,e)),e)})}}function eE(e,t){if("AggregateError"!==e.name||!("errors"in e))return e;let r=e.errors.length,i=e.errors.map((e,t)=>{let r=e.message||"Unknown error";return`[${t+1}] ${r}`}),n=e.errors.map((e,t)=>{let r=e.stack||e.message||"No stack trace available";return`--- Error ${t+1} ---
${r}`}),s=[`Compression failed in ${t} with ${r} error(s):`,"",...i].join("\n"),o=Error(s);return o.name="CompressionError",o.stack=[`CompressionError: ${s}`,"","Combined stack traces:",...n].join("\n"),o.cause=e.errors,o}function ej(e,t){let r=e.generateBundle;if("object"==typeof r&&r.handler){let e=r.handler;r.handler=async function(...r){await e.apply(this,r),await t.apply(this,r)}}"function"==typeof r&&(e.generateBundle=async function(...e){await r.apply(this,e),await t.apply(this,e)})}function ex(e={}){let t,{include:s=/\.(html|xml|css|json|js|mjs|svg|yaml|yml|toml)$/,exclude:a,threshold:c=0,algorithms:f=["gzip","brotliCompress"],filename:d,deleteOriginalAssets:h=!1,skipIfLargerOrEqual:m=!0,logLevel:g="info"}=e,y=[];f.forEach(e=>{"string"==typeof e?y.push(eP(e)):"object"==typeof e&&Array.isArray(e)&&y.push(e)});let b=r.createFilter(s,a),w=[],v=[],{msgs:O,cleanup:E}=function(){let e=[],t=process.stdout.write.bind(process.stdout);return process.stdout.write=function(...r){let[i]=r,n="string"==typeof i?i:i.toString();return n.includes("built in")?(e.push(n),!1):t.apply(this,r)},{cleanup:()=>process.stdout.write=t,msgs:e}}(),j=process.cwd(),x=y.map(([e,t])=>{let r="string"==typeof e?ef(e):e;return{algorithm:r,algorithmFunction:"string"==typeof r?function(e){let t=ef(e);if("zstandard"===t){let[e,t]=process.versions.node.split(".").map(e=>+e);if(!(e>23||23===e&&t>=8||22===e&&t>=15))throw Error(`Node.js ${process.versions.node} does not support zstd compression. Requires Node.js >= 22.15.0 or >= 23.8.0`);if(!u.zstdCompress)throw Error("zstd compression is not available in this Node.js build");return{algorithm:l.promisify(u.zstdCompress)}}let r=t in u?t:"gzip";return{algorithm:l.promisify(u[r])}}(r).algorithm:r,options:t,filename:null!=d?d:"brotliCompress"===r?"[path][base].br":"zstandard"===r?"[path][base].zst":"[path][base].gz"}}),P=async(e,t,r)=>{let i=eo(e);for(let n=0;n<x.length;n++){let s=x[n],a=n===x.length-1,l=function(e,t,r){let i="function"==typeof t?t(e,r):t,{dir:n,base:s}=o.parse(e);return i.replace(/\[path\]/,n?n+"/":"").replace(/\[base\]/,s)}(t,s.filename,{options:s.options,algorithm:s.algorithm}),u=await ed(e,s.algorithmFunction,s.options);if(m&&eo(u)>=i){r.skip(t);continue}await r.pass(l,a,u)}},C=new eg(ew),R=async function(e,t){for(let e in t){if(!b(e))continue;let r=t[e],i=ec("asset"===r.type?r.source:r.code);eo(i)<c||C.enqueue(async()=>{await P(i,e,{skip:ep,pass:(r,i,n)=>{i&&(h||e===r)&&Reflect.deleteProperty(t,e),this.emitFile({type:"asset",fileName:r,source:n})}})})}await C.wait().catch(e=>{"silent"!==g&&this.error(eE(e,"bundle compression"))})},$={resolve:ep},q={staticOutputs:new Set,done:new Promise(e=>{$.resolve=e})},z=new Intl.NumberFormat("en",{maximumFractionDigits:2,minimumFractionDigits:2}),S=e=>`${z.format(e/1e3)} kB`;return{name:eb,apply:"build",enforce:"post",api:q,async configResolved(e){v.push(...ev(e)),await eO(e,e=>{w.push(e)});let r=!1;this&&this.meta&&"rolldownVersion"in this.meta&&(r=!0);let i=function(e,t){if(e.build.manifest){let r=t?ey:"vite:manifest";return e.plugins.find(e=>e.name===r)}return e.plugins.find(e=>"vite:build-import-analysis"===e.name)}(e,r);if(!i)throw Error("[vite-plugin-compression] Can't be work in versions lower than vite at 2.0.0");if(r&&i.name===ey){var n,s;n=i.applyToEnvironment,s=e=>{if(Array.isArray(e)){let t=e.filter(e=>"object"==typeof e&&"name"in e).find(e=>"native:manifest-compatible"===e.name);t&&ej(t,R)}return e},i.applyToEnvironment=(...e)=>{let t=n(...e);return t instanceof Promise?t.then(s):s(t)}}else ej(i,R);t=e.logger,j=e.root},async closeBundle(){let r=[],s=async(e,t)=>{let i=o.join(e,t);if(!b(i)&&!q.staticOutputs.has(t))return void q.staticOutputs.add(t);let{size:s}=await n.stat(i);if(s<c){q.staticOutputs.has(t)||q.staticOutputs.add(t);return}let a=await n.readFile(i);await P(a,t,{skip:e=>{q.staticOutputs.has(e)||q.staticOutputs.add(e)},pass:async(t,s,a)=>{q.staticOutputs.has(t)||q.staticOutputs.add(t);let l=o.join(e,t);s&&h&&l!==i&&await n.rm(i,{recursive:!0,force:!0}),await n.writeFile(l,a),r.push({dest:o.relative(j,e)+"/",file:t,size:eo(a)})}})};if(e.artifacts&&"function"==typeof e.artifacts){let t=e.artifacts();for(let e of v)for(let r of t)if(i.existsSync(r.src)){let t=o.basename(r.src),n=r.replace?r.replace(e,t):o.join(e,t);i.cpSync(r.src,n,{recursive:!0}),w.push(ea(o.relative(e,n)))}}for(let e of v)for(let t of w)C.enqueue(()=>s(e,t));if(await C.wait().catch(e=>e),$.resolve(),E(),"silent"!==g&&t){let e=r.reduce((e,t)=>Math.max(e,(t.dest+t.file).length),0);for(let{dest:i,file:n,size:s}of r){let r=n.padEnd(e);t.info(p.dim(i)+p.green(r)+p.bold(p.dim(S(s))))}}for(let e of O)console.info(e)}}}function eP(e,t){if("string"==typeof e){let r=ef(e);if(r in eh){let e={...eh[r]};return t&&Object.assign(e,t),[r,e]}throw Error(`[vite-plugin-compression] Unsupported algorithm: ${e}`)}return[e,t||{}]}ex.getPluginAPI=e=>{var t;return null==(t=e.find(e=>e.name===eb))?void 0:t.api},exports.compression=ex,exports.default=ex,exports.defineAlgorithm=eP,exports.tarball=function(e={}){let t,{dest:r}=e,s=[],l=[],u=[],c=process.cwd(),p=function(){let e=a.createPack(),t=[],r={dests:[],root:""};return{add:t=>{e.add(ec(t.content),{filename:t.filename})},setup:e=>{Object.assign(r,e),r.dests.forEach(e=>{let n=ea(o.resolve(r.root,e+".tar")),s=ea(o.dirname(n));ea(r.root)!==s&&i.mkdirSync(s,{recursive:!0});let a=i.createWriteStream(n);t.push(a)})},done:async()=>{e.done(),await Promise.all(t.map(t=>new Promise((r,i)=>{t.on("error",i),t.on("finish",r),e.receiver.pipe(t)}))),t.length=0}}}(),f=new eg(ew);return{name:"vite-plugin-tarball",enforce:"post",async configResolved(e){l.push(...ev(e)),c=e.root,u=r?[r]:l,(t=ex.getPluginAPI(e.plugins))||await eO(e,e=>{s.push(e)}),p.setup({dests:u,root:c})},writeBundle(e,t){for(let e in t){let r=t[e];p.add({filename:e,content:"asset"===r.type?r.source:r.code})}},async closeBundle(){for(let e of(t&&await t.done,!s.length&&t&&t.staticOutputs.size&&s.push(...t.staticOutputs),l))for(let t of s)f.enqueue(async()=>{let r=o.join(e,t),i=await n.readFile(r);p.add({filename:t,content:i})});await f.wait().catch(e=>{this.error(eE(e,"tarball creation"))}),await p.done()}}};

@@ -1,2 +0,2 @@

import{createFilter as e}from"@rollup/pluginutils";import t from"fs";import r from"node:fs/promises";import i from"os";import n from"path";import{createPack as o}from"tar-mini";import s from"util";import a from"zlib";var l,u,c={exports:{}},p=(l=function(){if(u)return c.exports;u=1;let e,t,r,{defineProperty:i,setPrototypeOf:n,create:o,keys:s}=Object,{round:a,max:l}=Math,p=e=>{let t=/([a-f\d]{3,6})/i.exec(e)?.[1],r=t?.length,i=parseInt(6^r?3^r?"0":t[0]+t[0]+t[1]+t[1]+t[2]+t[2]:t,16);return[i>>16&255,i>>8&255,255&i]},f=(e,t,r)=>e^t||t^r?16+36*a(e/51)+6*a(t/51)+a(r/51):8>e?16:e>248?231:a(24*(e-8)/247)+232,d=e=>{let t,r,i,n,o;return 8>e?30+e:16>e?e-8+90:(232>e?(o=(e-=16)%36,t=(e/36|0)/5,r=(o/6|0)/5,i=o%6/5):t=r=i=(10*(e-232)+8)/255,(n=2*l(t,r,i))?30+(a(i)<<2|a(r)<<1|a(t))+(2^n?0:60):30)},m=(()=>{let r,i,n,o=e=>u.some(t=>e.test(t)),a=globalThis,l=a.process??{},u=l.argv??[],c=l.env??{},p=-1;try{e=","+s(c).join(",")}catch(e){c={},p=0}let f="FORCE_COLOR",d={false:0,0:0,1:1,2:2,3:3}[c[f]]??-1,m=f in c&&d||o(/^--color=?(true|always)?$/);return m&&(p=d),~p||(r=c,i=!!c.PM2_HOME||c.NEXT_RUNTIME?.includes("edge")||!!l.stdout?.isTTY,n="win32"===l.platform,t=r.TERM,p=({"24bit":3,truecolor:3,ansi256:2,ansi:1})[r.COLORTERM]||(r.CI?/,GITHUB/.test(e)?3:1:i&&"dumb"!==t?n?3:/-256/.test(t)?2:1:0)),!d||c.NO_COLOR||o(/^--(no-color|color=(false|never))$/)?0:a.window?.chrome||m&&!p?3:p})(),h={open:"",close:""},g={},y=({p:e},{open:t,close:i})=>{let o=(e,...r)=>{if(!e){if(t&&t===i)return t;if((e??"")==="")return""}let n,s=e.raw?String.raw({raw:e},...r):""+e,a=o.p,l=a.o,u=a.c;if(s.includes("\x1b"))for(;a;a=a.p){let{open:e,close:t}=a,r=t.length,i="",o=0;if(r)for(;~(n=s.indexOf(t,o));o=n+r)i+=s.slice(o,n)+e;s=i+s.slice(o)}return l+(s.includes("\n")?s.replace(/(\r?\n)/g,u+"$1"+l):s)+u},s=t,a=i;return e&&(s=e.o+t,a=i+e.c),n(o,r),o.p={open:t,close:i,o:s,c:a,p:e},o.open=s,o.close=a,o},w=function(e=m){let t={Ansis:w,isSupported:()=>s,strip:e=>e.replace(/[›][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),extend(e){for(let t in e){let r=e[t],n=(typeof r)[0],o="s"===n?v(...p(r)):r;g[t]="f"===n?{get(){return(...e)=>y(this,r(...e))}}:{get(){let e=y(this,o);return i(this,t,{value:e}),e}}}return n(t,r=o({},g)),t}},s=e>0,a=(e,t)=>s?{open:`[${e}m`,close:`[${t}m`}:h,l=e=>t=>e(...p(t)),u=(e,t)=>(r,i,n)=>a(`${e}8;2;${r};${i};${n}`,t),c=(e,t)=>(r,i,n)=>a(d(f(r,i,n))+e,t),b=e=>(t,r,i)=>e(f(t,r,i)),v=u(3,39),O=u(4,49),E=e=>a("38;5;"+e,39),j=e=>a("48;5;"+e,49);2===e?(v=b(E),O=b(j)):1===e&&(v=c(0,39),O=c(10,49),E=e=>a(d(e),39),j=e=>a(d(e)+10,49));let x,C={fg:E,bg:j,rgb:v,bgRgb:O,hex:l(v),bgHex:l(O),visible:h,reset:a(0,0),bold:a(1,22),dim:a(2,22),italic:a(3,23),underline:a(4,24),inverse:a(7,27),hidden:a(8,28),strikethrough:a(9,29)},P="Bright";return"black,red,green,yellow,blue,magenta,cyan,white,gray".split(",").map((e,t)=>{x="bg"+e[0].toUpperCase()+e.slice(1),8>t?(C[e+P]=a(90+t,39),C[x+P]=a(100+t,49)):t=60,C[e]=a(30+t,39),C[x]=a(40+t,49)}),t.extend(C)},b=new w;return c.exports=b,b.default=b,c.exports}())&&l.__esModule&&Object.prototype.hasOwnProperty.call(l,"default")?l.default:l;let{Ansis:f,fg:d,bg:m,rgb:h,bgRgb:g,hex:y,bgHex:w,reset:b,inverse:v,hidden:O,visible:E,bold:j,dim:x,italic:C,underline:P,strikethrough:R,black:$,red:z,green:S,yellow:T,blue:k,magenta:A,cyan:_,white:I,gray:M,redBright:B,greenBright:N,yellowBright:q,blueBright:D,magentaBright:F,cyanBright:L,whiteBright:U,bgBlack:Z,bgRed:H,bgGreen:Y,bgYellow:Q,bgBlue:X,bgMagenta:G,bgCyan:W,bgWhite:J,bgGray:K,bgRedBright:V,bgGreenBright:ee,bgYellowBright:et,bgBlueBright:er,bgMagentaBright:ei,bgCyanBright:en,bgWhiteBright:eo}=p;function es(e){return e.length}function ea(e){return/^\\\\\?\\/.test(e)?e:e.replace(/\\/g,"/")}async function el(e){let t=await Promise.all((await r.readdir(e)).map(t=>n.join(e,t))),i=0,o=[];for(;i!==es(t);){let e=t[i],s=await r.stat(e);if(s.isDirectory()){let i=await r.readdir(e);t.push(...i.map(t=>n.join(e,t)))}s.isFile()&&o.push(e),i++}return o}let eu=new TextEncoder;function ec(e){return"string"==typeof e?eu.encode(e):e}function ep(){}function ef(e){return"gz"===e?"gzip":"brotli"===e||"br"===e?"brotliCompress":"zstd"===e?"zstandard":e}async function ed(e,t,r){try{return await t(e,r)}catch(e){return Promise.reject(e)}}let em={gzip:{level:a.constants.Z_BEST_COMPRESSION},brotliCompress:{params:{[a.constants.BROTLI_PARAM_QUALITY]:a.constants.BROTLI_MAX_QUALITY}},deflate:{level:a.constants.Z_BEST_COMPRESSION},deflateRaw:{level:a.constants.Z_BEST_COMPRESSION},zstandard:{}};function eh(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class eg{enqueue(e){this.queue.push(e),this.run()}async run(){for(;this.running<this.maxConcurrent&&this.queue.length;){let e=this.queue.shift();this.running++;try{await e()}catch(e){this.errors.push(e)}finally{this.running--,this.run()}}}async wait(){for(;this.running;)await new Promise(e=>setTimeout(e,0));if(es(this.errors))throw AggregateError(this.errors,"task failed")}constructor(e){eh(this,"maxConcurrent",void 0),eh(this,"queue",void 0),eh(this,"running",void 0),eh(this,"errors",void 0),this.maxConcurrent=e,this.queue=[],this.errors=[],this.running=0}}let ey="vite-plugin-compression",ew=(()=>{let e=i.cpus()||{length:1};return 1===e.length?10:Math.max(1,e.length-1)})();function eb(e){var t;let r=new Set,i=(e,t)=>ea(n.resolve(e,t));return(null==(t=e.build.rollupOptions)?void 0:t.output)?(Array.isArray(e.build.rollupOptions.output)?e.build.rollupOptions.output:[e.build.rollupOptions.output]).forEach(t=>{("object"!=typeof t||es(Object.keys(t)))&&r.add(i(e.root,t.dir||e.build.outDir))}):r.add(i(e.root,e.build.outDir)),r}async function ev(e,r){let i=!("copyPublicDir"in e.build)||e.build.copyPublicDir;if(e.publicDir&&i&&t.existsSync(e.publicDir)){let t=await el(e.publicDir),i=n.join(e.root,n.relative(e.root,e.publicDir));t.forEach(e=>{r(ea(n.relative(i,e)),e)})}}function eO(e,t){if("AggregateError"!==e.name||!("errors"in e))return e;let r=e.errors.length,i=e.errors.map((e,t)=>{let r=e.message||"Unknown error";return`[${t+1}] ${r}`}),n=e.errors.map((e,t)=>{let r=e.stack||e.message||"No stack trace available";return`--- Error ${t+1} ---
${r}`}),o=[`Compression failed in ${t} with ${r} error(s):`,"",...i].join("\n"),s=Error(o);return s.name="CompressionError",s.stack=[`CompressionError: ${o}`,"","Combined stack traces:",...n].join("\n"),s.cause=e.errors,s}function eE(e={}){let i,{dest:s}=e,a=[],l=[],u=[],c=process.cwd(),p=function(){let e=o(),r=[],i={dests:[],root:""};return{add:t=>{e.add(ec(t.content),{filename:t.filename})},setup:e=>{Object.assign(i,e),i.dests.forEach(e=>{let o=ea(n.resolve(i.root,e+".tar")),s=ea(n.dirname(o));ea(i.root)!==s&&t.mkdirSync(s,{recursive:!0});let a=t.createWriteStream(o);r.push(a)})},done:async()=>{e.done(),await Promise.all(r.map(t=>new Promise((r,i)=>{t.on("error",i),t.on("finish",r),e.receiver.pipe(t)}))),r.length=0}}}(),f=new eg(ew);return{name:"vite-plugin-tarball",enforce:"post",async configResolved(e){l.push(...eb(e)),c=e.root,u=s?[s]:l,(i=ej.getPluginAPI(e.plugins))||await ev(e,e=>{a.push(e)}),p.setup({dests:u,root:c})},writeBundle(e,t){for(let e in t){let r=t[e];p.add({filename:e,content:"asset"===r.type?r.source:r.code})}},async closeBundle(){for(let e of(i&&await i.done,!a.length&&i&&i.staticOutputs.size&&a.push(...i.staticOutputs),l))for(let t of a)f.enqueue(async()=>{let i=n.join(e,t),o=await r.readFile(i);p.add({filename:t,content:o})});await f.wait().catch(e=>{this.error(eO(e,"tarball creation"))}),await p.done()}}}function ej(i={}){let o,{include:l=/\.(html|xml|css|json|js|mjs|svg|yaml|yml|toml)$/,exclude:u,threshold:c=0,algorithms:f=["gzip","brotliCompress"],filename:d,deleteOriginalAssets:m=!1,skipIfLargerOrEqual:h=!0,logLevel:g="info"}=i,y=[];f.forEach(e=>{"string"==typeof e?y.push(ex(e)):"object"==typeof e&&Array.isArray(e)&&y.push(e)});let w=e(l,u),b=[],v=[],{msgs:O,cleanup:E}=function(){let e=[],t=process.stdout.write.bind(process.stdout);return process.stdout.write=function(...r){let[i]=r,n="string"==typeof i?i:i.toString();return n.includes("built in")?(e.push(n),!1):t.apply(this,r)},{cleanup:()=>process.stdout.write=t,msgs:e}}(),j=process.cwd(),x=y.map(([e,t])=>{let r="string"==typeof e?ef(e):e;return{algorithm:r,algorithmFunction:"string"==typeof r?function(e){let t=ef(e);if("zstandard"===t){let[e,t]=process.versions.node.split(".").map(e=>+e);if(!(e>23||23===e&&t>=8||22===e&&t>=15))throw Error(`Node.js ${process.versions.node} does not support zstd compression. Requires Node.js >= 22.15.0 or >= 23.8.0`);if(!a.zstdCompress)throw Error("zstd compression is not available in this Node.js build");return{algorithm:s.promisify(a.zstdCompress)}}let r=t in a?t:"gzip";return{algorithm:s.promisify(a[r])}}(r).algorithm:r,options:t,filename:null!=d?d:"brotliCompress"===r?"[path][base].br":"zstandard"===r?"[path][base].zst":"[path][base].gz"}}),C=async(e,t,r)=>{let i=es(e);for(let o=0;o<x.length;o++){let s=x[o],a=o===x.length-1,l=function(e,t,r){let i="function"==typeof t?t(e,r):t,{dir:o,base:s}=n.parse(e);return i.replace(/\[path\]/,o?o+"/":"").replace(/\[base\]/,s)}(t,s.filename,{options:s.options,algorithm:s.algorithm}),u=await ed(e,s.algorithmFunction,s.options);if(h&&es(u)>=i){r.skip(t);continue}await r.pass(l,a,u)}},P=new eg(ew),R=async function(e,t){for(let e in t){if(!w(e))continue;let r=t[e],i=ec("asset"===r.type?r.source:r.code);es(i)<c||P.enqueue(async()=>{await C(i,e,{skip:ep,pass:(r,i,n)=>{i&&(m||e===r)&&Reflect.deleteProperty(t,e),this.emitFile({type:"asset",fileName:r,source:n})}})})}await P.wait().catch(e=>{"silent"!==g&&this.error(eO(e,"bundle compression"))})},$={resolve:ep},z={staticOutputs:new Set,done:new Promise(e=>{$.resolve=e})},S=new Intl.NumberFormat("en",{maximumFractionDigits:2,minimumFractionDigits:2}),T=e=>`${S.format(e/1e3)} kB`;return{name:ey,apply:"build",enforce:"post",api:z,async configResolved(e){v.push(...eb(e)),await ev(e,e=>{b.push(e)});let t=e.build.manifest?e.plugins.find(e=>"vite:manifest"===e.name):e.plugins.find(e=>"vite:build-import-analysis"===e.name);if(!t)throw Error("[vite-plugin-compression] Can't be work in versions lower than vite at 2.0.0");let r=t.generateBundle;if("object"==typeof r&&r.handler){let e=r.handler;r.handler=async function(...t){await e.apply(this,t),await R.apply(this,t)}}"function"==typeof r&&(t.generateBundle=async function(...e){await r.apply(this,e),await R.apply(this,e)}),o=e.logger,j=e.root},async closeBundle(){let e=[],s=async(t,i)=>{let o=n.join(t,i);if(!w(o)&&!z.staticOutputs.has(i))return void z.staticOutputs.add(i);let{size:s}=await r.stat(o);if(s<c){z.staticOutputs.has(i)||z.staticOutputs.add(i);return}let a=await r.readFile(o);await C(a,i,{skip:e=>{z.staticOutputs.has(e)||z.staticOutputs.add(e)},pass:async(i,s,a)=>{z.staticOutputs.has(i)||z.staticOutputs.add(i);let l=n.join(t,i);s&&m&&l!==o&&await r.rm(o,{recursive:!0,force:!0}),await r.writeFile(l,a),e.push({dest:n.relative(j,t)+"/",file:i,size:es(a)})}})};if(i.artifacts&&"function"==typeof i.artifacts){let e=i.artifacts();for(let r of v)for(let i of e)if(t.existsSync(i.src)){let e=n.basename(i.src),o=i.replace?i.replace(r,e):n.join(r,e);t.cpSync(i.src,o,{recursive:!0}),b.push(ea(n.relative(r,o)))}}for(let e of v)for(let t of b)P.enqueue(()=>s(e,t));if(await P.wait().catch(e=>e),$.resolve(),E(),"silent"!==g&&o){let t=e.reduce((e,t)=>Math.max(e,(t.dest+t.file).length),0);for(let{dest:r,file:i,size:n}of e){let e=i.padEnd(t);o.info(p.dim(r)+p.green(e)+p.bold(p.dim(T(n))))}}for(let e of O)console.info(e)}}}function ex(e,t){if("string"==typeof e){let r=ef(e);if(r in em){let e={...em[r]};return t&&Object.assign(e,t),[r,e]}throw Error(`[vite-plugin-compression] Unsupported algorithm: ${e}`)}return[e,t||{}]}ej.getPluginAPI=e=>{var t;return null==(t=e.find(e=>e.name===ey))?void 0:t.api};export{ej as compression,ej as default,ex as defineAlgorithm,eE as tarball};
import{createFilter as e}from"@rollup/pluginutils";import t from"fs";import r from"node:fs/promises";import i from"os";import n from"path";import{createPack as o}from"tar-mini";import s from"util";import a from"zlib";var l,u,c={exports:{}},p=(l=function(){if(u)return c.exports;u=1;let e,t,r,{defineProperty:i,setPrototypeOf:n,create:o,keys:s}=Object,{round:a,max:l}=Math,p=e=>{let t=/([a-f\d]{3,6})/i.exec(e)?.[1],r=t?.length,i=parseInt(6^r?3^r?"0":t[0]+t[0]+t[1]+t[1]+t[2]+t[2]:t,16);return[i>>16&255,i>>8&255,255&i]},f=(e,t,r)=>e^t||t^r?16+36*a(e/51)+6*a(t/51)+a(r/51):8>e?16:e>248?231:a(24*(e-8)/247)+232,d=e=>{let t,r,i,n,o;return 8>e?30+e:16>e?e-8+90:(232>e?(o=(e-=16)%36,t=(e/36|0)/5,r=(o/6|0)/5,i=o%6/5):t=r=i=(10*(e-232)+8)/255,(n=2*l(t,r,i))?30+(a(i)<<2|a(r)<<1|a(t))+(2^n?0:60):30)},m=(()=>{let r,i,n,o=e=>u.some(t=>e.test(t)),a=globalThis,l=a.process??{},u=l.argv??[],c=l.env??{},p=-1;try{e=","+s(c).join(",")}catch(e){c={},p=0}let f="FORCE_COLOR",d={false:0,0:0,1:1,2:2,3:3}[c[f]]??-1,m=f in c&&d||o(/^--color=?(true|always)?$/);return m&&(p=d),~p||(r=c,i=!!c.PM2_HOME||c.NEXT_RUNTIME?.includes("edge")||!!l.stdout?.isTTY,n="win32"===l.platform,t=r.TERM,p=({"24bit":3,truecolor:3,ansi256:2,ansi:1})[r.COLORTERM]||(r.CI?/,GITHUB/.test(e)?3:1:i&&"dumb"!==t?n?3:/-256/.test(t)?2:1:0)),!d||c.NO_COLOR||o(/^--(no-color|color=(false|never))$/)?0:a.window?.chrome||m&&!p?3:p})(),h={open:"",close:""},g={},y=({p:e},{open:t,close:i})=>{let o=(e,...r)=>{if(!e){if(t&&t===i)return t;if((e??"")==="")return""}let n,s=e.raw?String.raw({raw:e},...r):""+e,a=o.p,l=a.o,u=a.c;if(s.includes("\x1b"))for(;a;a=a.p){let{open:e,close:t}=a,r=t.length,i="",o=0;if(r)for(;~(n=s.indexOf(t,o));o=n+r)i+=s.slice(o,n)+e;s=i+s.slice(o)}return l+(s.includes("\n")?s.replace(/(\r?\n)/g,u+"$1"+l):s)+u},s=t,a=i;return e&&(s=e.o+t,a=i+e.c),n(o,r),o.p={open:t,close:i,o:s,c:a,p:e},o.open=s,o.close=a,o},w=function(e=m){let t={Ansis:w,isSupported:()=>s,strip:e=>e.replace(/[›][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),extend(e){for(let t in e){let r=e[t],n=(typeof r)[0],o="s"===n?v(...p(r)):r;g[t]="f"===n?{get(){return(...e)=>y(this,r(...e))}}:{get(){let e=y(this,o);return i(this,t,{value:e}),e}}}return n(t,r=o({},g)),t}},s=e>0,a=(e,t)=>s?{open:`[${e}m`,close:`[${t}m`}:h,l=e=>t=>e(...p(t)),u=(e,t)=>(r,i,n)=>a(`${e}8;2;${r};${i};${n}`,t),c=(e,t)=>(r,i,n)=>a(d(f(r,i,n))+e,t),b=e=>(t,r,i)=>e(f(t,r,i)),v=u(3,39),O=u(4,49),E=e=>a("38;5;"+e,39),j=e=>a("48;5;"+e,49);2===e?(v=b(E),O=b(j)):1===e&&(v=c(0,39),O=c(10,49),E=e=>a(d(e),39),j=e=>a(d(e)+10,49));let x,C={fg:E,bg:j,rgb:v,bgRgb:O,hex:l(v),bgHex:l(O),visible:h,reset:a(0,0),bold:a(1,22),dim:a(2,22),italic:a(3,23),underline:a(4,24),inverse:a(7,27),hidden:a(8,28),strikethrough:a(9,29)},P="Bright";return"black,red,green,yellow,blue,magenta,cyan,white,gray".split(",").map((e,t)=>{x="bg"+e[0].toUpperCase()+e.slice(1),8>t?(C[e+P]=a(90+t,39),C[x+P]=a(100+t,49)):t=60,C[e]=a(30+t,39),C[x]=a(40+t,49)}),t.extend(C)},b=new w;return c.exports=b,b.default=b,c.exports}())&&l.__esModule&&Object.prototype.hasOwnProperty.call(l,"default")?l.default:l;let{Ansis:f,fg:d,bg:m,rgb:h,bgRgb:g,hex:y,bgHex:w,reset:b,inverse:v,hidden:O,visible:E,bold:j,dim:x,italic:C,underline:P,strikethrough:R,black:$,red:z,green:S,yellow:T,blue:A,magenta:k,cyan:_,white:I,gray:M,redBright:B,greenBright:N,yellowBright:q,blueBright:D,magentaBright:F,cyanBright:L,whiteBright:U,bgBlack:Z,bgRed:H,bgGreen:Y,bgYellow:Q,bgBlue:X,bgMagenta:G,bgCyan:V,bgWhite:W,bgGray:J,bgRedBright:K,bgGreenBright:ee,bgYellowBright:et,bgBlueBright:er,bgMagentaBright:ei,bgCyanBright:en,bgWhiteBright:eo}=p;function es(e){return e.length}function ea(e){return/^\\\\\?\\/.test(e)?e:e.replace(/\\/g,"/")}async function el(e){let t=await Promise.all((await r.readdir(e)).map(t=>n.join(e,t))),i=0,o=[];for(;i!==es(t);){let e=t[i],s=await r.stat(e);if(s.isDirectory()){let i=await r.readdir(e);t.push(...i.map(t=>n.join(e,t)))}s.isFile()&&o.push(e),i++}return o}let eu=new TextEncoder;function ec(e){return"string"==typeof e?eu.encode(e):e}function ep(){}function ef(e){return"gz"===e?"gzip":"brotli"===e||"br"===e?"brotliCompress":"zstd"===e?"zstandard":e}async function ed(e,t,r){try{return await t(e,r)}catch(e){return Promise.reject(e)}}let em={gzip:{level:a.constants.Z_BEST_COMPRESSION},brotliCompress:{params:{[a.constants.BROTLI_PARAM_QUALITY]:a.constants.BROTLI_MAX_QUALITY}},deflate:{level:a.constants.Z_BEST_COMPRESSION},deflateRaw:{level:a.constants.Z_BEST_COMPRESSION},zstandard:{}};function eh(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class eg{enqueue(e){this.queue.push(e),this.run()}async run(){for(;this.running<this.maxConcurrent&&this.queue.length;){let e=this.queue.shift();this.running++;try{await e()}catch(e){this.errors.push(e)}finally{this.running--,this.run()}}}async wait(){for(;this.running;)await new Promise(e=>setTimeout(e,0));if(es(this.errors))throw AggregateError(this.errors,"task failed")}constructor(e){eh(this,"maxConcurrent",void 0),eh(this,"queue",void 0),eh(this,"running",void 0),eh(this,"errors",void 0),this.maxConcurrent=e,this.queue=[],this.errors=[],this.running=0}}let ey="native:manifest",ew="vite-plugin-compression",eb=(()=>{let e=i.cpus()||{length:1};return 1===e.length?10:Math.max(1,e.length-1)})();function ev(e){var t;let r=new Set,i=(e,t)=>ea(n.resolve(e,t));return(null==(t=e.build.rollupOptions)?void 0:t.output)?(Array.isArray(e.build.rollupOptions.output)?e.build.rollupOptions.output:[e.build.rollupOptions.output]).forEach(t=>{("object"!=typeof t||es(Object.keys(t)))&&r.add(i(e.root,t.dir||e.build.outDir))}):r.add(i(e.root,e.build.outDir)),r}async function eO(e,r){let i=!("copyPublicDir"in e.build)||e.build.copyPublicDir;if(e.publicDir&&i&&t.existsSync(e.publicDir)){let t=await el(e.publicDir),i=n.join(e.root,n.relative(e.root,e.publicDir));t.forEach(e=>{r(ea(n.relative(i,e)),e)})}}function eE(e,t){if("AggregateError"!==e.name||!("errors"in e))return e;let r=e.errors.length,i=e.errors.map((e,t)=>{let r=e.message||"Unknown error";return`[${t+1}] ${r}`}),n=e.errors.map((e,t)=>{let r=e.stack||e.message||"No stack trace available";return`--- Error ${t+1} ---
${r}`}),o=[`Compression failed in ${t} with ${r} error(s):`,"",...i].join("\n"),s=Error(o);return s.name="CompressionError",s.stack=[`CompressionError: ${o}`,"","Combined stack traces:",...n].join("\n"),s.cause=e.errors,s}function ej(e={}){let i,{dest:s}=e,a=[],l=[],u=[],c=process.cwd(),p=function(){let e=o(),r=[],i={dests:[],root:""};return{add:t=>{e.add(ec(t.content),{filename:t.filename})},setup:e=>{Object.assign(i,e),i.dests.forEach(e=>{let o=ea(n.resolve(i.root,e+".tar")),s=ea(n.dirname(o));ea(i.root)!==s&&t.mkdirSync(s,{recursive:!0});let a=t.createWriteStream(o);r.push(a)})},done:async()=>{e.done(),await Promise.all(r.map(t=>new Promise((r,i)=>{t.on("error",i),t.on("finish",r),e.receiver.pipe(t)}))),r.length=0}}}(),f=new eg(eb);return{name:"vite-plugin-tarball",enforce:"post",async configResolved(e){l.push(...ev(e)),c=e.root,u=s?[s]:l,(i=eC.getPluginAPI(e.plugins))||await eO(e,e=>{a.push(e)}),p.setup({dests:u,root:c})},writeBundle(e,t){for(let e in t){let r=t[e];p.add({filename:e,content:"asset"===r.type?r.source:r.code})}},async closeBundle(){for(let e of(i&&await i.done,!a.length&&i&&i.staticOutputs.size&&a.push(...i.staticOutputs),l))for(let t of a)f.enqueue(async()=>{let i=n.join(e,t),o=await r.readFile(i);p.add({filename:t,content:o})});await f.wait().catch(e=>{this.error(eE(e,"tarball creation"))}),await p.done()}}}function ex(e,t){let r=e.generateBundle;if("object"==typeof r&&r.handler){let e=r.handler;r.handler=async function(...r){await e.apply(this,r),await t.apply(this,r)}}"function"==typeof r&&(e.generateBundle=async function(...e){await r.apply(this,e),await t.apply(this,e)})}function eC(i={}){let o,{include:l=/\.(html|xml|css|json|js|mjs|svg|yaml|yml|toml)$/,exclude:u,threshold:c=0,algorithms:f=["gzip","brotliCompress"],filename:d,deleteOriginalAssets:m=!1,skipIfLargerOrEqual:h=!0,logLevel:g="info"}=i,y=[];f.forEach(e=>{"string"==typeof e?y.push(eP(e)):"object"==typeof e&&Array.isArray(e)&&y.push(e)});let w=e(l,u),b=[],v=[],{msgs:O,cleanup:E}=function(){let e=[],t=process.stdout.write.bind(process.stdout);return process.stdout.write=function(...r){let[i]=r,n="string"==typeof i?i:i.toString();return n.includes("built in")?(e.push(n),!1):t.apply(this,r)},{cleanup:()=>process.stdout.write=t,msgs:e}}(),j=process.cwd(),x=y.map(([e,t])=>{let r="string"==typeof e?ef(e):e;return{algorithm:r,algorithmFunction:"string"==typeof r?function(e){let t=ef(e);if("zstandard"===t){let[e,t]=process.versions.node.split(".").map(e=>+e);if(!(e>23||23===e&&t>=8||22===e&&t>=15))throw Error(`Node.js ${process.versions.node} does not support zstd compression. Requires Node.js >= 22.15.0 or >= 23.8.0`);if(!a.zstdCompress)throw Error("zstd compression is not available in this Node.js build");return{algorithm:s.promisify(a.zstdCompress)}}let r=t in a?t:"gzip";return{algorithm:s.promisify(a[r])}}(r).algorithm:r,options:t,filename:null!=d?d:"brotliCompress"===r?"[path][base].br":"zstandard"===r?"[path][base].zst":"[path][base].gz"}}),C=async(e,t,r)=>{let i=es(e);for(let o=0;o<x.length;o++){let s=x[o],a=o===x.length-1,l=function(e,t,r){let i="function"==typeof t?t(e,r):t,{dir:o,base:s}=n.parse(e);return i.replace(/\[path\]/,o?o+"/":"").replace(/\[base\]/,s)}(t,s.filename,{options:s.options,algorithm:s.algorithm}),u=await ed(e,s.algorithmFunction,s.options);if(h&&es(u)>=i){r.skip(t);continue}await r.pass(l,a,u)}},P=new eg(eb),R=async function(e,t){for(let e in t){if(!w(e))continue;let r=t[e],i=ec("asset"===r.type?r.source:r.code);es(i)<c||P.enqueue(async()=>{await C(i,e,{skip:ep,pass:(r,i,n)=>{i&&(m||e===r)&&Reflect.deleteProperty(t,e),this.emitFile({type:"asset",fileName:r,source:n})}})})}await P.wait().catch(e=>{"silent"!==g&&this.error(eE(e,"bundle compression"))})},$={resolve:ep},z={staticOutputs:new Set,done:new Promise(e=>{$.resolve=e})},S=new Intl.NumberFormat("en",{maximumFractionDigits:2,minimumFractionDigits:2}),T=e=>`${S.format(e/1e3)} kB`;return{name:ew,apply:"build",enforce:"post",api:z,async configResolved(e){v.push(...ev(e)),await eO(e,e=>{b.push(e)});let t=!1;this&&this.meta&&"rolldownVersion"in this.meta&&(t=!0);let r=function(e,t){if(e.build.manifest){let r=t?ey:"vite:manifest";return e.plugins.find(e=>e.name===r)}return e.plugins.find(e=>"vite:build-import-analysis"===e.name)}(e,t);if(!r)throw Error("[vite-plugin-compression] Can't be work in versions lower than vite at 2.0.0");if(t&&r.name===ey){var i,n;i=r.applyToEnvironment,n=e=>{if(Array.isArray(e)){let t=e.filter(e=>"object"==typeof e&&"name"in e).find(e=>"native:manifest-compatible"===e.name);t&&ex(t,R)}return e},r.applyToEnvironment=(...e)=>{let t=i(...e);return t instanceof Promise?t.then(n):n(t)}}else ex(r,R);o=e.logger,j=e.root},async closeBundle(){let e=[],s=async(t,i)=>{let o=n.join(t,i);if(!w(o)&&!z.staticOutputs.has(i))return void z.staticOutputs.add(i);let{size:s}=await r.stat(o);if(s<c){z.staticOutputs.has(i)||z.staticOutputs.add(i);return}let a=await r.readFile(o);await C(a,i,{skip:e=>{z.staticOutputs.has(e)||z.staticOutputs.add(e)},pass:async(i,s,a)=>{z.staticOutputs.has(i)||z.staticOutputs.add(i);let l=n.join(t,i);s&&m&&l!==o&&await r.rm(o,{recursive:!0,force:!0}),await r.writeFile(l,a),e.push({dest:n.relative(j,t)+"/",file:i,size:es(a)})}})};if(i.artifacts&&"function"==typeof i.artifacts){let e=i.artifacts();for(let r of v)for(let i of e)if(t.existsSync(i.src)){let e=n.basename(i.src),o=i.replace?i.replace(r,e):n.join(r,e);t.cpSync(i.src,o,{recursive:!0}),b.push(ea(n.relative(r,o)))}}for(let e of v)for(let t of b)P.enqueue(()=>s(e,t));if(await P.wait().catch(e=>e),$.resolve(),E(),"silent"!==g&&o){let t=e.reduce((e,t)=>Math.max(e,(t.dest+t.file).length),0);for(let{dest:r,file:i,size:n}of e){let e=i.padEnd(t);o.info(p.dim(r)+p.green(e)+p.bold(p.dim(T(n))))}}for(let e of O)console.info(e)}}}function eP(e,t){if("string"==typeof e){let r=ef(e);if(r in em){let e={...em[r]};return t&&Object.assign(e,t),[r,e]}throw Error(`[vite-plugin-compression] Unsupported algorithm: ${e}`)}return[e,t||{}]}eC.getPluginAPI=e=>{var t;return null==(t=e.find(e=>e.name===ew))?void 0:t.api};export{eC as compression,eC as default,eP as defineAlgorithm,ej as tarball};
{
"name": "vite-plugin-compression2",
"version": "2.3.1",
"version": "2.4.0",
"packageManager": "pnpm@10.12.1+sha512.f0dda8580f0ee9481c5c79a1d927b9164f2c478e90992ad268bbb2465a736984391d6333d2c327913578b2804af33474ca554ba29c04a8b13060a717675ae3ac",

@@ -59,3 +59,4 @@ "description": "a fast vite compression plugin",

"vite-bundle-analyzer": "^1.0.0",
"vitest": "^2.1.2"
"vitest": "^2.1.2",
"rolldown-vite": "^7.2.10"
},

@@ -62,0 +63,0 @@ "dependencies": {

+261
-0

@@ -235,2 +235,263 @@ <p align="center">

## Production Deployment
After building your project with compressed assets, you need to configure your web server to serve these pre-compressed files.
### Nginx Configuration
```nginx
http {
# Enable gzip_static module to serve pre-compressed .gz files
gzip_static on;
# Enable brotli_static to serve pre-compressed .br files
# Requires ngx_brotli module: https://github.com/google/ngx_brotli
brotli_static on;
# Fallback to dynamic compression if static file not found
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
server {
listen 80;
server_name example.com;
root /var/www/html;
location / {
try_files $uri $uri/ /index.html;
}
}
}
```
### Apache Configuration
```apache
# Enable mod_deflate for fallback dynamic compression
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/json
</IfModule>
# Serve pre-compressed files
<IfModule mod_rewrite.c>
RewriteEngine On
# Serve .br file if it exists and client supports brotli
RewriteCond %{HTTP:Accept-Encoding} br
RewriteCond %{REQUEST_FILENAME}.br -f
RewriteRule ^(.*)$ $1.br [L]
# Serve .gz file if it exists and client supports gzip
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule ^(.*)$ $1.gz [L]
</IfModule>
# Set correct content-type and encoding headers
<FilesMatch "\.js\.gz$">
Header set Content-Type "application/javascript"
Header set Content-Encoding "gzip"
</FilesMatch>
<FilesMatch "\.css\.gz$">
Header set Content-Type "text/css"
Header set Content-Encoding "gzip"
</FilesMatch>
<FilesMatch "\.js\.br$">
Header set Content-Type "application/javascript"
Header set Content-Encoding "br"
</FilesMatch>
<FilesMatch "\.css\.br$">
Header set Content-Type "text/css"
Header set Content-Encoding "br"
</FilesMatch>
```
## Framework Integration
### Next.js
For Next.js projects, add the plugin to your Vite configuration if using the App Router with custom server:
```js
// vite.config.js (for custom Next.js setups)
import { defineConfig } from 'vite'
import { compression } from 'vite-plugin-compression2'
export default defineConfig({
plugins: [
compression({
algorithms: ['gzip', 'brotliCompress'],
threshold: 1024
})
]
})
```
For standard Next.js builds, configure in `next.config.js`:
```js
// next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
// Next.js handles compression differently
// Use this plugin with custom server or static export
output: 'export', // For static export
compress: false // Disable Next.js built-in compression to use pre-compressed files
}
module.exports = nextConfig
```
### Nuxt 3
```js
// nuxt.config.ts
import { compression } from 'vite-plugin-compression2'
export default defineNuxtConfig({
vite: {
plugins: [
compression({
algorithms: ['gzip', 'brotliCompress'],
threshold: 1024,
exclude: [/\.map$/, /stats\.html$/]
})
]
}
})
```
### SvelteKit
```js
// vite.config.js
import { sveltekit } from '@sveltejs/kit/vite'
import { compression } from 'vite-plugin-compression2'
import { defineConfig } from 'vite'
export default defineConfig({
plugins: [
sveltekit(),
compression({
algorithms: ['gzip', 'brotliCompress'],
threshold: 1024
})
]
})
```
### Astro
```js
// astro.config.mjs
import { defineConfig } from 'astro/config'
import { compression } from 'vite-plugin-compression2'
export default defineConfig({
vite: {
plugins: [
compression({
algorithms: ['gzip', 'brotliCompress']
})
]
}
})
```
## Performance Tips
### Compression Level Selection
Choose compression levels based on your deployment strategy:
```js
compression({
algorithms: [
// Development: faster builds, lower compression
defineAlgorithm('gzip', { level: 6 }), // Default level
// Production: slower builds, better compression
defineAlgorithm('gzip', { level: 9 }), // Maximum compression
// Brotli: quality 10-11 recommended for static assets
defineAlgorithm('brotliCompress', {
params: {
[require('zlib').constants.BROTLI_PARAM_QUALITY]: 11
}
})
]
})
```
**Recommendations:**
- **Development/CI**: Level 6 (gzip) or Quality 4-6 (brotli) - faster builds
- **Production**: Level 9 (gzip) or Quality 10-11 (brotli) - best compression
- **Balance**: Level 7-8 (gzip) or Quality 8-9 (brotli) - good compromise
### File Size Threshold
Only compress files that benefit from compression:
```js
compression({
threshold: 1024, // 1KB minimum - recommended
algorithms: ['gzip', 'brotliCompress']
})
```
**Why use a threshold?**
- Files smaller than 1KB may not benefit from compression
- HTTP overhead can make tiny compressed files slower
- Saves build time and disk space
### Multi-Algorithm Strategy
Use both gzip and brotli for maximum compatibility and performance:
```js
compression({
algorithms: [
defineAlgorithm('gzip', { level: 9 }), // Wide browser support (all browsers)
defineAlgorithm('brotliCompress', { // Better compression (modern browsers)
params: {
[require('zlib').constants.BROTLI_PARAM_QUALITY]: 11
}
})
]
})
```
**Benefits:**
- Brotli: 15-20% better compression than gzip
- Gzip: Fallback for older browsers
- Server automatically serves the best format based on `Accept-Encoding` header
### Selective Compression
Compress only specific file types for optimal results:
```js
compression({
include: [/\.(js|mjs|json|css|html|svg)$/], // Text-based files
exclude: [/\.(png|jpg|jpeg|gif|webp|woff|woff2)$/], // Already compressed formats
threshold: 1024
})
```
**File types that compress well:**
- JavaScript/TypeScript (`.js`, `.mjs`, `.ts`)
- CSS (`.css`)
- HTML (`.html`)
- JSON (`.json`)
- SVG (`.svg`)
- XML (`.xml`)
**File types to skip:**
- Images (`.png`, `.jpg`, `.webp`) - already compressed
- Fonts (`.woff`, `.woff2`) - already compressed
- Videos (`.mp4`, `.webm`) - already compressed
### Others

@@ -237,0 +498,0 @@