Files
anomalyco--models.dev/packages/web/script/build.ts
T
2026-07-13 12:28:55 +08:00

89 lines
2.6 KiB
TypeScript
Executable File

#!/usr/bin/env bun
import { RenderedPages, Providers, Models, renderDocument } from "../src/render";
import fs from "fs/promises";
import path from "path";
await fs.rm("./dist", { recursive: true, force: true });
await Bun.build({
entrypoints: ["./index.html"],
outdir: "dist",
target: "bun",
});
for await (const file of new Bun.Glob("./public/*").scan()) {
await Bun.write(file.replace("./public/", "./dist/"), Bun.file(file));
}
// Copy provider logos to dist/logos/
await fs.mkdir("./dist/logos", { recursive: true });
// First, copy the default logo
const defaultLogoPath = "../../providers/logo.svg";
const defaultLogo = Bun.file(defaultLogoPath);
if (await defaultLogo.exists()) {
await Bun.write("./dist/logos/default.svg", defaultLogo);
}
// Then copy provider-specific logos
const providersDir = "../../providers";
const entries = await fs.readdir(providersDir, { withFileTypes: true });
for (const entry of entries) {
if (entry.isDirectory()) {
const provider = entry.name;
const logoPath = path.join(providersDir, provider, "logo.svg");
const logoFile = Bun.file(logoPath);
if (await logoFile.exists()) {
await Bun.write(`./dist/logos/${provider}.svg`, logoFile);
}
}
}
// Copy lab logos to dist/logos/labs/
await fs.mkdir("./dist/logos/labs", { recursive: true });
const labsDir = "../../labs";
try {
const labEntries = await fs.readdir(labsDir, { withFileTypes: true });
for (const entry of labEntries) {
if (entry.isDirectory()) {
const lab = entry.name;
const logoPath = path.join(labsDir, lab, "logo.svg");
const logoFile = Bun.file(logoPath);
if (await logoFile.exists()) {
await Bun.write(`./dist/logos/labs/${lab}.svg`, logoFile);
}
}
}
} catch (error) {
if ((error as NodeJS.ErrnoException).code !== "ENOENT") {
throw error;
}
}
const template = await Bun.file("./dist/index.html").text();
for (const [route, rendered] of RenderedPages) {
const filePath = route === "/"
? "./dist/_index.html"
: path.join("./dist", route, "index.html");
await fs.mkdir(path.dirname(filePath), { recursive: true });
await Bun.write(filePath, renderDocument(template, rendered));
}
await Bun.write("./dist/api.json", JSON.stringify(Providers));
await Bun.write(
"./dist/catalog.json",
JSON.stringify({ models: Models, providers: Providers }),
);
await Bun.write("./dist/models.json", JSON.stringify(Models));
await fs.rename("./dist/api.json", "./dist/_api.json");
await fs.rename("./dist/catalog.json", "./dist/_catalog.json");
await fs.rename("./dist/models.json", "./dist/_models.json");
await fs.rm("./dist/index.html", { force: true });