fix(smartpdf): lazily initialize SmartPdf, stop it only when present, and make evaluateOnPage reliably close pages
This commit is contained in:
@@ -1,5 +1,13 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 2026-03-09 - 2.0.9 - fix(smartpdf)
|
||||||
|
lazily initialize SmartPdf, stop it only when present, and make evaluateOnPage reliably close pages
|
||||||
|
|
||||||
|
- Add private ensureSmartPdf() to lazily initialize and start SmartPdf only when PDF methods are called
|
||||||
|
- Call ensureSmartPdf() in pdfFromPage() before using smartpdf
|
||||||
|
- Stop SmartPdf in stop() only if it was initialized and clear the reference
|
||||||
|
- Wrap evaluateOnPage() page operations in try/finally and safely ignore errors from page.close() to avoid resource leaks or uncaught exceptions
|
||||||
|
|
||||||
## 2025-01-03 - 2.0.8 - fix(core)
|
## 2025-01-03 - 2.0.8 - fix(core)
|
||||||
Ensure consistent browser automation functionality
|
Ensure consistent browser automation functionality
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@push.rocks/smartbrowser',
|
name: '@push.rocks/smartbrowser',
|
||||||
version: '2.0.8',
|
version: '2.0.9',
|
||||||
description: 'A simplified Puppeteer wrapper for easy automation and testing tasks.'
|
description: 'A simplified Puppeteer wrapper for easy automation and testing tasks.'
|
||||||
}
|
}
|
||||||
|
|||||||
20
ts/index.ts
20
ts/index.ts
@@ -14,16 +14,28 @@ export class SmartBrowser {
|
|||||||
*/
|
*/
|
||||||
public async start() {
|
public async start() {
|
||||||
this.headlessBrowser = await plugins.smartpuppeteer.getEnvAwareBrowserInstance();
|
this.headlessBrowser = await plugins.smartpuppeteer.getEnvAwareBrowserInstance();
|
||||||
|
// SmartPdf is lazy-initialized only when PDF methods are called
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ensure SmartPdf is initialized (lazy)
|
||||||
|
*/
|
||||||
|
private async ensureSmartPdf() {
|
||||||
|
if (!this.smartpdf) {
|
||||||
this.smartpdf = new plugins.smartpdf.SmartPdf();
|
this.smartpdf = new plugins.smartpdf.SmartPdf();
|
||||||
await this.smartpdf.start(this.headlessBrowser);
|
await this.smartpdf.start(this.headlessBrowser);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* stop the SmartBrowser instance
|
* stop the SmartBrowser instance
|
||||||
*/
|
*/
|
||||||
public async stop() {
|
public async stop() {
|
||||||
await this.headlessBrowser.close();
|
if (this.smartpdf) {
|
||||||
await this.smartpdf.stop();
|
await this.smartpdf.stop();
|
||||||
|
this.smartpdf = null;
|
||||||
|
}
|
||||||
|
await this.headlessBrowser.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -31,6 +43,7 @@ export class SmartBrowser {
|
|||||||
* @param urlArg
|
* @param urlArg
|
||||||
*/
|
*/
|
||||||
public async pdfFromPage(urlArg: string): Promise<plugins.smartpdf.IPdf> {
|
public async pdfFromPage(urlArg: string): Promise<plugins.smartpdf.IPdf> {
|
||||||
|
await this.ensureSmartPdf();
|
||||||
const result = await this.smartpdf.getFullWebsiteAsSinglePdf(urlArg);
|
const result = await this.smartpdf.getFullWebsiteAsSinglePdf(urlArg);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -63,12 +76,15 @@ export class SmartBrowser {
|
|||||||
*/
|
*/
|
||||||
public async evaluateOnPage<T>(urlArg: string, funcArg: () => Promise<T>) {
|
public async evaluateOnPage<T>(urlArg: string, funcArg: () => Promise<T>) {
|
||||||
const page = await this.headlessBrowser.newPage();
|
const page = await this.headlessBrowser.newPage();
|
||||||
|
try {
|
||||||
await page.goto(urlArg, {
|
await page.goto(urlArg, {
|
||||||
waitUntil: 'networkidle2',
|
waitUntil: 'networkidle2',
|
||||||
});
|
});
|
||||||
const result = await page.evaluate(funcArg);
|
const result = await page.evaluate(funcArg);
|
||||||
await page.close();
|
|
||||||
return result;
|
return result;
|
||||||
|
} finally {
|
||||||
|
try { await page.close(); } catch (e) { /* page may already be closed */ }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user