@planu/cli 1.0.10 → 1.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/engine/pdf/browser-finder.d.ts.map +1 -1
- package/dist/engine/pdf/browser-finder.js +46 -4
- package/dist/engine/pdf/browser-finder.js.map +1 -1
- package/dist/engine/pdf/html-to-pdf.d.ts.map +1 -1
- package/dist/engine/pdf/html-to-pdf.js +18 -13
- package/dist/engine/pdf/html-to-pdf.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-finder.d.ts","sourceRoot":"","sources":["../../../src/engine/pdf/browser-finder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"browser-finder.d.ts","sourceRoot":"","sources":["../../../src/engine/pdf/browser-finder.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,YAAY,EAAE,WAAW,EAAE,CAAC;AA+L5B,wBAAsB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CA4CxD;AAED,wBAAgB,eAAe,IAAI,WAAW,GAAG,IAAI,CAEpD"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { existsSync } from 'fs';
|
|
2
2
|
import { execFile } from 'child_process';
|
|
3
3
|
import { promisify } from 'util';
|
|
4
|
+
import { createRequire } from 'module';
|
|
4
5
|
const execFileAsync = promisify(execFile);
|
|
5
6
|
const MACOS_PATHS = [
|
|
6
7
|
{
|
|
@@ -63,6 +64,7 @@ const LINUX_PATHS = [
|
|
|
63
64
|
];
|
|
64
65
|
function buildBrowserNotFoundMessage() {
|
|
65
66
|
const platform = process.platform;
|
|
67
|
+
const isHeadlessServer = platform === 'linux' && !process.env.DISPLAY && !process.env.WAYLAND_DISPLAY;
|
|
66
68
|
const installHints = platform === 'darwin'
|
|
67
69
|
? [
|
|
68
70
|
' brew install --cask google-chrome',
|
|
@@ -76,18 +78,29 @@ function buildBrowserNotFoundMessage() {
|
|
|
76
78
|
' # Snap: sudo snap install chromium',
|
|
77
79
|
]
|
|
78
80
|
: [' winget install Google.Chrome', ' # or: winget install Microsoft.Edge'];
|
|
81
|
+
const serverHint = isHeadlessServer
|
|
82
|
+
? [
|
|
83
|
+
'',
|
|
84
|
+
' Detected: headless server environment (no DISPLAY)',
|
|
85
|
+
' Recommended for servers:',
|
|
86
|
+
' sudo apt-get install -y chromium-browser',
|
|
87
|
+
' # or use puppeteer for a self-contained setup:',
|
|
88
|
+
' npm install puppeteer # includes bundled Chromium',
|
|
89
|
+
]
|
|
90
|
+
: [];
|
|
79
91
|
return [
|
|
80
92
|
'No Chromium-based browser found for PDF generation.',
|
|
81
93
|
'',
|
|
82
94
|
'Planu needs Chrome, Chromium, Edge, or Brave to convert HTML to PDF.',
|
|
83
95
|
'',
|
|
84
|
-
'
|
|
96
|
+
'Quick fix — set PLANU_CHROME_PATH to your browser executable:',
|
|
97
|
+
' export PLANU_CHROME_PATH="/path/to/chrome"',
|
|
85
98
|
'',
|
|
86
|
-
'
|
|
99
|
+
'Or install a supported browser:',
|
|
87
100
|
...installHints,
|
|
101
|
+
...serverHint,
|
|
88
102
|
'',
|
|
89
|
-
'
|
|
90
|
-
' export PLANU_CHROME_PATH="/path/to/chrome"',
|
|
103
|
+
'Tip: if puppeteer is installed in your project, Planu will use its bundled Chromium automatically.',
|
|
91
104
|
].join('\n');
|
|
92
105
|
}
|
|
93
106
|
async function getBrowserVersion(browserPath) {
|
|
@@ -99,6 +112,30 @@ async function getBrowserVersion(browserPath) {
|
|
|
99
112
|
return undefined;
|
|
100
113
|
}
|
|
101
114
|
}
|
|
115
|
+
// Fix 2: Try puppeteer/puppeteer-core as optional peer dep fallback
|
|
116
|
+
function tryPuppeteerBrowser() {
|
|
117
|
+
try {
|
|
118
|
+
const require = createRequire(import.meta.url);
|
|
119
|
+
let chromePath;
|
|
120
|
+
for (const pkg of ['puppeteer', 'puppeteer-core']) {
|
|
121
|
+
try {
|
|
122
|
+
const p = require(pkg);
|
|
123
|
+
chromePath = p.executablePath();
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
// not installed — try next
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (!chromePath || !existsSync(chromePath)) {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
return { path: chromePath, name: 'chromium' };
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
102
139
|
async function resolveLinuxBinary(bin) {
|
|
103
140
|
try {
|
|
104
141
|
const { stdout } = await execFileAsync('which', [bin], { timeout: 3000 });
|
|
@@ -170,6 +207,11 @@ export async function findBrowser() {
|
|
|
170
207
|
}
|
|
171
208
|
}
|
|
172
209
|
}
|
|
210
|
+
// Fix 2: Puppeteer bundled Chromium as last-resort fallback (peer dep, not required)
|
|
211
|
+
const puppeteerBrowser = tryPuppeteerBrowser();
|
|
212
|
+
if (puppeteerBrowser) {
|
|
213
|
+
return puppeteerBrowser;
|
|
214
|
+
}
|
|
173
215
|
throw new Error(buildBrowserNotFoundMessage());
|
|
174
216
|
}
|
|
175
217
|
export function findBrowserSync() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-finder.js","sourceRoot":"","sources":["../../../src/engine/pdf/browser-finder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-finder.js","sourceRoot":"","sources":["../../../src/engine/pdf/browser-finder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAKvC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,WAAW,GAAqC;IACpD;QACE,IAAI,EAAE,8DAA8D;QACpE,IAAI,EAAE,QAAQ;KACf;IACD;QACE,IAAI,EAAE,oDAAoD;QAC1D,IAAI,EAAE,UAAU;KACjB;IACD;QACE,IAAI,EAAE,gEAAgE;QACtE,IAAI,EAAE,MAAM;KACb;IACD;QACE,IAAI,EAAE,8DAA8D;QACpE,IAAI,EAAE,OAAO;KACd;IACD;QACE,IAAI,EAAE,4EAA4E;QAClF,IAAI,EAAE,QAAQ;KACf;CACF,CAAC;AAEF,MAAM,aAAa,GAAqC;IACtD;QACE,IAAI,EAAE,4DAA4D;QAClE,IAAI,EAAE,QAAQ;KACf;IACD;QACE,IAAI,EAAE,kEAAkE;QACxE,IAAI,EAAE,QAAQ;KACf;IACD;QACE,IAAI,EAAE,6DAA6D;QACnE,IAAI,EAAE,MAAM;KACb;IACD;QACE,IAAI,EAAE,yEAAyE;QAC/E,IAAI,EAAE,OAAO;KACd;CACF,CAAC;AAEF,MAAM,cAAc,GAAoC;IACtD,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE;IACxC,EAAE,GAAG,EAAE,sBAAsB,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC/C,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,UAAU,EAAE;IAC7C,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE;IACrC,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE;IACvC,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE;IACvC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;CAChC,CAAC;AAEF,8EAA8E;AAC9E,MAAM,WAAW,GAAqC;IACpD,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,QAAQ,EAAE;IAClD,EAAE,IAAI,EAAE,+BAA+B,EAAE,IAAI,EAAE,QAAQ,EAAE;IACzD,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,UAAU,EAAE;IACvD,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,UAAU,EAAE;IAC/C,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,UAAU,EAAE;IAChD,EAAE,IAAI,EAAE,yBAAyB,EAAE,IAAI,EAAE,MAAM,EAAE;IACjD,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,OAAO,EAAE;CAClD,CAAC;AAEF,SAAS,2BAA2B;IAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,gBAAgB,GACpB,QAAQ,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAE/E,MAAM,YAAY,GAChB,QAAQ,KAAK,QAAQ;QACnB,CAAC,CAAC;YACE,qCAAqC;YACrC,sCAAsC;YACtC,4CAA4C;SAC7C;QACH,CAAC,CAAC,QAAQ,KAAK,OAAO;YACpB,CAAC,CAAC;gBACE,kEAAkE;gBAClE,kDAAkD;gBAClD,gDAAgD;aACjD;YACH,CAAC,CAAC,CAAC,gCAAgC,EAAE,uCAAuC,CAAC,CAAC;IAEpF,MAAM,UAAU,GAAG,gBAAgB;QACjC,CAAC,CAAC;YACE,EAAE;YACF,sDAAsD;YACtD,4BAA4B;YAC5B,4CAA4C;YAC5C,kDAAkD;YAClD,sDAAsD;SACvD;QACH,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;QACL,qDAAqD;QACrD,EAAE;QACF,sEAAsE;QACtE,EAAE;QACF,+DAA+D;QAC/D,8CAA8C;QAC9C,EAAE;QACF,iCAAiC;QACjC,GAAG,YAAY;QACf,GAAG,UAAU;QACb,EAAE;QACF,oGAAoG;KACrG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IAClD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACtF,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,oEAAoE;AACpE,SAAS,mBAAmB;IAC1B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,UAA8B,CAAC;QACnC,KAAK,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAqC,CAAC;gBAC3D,UAAU,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;gBAChC,MAAM;YACR,CAAC;YAAC,MAAM,CAAC;gBACP,2BAA2B;YAC7B,CAAC;QACH,CAAC;QACD,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,GAAW;IAC3C,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/B,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,6BAA6B;IACpC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC9C,IAAI,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAElC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE,CAAC;YACpC,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE,CAAC;YACtC,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE,CAAC;YACpC,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC9C,IAAI,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACjD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpD,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAElC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE,CAAC;YACpC,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACxD,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE,CAAC;YACtC,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACxD,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;YACvC,MAAM,YAAY,GAAG,MAAM,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC7D,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,CAAC;gBACtD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;YAC/D,CAAC;QACH,CAAC;IACH,CAAC;IAED,qFAAqF;IACrF,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;IAC/C,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,2BAA2B,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,6BAA6B,EAAE,CAAC;AACzC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-to-pdf.d.ts","sourceRoot":"","sources":["../../../src/engine/pdf/html-to-pdf.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAoFhE,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAC5B,OAAO,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"html-to-pdf.d.ts","sourceRoot":"","sources":["../../../src/engine/pdf/html-to-pdf.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAoFhE,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAC5B,OAAO,CAAC,SAAS,CAAC,CAuFpB"}
|
|
@@ -82,6 +82,19 @@ function buildChromeArgs(tempHtmlPath, outputPath) {
|
|
|
82
82
|
export async function htmlToPdf(htmlPath, options) {
|
|
83
83
|
const opts = { ...DEFAULT_PDF_OPTIONS, ...options };
|
|
84
84
|
const absoluteHtmlPath = resolve(htmlPath);
|
|
85
|
+
// Fix 1: Validate HTML path BEFORE browser detection — clear ENOENT message early
|
|
86
|
+
let htmlContent;
|
|
87
|
+
try {
|
|
88
|
+
htmlContent = await readFile(absoluteHtmlPath, 'utf-8');
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
const e = err;
|
|
92
|
+
if (e.code === 'ENOENT') {
|
|
93
|
+
throw new Error(`HTML file not found: ${absoluteHtmlPath}\n` +
|
|
94
|
+
`Tip: make sure the path is absolute or relative to the project root.`, { cause: err });
|
|
95
|
+
}
|
|
96
|
+
throw new Error(`Cannot read HTML file: ${absoluteHtmlPath} — ${e.message}`, { cause: err });
|
|
97
|
+
}
|
|
85
98
|
const browser = await findBrowser();
|
|
86
99
|
const outputPath = resolveOutputPath(absoluteHtmlPath, opts.outputPath);
|
|
87
100
|
// Ensure output directory exists before launching Chrome
|
|
@@ -93,18 +106,6 @@ export async function htmlToPdf(htmlPath, options) {
|
|
|
93
106
|
const e = err;
|
|
94
107
|
throw new Error(`Cannot create output directory: ${outputDir} — ${e.message}`, { cause: err });
|
|
95
108
|
}
|
|
96
|
-
// Read HTML — single operation replacing stat+readFile (eliminates TOCTOU race)
|
|
97
|
-
let htmlContent;
|
|
98
|
-
try {
|
|
99
|
-
htmlContent = await readFile(absoluteHtmlPath, 'utf-8');
|
|
100
|
-
}
|
|
101
|
-
catch (err) {
|
|
102
|
-
const e = err;
|
|
103
|
-
if (e.code === 'ENOENT') {
|
|
104
|
-
throw new Error(`HTML file not found: ${absoluteHtmlPath}`, { cause: err });
|
|
105
|
-
}
|
|
106
|
-
throw new Error(`Cannot read HTML file: ${absoluteHtmlPath} — ${e.message}`, { cause: err });
|
|
107
|
-
}
|
|
108
109
|
const enhancedHtml = injectCssIntoHtml(htmlContent, buildPrintEnhancementCSS(opts));
|
|
109
110
|
const tempHtmlPath = join(dirname(absoluteHtmlPath), `.print-temp-${Date.now()}-${Math.random().toString(36).slice(2, 8)}.html`);
|
|
110
111
|
await writeFile(tempHtmlPath, enhancedHtml, 'utf-8');
|
|
@@ -123,8 +124,12 @@ export async function htmlToPdf(htmlPath, options) {
|
|
|
123
124
|
throw new Error(`PDF generation failed: ${stderr}`, { cause: err });
|
|
124
125
|
}
|
|
125
126
|
finally {
|
|
127
|
+
// Fix 4: Silence ENOENT on temp file cleanup — file may already be gone on timeout
|
|
126
128
|
await unlink(tempHtmlPath).catch((err) => {
|
|
127
|
-
|
|
129
|
+
const e = err;
|
|
130
|
+
if (e.code !== 'ENOENT') {
|
|
131
|
+
console.error('[Planu] Failed to clean up temp HTML file:', err);
|
|
132
|
+
}
|
|
128
133
|
});
|
|
129
134
|
}
|
|
130
135
|
let pdfStat;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-to-pdf.js","sourceRoot":"","sources":["../../../src/engine/pdf/html-to-pdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAG1F,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,SAAS,wBAAwB,CAAC,OAAmB;IACnD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAEpD,MAAM,cAAc,GAAG,WAAW;QAChC,CAAC,CAAC;;;;;;EAMJ;QACE,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,YAAY,GAAG,SAAS;QAC5B,CAAC,CAAC;cACQ,SAAS;;;;;;;;;;;;EAYrB;QACE,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;;UAEC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;YACpD,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI;;EAExE,cAAc;;;;;;;;;;;;;EAad,YAAY;SACL,CAAC;AACV,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,GAAW;IAClD,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACnD,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;QAC1B,OAAO,GAAG,GAAG,IAAI,CAAC;IACpB,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,eAAe,CAAC,YAAoB,EAAE,UAAkB;IAC/D,MAAM,OAAO,GAAG,UAAU,YAAY,EAAE,CAAC;IACzC,OAAO;QACL,gBAAgB;QAChB,eAAe;QACf,cAAc;QACd,0BAA0B;QAC1B,yBAAyB;QACzB,sBAAsB;QACtB,gBAAgB;QAChB,gBAAgB;QAChB,iCAAiC;QACjC,kBAAkB,UAAU,EAAE;QAC9B,0BAA0B;QAC1B,yCAAyC;QACzC,6BAA6B;QAC7B,OAAO;KACR,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,QAAgB,EAChB,OAA6B;IAE7B,MAAM,IAAI,GAAe,EAAE,GAAG,mBAAmB,EAAE,GAAG,OAAO,EAAE,CAAC;IAChE,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE3C,
|
|
1
|
+
{"version":3,"file":"html-to-pdf.js","sourceRoot":"","sources":["../../../src/engine/pdf/html-to-pdf.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@planu/cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.11",
|
|
4
4
|
"description": "Planu — MCP Server for Spec Driven Development. Manages specs, estimations, reverse engineering, and auto-learning across any language/framework.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|