@vite-pwa/assets-generator
Version:
Zero-config PWA Assets Generator
29 lines (26 loc) • 1.55 kB
JavaScript
import { resolve } from 'node:path';
import { existsSync } from 'node:fs';
import { writeFile } from 'node:fs/promises';
async function generateAssets(instruction, overrideAssets, folder, log) {
const transparent = Array.from(Object.values(instruction.transparent));
await Promise.all(transparent.map((icon) => generateAsset("PNG", icon, folder, overrideAssets, log)));
const maskable = Array.from(Object.values(instruction.maskable));
await Promise.all(maskable.map((icon) => generateAsset("PNG", icon, folder, overrideAssets, log)));
const apple = Array.from(Object.values(instruction.apple));
await Promise.all(apple.map((icon) => generateAsset("PNG", icon, folder, overrideAssets, log)));
const favicon = Array.from(Object.values(instruction.favicon));
await Promise.all(favicon.filter((icon) => !icon.name.endsWith(".svg")).map((icon) => generateAsset("ICO", icon, folder, overrideAssets, log)));
const appleSplashScreen = Array.from(Object.values(instruction.appleSplashScreen));
await Promise.all(appleSplashScreen.map((icon) => generateAsset("PNG", icon, folder, overrideAssets, log)));
}
async function generateAsset(type, icon, folder, overrideAssets, log) {
const filePath = resolve(folder, icon.name);
if (!overrideAssets && existsSync(filePath)) {
log?.(`Skipping, ${type} file already exists: ${filePath}`, true);
return;
}
await icon.buffer().then((b) => writeFile(resolve(folder, icon.name), b)).then(() => {
});
log?.(`Generated ${type} file: ${filePath}`, false);
}
export { generateAssets };