21 lines
1009 B
JavaScript
21 lines
1009 B
JavaScript
|
|
/* render-composition.mjs — render a grouped composition file to SVG.
|
||
|
|
Usage: node tools/render-composition.mjs <composition.mjs> [out.svg] [size]
|
||
|
|
*/
|
||
|
|
import { writeFileSync } from 'node:fs';
|
||
|
|
import { resolve } from 'node:path';
|
||
|
|
import { pathToFileURL } from 'node:url';
|
||
|
|
import { renderComposition } from '../src/compose/composition.js';
|
||
|
|
|
||
|
|
const file = process.argv[2];
|
||
|
|
if (!file) { console.error('usage: node tools/render-composition.mjs <composition.mjs> [out.svg] [size]'); process.exit(1); }
|
||
|
|
const out = process.argv[3] || '/tmp/composition.svg';
|
||
|
|
const size = process.argv[4] ? +process.argv[4] : undefined;
|
||
|
|
|
||
|
|
const mod = await import(pathToFileURL(resolve(file)).href);
|
||
|
|
const comp = mod.composition || mod.default;
|
||
|
|
if (!comp) { console.error('composition file must `export const composition = {...}`'); process.exit(1); }
|
||
|
|
|
||
|
|
const svg = renderComposition(comp, size);
|
||
|
|
writeFileSync(out, svg);
|
||
|
|
console.log(`composition -> ${out} (${(svg.length / 1024).toFixed(0)} KB, size=${size || comp.size || 1500})`);
|