start over with nextjs

This commit is contained in:
Thomas Ruoff
2021-02-25 00:31:28 +01:00
parent 3a77e7f22b
commit 214d95d3d7
68 changed files with 3047 additions and 18576 deletions

51
lib/renderer.ts Normal file
View File

@@ -0,0 +1,51 @@
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<string> {
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 function(texDocument: string) {
const id = uuidv1();
return copyToTemp(id, texDocument)
.then(generateDoc);
};

14
lib/store.ts Normal file
View File

@@ -0,0 +1,14 @@
const storeDir = process.env.JSON_STORE || '/tmp/pdfer-store/';
import { promisify } from 'util';
import JsonStore from 'json-fs-store'
const store = JsonStore(storeDir);
console.log(`using json-store at ${storeDir}`);
export const list = promisify(store.list);
export const load = promisify(store.load);
export const add = promisify(store.add);
export const remove = promisify(store.remove);

60
lib/templates.ts Normal file
View File

@@ -0,0 +1,60 @@
function convertLineBreaks(string) {
return string.replace(/\n/g, '\\\\');
};
export function brief(options) {
const {
template = 'brief-fam',
subject = '',
yourRef = '',
yourRefName = 'Ihr Zeichen',
yourMail = '',
myRef = '',
customer = '',
invoice = '',
date = '\\today',
signature = '',
specialMail = '',
address = 'Max Mustermann\\\\Musterstrasse\\\\12345 Musterstadt',
opening = 'Sehr geehrte Damen und Herren',
body = '',
closing = 'Mit freundlichen Grüßen',
ps = '',
enclosing = '',
} = options;
return `% brief document
\\documentclass{scrlttr2}
\\LoadLetterOption{${template}}
\\setkomavar{subject}{${subject}}
\\setkomavar{yourref}[${yourRefName}]{${yourRef}}
\\setkomavar{yourmail}{${yourMail}}
\\setkomavar{myref}{${myRef}}
\\setkomavar{customer}{${customer}}
\\setkomavar{invoice}{${invoice}}
\\setkomavar{date}{${date}}
%\\setkomavar{signature}{${signature}}
\\setkomavar{specialmail}{${specialMail}}
\\begin{document}
\\begin{letter}{${convertLineBreaks(address)}}
\\opening{${opening},}
${convertLineBreaks(body)}
\\closing{${closing}}
\\ps{${ps}}
%\\encl{${enclosing}}
\\end{letter}
\\end{document}`;
};

13
lib/utils.ts Normal file
View File

@@ -0,0 +1,13 @@
import path from 'path';
export function getDirPath(id) {
return `/tmp/pdfer-${id}`;
}
export function getDocPath(id) {
return path.join(getDirPath(id), 'doc.tex');
}
export function getPdfPath(id) {
return path.join(getDirPath(id), 'doc.pdf');
}