single-file-cli 2.0.64 → 2.0.65
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/.github/workflows/docker-publish.yml +29 -0
- package/build.sh +1 -1
- package/deno.json +1 -1
- package/lib/cdp-client.js +33 -21
- package/lib/single-file-bundle.js +1 -1
- package/lib/version.js +1 -1
- package/options.js +28 -4
- package/package.json +1 -1
- package/single-file-cli-api.js +7 -4
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: Publish Docker image
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
docker:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
steps:
|
|
11
|
+
-
|
|
12
|
+
name: Set up QEMU
|
|
13
|
+
uses: docker/setup-qemu-action@v3
|
|
14
|
+
-
|
|
15
|
+
name: Set up Docker Buildx
|
|
16
|
+
uses: docker/setup-buildx-action@v3
|
|
17
|
+
-
|
|
18
|
+
name: Login to Docker Hub
|
|
19
|
+
uses: docker/login-action@v3
|
|
20
|
+
with:
|
|
21
|
+
username: ${{ secrets.DOCKER_USERNAME }}
|
|
22
|
+
password: ${{ secrets.DOCKER_TOKEN }}
|
|
23
|
+
-
|
|
24
|
+
name: Build and push
|
|
25
|
+
uses: docker/build-push-action@v6
|
|
26
|
+
with:
|
|
27
|
+
push: true
|
|
28
|
+
tags: ${{ secrets.DOCKER_USERNAME }}/singlefile:latest
|
|
29
|
+
platforms: linux/amd64,linux/arm64doc
|
package/build.sh
CHANGED
package/deno.json
CHANGED
package/lib/cdp-client.js
CHANGED
|
@@ -53,7 +53,15 @@ async function getPageData(options) {
|
|
|
53
53
|
let targetInfo;
|
|
54
54
|
try {
|
|
55
55
|
targetInfo = await CDP.createTarget(EMPTY_PAGE_URL);
|
|
56
|
-
const
|
|
56
|
+
const consoleMessages = [];
|
|
57
|
+
const { Browser, Security, Page, Emulation, Fetch, Network, Runtime, Debugger, Console } = new CDP(targetInfo);
|
|
58
|
+
if (options.consoleMessagesFile) {
|
|
59
|
+
await Console.enable();
|
|
60
|
+
Console.addEventListener("messageAdded", ({ params }) => {
|
|
61
|
+
const { message } = params;
|
|
62
|
+
consoleMessages.push(message);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
57
65
|
if (options.browserStartMinimized) {
|
|
58
66
|
const { windowId, bounds } = await Browser.getWindowForTarget({ targetId: targetInfo.id });
|
|
59
67
|
if (bounds.windowState !== MINIMIZED_WINDOW_STATE) {
|
|
@@ -182,27 +190,7 @@ async function getPageData(options) {
|
|
|
182
190
|
loadPage({ Page, Runtime }, options),
|
|
183
191
|
options.browserDebug ? waitForDebuggerReady({ Debugger }) : Promise.resolve()
|
|
184
192
|
]);
|
|
185
|
-
if (options.browserWaitDelay) {
|
|
186
|
-
await new Promise(resolve => setTimeout(resolve, options.browserWaitDelay));
|
|
187
|
-
}
|
|
188
193
|
await Runtime.addBinding({ name: SET_PAGE_DATA_FUNCTION_NAME, executionContextId: contextId });
|
|
189
|
-
const pageDataPromise = new Promise(resolve => {
|
|
190
|
-
let pageDataResponse = "";
|
|
191
|
-
Runtime.addEventListener("bindingCalled", async ({ params }) => {
|
|
192
|
-
if (params.name === SET_PAGE_DATA_FUNCTION_NAME) {
|
|
193
|
-
const { payload } = params;
|
|
194
|
-
if (payload.length) {
|
|
195
|
-
pageDataResponse += payload;
|
|
196
|
-
} else {
|
|
197
|
-
const result = JSON.parse(pageDataResponse);
|
|
198
|
-
if (result.content instanceof Array) {
|
|
199
|
-
result.content = new Uint8Array(result.content);
|
|
200
|
-
}
|
|
201
|
-
resolve(result);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
});
|
|
205
|
-
});
|
|
206
194
|
if (options.embedScreenshot && options.compressContent) {
|
|
207
195
|
await Runtime.addBinding({ name: CAPTURE_SCREENSHOT_FUNCTION_NAME, executionContextId: contextId });
|
|
208
196
|
Runtime.addEventListener("bindingCalled", async ({ params }) => {
|
|
@@ -246,6 +234,26 @@ async function getPageData(options) {
|
|
|
246
234
|
}
|
|
247
235
|
});
|
|
248
236
|
}
|
|
237
|
+
const pageDataPromise = new Promise(resolve => {
|
|
238
|
+
let pageDataResponse = "";
|
|
239
|
+
Runtime.addEventListener("bindingCalled", async ({ params }) => {
|
|
240
|
+
if (params.name === SET_PAGE_DATA_FUNCTION_NAME) {
|
|
241
|
+
const { payload } = params;
|
|
242
|
+
if (payload.length) {
|
|
243
|
+
pageDataResponse += payload;
|
|
244
|
+
} else {
|
|
245
|
+
const result = JSON.parse(pageDataResponse);
|
|
246
|
+
if (result.content instanceof Array) {
|
|
247
|
+
result.content = new Uint8Array(result.content);
|
|
248
|
+
}
|
|
249
|
+
resolve(result);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
if (options.browserWaitDelay) {
|
|
255
|
+
await new Promise(resolve => setTimeout(resolve, options.browserWaitDelay));
|
|
256
|
+
}
|
|
249
257
|
const { result } = await Runtime.evaluate({
|
|
250
258
|
expression: `(${getPageDataScriptSource.toString()})(${JSON.stringify(options)},${JSON.stringify([SET_SCREENSHOT_FUNCTION_NAME, SET_PDF_FUNCTION_NAME, SET_PAGE_DATA_FUNCTION_NAME, CAPTURE_SCREENSHOT_FUNCTION_NAME, PRINT_TO_PDF_FUNCTION_NAME])})`,
|
|
251
259
|
awaitPromise: true,
|
|
@@ -257,6 +265,10 @@ async function getPageData(options) {
|
|
|
257
265
|
throw new Error(description);
|
|
258
266
|
}
|
|
259
267
|
const pageData = await pageDataPromise;
|
|
268
|
+
if (options.consoleMessagesFile) {
|
|
269
|
+
await Console.disable();
|
|
270
|
+
pageData.consoleMessages = consoleMessages;
|
|
271
|
+
}
|
|
260
272
|
Object.assign(pageData, httpInfo);
|
|
261
273
|
return pageData;
|
|
262
274
|
} catch (error) {
|