40 lines
1.3 KiB
JavaScript
40 lines
1.3 KiB
JavaScript
|
|
// Copies rendered artifacts from remotion/out/ into apps/web/public/videos/
|
||
|
|
// where the marketing page expects them. Run after `pnpm render:all`.
|
||
|
|
//
|
||
|
|
// Kept as a plain mjs script (no deps) so it works without installing
|
||
|
|
// anything in the Web app workspace.
|
||
|
|
|
||
|
|
import { copyFileSync, existsSync, mkdirSync, statSync } from 'node:fs';
|
||
|
|
import { resolve, dirname } from 'node:path';
|
||
|
|
import { fileURLToPath } from 'node:url';
|
||
|
|
|
||
|
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||
|
|
const SRC = resolve(__dirname, '..', 'out');
|
||
|
|
const DEST = resolve(__dirname, '..', '..', 'apps', 'web', 'public', 'videos');
|
||
|
|
|
||
|
|
const FILES = [
|
||
|
|
{ name: 'hero.mp4', maxBytes: 3 * 1024 * 1024 },
|
||
|
|
{ name: 'hero.webm', maxBytes: 3 * 1024 * 1024 },
|
||
|
|
{ name: 'hero-poster.jpg', maxBytes: 250 * 1024 },
|
||
|
|
];
|
||
|
|
|
||
|
|
mkdirSync(DEST, { recursive: true });
|
||
|
|
|
||
|
|
let missing = [];
|
||
|
|
for (const f of FILES) {
|
||
|
|
const from = resolve(SRC, f.name);
|
||
|
|
if (!existsSync(from)) {
|
||
|
|
missing.push(f.name);
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
const size = statSync(from).size;
|
||
|
|
copyFileSync(from, resolve(DEST, f.name));
|
||
|
|
const status = size > f.maxBytes ? '⚠ OVER LIMIT' : '✓';
|
||
|
|
console.log(`${status} ${f.name} ${(size / 1024).toFixed(1)} KiB (limit ${(f.maxBytes / 1024).toFixed(0)} KiB)`);
|
||
|
|
}
|
||
|
|
|
||
|
|
if (missing.length) {
|
||
|
|
console.error(`\nMissing: ${missing.join(', ')} — run \`pnpm render:all\` first.`);
|
||
|
|
process.exit(1);
|
||
|
|
}
|