"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("fs/promises"),e=require("fs"),n=require("os"),i=require("path"),s=require("@rollup/pluginutils"),a=require("zlib"),r=require("util"),o=require("tar-mini");function u(t){return t&&t.__esModule?t:{default:t}}var c=u(t),l=u(e),p=u(n),f=u(i),d=u(a),h=u(r);function m(t){return t.length}function y(t,e){const n="function"==typeof e?e(t):e,{dir:i,base:s}=f.default.parse(t),a=i?i+"/":"";return n.replace(/\[path\]/,a).replace(/\[base\]/,s)}function g(t){return/^\\\\\?\\/.test(t)?t:t.replace(/\\/g,"/")}const w=new TextEncoder;function b(t){return"string"==typeof t?w.encode(t):t}async function O(t,e,n){try{return await e(t,n)}catch(t){return Promise.reject(t)}}const v={gzip:{level:d.default.constants.Z_BEST_COMPRESSION},brotliCompress:{params:{[d.default.constants.BROTLI_PARAM_QUALITY]:d.default.constants.BROTLI_MAX_QUALITY}},deflate:{level:d.default.constants.Z_BEST_COMPRESSION},deflateRaw:{level:d.default.constants.Z_BEST_COMPRESSION}};class P{constructor(t){this.maxConcurrent=t,this.queue=[],this.errors=[],this.running=0}enqueue(t){this.queue.push(t),this.run()}async run(){for(;this.runningsetTimeout(t,0)));if(m(this.errors))throw new AggregateError(this.errors,"task failed")}}function j(t){return new P(t)}const q="vite-plugin-compression",z=(()=>{const t=p.default.cpus()||{length:1};return 1===t.length?10:Math.max(1,t.length-1)})();function S(t){const e=new Set,n=(t,e)=>g(f.default.resolve(t,e));if(t.build.rollupOptions?.output){(Array.isArray(t.build.rollupOptions.output)?t.build.rollupOptions.output:[t.build.rollupOptions.output]).forEach((i=>{("object"!=typeof i||m(Object.keys(i)))&&e.add(n(t.root,i.dir||t.build.outDir))}))}else e.add(n(t.root,t.build.outDir));return e}async function _(t,e){const n=!("copyPublicDir"in t.build)||t.build.copyPublicDir;if(t.publicDir&&n&&l.default.existsSync(t.publicDir)){const n=await async function(t){const e=await Promise.all((await c.default.readdir(t)).map((e=>f.default.join(t,e))));let n=0;const i=[];for(;n!==m(e);){const t=e[n],s=await c.default.stat(t);if(s.isDirectory()){const n=await c.default.readdir(t);e.push(...n.map((e=>f.default.join(t,e))))}s.isFile()&&i.push(t),n++}return i}(t.publicDir),i=f.default.join(t.root,f.default.relative(t.root,t.publicDir));await Promise.all(n.map((async t=>{const n=g(f.default.relative(i,t));await e(n,t)})))}}function x(t={}){const{include:e=/\.(html|xml|css|json|js|mjs|svg|yaml|yml|toml)$/,exclude:n,threshold:i=0,algorithm:a="gzip",filename:r,compressionOptions:o,deleteOriginalAssets:u=!1,skipIfLargerOrEqual:l=!0}=t,p=s.createFilter(e,n),g=[],w=[],P=Object.create(null);P.algorithm="string"==typeof a?function(t){const e=t in d.default?t:"gzip";return{algorithm:h.default.promisify(d.default[e])}}(a).algorithm:a,P.options="function"==typeof a?o:Object.assign(v[a],o),P.filename=r??("brotliCompress"===a?"[path][base].br":"[path][base].gz");const x=j(z),A=async function(t,e){for(const t in e){if(!p(t))continue;const n=e[t],s=b("asset"===n.type?n.source:n.code),a=m(s);a{const n=y(t,P.filename),i=await O(s,P.algorithm,P.options);l&&m(i)>=a||((u||t===n)&&Reflect.deleteProperty(e,t),this.emitFile({type:"asset",fileName:n,source:i}))}))}await x.wait().catch(this.error)},E={staticOutputs:new Set};return{name:q,apply:"build",enforce:"post",api:E,async configResolved(t){w.push(...S(t)),await _(t,(async t=>{g.push(t)}));const e=t.plugins.find((t=>"vite:build-import-analysis"===t.name));if(!e)throw new Error("[vite-plugin-compression] Can't be work in versions lower than vite at 2.0.0");!async function(t,e){const n=t.generateBundle;if("object"==typeof n&&n.handler){const t=n.handler;n.handler=async function(...n){await t.apply(this,n),await e.apply(this,n)}}"function"==typeof n&&(t.generateBundle=async function(...t){await n.apply(this,t),await e.apply(this,t)})}(e,A)},async closeBundle(){const t=async(t,e)=>{const n=f.default.join(t,e);if(!p(n)&&!E.staticOutputs.has(e))return void E.staticOutputs.add(e);const{size:s}=await c.default.stat(n);s{const i=await c.default.readFile(t),s=await O(i,P.algorithm,P.options);if(l&&m(s)>=m(i))return void(E.staticOutputs.has(t)||E.staticOutputs.add(t));const a=y(e,P.filename);E.staticOutputs.has(a)||E.staticOutputs.add(a);const r=f.default.join(n,a);u&&r!==t&&await c.default.rm(t,{recursive:!0,force:!0}),await c.default.writeFile(r,s)})(n,e,t)};for(const e of w)for(const n of g)x.enqueue((()=>t(e,n)));await x.wait().catch((t=>t))}}}x.getPluginAPI=t=>t.find((t=>t.name===q))?.api,exports.compression=x,exports.default=x,exports.defineCompressionOption=function(t){return t},exports.tarball=function(t={}){const{dest:e,gz:n=!1}=t,i=[],s=[];let a=[],r=process.cwd();const u=function(){const t=o.createPack(),e={dests:[],root:"",gz:!1};return{add:e=>{t.add(b(e.content),{filename:e.filename})},setup:async n=>{Object.assign(e,n);const i=e.dests.map((n=>{const i=g(f.default.resolve(e.root,n+".tar"+(e.gz?".gz":""))),s=g(f.default.dirname(i));return g(e.root)!==s&&l.default.mkdirSync(s,{recursive:!0}),new Promise(((n,s)=>{const a=l.default.createWriteStream(i);a.on("error",s),a.on("finish",n),e.gz?t.receiver.pipe(d.default.createGzip()).pipe(a):t.receiver.pipe(a)}))}));return Promise.all(i)},done:()=>t.done()}}(),p=j(z);let h;return{name:"vite-plugin-tarball",enforce:"post",async configResolved(t){s.push(...S(t)),r=t.root,a=e?[e]:s,h=x.getPluginAPI(t.plugins),h||await _(t,(async t=>{i.push(t)})),u.setup({dests:a,root:r,gz:n})},async writeBundle(t,e){for(const t in e){const n=e[t];u.add({filename:t,content:"asset"===n.type?n.source:n.code})}},async closeBundle(){!i.length&&h&&h.staticOutputs.size&&i.push(...h.staticOutputs);for(const t of s)for(const e of i)p.enqueue((async()=>{const n=f.default.join(t,e),i=await c.default.readFile(n);u.add({filename:e,content:i})}));await p.wait(),u.done()}}};