import { mkdir, writeFile } from 'fs' import { spawn } from 'child_process' import { v1 as uuidv1 } from 'uuid' import { getDirPath, getDocPath } from './utils' function copyToTemp(id: string, texDocument: string): Promise { return new Promise((resolve, reject) => { const dirPath = getDirPath(id) mkdir(dirPath, (err) => { if (err) { reject(err) return } const docPath = getDocPath(id) writeFile(docPath, texDocument, (err) => { if (err) { reject(err) } resolve(id) }) }) }) } function generateDoc(id: string) { return new Promise((resolve, reject) => { const pdflatex = spawn('pdflatex', ['-interaction', 'nonstopmode', getDocPath(id)], { cwd: getDirPath(id) }) pdflatex.stderr.on('data', (data) => { console.error('onData', data) }) pdflatex.on('close', (code) => { if (code > 0) { reject(`pdflatex returned with code ${code}`) return } console.log(`PDF ${id} generated`) resolve(id) }) }) } export default async function (texDocument: string) { const id = uuidv1() const id_2 = await copyToTemp(id, texDocument) return generateDoc(id_2) }