| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | import fs from "fs";import path from "path";import sharp from "sharp";import { optimize as svgo } from "svgo";/** * @typedef {object} Src2Dest - Mapping of src to dest * @property {string} src - Name of the source file. * @property {string} dest - Name of the destination file. *//** * Convert a list of SVG files to PNG. * * @param {Src2Dest[]} items - Array of SVG files (src: SVG, dest:PNG) to convert. */async function svg2png (items) {  items.forEach(    async (item) => {      try {        fs.mkdir(path.dirname(item.dest), { recursive: true }, (err) => {          if (err)            throw err;        });        const info = await sharp(item.src).png({          force: true,          compressionLevel: 9,          palette: true,        }).toFile(item.dest);        console.log(          `[svg2png] created ${item.dest} -- bytes: ${info.size}, w:${info.width}px,  h:${info.height}px`        );      } catch (err) {        console.error(`ERROR: ${item.dest} -- ${err}`);        throw(err);      }    }  );}/** * Optimize SVG images for WEB. * * @param {import('svgo').Config} svgo_opts - Options passed to svgo. * @param {Src2Dest[]} items - Array of SVG files (src:SVG, dest:SVG) to optimize. */async function svg2svg(svgo_opts, items) {  items.forEach(    async (item) => {      try {        fs.mkdir(path.dirname(item.dest), { recursive: true }, (err) => {          if (err)            throw err;        });        const raw = fs.readFileSync(item.src, "utf8");        const opt = svgo(raw, svgo_opts);        fs.writeFileSync(item.dest, opt.data);        console.log(          `[svg2svg] optimized: ${item.dest} -- src: ${item.src}`        );      } catch (err) {        console.error(`ERROR: optimize src: ${item.src} -- ${err}`);        throw(err);      }    }  );}export { svg2png, svg2svg };
 |