build(canvas): stabilize a2ui bundle inputs

This commit is contained in:
Peter Steinberger
2026-04-11 14:16:06 +01:00
parent 9bde608f38
commit a8284e39de
3 changed files with 80 additions and 23 deletions

View File

@@ -4,7 +4,7 @@ import { spawnSync } from "node:child_process";
import { createHash } from "node:crypto";
import fs from "node:fs/promises";
import path from "node:path";
import { fileURLToPath } from "node:url";
import { fileURLToPath, pathToFileURL } from "node:url";
import { resolvePnpmRunner } from "./pnpm-runner.mjs";
const rootDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
@@ -18,6 +18,7 @@ const inputPaths = [
a2uiRendererDir,
a2uiAppDir,
];
const ignoredBundleHashInputPrefixes = ["vendor/a2ui/renderers/lit/dist"];
function fail(message) {
console.error(message);
@@ -35,7 +36,38 @@ async function pathExists(targetPath) {
}
}
function normalizePath(filePath) {
return filePath.split(path.sep).join("/");
}
export function isBundleHashInputPath(filePath, repoRoot = rootDir) {
const relativePath = normalizePath(path.relative(repoRoot, filePath));
return !ignoredBundleHashInputPrefixes.some(
(ignoredPath) => relativePath === ignoredPath || relativePath.startsWith(`${ignoredPath}/`),
);
}
export function getLocalRolldownCliCandidates(repoRoot = rootDir) {
return [
path.join(repoRoot, "node_modules", "rolldown", "bin", "cli.mjs"),
path.join(repoRoot, "node_modules", ".pnpm", "node_modules", "rolldown", "bin", "cli.mjs"),
path.join(
repoRoot,
"node_modules",
".pnpm",
"rolldown@1.0.0-rc.12",
"node_modules",
"rolldown",
"bin",
"cli.mjs",
),
];
}
async function walkFiles(entryPath, files) {
if (!isBundleHashInputPath(entryPath)) {
return;
}
const stat = await fs.stat(entryPath);
if (!stat.isDirectory()) {
files.push(entryPath);
@@ -47,10 +79,6 @@ async function walkFiles(entryPath, files) {
}
}
function normalizePath(filePath) {
return filePath.split(path.sep).join("/");
}
async function computeHash() {
const files = [];
for (const inputPath of inputPaths) {
@@ -123,19 +151,7 @@ async function main() {
runPnpm(["-s", "exec", "tsc", "-p", path.join(a2uiRendererDir, "tsconfig.json")]);
const localRolldownCliCandidates = [
path.join(rootDir, "node_modules", ".pnpm", "node_modules", "rolldown", "bin", "cli.mjs"),
path.join(
rootDir,
"node_modules",
".pnpm",
"rolldown@1.0.0-rc.9",
"node_modules",
"rolldown",
"bin",
"cli.mjs",
),
];
const localRolldownCliCandidates = getLocalRolldownCliCandidates(rootDir);
const localRolldownCli = (
await Promise.all(
localRolldownCliCandidates.map(async (candidate) =>
@@ -151,12 +167,14 @@ async function main() {
path.join(a2uiAppDir, "rolldown.config.mjs"),
]);
} else {
runPnpm(["-s", "dlx", "rolldown", "-c", path.join(a2uiAppDir, "rolldown.config.mjs")]);
runPnpm(["-s", "exec", "rolldown", "-c", path.join(a2uiAppDir, "rolldown.config.mjs")]);
}
await fs.writeFile(hashFile, `${currentHash}\n`, "utf8");
}
await main().catch((error) => {
fail(error instanceof Error ? error.message : String(error));
});
if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
await main().catch((error) => {
fail(error instanceof Error ? error.message : String(error));
});
}