mirror of
https://github.com/danbulant/heaventaker
synced 2026-06-19 14:41:18 +00:00
48 lines
No EOL
1.9 KiB
JavaScript
48 lines
No EOL
1.9 KiB
JavaScript
import webp from "webp-converter";
|
|
import fs from "fs/promises";
|
|
import fsSync from "fs";
|
|
import path from "path";
|
|
|
|
async function convertFolder({ folder, production, base, out, ref }) {
|
|
const promises = [];
|
|
for(const file of await fs.readdir(folder)) {
|
|
const loc = path.join(folder, file);
|
|
const stat = await fs.stat(loc);
|
|
if(stat.isDirectory()) {
|
|
promises.push(convertFolder({ folder: loc, production, base, out }));
|
|
} else if([".png", ".jpg", ".jpeg"].includes(path.extname(loc))) {
|
|
var rel = loc.substr(base.length);
|
|
rel = rel.substr(0, rel.length - path.extname(rel).length);
|
|
|
|
const targetFile = path.join(out, rel + ".webp");
|
|
if(fsSync.existsSync(targetFile)) continue;
|
|
|
|
var target = path.join(out, rel);
|
|
console.log("target", target, path.basename(target));
|
|
var dir = target.substr(0, target.length - path.basename(target).length);
|
|
console.log("dir", dir);
|
|
if(!fsSync.existsSync(dir)) await fs.mkdir(dir, { recursive: true });
|
|
|
|
promises.push(webp.cwebp(loc, targetFile, "-q 80"));
|
|
} else {
|
|
ref.warn("Non-image file found:", loc);
|
|
}
|
|
}
|
|
return await Promise.all(promises);
|
|
}
|
|
|
|
export function makeImages({ folders, production }) {
|
|
return {
|
|
name: "image-maker",
|
|
generateBundle: async function makeImages() {
|
|
webp.grant_permission();
|
|
|
|
const base = path.join(__dirname, "images/png");
|
|
const out = path.join(__dirname, "public/images");
|
|
await fs.mkdir(out, { recursive: true });
|
|
const ref = this;
|
|
folders = folders.map(folder => path.join(base, folder));
|
|
await Promise.all(folders.map(folder => convertFolder({ folder, production, base, out, ref })));
|
|
}
|
|
};
|
|
}; |