resumefy
Version:
A simple toolkit to bring your JSON Resume to life
40 lines (39 loc) • 1.38 kB
JavaScript
import { underline } from 'ansicolor';
import fs from 'fs';
import { Renderer } from '../render/Renderer.js';
import { log } from './log.js';
const serverUrl = (port) => `http://localhost:${port}`;
export const render = async (resumeFile, { watch = false, headless = !watch, theme, outDir = '.', port = 8080 } = {}) => {
const renderer = await Renderer.launch(resumeFile, { theme: theme, outDir }, {
timeout: 0,
defaultViewport: null,
headless,
pipe: true,
args: ['--no-sandbox'],
}, { watch, headless });
await renderer
.render()
.then(() => renderer.addMenu(serverUrl(port)))
.catch((err) => {
log.error(err);
if (!watch) {
process.exit(1);
}
});
if (watch) {
log.dim(`\nWatching ${underline(resumeFile)} for changes...`);
if (!headless) {
renderer.startFileServer(port);
}
fs.watch(resumeFile, async (_event, filename) => {
if (filename) {
log.dim(`\n[${new Date().toISOString()}]`, underline(filename), 'changed', '\n');
await renderer
.render()
.then(() => Promise.all([renderer.reloadPreview(), renderer.addMenu(serverUrl(port))]))
.catch(() => { });
}
return;
});
}
};