@digimuza/pdf-tools
Version:
PDF generation library & generation utilities
94 lines (93 loc) • 3.32 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.servePDF = exports.root = void 0;
const tslib_1 = require("tslib");
const Jet = (0, tslib_1.__importStar)(require("fs-jetpack"));
const path_1 = (0, tslib_1.__importStar)(require("path")), Path = path_1;
const P = (0, tslib_1.__importStar)(require("ts-prime"));
const chokidar_1 = (0, tslib_1.__importDefault)(require("chokidar"));
const live_server_1 = (0, tslib_1.__importDefault)(require("live-server"));
const internal_1 = require("@digimuza/pdf-components/lib/internal");
const yargs_1 = (0, tslib_1.__importDefault)(require("yargs"));
const helpers_1 = require("yargs/helpers");
const ts_node_1 = require("ts-node");
const pdf_1 = require("../pdf");
(0, ts_node_1.register)();
function packageJson() {
let path = 'package.json';
for (const index of P.range(1, 50)) {
const r = Jet.exists(path);
if (r) {
return path;
}
const f = P.range(0, index)
.map(() => '../')
.join('');
path = Path.resolve(f, 'package.json');
}
throw new Error('Failed to find package.json');
}
function root() {
return path_1.default.dirname(packageJson());
}
exports.root = root;
async function servePDF() {
const args = await (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
.option('file', {
type: 'string',
})
.option('watch', {
type: 'boolean',
default: false,
})
.option('out', {
alias: 'o',
type: 'string',
})
.parse(process.argv);
if (args.file == null) {
console.log(`Please provide file argument: pdf-tools {file.tsx} [options]`);
process.exit(1);
}
const file = path_1.default.resolve(args.file);
if (args.watch) {
process.env.LIVE_SERVER = 'true';
const tmpFolder = `/tmp/${P.uuidv4()}/`;
await Jet.dir(tmpFolder);
const run = async () => {
const files = Object.keys(require.cache).filter((q) => !q.includes('node_modules'));
for (const x of files) {
delete require.cache[x];
}
const component = require(file);
await Jet.writeAsync(Path.resolve(tmpFolder, 'index.html'), (0, internal_1.generatePdfBase)(component.default));
};
const debounced = P.debounce(run, 100);
const watcher = chokidar_1.default.watch(Path.resolve(root(), 'src'), {
ignored: /^\./,
persistent: true,
});
watcher.on('add', debounced).on('change', run);
live_server_1.default.start({
wait: 500,
port: 8181,
host: '0.0.0.0',
root: tmpFolder,
open: true,
file: 'index.html', // When set, serve this file (server root relative) for every 404 (useful for single-page applications)
});
return;
}
const component = require(file);
const x = component.default;
const zxc = x.map((e) => {
return Object.assign(Object.assign({}, e), { content: (0, internal_1.generatePdfBase)([e]) });
});
const pdf = await (0, pdf_1.generate)({
content: zxc,
output: args.out,
logger: console,
});
}
exports.servePDF = servePDF;
servePDF();