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 };
|