mirror of
https://github.com/brunopostle/ifcurl.git
synced 2026-07-12 18:28:14 +00:00
55 lines
1.8 KiB
JavaScript
55 lines
1.8 KiB
JavaScript
|
|
#!/usr/bin/env node
|
||
|
|
// Bundles viewer JS dependencies and copies web-ifc WASM files into
|
||
|
|
// custom/public/assets/ so the viewer works without any CDN access.
|
||
|
|
//
|
||
|
|
// Run: npm install && npm run build
|
||
|
|
// Re-run whenever package.json dependency versions change.
|
||
|
|
|
||
|
|
import esbuild from "esbuild";
|
||
|
|
import fs from "fs";
|
||
|
|
import path from "path";
|
||
|
|
import { fileURLToPath } from "url";
|
||
|
|
|
||
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||
|
|
const outdir = path.join(__dirname, "custom/public/assets");
|
||
|
|
|
||
|
|
// Bundle three + @thatopen/components + jszip into a single ESM file.
|
||
|
|
// viewer.html imports { THREE, OBC, JSZip } from this bundle.
|
||
|
|
await esbuild.build({
|
||
|
|
entryPoints: [path.join(__dirname, "viewer-deps-entry.js")],
|
||
|
|
bundle: true,
|
||
|
|
format: "esm",
|
||
|
|
outfile: path.join(outdir, "viewer-deps.js"),
|
||
|
|
minify: true,
|
||
|
|
logLevel: "info",
|
||
|
|
});
|
||
|
|
|
||
|
|
// Bundle the fragments worker as a self-contained ESM (all deps inlined).
|
||
|
|
// viewer.html fetches this and passes the text as a blob URL to fragments.init().
|
||
|
|
const workerEntry = path.join(
|
||
|
|
__dirname,
|
||
|
|
"node_modules/@thatopen/fragments/dist/Worker/worker.mjs"
|
||
|
|
);
|
||
|
|
await esbuild.build({
|
||
|
|
entryPoints: [workerEntry],
|
||
|
|
bundle: true,
|
||
|
|
format: "esm",
|
||
|
|
outfile: path.join(outdir, "fragments-worker.js"),
|
||
|
|
minify: true,
|
||
|
|
logLevel: "info",
|
||
|
|
});
|
||
|
|
|
||
|
|
// Copy web-ifc WASM files (loaded at runtime by web-ifc when parsing IFC).
|
||
|
|
const wasmSrc = path.join(__dirname, "node_modules/web-ifc");
|
||
|
|
for (const name of ["web-ifc.wasm", "web-ifc-mt.wasm"]) {
|
||
|
|
const src = path.join(wasmSrc, name);
|
||
|
|
const dst = path.join(outdir, name);
|
||
|
|
if (fs.existsSync(src)) {
|
||
|
|
fs.copyFileSync(src, dst);
|
||
|
|
const size = (fs.statSync(dst).size / 1024 / 1024).toFixed(1);
|
||
|
|
console.log(`copied ${name} (${size} MB)`);
|
||
|
|
} else {
|
||
|
|
console.warn(`WARNING: ${name} not found in node_modules/web-ifc`);
|
||
|
|
}
|
||
|
|
}
|