Files
Kill_LIFE/web/scripts/vendor-kicanvas.mjs
L'électron rareandClaude Opus 4.6 619f9163c6 feat(web): add aperant renderer, cockpit components, EDA worker
- Aperant: Vite build, shims, deploy script, dist assets
- Cockpit components: Card, Badge, Modal, Input, DataTable, StatusDot
- EDA worker for browser-side PCB/schematic processing
- Next.js project config, CI pipeline, layout

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
2026-03-24 00:22:28 +01:00

55 lines
1.3 KiB
JavaScript

import { createWriteStream } from "node:fs";
import { mkdir, writeFile } from "node:fs/promises";
import { dirname, resolve } from "node:path";
import { fileURLToPath } from "node:url";
const here = dirname(fileURLToPath(import.meta.url));
const webRoot = resolve(here, "..");
const vendorDir = resolve(webRoot, "public", "vendor");
const targetPath = resolve(vendorDir, "kicanvas.js");
const metaPath = resolve(vendorDir, "kicanvas.meta.json");
const sourceUrl =
process.env.KICANVAS_BUNDLE_URL ?? "https://kicanvas.org/kicanvas/kicanvas.js";
await mkdir(vendorDir, { recursive: true });
const response = await fetch(sourceUrl);
if (!response.ok || !response.body) {
throw new Error(`Failed to download KiCanvas bundle from ${sourceUrl}`);
}
await new Promise((resolveDownload, rejectDownload) => {
const stream = createWriteStream(targetPath);
response.body.pipeTo(
new WritableStream({
write(chunk) {
stream.write(chunk);
},
close() {
stream.end();
resolveDownload(null);
},
abort(error) {
stream.destroy();
rejectDownload(error);
}
})
).catch(rejectDownload);
});
await writeFile(
metaPath,
JSON.stringify(
{
sourceUrl,
vendoredAt: new Date().toISOString()
},
null,
2
),
"utf8"
);
console.log(`Vendored KiCanvas bundle to ${targetPath}`);