vite-plugin-compression2
Advanced tools
+16
-1
@@ -17,2 +17,3 @@ import { Plugin } from 'vite'; | ||
| } | ||
| type LogLevel = 'info' | 'silent'; | ||
| interface BaseCompressionPluginOptions { | ||
@@ -25,2 +26,3 @@ include?: FilterPattern; | ||
| skipIfLargerOrEqual?: boolean; | ||
| logLevel?: LogLevel; | ||
| } | ||
@@ -39,2 +41,15 @@ interface AlgorithmToZlib { | ||
| type AlgorithmFunction<T extends UserCompressionOptions> = (buf: InputType, options: T) => Promise<Buffer>; | ||
| type defineAliasAlgorithmResult<T extends UserCompressionOptions = UserCompressionOptions> = readonly [ | ||
| 'gz', | ||
| ZlibOptions | ||
| ] | readonly [ | ||
| 'br' | 'brotli', | ||
| BrotliOptions | ||
| ] | readonly [ | ||
| 'zstd', | ||
| ZstdOptions | ||
| ] | readonly [ | ||
| AlgorithmFunction<T>, | ||
| T | ||
| ]; | ||
| type DefineAlgorithmResult<T extends UserCompressionOptions = UserCompressionOptions> = readonly [ | ||
@@ -53,3 +68,3 @@ 'gzip' | 'deflate' | 'deflateRaw', | ||
| ]; | ||
| type Algorithms = (Algorithm | DefineAlgorithmResult)[]; | ||
| type Algorithms = (Algorithm | DefineAlgorithmResult | defineAliasAlgorithmResult)[]; | ||
| interface ViteCompressionPluginOption extends BaseCompressionPluginOptions { | ||
@@ -56,0 +71,0 @@ algorithms?: Algorithms; |
+16
-1
@@ -17,2 +17,3 @@ import { Plugin } from 'vite'; | ||
| } | ||
| type LogLevel = 'info' | 'silent'; | ||
| interface BaseCompressionPluginOptions { | ||
@@ -25,2 +26,3 @@ include?: FilterPattern; | ||
| skipIfLargerOrEqual?: boolean; | ||
| logLevel?: LogLevel; | ||
| } | ||
@@ -39,2 +41,15 @@ interface AlgorithmToZlib { | ||
| type AlgorithmFunction<T extends UserCompressionOptions> = (buf: InputType, options: T) => Promise<Buffer>; | ||
| type defineAliasAlgorithmResult<T extends UserCompressionOptions = UserCompressionOptions> = readonly [ | ||
| 'gz', | ||
| ZlibOptions | ||
| ] | readonly [ | ||
| 'br' | 'brotli', | ||
| BrotliOptions | ||
| ] | readonly [ | ||
| 'zstd', | ||
| ZstdOptions | ||
| ] | readonly [ | ||
| AlgorithmFunction<T>, | ||
| T | ||
| ]; | ||
| type DefineAlgorithmResult<T extends UserCompressionOptions = UserCompressionOptions> = readonly [ | ||
@@ -53,3 +68,3 @@ 'gzip' | 'deflate' | 'deflateRaw', | ||
| ]; | ||
| type Algorithms = (Algorithm | DefineAlgorithmResult)[]; | ||
| type Algorithms = (Algorithm | DefineAlgorithmResult | defineAliasAlgorithmResult)[]; | ||
| interface ViteCompressionPluginOption extends BaseCompressionPluginOptions { | ||
@@ -56,0 +71,0 @@ algorithms?: Algorithms; |
+1
-1
| "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t,r=require("@rollup/pluginutils"),i=require("fs"),n=require("node:fs/promises"),o=require("os"),s=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:o,create:s,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]},d=(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,f=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*u(t,r,i))?30+(l(i)<<2|l(r)<<1|l(t))+(2^n?0:60):30)},h=(()=>{let t,i,n,o=e=>u.some(t=>e.test(t)),s=globalThis,l=s.process??{},u=l.argv??[],c=l.env??{},p=-1;try{e=","+a(c).join(",")}catch(e){c={},p=0}let d="FORCE_COLOR",f={false:0,0:0,1:1,2:2,3:3}[c[d]]??-1,h=d in c&&f||o(/^--color=?(true|always)?$/);return h&&(p=f),~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)),!f||c.NO_COLOR||o(/^--(no-color|color=(false|never))$/)?0:s.window?.chrome||h&&!p?3:p})(),m={open:"",close:""},g={},w=({p:e},{open:t,close:r})=>{let n=(e,...i)=>{if(!e){if(t&&t===r)return t;if((e??"")==="")return""}let o,s=e.raw?String.raw({raw:e},...i):""+e,a=n.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="",n=0;if(r)for(;~(o=s.indexOf(t,n));n=o+r)i+=s.slice(n,o)+e;s=i+s.slice(n)}return l+(s.includes("\n")?s.replace(/(\r?\n)/g,u+"$1"+l):s)+u},s=t,a=r;return e&&(s=e.o+t,a=r+e.c),o(n,i),n.p={open:t,close:r,o:s,c:a,p:e},n.open=s,n.close=a,n},y=function(e=h){let t={Ansis:y,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],o="s"===i?v(...p(r)):r;g[t]="f"===i?{get(){return(...e)=>w(this,r(...e))}}:{get(){let e=w(this,o);return n(this,t,{value:e}),e}}}return o(t,i=s({},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(f(d(r,i,n))+e,t),b=e=>(t,r,i)=>e(d(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(f(e),39),j=e=>a(f(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 y;return c.exports=b,b.default=b,c.exports}())&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e;const{Ansis:d,fg:f,bg:h,rgb:m,bgRgb:g,hex:w,bgHex:y,reset:b,inverse:v,hidden:O,visible:E,bold:j,dim:x,italic:P,underline:C,strikethrough:R,black:$,red:q,green:z,yellow:_,blue:S,magenta:T,cyan:A,white:M,gray:k,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:eo}=p;function es(e){return e.length}function ea(e,t,r){let i="function"==typeof t?t(e,r):t,{dir:n,base:o}=s.parse(e);return i.replace(/\[path\]/,n?n+"/":"").replace(/\[base\]/,o)}function el(e){return/^\\\\\?\\/.test(e)?e:e.replace(/\\/g,"/")}async function eu(e){let t=await Promise.all((await n.readdir(e)).map(t=>s.join(e,t))),r=0,i=[];for(;r!==es(t);){let e=t[r],o=await n.stat(e);if(o.isDirectory()){let r=await n.readdir(e);t.push(...r.map(t=>s.join(e,t)))}o.isFile()&&i.push(e),r++}return i}const ec=new TextEncoder;function ep(e){return"string"==typeof e?ec.encode(e):e}function ed(){}function ef(e){return"gz"===e?"gzip":"brotli"===e||"br"===e?"brotliCompress":"zstd"===e?"zstandard":e}async function eh(e,t,r){try{return await t(e,r)}catch(e){return Promise.reject(e)}}const em={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 eg(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class ew{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){eg(this,"maxConcurrent",void 0),eg(this,"queue",void 0),eg(this,"running",void 0),eg(this,"errors",void 0),this.maxConcurrent=e,this.queue=[],this.errors=[],this.running=0}}const ey="vite-plugin-compression",eb=(()=>{let e=o.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)=>el(s.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,t){let r=!("copyPublicDir"in e.build)||e.build.copyPublicDir;if(e.publicDir&&r&&i.existsSync(e.publicDir)){let r=await eu(e.publicDir),i=s.join(e.root,s.relative(e.root,e.publicDir));r.forEach(e=>{t(el(s.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 t,{include:i=/\.(html|xml|css|json|js|mjs|svg|yaml|yml|toml)$/,exclude:o,threshold:a=0,algorithms:c=["gzip","brotliCompress"],filename:d,deleteOriginalAssets:f=!1,skipIfLargerOrEqual:h=!0}=e,m=[];c.forEach(e=>{"string"==typeof e?m.push(ex(e)):"object"==typeof e&&Array.isArray(e)&&m.push(e)});let g=r.createFilter(i,o),w=[],y=[],{msgs:b,cleanup:v}=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}}(),O=process.cwd(),E=m.map(([e,t])=>({algorithm:e,algorithmFunction:"string"==typeof e?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])}}(e).algorithm:e,options:t,filename:null!=d?d:"brotliCompress"===e?"[path][base].br":"zstandard"===e?"[path][base].zst":"[path][base].gz"})),j=new ew(eb),x=async function(e,t){for(let e in t){if(!g(e))continue;let r=t[e],i=ep("asset"===r.type?r.source:r.code),n=es(i);n<a||j.enqueue(async()=>{for(let r=0;r<E.length;r++){let o=E[r],s=r===E.length-1,a=ea(e,o.filename,{options:o.options,algorithm:o.algorithm}),l=await eh(i,o.algorithmFunction,o.options);if(h&&es(l)>=n)return;s&&(f||e===a)&&Reflect.deleteProperty(t,e),this.emitFile({type:"asset",fileName:a,source:l})}})}await j.wait().catch(e=>{this.error(eE(e,"bundle compression"))})},P={resolve:ed},C={staticOutputs:new Set,done:new Promise(e=>{P.resolve=e})},R=new Intl.NumberFormat("en",{maximumFractionDigits:2,minimumFractionDigits:2}),$=e=>`${R.format(e/1e3)} kB`;return{name:ey,apply:"build",enforce:"post",api:C,async configResolved(e){y.push(...ev(e)),await eO(e,e=>{w.push(e)});let r=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 x.apply(this,t)}}"function"==typeof i&&(r.generateBundle=async function(...e){await i.apply(this,e),await x.apply(this,e)}),t=e.logger,O=e.root},async closeBundle(){let e=[],r=async(t,r,i)=>{let o=await n.readFile(t);for(let a=0;a<E.length;a++){let l=E[a],u=a===E.length-1,c=await eh(o,l.algorithmFunction,l.options);if(h&&es(c)>=es(o)){C.staticOutputs.has(r)||C.staticOutputs.add(r);return}let p=ea(r,l.filename,{options:l.options,algorithm:l.algorithm});C.staticOutputs.has(p)||C.staticOutputs.add(p);let d=s.join(i,p);u&&f&&d!==t&&await n.rm(t,{recursive:!0,force:!0}),await n.writeFile(d,c),e.push({dest:s.relative(O,i)+"/",file:p,size:es(c)})}},i=async(e,t)=>{let i=s.join(e,t);if(!g(i)&&!C.staticOutputs.has(t))return void C.staticOutputs.add(t);let{size:o}=await n.stat(i);if(o<a){C.staticOutputs.has(t)||C.staticOutputs.add(t);return}await r(i,t,e)};for(let e of y)for(let t of w)j.enqueue(()=>i(e,t));if(await j.wait().catch(e=>e),P.resolve(),v(),t){let r=e.reduce((e,t)=>Math.max(e,(t.dest+t.file).length),0);for(let{dest:i,file:n,size:o}of e){let e=n.padEnd(r);t.info(p.dim(i)+p.green(e)+p.bold(p.dim($(o))))}}for(let e of b)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},exports.compression=ej,exports.default=ej,exports.defineAlgorithm=ex,exports.tarball=function(e={}){let t,{dest:r}=e,o=[],l=[],u=[],c=process.cwd(),p=function(){let e=a.createPack(),t=[],r={dests:[],root:""};return{add:t=>{e.add(ep(t.content),{filename:t.filename})},setup:e=>{Object.assign(r,e),r.dests.forEach(e=>{let n=el(s.resolve(r.root,e+".tar")),o=el(s.dirname(n));el(r.root)!==o&&i.mkdirSync(o,{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}}}(),d=new ew(eb);return{name:"vite-plugin-tarball",enforce:"post",async configResolved(e){l.push(...ev(e)),c=e.root,u=r?[r]:l,(t=ej.getPluginAPI(e.plugins))||await eO(e,e=>{o.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,!o.length&&t&&t.staticOutputs.size&&o.push(...t.staticOutputs),l))for(let t of o)d.enqueue(async()=>{let r=s.join(e,t),i=await n.readFile(r);p.add({filename:t,content:i})});await d.wait().catch(e=>{this.error(eE(e,"tarball creation"))}),await p.done()}}}; | ||
| ${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 t,{include:i=/\.(html|xml|css|json|js|mjs|svg|yaml|yml|toml)$/,exclude:o,threshold:a=0,algorithms:c=["gzip","brotliCompress"],filename:d,deleteOriginalAssets:f=!1,skipIfLargerOrEqual:h=!0,logLevel:m="info"}=e,g=[];c.forEach(e=>{"string"==typeof e?g.push(ex(e)):"object"==typeof e&&Array.isArray(e)&&g.push(e)});let w=r.createFilter(i,o),y=[],b=[],{msgs:v,cleanup:O}=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}}(),E=process.cwd(),j=g.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"}}),x=new ew(eb),P=async function(e,t){for(let e in t){if(!w(e))continue;let r=t[e],i=ep("asset"===r.type?r.source:r.code),n=es(i);n<a||x.enqueue(async()=>{for(let r=0;r<j.length;r++){let o=j[r],s=r===j.length-1,a=ea(e,o.filename,{options:o.options,algorithm:o.algorithm}),l=await eh(i,o.algorithmFunction,o.options);if(h&&es(l)>=n)return;s&&(f||e===a)&&Reflect.deleteProperty(t,e),this.emitFile({type:"asset",fileName:a,source:l})}})}await x.wait().catch(e=>{"silent"!==m&&this.error(eE(e,"bundle compression"))})},C={resolve:ed},R={staticOutputs:new Set,done:new Promise(e=>{C.resolve=e})},$=new Intl.NumberFormat("en",{maximumFractionDigits:2,minimumFractionDigits:2}),q=e=>`${$.format(e/1e3)} kB`;return{name:ey,apply:"build",enforce:"post",api:R,async configResolved(e){b.push(...ev(e)),await eO(e,e=>{y.push(e)});let r=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 P.apply(this,t)}}"function"==typeof i&&(r.generateBundle=async function(...e){await i.apply(this,e),await P.apply(this,e)}),t=e.logger,E=e.root},async closeBundle(){let e=[],r=async(t,r,i)=>{let o=await n.readFile(t);for(let a=0;a<j.length;a++){let l=j[a],u=a===j.length-1,c=await eh(o,l.algorithmFunction,l.options);if(h&&es(c)>=es(o)){R.staticOutputs.has(r)||R.staticOutputs.add(r);return}let p=ea(r,l.filename,{options:l.options,algorithm:l.algorithm});R.staticOutputs.has(p)||R.staticOutputs.add(p);let d=s.join(i,p);u&&f&&d!==t&&await n.rm(t,{recursive:!0,force:!0}),await n.writeFile(d,c),e.push({dest:s.relative(E,i)+"/",file:p,size:es(c)})}},i=async(e,t)=>{let i=s.join(e,t);if(!w(i)&&!R.staticOutputs.has(t))return void R.staticOutputs.add(t);let{size:o}=await n.stat(i);if(o<a){R.staticOutputs.has(t)||R.staticOutputs.add(t);return}await r(i,t,e)};for(let e of b)for(let t of y)x.enqueue(()=>i(e,t));if(await x.wait().catch(e=>e),C.resolve(),O(),"silent"!==m&&t){let r=e.reduce((e,t)=>Math.max(e,(t.dest+t.file).length),0);for(let{dest:i,file:n,size:o}of e){let e=n.padEnd(r);t.info(p.dim(i)+p.green(e)+p.bold(p.dim(q(o))))}}for(let e of v)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},exports.compression=ej,exports.default=ej,exports.defineAlgorithm=ex,exports.tarball=function(e={}){let t,{dest:r}=e,o=[],l=[],u=[],c=process.cwd(),p=function(){let e=a.createPack(),t=[],r={dests:[],root:""};return{add:t=>{e.add(ep(t.content),{filename:t.filename})},setup:e=>{Object.assign(r,e),r.dests.forEach(e=>{let n=el(s.resolve(r.root,e+".tar")),o=el(s.dirname(n));el(r.root)!==o&&i.mkdirSync(o,{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}}}(),d=new ew(eb);return{name:"vite-plugin-tarball",enforce:"post",async configResolved(e){l.push(...ev(e)),c=e.root,u=r?[r]:l,(t=ej.getPluginAPI(e.plugins))||await eO(e,e=>{o.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,!o.length&&t&&t.staticOutputs.size&&o.push(...t.staticOutputs),l))for(let t of o)d.enqueue(async()=>{let r=s.join(e,t),i=await n.readFile(r);p.add({filename:t,content:i})});await d.wait().catch(e=>{this.error(eE(e,"tarball creation"))}),await p.done()}}}; |
+2
-2
@@ -1,2 +0,2 @@ | ||
| import{createFilter as t}from"@rollup/pluginutils";import e from"fs";import r from"node:fs/promises";import i from"os";import o from"path";import{createPack as n}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 t,e,r,{defineProperty:i,setPrototypeOf:o,create:n,keys:s}=Object,{round:a,max:l}=Math,p=t=>{let e=/([a-f\d]{3,6})/i.exec(t)?.[1],r=e?.length,i=parseInt(6^r?3^r?"0":e[0]+e[0]+e[1]+e[1]+e[2]+e[2]:e,16);return[i>>16&255,i>>8&255,255&i]},f=(t,e,r)=>t^e||e^r?16+36*a(t/51)+6*a(e/51)+a(r/51):8>t?16:t>248?231:a(24*(t-8)/247)+232,d=t=>{let e,r,i,o,n;return 8>t?30+t:16>t?t-8+90:(232>t?(n=(t-=16)%36,e=(t/36|0)/5,r=(n/6|0)/5,i=n%6/5):e=r=i=(10*(t-232)+8)/255,(o=2*l(e,r,i))?30+(a(i)<<2|a(r)<<1|a(e))+(2^o?0:60):30)},m=(()=>{let r,i,o,n=t=>u.some(e=>t.test(e)),a=globalThis,l=a.process??{},u=l.argv??[],c=l.env??{},p=-1;try{t=","+s(c).join(",")}catch(t){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||n(/^--color=?(true|always)?$/);return m&&(p=d),~p||(r=c,i=!!c.PM2_HOME||c.NEXT_RUNTIME?.includes("edge")||!!l.stdout?.isTTY,o="win32"===l.platform,e=r.TERM,p=({"24bit":3,truecolor:3,ansi256:2,ansi:1})[r.COLORTERM]||(r.CI?/,GITHUB/.test(t)?3:1:i&&"dumb"!==e?o?3:/-256/.test(e)?2:1:0)),!d||c.NO_COLOR||n(/^--(no-color|color=(false|never))$/)?0:a.window?.chrome||m&&!p?3:p})(),h={open:"",close:""},g={},w=({p:t},{open:e,close:i})=>{let n=(t,...r)=>{if(!t){if(e&&e===i)return e;if((t??"")==="")return""}let o,s=t.raw?String.raw({raw:t},...r):""+t,a=n.p,l=a.o,u=a.c;if(s.includes("\x1b"))for(;a;a=a.p){let{open:t,close:e}=a,r=e.length,i="",n=0;if(r)for(;~(o=s.indexOf(e,n));n=o+r)i+=s.slice(n,o)+t;s=i+s.slice(n)}return l+(s.includes("\n")?s.replace(/(\r?\n)/g,u+"$1"+l):s)+u},s=e,a=i;return t&&(s=t.o+e,a=i+t.c),o(n,r),n.p={open:e,close:i,o:s,c:a,p:t},n.open=s,n.close=a,n},y=function(t=m){let e={Ansis:y,isSupported:()=>s,strip:t=>t.replace(/[][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),extend(t){for(let e in t){let r=t[e],o=(typeof r)[0],n="s"===o?v(...p(r)):r;g[e]="f"===o?{get(){return(...t)=>w(this,r(...t))}}:{get(){let t=w(this,n);return i(this,e,{value:t}),t}}}return o(e,r=n({},g)),e}},s=t>0,a=(t,e)=>s?{open:`[${t}m`,close:`[${e}m`}:h,l=t=>e=>t(...p(e)),u=(t,e)=>(r,i,o)=>a(`${t}8;2;${r};${i};${o}`,e),c=(t,e)=>(r,i,o)=>a(d(f(r,i,o))+t,e),b=t=>(e,r,i)=>t(f(e,r,i)),v=u(3,39),O=u(4,49),E=t=>a("38;5;"+t,39),j=t=>a("48;5;"+t,49);2===t?(v=b(E),O=b(j)):1===t&&(v=c(0,39),O=c(10,49),E=t=>a(d(t),39),j=t=>a(d(t)+10,49));let C,x={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((t,e)=>{C="bg"+t[0].toUpperCase()+t.slice(1),8>e?(x[t+P]=a(90+e,39),x[C+P]=a(100+e,49)):e=60,x[t]=a(30+e,39),x[C]=a(40+e,49)}),e.extend(x)},b=new y;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:w,bgHex:y,reset:b,inverse:v,hidden:O,visible:E,bold:j,dim:C,italic:x,underline:P,strikethrough:R,black:$,red:z,green:S,yellow:T,blue:A,magenta:_,cyan:I,white:M,gray:k,redBright:B,greenBright:F,yellowBright:N,blueBright:q,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:tt,bgYellowBright:te,bgBlueBright:tr,bgMagentaBright:ti,bgCyanBright:to,bgWhiteBright:tn}=p;function ts(t){return t.length}function ta(t,e,r){let i="function"==typeof e?e(t,r):e,{dir:n,base:s}=o.parse(t);return i.replace(/\[path\]/,n?n+"/":"").replace(/\[base\]/,s)}function tl(t){return/^\\\\\?\\/.test(t)?t:t.replace(/\\/g,"/")}async function tu(t){let e=await Promise.all((await r.readdir(t)).map(e=>o.join(t,e))),i=0,n=[];for(;i!==ts(e);){let t=e[i],s=await r.stat(t);if(s.isDirectory()){let i=await r.readdir(t);e.push(...i.map(e=>o.join(t,e)))}s.isFile()&&n.push(t),i++}return n}let tc=new TextEncoder;function tp(t){return"string"==typeof t?tc.encode(t):t}function tf(){}function td(t){return"gz"===t?"gzip":"brotli"===t||"br"===t?"brotliCompress":"zstd"===t?"zstandard":t}async function tm(t,e,r){try{return await e(t,r)}catch(t){return Promise.reject(t)}}let th={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 tg(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}class tw{enqueue(t){this.queue.push(t),this.run()}async run(){for(;this.running<this.maxConcurrent&&this.queue.length;){let t=this.queue.shift();this.running++;try{await t()}catch(t){this.errors.push(t)}finally{this.running--,this.run()}}}async wait(){for(;this.running;)await new Promise(t=>setTimeout(t,0));if(ts(this.errors))throw AggregateError(this.errors,"task failed")}constructor(t){tg(this,"maxConcurrent",void 0),tg(this,"queue",void 0),tg(this,"running",void 0),tg(this,"errors",void 0),this.maxConcurrent=t,this.queue=[],this.errors=[],this.running=0}}let ty="vite-plugin-compression",tb=(()=>{let t=i.cpus()||{length:1};return 1===t.length?10:Math.max(1,t.length-1)})();function tv(t){var e;let r=new Set,i=(t,e)=>tl(o.resolve(t,e));return(null==(e=t.build.rollupOptions)?void 0:e.output)?(Array.isArray(t.build.rollupOptions.output)?t.build.rollupOptions.output:[t.build.rollupOptions.output]).forEach(e=>{("object"!=typeof e||ts(Object.keys(e)))&&r.add(i(t.root,e.dir||t.build.outDir))}):r.add(i(t.root,t.build.outDir)),r}async function tO(t,r){let i=!("copyPublicDir"in t.build)||t.build.copyPublicDir;if(t.publicDir&&i&&e.existsSync(t.publicDir)){let e=await tu(t.publicDir),i=o.join(t.root,o.relative(t.root,t.publicDir));e.forEach(t=>{r(tl(o.relative(i,t)),t)})}}function tE(t,e){if("AggregateError"!==t.name||!("errors"in t))return t;let r=t.errors.length,i=t.errors.map((t,e)=>{let r=t.message||"Unknown error";return`[${e+1}] ${r}`}),o=t.errors.map((t,e)=>{let r=t.stack||t.message||"No stack trace available";return`--- Error ${e+1} --- | ||
| ${r}`}),n=[`Compression failed in ${e} with ${r} error(s):`,"",...i].join("\n"),s=Error(n);return s.name="CompressionError",s.stack=[`CompressionError: ${n}`,"","Combined stack traces:",...o].join("\n"),s.cause=t.errors,s}function tj(t={}){let i,{dest:s}=t,a=[],l=[],u=[],c=process.cwd(),p=function(){let t=n(),r=[],i={dests:[],root:""};return{add:e=>{t.add(tp(e.content),{filename:e.filename})},setup:t=>{Object.assign(i,t),i.dests.forEach(t=>{let n=tl(o.resolve(i.root,t+".tar")),s=tl(o.dirname(n));tl(i.root)!==s&&e.mkdirSync(s,{recursive:!0});let a=e.createWriteStream(n);r.push(a)})},done:async()=>{t.done(),await Promise.all(r.map(e=>new Promise((r,i)=>{e.on("error",i),e.on("finish",r),t.receiver.pipe(e)}))),r.length=0}}}(),f=new tw(tb);return{name:"vite-plugin-tarball",enforce:"post",async configResolved(t){l.push(...tv(t)),c=t.root,u=s?[s]:l,(i=tC.getPluginAPI(t.plugins))||await tO(t,t=>{a.push(t)}),p.setup({dests:u,root:c})},writeBundle(t,e){for(let t in e){let r=e[t];p.add({filename:t,content:"asset"===r.type?r.source:r.code})}},async closeBundle(){for(let t of(i&&await i.done,!a.length&&i&&i.staticOutputs.size&&a.push(...i.staticOutputs),l))for(let e of a)f.enqueue(async()=>{let i=o.join(t,e),n=await r.readFile(i);p.add({filename:e,content:n})});await f.wait().catch(t=>{this.error(tE(t,"tarball creation"))}),await p.done()}}}function tC(e={}){let i,{include:n=/\.(html|xml|css|json|js|mjs|svg|yaml|yml|toml)$/,exclude:l,threshold:u=0,algorithms:c=["gzip","brotliCompress"],filename:f,deleteOriginalAssets:d=!1,skipIfLargerOrEqual:m=!0}=e,h=[];c.forEach(t=>{"string"==typeof t?h.push(tx(t)):"object"==typeof t&&Array.isArray(t)&&h.push(t)});let g=t(n,l),w=[],y=[],{msgs:b,cleanup:v}=function(){let t=[],e=process.stdout.write.bind(process.stdout);return process.stdout.write=function(...r){let[i]=r,o="string"==typeof i?i:i.toString();return o.includes("built in")?(t.push(o),!1):e.apply(this,r)},{cleanup:()=>process.stdout.write=e,msgs:t}}(),O=process.cwd(),E=h.map(([t,e])=>({algorithm:t,algorithmFunction:"string"==typeof t?function(t){let e=td(t);if("zstandard"===e){let[t,e]=process.versions.node.split(".").map(t=>+t);if(!(t>23||23===t&&e>=8||22===t&&e>=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=e in a?e:"gzip";return{algorithm:s.promisify(a[r])}}(t).algorithm:t,options:e,filename:null!=f?f:"brotliCompress"===t?"[path][base].br":"zstandard"===t?"[path][base].zst":"[path][base].gz"})),j=new tw(tb),C=async function(t,e){for(let t in e){if(!g(t))continue;let r=e[t],i=tp("asset"===r.type?r.source:r.code),o=ts(i);o<u||j.enqueue(async()=>{for(let r=0;r<E.length;r++){let n=E[r],s=r===E.length-1,a=ta(t,n.filename,{options:n.options,algorithm:n.algorithm}),l=await tm(i,n.algorithmFunction,n.options);if(m&&ts(l)>=o)return;s&&(d||t===a)&&Reflect.deleteProperty(e,t),this.emitFile({type:"asset",fileName:a,source:l})}})}await j.wait().catch(t=>{this.error(tE(t,"bundle compression"))})},x={resolve:tf},P={staticOutputs:new Set,done:new Promise(t=>{x.resolve=t})},R=new Intl.NumberFormat("en",{maximumFractionDigits:2,minimumFractionDigits:2}),$=t=>`${R.format(t/1e3)} kB`;return{name:ty,apply:"build",enforce:"post",api:P,async configResolved(t){y.push(...tv(t)),await tO(t,t=>{w.push(t)});let e=t.plugins.find(t=>"vite:build-import-analysis"===t.name);if(!e)throw Error("[vite-plugin-compression] Can't be work in versions lower than vite at 2.0.0");let r=e.generateBundle;if("object"==typeof r&&r.handler){let t=r.handler;r.handler=async function(...e){await t.apply(this,e),await C.apply(this,e)}}"function"==typeof r&&(e.generateBundle=async function(...t){await r.apply(this,t),await C.apply(this,t)}),i=t.logger,O=t.root},async closeBundle(){let t=[],e=async(e,i,n)=>{let s=await r.readFile(e);for(let a=0;a<E.length;a++){let l=E[a],u=a===E.length-1,c=await tm(s,l.algorithmFunction,l.options);if(m&&ts(c)>=ts(s)){P.staticOutputs.has(i)||P.staticOutputs.add(i);return}let p=ta(i,l.filename,{options:l.options,algorithm:l.algorithm});P.staticOutputs.has(p)||P.staticOutputs.add(p);let f=o.join(n,p);u&&d&&f!==e&&await r.rm(e,{recursive:!0,force:!0}),await r.writeFile(f,c),t.push({dest:o.relative(O,n)+"/",file:p,size:ts(c)})}},n=async(t,i)=>{let n=o.join(t,i);if(!g(n)&&!P.staticOutputs.has(i))return void P.staticOutputs.add(i);let{size:s}=await r.stat(n);if(s<u){P.staticOutputs.has(i)||P.staticOutputs.add(i);return}await e(n,i,t)};for(let t of y)for(let e of w)j.enqueue(()=>n(t,e));if(await j.wait().catch(t=>t),x.resolve(),v(),i){let e=t.reduce((t,e)=>Math.max(t,(e.dest+e.file).length),0);for(let{dest:r,file:o,size:n}of t){let t=o.padEnd(e);i.info(p.dim(r)+p.green(t)+p.bold(p.dim($(n))))}}for(let t of b)console.info(t)}}}function tx(t,e){if("string"==typeof t){let r=td(t);if(r in th){let t={...th[r]};return e&&Object.assign(t,e),[r,t]}throw Error(`[vite-plugin-compression] Unsupported algorithm: ${t}`)}return[t,e||{}]}tC.getPluginAPI=t=>{var e;return null==(e=t.find(t=>t.name===ty))?void 0:e.api};export{tC as compression,tC as default,tx as defineAlgorithm,tj as tarball}; | ||
| import{createFilter as t}from"@rollup/pluginutils";import e 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 t,e,r,{defineProperty:i,setPrototypeOf:n,create:o,keys:s}=Object,{round:a,max:l}=Math,p=t=>{let e=/([a-f\d]{3,6})/i.exec(t)?.[1],r=e?.length,i=parseInt(6^r?3^r?"0":e[0]+e[0]+e[1]+e[1]+e[2]+e[2]:e,16);return[i>>16&255,i>>8&255,255&i]},f=(t,e,r)=>t^e||e^r?16+36*a(t/51)+6*a(e/51)+a(r/51):8>t?16:t>248?231:a(24*(t-8)/247)+232,d=t=>{let e,r,i,n,o;return 8>t?30+t:16>t?t-8+90:(232>t?(o=(t-=16)%36,e=(t/36|0)/5,r=(o/6|0)/5,i=o%6/5):e=r=i=(10*(t-232)+8)/255,(n=2*l(e,r,i))?30+(a(i)<<2|a(r)<<1|a(e))+(2^n?0:60):30)},m=(()=>{let r,i,n,o=t=>u.some(e=>t.test(e)),a=globalThis,l=a.process??{},u=l.argv??[],c=l.env??{},p=-1;try{t=","+s(c).join(",")}catch(t){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,e=r.TERM,p=({"24bit":3,truecolor:3,ansi256:2,ansi:1})[r.COLORTERM]||(r.CI?/,GITHUB/.test(t)?3:1:i&&"dumb"!==e?n?3:/-256/.test(e)?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={},w=({p:t},{open:e,close:i})=>{let o=(t,...r)=>{if(!t){if(e&&e===i)return e;if((t??"")==="")return""}let n,s=t.raw?String.raw({raw:t},...r):""+t,a=o.p,l=a.o,u=a.c;if(s.includes("\x1b"))for(;a;a=a.p){let{open:t,close:e}=a,r=e.length,i="",o=0;if(r)for(;~(n=s.indexOf(e,o));o=n+r)i+=s.slice(o,n)+t;s=i+s.slice(o)}return l+(s.includes("\n")?s.replace(/(\r?\n)/g,u+"$1"+l):s)+u},s=e,a=i;return t&&(s=t.o+e,a=i+t.c),n(o,r),o.p={open:e,close:i,o:s,c:a,p:t},o.open=s,o.close=a,o},y=function(t=m){let e={Ansis:y,isSupported:()=>s,strip:t=>t.replace(/[][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),extend(t){for(let e in t){let r=t[e],n=(typeof r)[0],o="s"===n?v(...p(r)):r;g[e]="f"===n?{get(){return(...t)=>w(this,r(...t))}}:{get(){let t=w(this,o);return i(this,e,{value:t}),t}}}return n(e,r=o({},g)),e}},s=t>0,a=(t,e)=>s?{open:`[${t}m`,close:`[${e}m`}:h,l=t=>e=>t(...p(e)),u=(t,e)=>(r,i,n)=>a(`${t}8;2;${r};${i};${n}`,e),c=(t,e)=>(r,i,n)=>a(d(f(r,i,n))+t,e),b=t=>(e,r,i)=>t(f(e,r,i)),v=u(3,39),O=u(4,49),E=t=>a("38;5;"+t,39),j=t=>a("48;5;"+t,49);2===t?(v=b(E),O=b(j)):1===t&&(v=c(0,39),O=c(10,49),E=t=>a(d(t),39),j=t=>a(d(t)+10,49));let C,x={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((t,e)=>{C="bg"+t[0].toUpperCase()+t.slice(1),8>e?(x[t+P]=a(90+e,39),x[C+P]=a(100+e,49)):e=60,x[t]=a(30+e,39),x[C]=a(40+e,49)}),e.extend(x)},b=new y;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:w,bgHex:y,reset:b,inverse:v,hidden:O,visible:E,bold:j,dim:C,italic:x,underline:P,strikethrough:R,black:$,red:z,green:S,yellow:T,blue:A,magenta:_,cyan:I,white:M,gray:k,redBright:B,greenBright:F,yellowBright:N,blueBright:q,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:tt,bgYellowBright:te,bgBlueBright:tr,bgMagentaBright:ti,bgCyanBright:tn,bgWhiteBright:to}=p;function ts(t){return t.length}function ta(t,e,r){let i="function"==typeof e?e(t,r):e,{dir:o,base:s}=n.parse(t);return i.replace(/\[path\]/,o?o+"/":"").replace(/\[base\]/,s)}function tl(t){return/^\\\\\?\\/.test(t)?t:t.replace(/\\/g,"/")}async function tu(t){let e=await Promise.all((await r.readdir(t)).map(e=>n.join(t,e))),i=0,o=[];for(;i!==ts(e);){let t=e[i],s=await r.stat(t);if(s.isDirectory()){let i=await r.readdir(t);e.push(...i.map(e=>n.join(t,e)))}s.isFile()&&o.push(t),i++}return o}let tc=new TextEncoder;function tp(t){return"string"==typeof t?tc.encode(t):t}function tf(){}function td(t){return"gz"===t?"gzip":"brotli"===t||"br"===t?"brotliCompress":"zstd"===t?"zstandard":t}async function tm(t,e,r){try{return await e(t,r)}catch(t){return Promise.reject(t)}}let th={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 tg(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}class tw{enqueue(t){this.queue.push(t),this.run()}async run(){for(;this.running<this.maxConcurrent&&this.queue.length;){let t=this.queue.shift();this.running++;try{await t()}catch(t){this.errors.push(t)}finally{this.running--,this.run()}}}async wait(){for(;this.running;)await new Promise(t=>setTimeout(t,0));if(ts(this.errors))throw AggregateError(this.errors,"task failed")}constructor(t){tg(this,"maxConcurrent",void 0),tg(this,"queue",void 0),tg(this,"running",void 0),tg(this,"errors",void 0),this.maxConcurrent=t,this.queue=[],this.errors=[],this.running=0}}let ty="vite-plugin-compression",tb=(()=>{let t=i.cpus()||{length:1};return 1===t.length?10:Math.max(1,t.length-1)})();function tv(t){var e;let r=new Set,i=(t,e)=>tl(n.resolve(t,e));return(null==(e=t.build.rollupOptions)?void 0:e.output)?(Array.isArray(t.build.rollupOptions.output)?t.build.rollupOptions.output:[t.build.rollupOptions.output]).forEach(e=>{("object"!=typeof e||ts(Object.keys(e)))&&r.add(i(t.root,e.dir||t.build.outDir))}):r.add(i(t.root,t.build.outDir)),r}async function tO(t,r){let i=!("copyPublicDir"in t.build)||t.build.copyPublicDir;if(t.publicDir&&i&&e.existsSync(t.publicDir)){let e=await tu(t.publicDir),i=n.join(t.root,n.relative(t.root,t.publicDir));e.forEach(t=>{r(tl(n.relative(i,t)),t)})}}function tE(t,e){if("AggregateError"!==t.name||!("errors"in t))return t;let r=t.errors.length,i=t.errors.map((t,e)=>{let r=t.message||"Unknown error";return`[${e+1}] ${r}`}),n=t.errors.map((t,e)=>{let r=t.stack||t.message||"No stack trace available";return`--- Error ${e+1} --- | ||
| ${r}`}),o=[`Compression failed in ${e} 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=t.errors,s}function tj(t={}){let i,{dest:s}=t,a=[],l=[],u=[],c=process.cwd(),p=function(){let t=o(),r=[],i={dests:[],root:""};return{add:e=>{t.add(tp(e.content),{filename:e.filename})},setup:t=>{Object.assign(i,t),i.dests.forEach(t=>{let o=tl(n.resolve(i.root,t+".tar")),s=tl(n.dirname(o));tl(i.root)!==s&&e.mkdirSync(s,{recursive:!0});let a=e.createWriteStream(o);r.push(a)})},done:async()=>{t.done(),await Promise.all(r.map(e=>new Promise((r,i)=>{e.on("error",i),e.on("finish",r),t.receiver.pipe(e)}))),r.length=0}}}(),f=new tw(tb);return{name:"vite-plugin-tarball",enforce:"post",async configResolved(t){l.push(...tv(t)),c=t.root,u=s?[s]:l,(i=tC.getPluginAPI(t.plugins))||await tO(t,t=>{a.push(t)}),p.setup({dests:u,root:c})},writeBundle(t,e){for(let t in e){let r=e[t];p.add({filename:t,content:"asset"===r.type?r.source:r.code})}},async closeBundle(){for(let t of(i&&await i.done,!a.length&&i&&i.staticOutputs.size&&a.push(...i.staticOutputs),l))for(let e of a)f.enqueue(async()=>{let i=n.join(t,e),o=await r.readFile(i);p.add({filename:e,content:o})});await f.wait().catch(t=>{this.error(tE(t,"tarball creation"))}),await p.done()}}}function tC(e={}){let i,{include:o=/\.(html|xml|css|json|js|mjs|svg|yaml|yml|toml)$/,exclude:l,threshold:u=0,algorithms:c=["gzip","brotliCompress"],filename:f,deleteOriginalAssets:d=!1,skipIfLargerOrEqual:m=!0,logLevel:h="info"}=e,g=[];c.forEach(t=>{"string"==typeof t?g.push(tx(t)):"object"==typeof t&&Array.isArray(t)&&g.push(t)});let w=t(o,l),y=[],b=[],{msgs:v,cleanup:O}=function(){let t=[],e=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")?(t.push(n),!1):e.apply(this,r)},{cleanup:()=>process.stdout.write=e,msgs:t}}(),E=process.cwd(),j=g.map(([t,e])=>{let r="string"==typeof t?td(t):t;return{algorithm:r,algorithmFunction:"string"==typeof r?function(t){let e=td(t);if("zstandard"===e){let[t,e]=process.versions.node.split(".").map(t=>+t);if(!(t>23||23===t&&e>=8||22===t&&e>=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=e in a?e:"gzip";return{algorithm:s.promisify(a[r])}}(r).algorithm:r,options:e,filename:null!=f?f:"brotliCompress"===r?"[path][base].br":"zstandard"===r?"[path][base].zst":"[path][base].gz"}}),C=new tw(tb),x=async function(t,e){for(let t in e){if(!w(t))continue;let r=e[t],i=tp("asset"===r.type?r.source:r.code),n=ts(i);n<u||C.enqueue(async()=>{for(let r=0;r<j.length;r++){let o=j[r],s=r===j.length-1,a=ta(t,o.filename,{options:o.options,algorithm:o.algorithm}),l=await tm(i,o.algorithmFunction,o.options);if(m&&ts(l)>=n)return;s&&(d||t===a)&&Reflect.deleteProperty(e,t),this.emitFile({type:"asset",fileName:a,source:l})}})}await C.wait().catch(t=>{"silent"!==h&&this.error(tE(t,"bundle compression"))})},P={resolve:tf},R={staticOutputs:new Set,done:new Promise(t=>{P.resolve=t})},$=new Intl.NumberFormat("en",{maximumFractionDigits:2,minimumFractionDigits:2}),z=t=>`${$.format(t/1e3)} kB`;return{name:ty,apply:"build",enforce:"post",api:R,async configResolved(t){b.push(...tv(t)),await tO(t,t=>{y.push(t)});let e=t.plugins.find(t=>"vite:build-import-analysis"===t.name);if(!e)throw Error("[vite-plugin-compression] Can't be work in versions lower than vite at 2.0.0");let r=e.generateBundle;if("object"==typeof r&&r.handler){let t=r.handler;r.handler=async function(...e){await t.apply(this,e),await x.apply(this,e)}}"function"==typeof r&&(e.generateBundle=async function(...t){await r.apply(this,t),await x.apply(this,t)}),i=t.logger,E=t.root},async closeBundle(){let t=[],e=async(e,i,o)=>{let s=await r.readFile(e);for(let a=0;a<j.length;a++){let l=j[a],u=a===j.length-1,c=await tm(s,l.algorithmFunction,l.options);if(m&&ts(c)>=ts(s)){R.staticOutputs.has(i)||R.staticOutputs.add(i);return}let p=ta(i,l.filename,{options:l.options,algorithm:l.algorithm});R.staticOutputs.has(p)||R.staticOutputs.add(p);let f=n.join(o,p);u&&d&&f!==e&&await r.rm(e,{recursive:!0,force:!0}),await r.writeFile(f,c),t.push({dest:n.relative(E,o)+"/",file:p,size:ts(c)})}},o=async(t,i)=>{let o=n.join(t,i);if(!w(o)&&!R.staticOutputs.has(i))return void R.staticOutputs.add(i);let{size:s}=await r.stat(o);if(s<u){R.staticOutputs.has(i)||R.staticOutputs.add(i);return}await e(o,i,t)};for(let t of b)for(let e of y)C.enqueue(()=>o(t,e));if(await C.wait().catch(t=>t),P.resolve(),O(),"silent"!==h&&i){let e=t.reduce((t,e)=>Math.max(t,(e.dest+e.file).length),0);for(let{dest:r,file:n,size:o}of t){let t=n.padEnd(e);i.info(p.dim(r)+p.green(t)+p.bold(p.dim(z(o))))}}for(let t of v)console.info(t)}}}function tx(t,e){if("string"==typeof t){let r=td(t);if(r in th){let t={...th[r]};return e&&Object.assign(t,e),[r,t]}throw Error(`[vite-plugin-compression] Unsupported algorithm: ${t}`)}return[t,e||{}]}tC.getPluginAPI=t=>{var e;return null==(e=t.find(t=>t.name===ty))?void 0:e.api};export{tC as compression,tC as default,tx as defineAlgorithm,tj as tarball}; |
+3
-3
| { | ||
| "name": "vite-plugin-compression2", | ||
| "version": "2.2.0", | ||
| "version": "2.2.1", | ||
| "packageManager": "pnpm@10.12.1+sha512.f0dda8580f0ee9481c5c79a1d927b9164f2c478e90992ad268bbb2465a736984391d6333d2c327913578b2804af33474ca554ba29c04a8b13060a717675ae3ac", | ||
@@ -57,4 +57,4 @@ "description": "a fast vite compression plugin", | ||
| "typescript": "^5.3.3", | ||
| "vite": "^6.3.5", | ||
| "vite-bundle-analyzer": "^0.22.0", | ||
| "vite": "^7.0.3", | ||
| "vite-bundle-analyzer": "^1.0.0", | ||
| "vitest": "^2.1.2" | ||
@@ -61,0 +61,0 @@ }, |
+11
-10
@@ -91,11 +91,12 @@ <p align="center"> | ||
| | params | type | default | description | | ||
| | ---------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | | ||
| | `include` | `string \| RegExp \| Array<string \| RegExp>` | `/\.(html\|xml\|css\|json\|js\|mjs\|svg\|yaml\|yml\|toml)$/` | Include all assets matching any of these conditions. | | ||
| | `exclude` | `string \| RegExp \| Array<string \| RegExp>` | `-` | Exclude all assets matching any of these conditions. | | ||
| | `threshold` | `number` | `0` | Only assets bigger than this size are processed (in bytes) | | ||
| | `algorithms` | `Algorithms` | `['gzip', 'brotliCompress']` | Array of compression algorithms or defineAlgorithm results | | ||
| | `filename` | `string \| function` | `[path][base].gz` or `[path][base]. br` If algorithm is `zstd` be `[path][base].zst` | The target asset filename pattern | | ||
| | `deleteOriginalAssets` | `boolean` | `false` | Whether to delete the original assets or not | | ||
| | `skipIfLargerOrEqual` | `boolean` | `true` | Whether to skip the compression if the result is larger than or equal to the original file | | ||
| | params | type | default | description | | ||
| | ---------------------- | --------------------------------------------- | ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | | ||
| | `include` | `string \| RegExp \| Array<string \| RegExp>` | `/\.(html\|xml\|css\|json\|js\|mjs\|svg\|yaml\|yml\|toml)$/` | Include all assets matching any of these conditions. | | ||
| | `exclude` | `string \| RegExp \| Array<string \| RegExp>` | `-` | Exclude all assets matching any of these conditions. | | ||
| | `threshold` | `number` | `0` | Only assets bigger than this size are processed (in bytes) | | ||
| | `algorithms` | `Algorithms` | `['gzip', 'brotliCompress']` | Array of compression algorithms or defineAlgorithm results | | ||
| | `filename` | `string \| function` | `[path][base].gz` or `[path][base]. br` If algorithm is `zstandard` be `[path][base].zst` | The target asset filename pattern | | ||
| | `deleteOriginalAssets` | `boolean` | `false` | Whether to delete the original assets or not | | ||
| | `skipIfLargerOrEqual` | `boolean` | `true` | Whether to skip the compression if the result is larger than or equal to the original file | | ||
| | `logLevel` | `string` | `info` | Control sdout info | | ||
@@ -116,3 +117,3 @@ ### Tarball Plugin Options | ||
| - `algorithm`: Algorithm name (`'gzip' | 'brotliCompress' | 'deflate' | 'deflateRaw' | 'zstandard'`) or custom function | ||
| - `algorithm`: Algorithm name (`'gzip' | 'brotliCompress' | 'deflate' | 'deflateRaw' | 'zstandard' | 'gz' | 'br' | 'brotli' | 'zstd'`) or custom function | ||
| - `options`: Compression options for the algorithm | ||
@@ -119,0 +120,0 @@ |
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
41749
3.06%175
10.06%261
0.38%