docgen-utils 1.0.32 → 1.0.34
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/bundle.js +215 -48
- package/dist/bundle.min.js +101 -101
- package/dist/cli.js +170 -95
- package/dist/packages/cli/commands/export-slides.d.ts.map +1 -1
- package/dist/packages/cli/commands/export-slides.js +88 -85
- package/dist/packages/cli/commands/export-slides.js.map +1 -1
- package/dist/packages/shared/fetch-with-proxy.d.ts +6 -1
- package/dist/packages/shared/fetch-with-proxy.d.ts.map +1 -1
- package/dist/packages/shared/fetch-with-proxy.js +103 -30
- package/dist/packages/shared/fetch-with-proxy.js.map +1 -1
- package/dist/packages/slides/convert.js +3 -3
- package/dist/packages/slides/parse.d.ts.map +1 -1
- package/dist/packages/slides/parse.js +211 -8
- package/dist/packages/slides/parse.js.map +1 -1
- package/package.json +3 -2
package/dist/cli.js
CHANGED
|
@@ -74935,6 +74935,70 @@ import * as http from "node:http";
|
|
|
74935
74935
|
import * as tls from "node:tls";
|
|
74936
74936
|
import { URL } from "node:url";
|
|
74937
74937
|
var userAgent = "Mozilla/5.0 (compatible; Copilot/1.0)";
|
|
74938
|
+
var MAX_REDIRECTS = 5;
|
|
74939
|
+
function fetchViaForwardProxy(proxy, targetUrl, redirectCount = 0) {
|
|
74940
|
+
return new Promise((resolve5, reject) => {
|
|
74941
|
+
const target = new URL(targetUrl);
|
|
74942
|
+
const req = http.request(
|
|
74943
|
+
{
|
|
74944
|
+
host: proxy.hostname,
|
|
74945
|
+
port: Number(proxy.port) || 80,
|
|
74946
|
+
method: "GET",
|
|
74947
|
+
path: targetUrl,
|
|
74948
|
+
// Full URL as path for forward proxy
|
|
74949
|
+
headers: {
|
|
74950
|
+
Host: target.hostname,
|
|
74951
|
+
"User-Agent": userAgent,
|
|
74952
|
+
Connection: "close"
|
|
74953
|
+
}
|
|
74954
|
+
},
|
|
74955
|
+
(res) => {
|
|
74956
|
+
const chunks = [];
|
|
74957
|
+
res.on("data", (chunk) => chunks.push(chunk));
|
|
74958
|
+
res.on("end", () => {
|
|
74959
|
+
const statusCode = res.statusCode ?? 0;
|
|
74960
|
+
if (statusCode >= 301 && statusCode <= 308 && statusCode !== 304 && res.headers.location) {
|
|
74961
|
+
if (redirectCount >= MAX_REDIRECTS) {
|
|
74962
|
+
reject(new Error(`Too many redirects (max ${MAX_REDIRECTS})`));
|
|
74963
|
+
return;
|
|
74964
|
+
}
|
|
74965
|
+
const redirectUrl = new URL(
|
|
74966
|
+
res.headers.location,
|
|
74967
|
+
targetUrl
|
|
74968
|
+
).toString();
|
|
74969
|
+
resolve5(fetchViaForwardProxy(proxy, redirectUrl, redirectCount + 1));
|
|
74970
|
+
return;
|
|
74971
|
+
}
|
|
74972
|
+
const body = Buffer.concat(chunks);
|
|
74973
|
+
const headers = {};
|
|
74974
|
+
for (const [key2, value] of Object.entries(res.headers)) {
|
|
74975
|
+
if (typeof value === "string") {
|
|
74976
|
+
headers[key2.toLowerCase()] = value;
|
|
74977
|
+
} else if (Array.isArray(value)) {
|
|
74978
|
+
headers[key2.toLowerCase()] = value.join(", ");
|
|
74979
|
+
}
|
|
74980
|
+
}
|
|
74981
|
+
resolve5({
|
|
74982
|
+
ok: statusCode >= 200 && statusCode < 300,
|
|
74983
|
+
status: statusCode,
|
|
74984
|
+
statusText: res.statusMessage ?? "",
|
|
74985
|
+
headers: new Headers(headers),
|
|
74986
|
+
arrayBuffer: () => Promise.resolve(
|
|
74987
|
+
body.buffer.slice(
|
|
74988
|
+
body.byteOffset,
|
|
74989
|
+
body.byteOffset + body.byteLength
|
|
74990
|
+
)
|
|
74991
|
+
),
|
|
74992
|
+
text: () => Promise.resolve(body.toString("utf-8"))
|
|
74993
|
+
});
|
|
74994
|
+
});
|
|
74995
|
+
res.on("error", reject);
|
|
74996
|
+
}
|
|
74997
|
+
);
|
|
74998
|
+
req.on("error", reject);
|
|
74999
|
+
req.end();
|
|
75000
|
+
});
|
|
75001
|
+
}
|
|
74938
75002
|
function connectThroughProxy(proxy, targetHost, targetPort) {
|
|
74939
75003
|
return new Promise((resolve5, reject) => {
|
|
74940
75004
|
const req = http.request({
|
|
@@ -75079,22 +75143,33 @@ function parseHttpResponse(tlsSocket) {
|
|
|
75079
75143
|
});
|
|
75080
75144
|
});
|
|
75081
75145
|
}
|
|
75082
|
-
async function
|
|
75083
|
-
const
|
|
75084
|
-
|
|
75085
|
-
|
|
75086
|
-
|
|
75087
|
-
const target = new URL(url);
|
|
75088
|
-
const rawSocket = await connectThroughProxy(proxy, target.hostname, 443);
|
|
75089
|
-
const tlsSocket = await upgradeTls(rawSocket, target.hostname, false);
|
|
75090
|
-
const requestLine = `GET ${target.pathname}${target.search} HTTP/1.1\r
|
|
75146
|
+
async function fetchViaConnectTunnel(proxy, targetUrl) {
|
|
75147
|
+
const target = new URL(targetUrl);
|
|
75148
|
+
const rawSocket = await connectThroughProxy(proxy, target.hostname, 443);
|
|
75149
|
+
const tlsSocket = await upgradeTls(rawSocket, target.hostname, false);
|
|
75150
|
+
const requestLine = `GET ${target.pathname}${target.search} HTTP/1.1\r
|
|
75091
75151
|
Host: ${target.hostname}\r
|
|
75092
75152
|
User-Agent: ${userAgent}\r
|
|
75093
75153
|
Connection: close\r
|
|
75094
75154
|
\r
|
|
75095
75155
|
`;
|
|
75096
|
-
|
|
75097
|
-
|
|
75156
|
+
tlsSocket.write(requestLine);
|
|
75157
|
+
return parseHttpResponse(tlsSocket);
|
|
75158
|
+
}
|
|
75159
|
+
async function fetchWithProxy(url) {
|
|
75160
|
+
const proxyUrl = process.env.HTTPS_PROXY || process.env.HTTP_PROXY || process.env.https_proxy || process.env.http_proxy;
|
|
75161
|
+
if (proxyUrl) {
|
|
75162
|
+
const normalizedProxyUrl = proxyUrl.includes("://") ? proxyUrl : `http://${proxyUrl}`;
|
|
75163
|
+
const proxy = new URL(normalizedProxyUrl);
|
|
75164
|
+
try {
|
|
75165
|
+
return await fetchViaForwardProxy(proxy, url);
|
|
75166
|
+
} catch (forwardError) {
|
|
75167
|
+
try {
|
|
75168
|
+
return await fetchViaConnectTunnel(proxy, url);
|
|
75169
|
+
} catch {
|
|
75170
|
+
throw forwardError;
|
|
75171
|
+
}
|
|
75172
|
+
}
|
|
75098
75173
|
}
|
|
75099
75174
|
return fetch(url, { headers: { "User-Agent": userAgent } });
|
|
75100
75175
|
}
|
|
@@ -81069,7 +81144,7 @@ async function addElementsToSlide(elements, slide, pres) {
|
|
|
81069
81144
|
if (el.type === "slideBackgroundImage") {
|
|
81070
81145
|
const imgSrc = getCachedImageSource(el.src);
|
|
81071
81146
|
if (!imgSrc) {
|
|
81072
|
-
console.warn(`Skipping slide background image (
|
|
81147
|
+
console.warn(`Skipping slide background image (fetch failed): ${el.src}`);
|
|
81073
81148
|
continue;
|
|
81074
81149
|
}
|
|
81075
81150
|
const imageOptions = {
|
|
@@ -81116,7 +81191,7 @@ async function addElementsToSlide(elements, slide, pres) {
|
|
|
81116
81191
|
if (el.type === "image") {
|
|
81117
81192
|
const imgSrc = getCachedImageSource(el.src);
|
|
81118
81193
|
if (!imgSrc) {
|
|
81119
|
-
console.warn(`Skipping image (
|
|
81194
|
+
console.warn(`Skipping image (fetch failed): ${el.src}`);
|
|
81120
81195
|
continue;
|
|
81121
81196
|
}
|
|
81122
81197
|
const imageOptions = {
|
|
@@ -81151,7 +81226,7 @@ async function addElementsToSlide(elements, slide, pres) {
|
|
|
81151
81226
|
} else if (el.type === "backgroundImage") {
|
|
81152
81227
|
const imgSrc = getCachedImageSource(el.src);
|
|
81153
81228
|
if (!imgSrc) {
|
|
81154
|
-
console.warn(`Skipping background image (
|
|
81229
|
+
console.warn(`Skipping background image (fetch failed): ${el.src}`);
|
|
81155
81230
|
continue;
|
|
81156
81231
|
}
|
|
81157
81232
|
const imageOptions = {
|
|
@@ -81513,11 +81588,14 @@ async function exportSlides(filePaths, outDir, outputName, pdf = false) {
|
|
|
81513
81588
|
const bundleJs = fs5.readFileSync(bundlePath, "utf-8");
|
|
81514
81589
|
const imageCache = /* @__PURE__ */ new Map();
|
|
81515
81590
|
const imageFetchPromises = /* @__PURE__ */ new Map();
|
|
81591
|
+
const failedImages = /* @__PURE__ */ new Set();
|
|
81516
81592
|
function startImageFetch(url) {
|
|
81517
81593
|
if (imageFetchPromises.has(url)) return;
|
|
81518
81594
|
const promise = fetchImageAsDataUrlNode(url).then((dataUrl) => {
|
|
81519
81595
|
imageCache.set(url, dataUrl);
|
|
81520
|
-
}).catch(() => {
|
|
81596
|
+
}).catch((err) => {
|
|
81597
|
+
console.error(` Failed to fetch image: ${url} - ${err.message}`);
|
|
81598
|
+
failedImages.add(url);
|
|
81521
81599
|
});
|
|
81522
81600
|
imageFetchPromises.set(url, promise);
|
|
81523
81601
|
}
|
|
@@ -81582,99 +81660,96 @@ async function exportSlides(filePaths, outDir, outputName, pdf = false) {
|
|
|
81582
81660
|
}
|
|
81583
81661
|
return route.continue();
|
|
81584
81662
|
});
|
|
81585
|
-
const
|
|
81586
|
-
|
|
81587
|
-
|
|
81588
|
-
const
|
|
81589
|
-
|
|
81590
|
-
|
|
81591
|
-
|
|
81592
|
-
|
|
81593
|
-
|
|
81594
|
-
|
|
81595
|
-
|
|
81596
|
-
|
|
81597
|
-
|
|
81598
|
-
|
|
81599
|
-
|
|
81600
|
-
|
|
81601
|
-
|
|
81602
|
-
|
|
81603
|
-
|
|
81604
|
-
const slideDataJson = await page.evaluate(`(async function() {
|
|
81605
|
-
const docgen = window.docgen;
|
|
81606
|
-
const html = document.documentElement.outerHTML;
|
|
81607
|
-
const transformedHtml = docgen.transformHtmlForPptx(html);
|
|
81663
|
+
const page = await context.newPage();
|
|
81664
|
+
page.setDefaultTimeout(6e4);
|
|
81665
|
+
for (let index = 0; index < absolutePaths.length; index++) {
|
|
81666
|
+
const slidePath = absolutePaths[index];
|
|
81667
|
+
await page.goto(`file://${slidePath}`, { waitUntil: "domcontentloaded" });
|
|
81668
|
+
await page.addScriptTag({ content: bundleJs });
|
|
81669
|
+
await page.waitForFunction("typeof window.docgen !== 'undefined'");
|
|
81670
|
+
await page.evaluate(`(async function() {
|
|
81671
|
+
if (document.fonts && document.fonts.ready) {
|
|
81672
|
+
await Promise.race([
|
|
81673
|
+
document.fonts.ready,
|
|
81674
|
+
new Promise(r => setTimeout(r, 500))
|
|
81675
|
+
]);
|
|
81676
|
+
}
|
|
81677
|
+
})()`);
|
|
81678
|
+
const slideDataJson = await page.evaluate(`(async function() {
|
|
81679
|
+
const docgen = window.docgen;
|
|
81680
|
+
const html = document.documentElement.outerHTML;
|
|
81681
|
+
const transformedHtml = docgen.transformHtmlForPptx(html);
|
|
81608
81682
|
|
|
81609
|
-
|
|
81610
|
-
|
|
81683
|
+
const iframe = document.createElement('iframe');
|
|
81684
|
+
iframe.style.cssText = 'position:absolute;left:-9999px;width:960px;height:540px;border:none;';
|
|
81611
81685
|
|
|
81612
|
-
|
|
81613
|
-
|
|
81686
|
+
const blob = new Blob([transformedHtml], { type: 'text/html' });
|
|
81687
|
+
const blobUrl = URL.createObjectURL(blob);
|
|
81614
81688
|
|
|
81615
|
-
|
|
81616
|
-
|
|
81617
|
-
|
|
81689
|
+
return new Promise((resolve) => {
|
|
81690
|
+
iframe.onload = async () => {
|
|
81691
|
+
URL.revokeObjectURL(blobUrl);
|
|
81618
81692
|
|
|
81619
|
-
|
|
81620
|
-
|
|
81693
|
+
const iframeDoc = iframe.contentDocument || iframe.contentWindow.document;
|
|
81694
|
+
const win = iframe.contentWindow;
|
|
81621
81695
|
|
|
81622
|
-
|
|
81623
|
-
|
|
81624
|
-
|
|
81625
|
-
|
|
81626
|
-
|
|
81627
|
-
|
|
81696
|
+
if (win.document.fonts && win.document.fonts.ready) {
|
|
81697
|
+
await Promise.race([
|
|
81698
|
+
win.document.fonts.ready,
|
|
81699
|
+
new Promise(r => setTimeout(r, 500))
|
|
81700
|
+
]);
|
|
81701
|
+
}
|
|
81628
81702
|
|
|
81629
|
-
|
|
81630
|
-
|
|
81631
|
-
|
|
81632
|
-
|
|
81633
|
-
|
|
81634
|
-
|
|
81635
|
-
|
|
81636
|
-
|
|
81637
|
-
|
|
81703
|
+
try {
|
|
81704
|
+
const slideData = docgen.parseSlideHtml(iframeDoc);
|
|
81705
|
+
iframe.parentNode.removeChild(iframe);
|
|
81706
|
+
resolve(JSON.stringify(slideData));
|
|
81707
|
+
} catch(e) {
|
|
81708
|
+
iframe.parentNode.removeChild(iframe);
|
|
81709
|
+
resolve(JSON.stringify({ error: e.message }));
|
|
81710
|
+
}
|
|
81711
|
+
};
|
|
81638
81712
|
|
|
81639
|
-
|
|
81640
|
-
|
|
81641
|
-
|
|
81642
|
-
|
|
81643
|
-
|
|
81713
|
+
iframe.onerror = () => {
|
|
81714
|
+
URL.revokeObjectURL(blobUrl);
|
|
81715
|
+
iframe.parentNode?.removeChild(iframe);
|
|
81716
|
+
resolve(JSON.stringify({ error: 'iframe load error' }));
|
|
81717
|
+
};
|
|
81644
81718
|
|
|
81645
|
-
|
|
81646
|
-
|
|
81719
|
+
iframe.src = blobUrl;
|
|
81720
|
+
document.body.appendChild(iframe);
|
|
81647
81721
|
|
|
81648
|
-
|
|
81649
|
-
|
|
81650
|
-
|
|
81651
|
-
|
|
81652
|
-
|
|
81653
|
-
|
|
81654
|
-
|
|
81655
|
-
|
|
81656
|
-
|
|
81657
|
-
|
|
81658
|
-
|
|
81659
|
-
|
|
81660
|
-
|
|
81661
|
-
|
|
81662
|
-
|
|
81663
|
-
|
|
81664
|
-
|
|
81665
|
-
|
|
81666
|
-
|
|
81667
|
-
|
|
81668
|
-
|
|
81669
|
-
|
|
81670
|
-
|
|
81671
|
-
queueGeneration();
|
|
81672
|
-
});
|
|
81673
|
-
await Promise.all(batchPromises);
|
|
81722
|
+
setTimeout(() => {
|
|
81723
|
+
if (iframe.parentNode) {
|
|
81724
|
+
iframe.parentNode.removeChild(iframe);
|
|
81725
|
+
resolve(JSON.stringify({ error: 'timeout' }));
|
|
81726
|
+
}
|
|
81727
|
+
}, 10000);
|
|
81728
|
+
});
|
|
81729
|
+
})()`);
|
|
81730
|
+
if (!slideDataJson) {
|
|
81731
|
+
throw new Error(`Failed to parse slide ${index + 1}: ${slidePath} - null result`);
|
|
81732
|
+
}
|
|
81733
|
+
const parsed = JSON.parse(slideDataJson);
|
|
81734
|
+
if (typeof parsed === "object" && "error" in parsed) {
|
|
81735
|
+
throw new Error(`Failed to parse slide ${index + 1}: ${slidePath} - ${parsed.error}`);
|
|
81736
|
+
}
|
|
81737
|
+
const slideData = parsed;
|
|
81738
|
+
parsedCount++;
|
|
81739
|
+
console.log(` Parsed ${parsedCount}/${absolutePaths.length}`);
|
|
81740
|
+
const urls = collectImageUrls(slideData);
|
|
81741
|
+
urls.forEach((url) => startImageFetch(url));
|
|
81742
|
+
const imagesReady = waitForSlideImages(slideData);
|
|
81743
|
+
parsedSlides.push({ index, slideData, imagesReady });
|
|
81744
|
+
queueGeneration();
|
|
81674
81745
|
}
|
|
81746
|
+
await page.close();
|
|
81675
81747
|
await context.close();
|
|
81676
81748
|
await browser2.close();
|
|
81677
81749
|
await generationChain;
|
|
81750
|
+
if (failedImages.size > 0) {
|
|
81751
|
+
console.error(`Warning: Failed to fetch ${failedImages.size} image(s)`);
|
|
81752
|
+
}
|
|
81678
81753
|
const base64 = await pptx.write({ outputType: "base64" });
|
|
81679
81754
|
const pptxBuffer = Buffer.from(base64, "base64");
|
|
81680
81755
|
const firstBaseName = path5.basename(absolutePaths[0], ".html");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-slides.d.ts","sourceRoot":"","sources":["../../../../packages/cli/commands/export-slides.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA6EH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"export-slides.d.ts","sourceRoot":"","sources":["../../../../packages/cli/commands/export-slides.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA6EH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA2QhI"}
|
|
@@ -101,13 +101,18 @@ export async function exportSlides(filePaths, outDir, outputName, pdf = false) {
|
|
|
101
101
|
// Shared image cache - populated as images are fetched
|
|
102
102
|
const imageCache = new Map();
|
|
103
103
|
const imageFetchPromises = new Map();
|
|
104
|
+
// Track failed image fetches
|
|
105
|
+
const failedImages = new Set();
|
|
104
106
|
// Start fetching an image if not already fetching
|
|
105
107
|
function startImageFetch(url) {
|
|
106
108
|
if (imageFetchPromises.has(url))
|
|
107
109
|
return;
|
|
108
110
|
const promise = fetchImageAsDataUrlNode(url)
|
|
109
111
|
.then(dataUrl => { imageCache.set(url, dataUrl); })
|
|
110
|
-
.catch(() => {
|
|
112
|
+
.catch((err) => {
|
|
113
|
+
console.error(` Failed to fetch image: ${url} - ${err.message}`);
|
|
114
|
+
failedImages.add(url);
|
|
115
|
+
});
|
|
111
116
|
imageFetchPromises.set(url, promise);
|
|
112
117
|
}
|
|
113
118
|
// Wait for all images needed by a slide
|
|
@@ -183,104 +188,102 @@ export async function exportSlides(filePaths, outDir, outputName, pdf = false) {
|
|
|
183
188
|
}
|
|
184
189
|
return route.continue();
|
|
185
190
|
});
|
|
186
|
-
//
|
|
187
|
-
const
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
const
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
const slideDataJson = await page.evaluate(`(async function() {
|
|
207
|
-
const docgen = window.docgen;
|
|
208
|
-
const html = document.documentElement.outerHTML;
|
|
209
|
-
const transformedHtml = docgen.transformHtmlForPptx(html);
|
|
191
|
+
// Use a single page and process slides sequentially
|
|
192
|
+
const page = await context.newPage();
|
|
193
|
+
page.setDefaultTimeout(60000);
|
|
194
|
+
for (let index = 0; index < absolutePaths.length; index++) {
|
|
195
|
+
const slidePath = absolutePaths[index];
|
|
196
|
+
await page.goto(`file://${slidePath}`, { waitUntil: "domcontentloaded" });
|
|
197
|
+
await page.addScriptTag({ content: bundleJs });
|
|
198
|
+
await page.waitForFunction("typeof window.docgen !== 'undefined'");
|
|
199
|
+
await page.evaluate(`(async function() {
|
|
200
|
+
if (document.fonts && document.fonts.ready) {
|
|
201
|
+
await Promise.race([
|
|
202
|
+
document.fonts.ready,
|
|
203
|
+
new Promise(r => setTimeout(r, 500))
|
|
204
|
+
]);
|
|
205
|
+
}
|
|
206
|
+
})()`);
|
|
207
|
+
const slideDataJson = await page.evaluate(`(async function() {
|
|
208
|
+
const docgen = window.docgen;
|
|
209
|
+
const html = document.documentElement.outerHTML;
|
|
210
|
+
const transformedHtml = docgen.transformHtmlForPptx(html);
|
|
210
211
|
|
|
211
|
-
|
|
212
|
-
|
|
212
|
+
const iframe = document.createElement('iframe');
|
|
213
|
+
iframe.style.cssText = 'position:absolute;left:-9999px;width:960px;height:540px;border:none;';
|
|
213
214
|
|
|
214
|
-
|
|
215
|
-
|
|
215
|
+
const blob = new Blob([transformedHtml], { type: 'text/html' });
|
|
216
|
+
const blobUrl = URL.createObjectURL(blob);
|
|
216
217
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
218
|
+
return new Promise((resolve) => {
|
|
219
|
+
iframe.onload = async () => {
|
|
220
|
+
URL.revokeObjectURL(blobUrl);
|
|
220
221
|
|
|
221
|
-
|
|
222
|
-
|
|
222
|
+
const iframeDoc = iframe.contentDocument || iframe.contentWindow.document;
|
|
223
|
+
const win = iframe.contentWindow;
|
|
223
224
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
225
|
+
if (win.document.fonts && win.document.fonts.ready) {
|
|
226
|
+
await Promise.race([
|
|
227
|
+
win.document.fonts.ready,
|
|
228
|
+
new Promise(r => setTimeout(r, 500))
|
|
229
|
+
]);
|
|
230
|
+
}
|
|
230
231
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
232
|
+
try {
|
|
233
|
+
const slideData = docgen.parseSlideHtml(iframeDoc);
|
|
234
|
+
iframe.parentNode.removeChild(iframe);
|
|
235
|
+
resolve(JSON.stringify(slideData));
|
|
236
|
+
} catch(e) {
|
|
237
|
+
iframe.parentNode.removeChild(iframe);
|
|
238
|
+
resolve(JSON.stringify({ error: e.message }));
|
|
239
|
+
}
|
|
240
|
+
};
|
|
240
241
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
242
|
+
iframe.onerror = () => {
|
|
243
|
+
URL.revokeObjectURL(blobUrl);
|
|
244
|
+
iframe.parentNode?.removeChild(iframe);
|
|
245
|
+
resolve(JSON.stringify({ error: 'iframe load error' }));
|
|
246
|
+
};
|
|
246
247
|
|
|
247
|
-
|
|
248
|
-
|
|
248
|
+
iframe.src = blobUrl;
|
|
249
|
+
document.body.appendChild(iframe);
|
|
249
250
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
queueGeneration();
|
|
277
|
-
});
|
|
278
|
-
await Promise.all(batchPromises);
|
|
251
|
+
setTimeout(() => {
|
|
252
|
+
if (iframe.parentNode) {
|
|
253
|
+
iframe.parentNode.removeChild(iframe);
|
|
254
|
+
resolve(JSON.stringify({ error: 'timeout' }));
|
|
255
|
+
}
|
|
256
|
+
}, 10000);
|
|
257
|
+
});
|
|
258
|
+
})()`);
|
|
259
|
+
if (!slideDataJson) {
|
|
260
|
+
throw new Error(`Failed to parse slide ${index + 1}: ${slidePath} - null result`);
|
|
261
|
+
}
|
|
262
|
+
const parsed = JSON.parse(slideDataJson);
|
|
263
|
+
if (typeof parsed === 'object' && 'error' in parsed) {
|
|
264
|
+
throw new Error(`Failed to parse slide ${index + 1}: ${slidePath} - ${parsed.error}`);
|
|
265
|
+
}
|
|
266
|
+
const slideData = parsed;
|
|
267
|
+
parsedCount++;
|
|
268
|
+
console.log(` Parsed ${parsedCount}/${absolutePaths.length}`);
|
|
269
|
+
// Start fetching images for this slide immediately
|
|
270
|
+
const urls = collectImageUrls(slideData);
|
|
271
|
+
urls.forEach(url => startImageFetch(url));
|
|
272
|
+
// Create promise that resolves when all images for this slide are ready
|
|
273
|
+
const imagesReady = waitForSlideImages(slideData);
|
|
274
|
+
// Add to queue and trigger generation
|
|
275
|
+
parsedSlides.push({ index, slideData, imagesReady });
|
|
276
|
+
queueGeneration();
|
|
279
277
|
}
|
|
278
|
+
await page.close();
|
|
280
279
|
await context.close();
|
|
281
280
|
await browser.close();
|
|
282
281
|
// Wait for all slide generation to complete
|
|
283
282
|
await generationChain;
|
|
283
|
+
// Report any images that failed to fetch
|
|
284
|
+
if (failedImages.size > 0) {
|
|
285
|
+
console.error(`Warning: Failed to fetch ${failedImages.size} image(s)`);
|
|
286
|
+
}
|
|
284
287
|
// Write final PPTX
|
|
285
288
|
const base64 = await pptx.write({ outputType: "base64" });
|
|
286
289
|
const pptxBuffer = Buffer.from(base64, "base64");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-slides.js","sourceRoot":"","sources":["../../../../packages/cli/commands/export-slides.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"export-slides.js","sourceRoot":"","sources":["../../../../packages/cli/commands/export-slides.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,12 @@ interface ProxyResponse {
|
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
10
|
* Fetch a URL with optional proxy support.
|
|
11
|
-
*
|
|
11
|
+
*
|
|
12
|
+
* Supports two proxy modes:
|
|
13
|
+
* 1. Forward proxy (default): Sends full URL to proxy, proxy handles TLS.
|
|
14
|
+
* Works with most proxies (Squid, corporate proxies, etc.)
|
|
15
|
+
* 2. CONNECT tunnel (fallback): Establishes tunnel, client handles TLS.
|
|
16
|
+
* Used when forward proxy fails or for CONNECT-only proxies.
|
|
12
17
|
*
|
|
13
18
|
* @param url - The URL to fetch
|
|
14
19
|
* @returns A Promise resolving to a ProxyResponse or native Response
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-with-proxy.d.ts","sourceRoot":"","sources":["../../../packages/shared/fetch-with-proxy.ts"],"names":[],"mappings":"AASA,UAAU,aAAa;IACrB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"fetch-with-proxy.d.ts","sourceRoot":"","sources":["../../../packages/shared/fetch-with-proxy.ts"],"names":[],"mappings":"AASA,UAAU,aAAa;IACrB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACzB;AAoTD;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,aAAa,GAAG,QAAQ,CAAC,CA8BnC"}
|