* server: clean up static assets handling * nits * simplify file name handling, use static file name everywhere * cmake/ui : bundle UI assets in an archive * ui : run prettier on post-build.js --------- Co-authored-by: Alde Rojas <hello@alde.dev>
41 lines
1.4 KiB
JavaScript
41 lines
1.4 KiB
JavaScript
#!/usr/bin/env node
|
|
// Post-build: copy hashed/nested assets to predictable flat names.
|
|
// No file content is modified — the C++ server handles routing hashed URLs
|
|
// to the correct stored asset at runtime.
|
|
//
|
|
// Copies:
|
|
// _app/immutable/bundle.HASH.js -> bundle.js
|
|
// _app/immutable/assets/bundle.HASH.css -> bundle.css
|
|
// workbox-HEXHASH.js -> workbox.js
|
|
// _app/version.json -> version.json
|
|
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
|
|
const outDir = process.env.LLAMA_UI_OUT_DIR ?? './dist';
|
|
|
|
function findOne(dir, pattern) {
|
|
const files = fs.readdirSync(dir).filter((f) => pattern.test(f));
|
|
if (files.length === 0) throw new Error(`post-build: no file matching ${pattern} in ${dir}`);
|
|
return path.join(dir, files[0]);
|
|
}
|
|
|
|
function copyFlat(src, destName) {
|
|
const dest = path.join(outDir, destName);
|
|
fs.copyFileSync(src, dest);
|
|
console.log(`post-build: ${path.relative(outDir, src)} -> ${destName}`);
|
|
}
|
|
|
|
const bundleJs = findOne(path.join(outDir, '_app/immutable'), /^bundle\.[^.]+\.js$/);
|
|
const bundleCss = findOne(path.join(outDir, '_app/immutable/assets'), /^bundle\.[^.]+\.css$/);
|
|
const workbox = findOne(outDir, /^workbox-[0-9a-f]+\.js$/);
|
|
|
|
copyFlat(bundleJs, 'bundle.js');
|
|
copyFlat(bundleCss, 'bundle.css');
|
|
copyFlat(workbox, 'workbox.js');
|
|
|
|
const versionSrc = path.join(outDir, '_app/version.json');
|
|
if (fs.existsSync(versionSrc)) {
|
|
copyFlat(versionSrc, 'version.json');
|
|
}
|