UNPKG

@modern-js/builder-plugin-image-compress

Version:

Image compress plugin for modern-js/web-builder

66 lines (58 loc) 1.27 kB
import { Buffer } from 'buffer'; import { compressJpeg, losslessCompressPng, pngQuantize, Transformer, } from '@napi-rs/image'; import svgo from 'svgo'; import { Codec, Codecs } from '../types'; export const jpegCodec: Codec<'jpeg'> = { handler(buf, options) { return compressJpeg(buf, options); }, defaultOptions: { test: /\.(jpg|jpeg)$/, }, }; export const pngCodec: Codec<'png'> = { handler(buf, options) { return pngQuantize(buf, options); }, defaultOptions: { test: /\.png$/, }, }; export const pngLosslessCodec: Codec<'pngLossless'> = { handler(buf, options) { return losslessCompressPng(buf, options); }, defaultOptions: { test: /\.png$/, }, }; export const icoCodec: Codec<'ico'> = { handler(buf) { return new Transformer(buf).ico(); }, defaultOptions: { test: /\.(ico|icon)$/, }, }; export const svgCodec: Codec<'svg'> = { async handler(buf, options) { const result = svgo.optimize(buf.toString(), options); return Buffer.from(result.data); }, defaultOptions: { test: /\.svg$/, }, }; const codecs: Record<Codecs, Codec<any>> = { jpeg: jpegCodec, png: pngCodec, pngLossless: pngLosslessCodec, ico: icoCodec, svg: svgCodec, }; export default codecs;