UNPKG

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
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