mirror of
https://github.com/storytold/storyteller-bevy.git
synced 2026-10-13 23:52:55 +00:00
81 lines
2.0 KiB
JavaScript
81 lines
2.0 KiB
JavaScript
import chalk from "chalk";
|
|
import { glob } from "glob";
|
|
import fs from "node:fs";
|
|
import path from "node:path";
|
|
import url from "node:url";
|
|
|
|
async function main() {
|
|
const __dirname = url.fileURLToPath(new URL(".", import.meta.url));
|
|
const assetsSrc = path.resolve(__dirname, "../assets");
|
|
const assetsDest = path.resolve(__dirname, "../../dist/studio/public/assets");
|
|
|
|
console.log(`\nCopying assets from ${assetsSrc} to ${assetsDest}`);
|
|
|
|
let count = 0;
|
|
const start = performance.now();
|
|
|
|
try {
|
|
/** @type string[] */
|
|
let ignore = [];
|
|
const cpIgnorePath = path.join(assetsSrc, ".cp-ignore");
|
|
if (fs.existsSync(cpIgnorePath))
|
|
ignore = (await fs.promises.readFile(cpIgnorePath, "utf-8"))
|
|
.split(/\r?\n/)
|
|
.map(line => `assets/${line}`);
|
|
|
|
const files = await glob("assets/**/*", {
|
|
ignore,
|
|
absolute: true,
|
|
nodir: true,
|
|
});
|
|
count = files.length;
|
|
|
|
await Promise.all(files.map(async src => {
|
|
const relSrc = path.relative(assetsSrc, src);
|
|
const dest = path.resolve(assetsDest, relSrc);
|
|
const destDir = path.dirname(dest);
|
|
|
|
if (!fs.existsSync(destDir))
|
|
await fs.promises.mkdir(destDir, { recursive: true });
|
|
|
|
await fs.promises.copyFile(src, dest);
|
|
}));
|
|
}
|
|
catch (err) {
|
|
handleError(err);
|
|
}
|
|
|
|
const elapsed = Math.round(performance.now() - start);
|
|
const label = chalk.bold.greenBright.inverse(" DONE ");
|
|
console.log(`${label} Copied ${count} files in ${elapsed} ms`);
|
|
}
|
|
|
|
/**
|
|
* @param {any} err
|
|
* @returns {never}
|
|
*/
|
|
function handleError(err) {
|
|
const label = chalk.bold.redBright.inverse(" ERROR ");
|
|
switch (typeof err) {
|
|
case "number":
|
|
console.log(`${label} Process exited with code ${err}`);
|
|
process.exit(err);
|
|
|
|
case "string":
|
|
console.log(`${label} ${err}`);
|
|
process.exit(1);
|
|
|
|
case "object":
|
|
console.log(`${label} ${err.message}`);
|
|
if (err.stack && err.stack !== err.message)
|
|
console.log(chalk.dim(err.stack));
|
|
process.exit(1);
|
|
|
|
default:
|
|
console.log(`${label} An unknown error occured`);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
main();
|