legal-markdown-js
Version:
Node.js implementation of LegalMarkdown for processing legal documents with markdown and YAML - Complete feature parity with Ruby version
39 lines • 1.69 kB
JavaScript
import { PdfDependencyError } from '../../../errors/index.js';
import { PuppeteerConnector } from './puppeteer-connector.js';
import { SystemChromeConnector } from './system-chrome-connector.js';
import { WeasyprintConnector } from './weasyprint-connector.js';
const CONNECTOR_FACTORIES = {
puppeteer: () => new PuppeteerConnector(),
'system-chrome': () => new SystemChromeConnector(),
weasyprint: () => new WeasyprintConnector(),
};
export function createPdfConnector(preference) {
return CONNECTOR_FACTORIES[preference]();
}
export async function resolvePdfConnector(preference) {
if (preference !== 'auto') {
const connector = createPdfConnector(preference);
if (await connector.isAvailable()) {
return connector;
}
throw new PdfDependencyError(`Requested PDF connector "${preference}" is not available on this system.`);
}
// Auto-resolution priority: puppeteer first (self-contained, most
// reproducible across environments), then system-chrome (zero-install for
// users with a browser), then weasyprint (Python-based, least common).
const chain = [
createPdfConnector('puppeteer'),
createPdfConnector('system-chrome'),
createPdfConnector('weasyprint'),
];
for (const connector of chain) {
if (await connector.isAvailable()) {
return connector;
}
}
throw new PdfDependencyError('No PDF backend is available. Install one of:\n' +
' - npm install puppeteer\n' +
' - Install Chrome/Chromium/Edge/Brave/Arc\n' +
' - brew install weasyprint (or pip install weasyprint)');
}
//# sourceMappingURL=resolver.js.map