This repository has been archived on 2025-12-24. You can view files and clone it, but cannot push or open issues or pull requests.
site-template/packages/imagetools/integration/utils/saveAndCopyAsset.js
2025-03-17 19:06:12 +01:00

46 lines
1.1 KiB
JavaScript

import fs from "node:fs/promises";
import { sync as exists } from "@polymech/fs/exists"
import { posix as path } from "node:path";
import { fsCachePath } from "../../utils/runtimeChecks.js";
let copied = [];
let assetsDirExists;
export async function saveAndCopyAsset(
hash,
image,
buffer,
outDir,
assetsDir,
assetPath,
isSsrBuild
) {
const src = fsCachePath + hash;
const dest = path.join(outDir, isSsrBuild ? "/client" : "", assetPath);
assetsDir = path.join(outDir, isSsrBuild ? "/client" : "/", assetsDir);
copied = copied.filter(exists);
if (copied.includes(assetPath)) return;
if (!assetsDirExists) {
await fs.mkdir(assetsDir, {
recursive: true,
});
assetsDirExists = true;
}
await fs.copyFile(src, dest).catch(async (error) => {
if (error.code === "ENOENT") {
const imageBuffer = buffer || (await image.toBuffer());
await Promise.all(
[src, dest].map(async (dir) => {
await fs.writeFile(dir, imageBuffer);
})
);
} else throw error;
});
copied.push(assetPath);
}