UNPKG

@otterlord/astro-compress

Version:

🗜️ AstroJS compression utilities. Compress HTML, CSS, JavaScript and more!

2 lines (1 loc) 1.64 kB
import{minify as c}from"csso";import{files as d}from"./files-pipe/index.js";import p from"./files-pipe/dist/lib/deepmerge.js";import l from"./files-pipe/dist/options/index.js";import{minify as h}from"html-minifier-terser";import n from"sharp";import{optimize as y}from"svgo";import{minify as w}from"terser";import b from"./lib/format-bytes.js";import S from"./lib/sharp-read.js";import m from"./options/index.js";var R=(o={})=>{for(const r in o)Object.prototype.hasOwnProperty.call(o,r)&&o[r]===!0&&(o[r]=m[r]);const e=p(m,o),s=new Set;if(typeof e.path<"u"&&(e.path instanceof Array||e.path instanceof Set))for(const r of e.path)s.add(r);return{name:"astro-compress",hooks:{"astro:build:done":async({dir:r})=>{s.size||s.add(r);for(const[f,i]of Object.entries(e))if(i)for(const u of s)await(await(await(await new d(e.logger).in(u)).by(typeof e.map=="object"?e.map[f]:"")).not(e.exclude)).pipe(p(e.pipe,{wrote:async t=>{switch(f){case"css":return c(t.buffer.toString(),i).css;case"html":return await h(t.buffer.toString(),i);case"js":{const{code:a}=await w(t.buffer.toString(),i);return a||t.buffer}case"img":return S(i,t);case"svg":{const{data:a}=y(t.buffer.toString(),i);return typeof a<"u"?a:t.buffer}default:return t.buffer}},read:async t=>{switch(f){case"img":{const{format:a}=await n(t.inputPath).metadata();return n(t.inputPath,{failOn:"none",sequentialRead:!0,unlimited:!0,animated:a==="webp"||a==="gif"})}default:return await l.pipe.read(t)}},fulfilled:async t=>t.files>0?`Successfully compressed a total of ${t.files} ${f.toUpperCase()} ${t.files===1?"file":"files"} for ${await b(t.info.total)}.`:!1}))}}}};export{R as default};