UNPKG

markdown-mermaid-converter-cli

Version:

CLI tool to convert Markdown files with Mermaid diagrams to various formats (PDF, etc.)

65 lines 2.19 kB
import * as puppeteer from 'puppeteer'; export class BrowserPool { static instance; pool = []; maxPoolSize; launchOptions; constructor(options = {}) { this.maxPoolSize = options.maxPoolSize || 2; this.launchOptions = { headless: true, args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--disable-gpu' ], timeout: 30000, ...options.launchOptions }; } static getInstance(options) { if (!BrowserPool.instance) { BrowserPool.instance = new BrowserPool(options); } return BrowserPool.instance; } async getBrowser() { const availableBrowser = this.pool.find(pb => !pb.inUse && pb.browser.connected); if (availableBrowser) { availableBrowser.inUse = true; return availableBrowser.browser; } if (this.pool.length < this.maxPoolSize) { const browser = await puppeteer.launch(this.launchOptions); const pooledBrowser = { browser, inUse: true }; this.pool.push(pooledBrowser); browser.on('disconnected', () => { const index = this.pool.findIndex(pb => pb.browser === browser); if (index !== -1) { this.pool.splice(index, 1); } }); return browser; } throw new Error('Browser pool exhausted'); } async releaseBrowser(browser) { const pooledBrowser = this.pool.find(pb => pb.browser === browser); if (pooledBrowser) { pooledBrowser.inUse = false; const pages = await browser.pages(); const pagesToClose = pages.slice(1); await Promise.all(pagesToClose.map(page => page.close().catch(() => { }))); } } async destroy() { await Promise.all(this.pool.map(pb => pb.browser.close().catch(() => { }))); this.pool = []; BrowserPool.instance = null; } } //# sourceMappingURL=browserPool.js.map