Skip to content

Commit a900442

Browse files
authored
feat(plugins/core): support new debug flags for puppeteer (lowlighter#1317)
1 parent 3a4559e commit a900442

File tree

3 files changed

+40
-6
lines changed

3 files changed

+40
-6
lines changed

source/app/metrics/index.mjs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,28 @@ export default async function metrics({login, q}, {graphql, rest, plugins, conf,
3838
}
3939
: null),
4040
}
41+
const {"debug.flags":dflags, "experimental.features":_experimental, "config.order":_partials} = imports.metadata.plugins.core.inputs({account:"bypass", q})
4142
const extras = {css: imports.metadata.plugins.core.extras("extras_css", {...conf.settings, error: false}) ? q["extras.css"] ?? "" : "", js: imports.metadata.plugins.core.extras("extras_js", {...conf.settings, error: false}) ? q["extras.js"] ?? "" : ""}
4243
const data = {q, animated: true, large: false, base: {}, config: {}, errors: [], warnings, plugins: {}, computed: {}, extras, postscripts: []}
43-
const experimental = new Set(decodeURIComponent(q["experimental.features"] ?? "").split(" ").map(x => x.trim().toLocaleLowerCase()).filter(x => x))
44-
if (conf.settings["debug.headless"])
44+
const experimental = new Set(_experimental)
45+
if (conf.settings["debug.headless"]) {
4546
imports.puppeteer.headless = false
47+
console.debug(`metrics/compute/${login} > disabled puppeteer headless mode`)
48+
}
49+
if ((conf.settings.debug)||(process.env.GITHUB_ACTIONS)) {
50+
if (dflags.includes("--puppeteer-disable-headless")) {
51+
imports.puppeteer.headless = false
52+
console.debug(`metrics/compute/${login} > disabled puppeteer headless mode`)
53+
}
54+
if (dflags.includes("--puppeteer-debug")) {
55+
process.env.DEBUG = "puppeteer:*"
56+
console.debug(`metrics/compute/${login} > enabled puppeteer debugging`)
57+
}
58+
if (dflags.find(flag => flag.startsWith("--puppeteer-wait-"))) {
59+
imports.puppeteer.events = dflags.filter(flag => flag.startsWith("--puppeteer-wait-")).map(flag => flag.replace("--puppeteer-wait-", ""))
60+
console.debug(`metrics/compute/${login} > overridden puppeteer wait events [${imports.puppeteer.events}]`)
61+
}
62+
}
4663

4764
//Metrics insights
4865
if (convert === "insights")
@@ -51,7 +68,7 @@ export default async function metrics({login, q}, {graphql, rest, plugins, conf,
5168
//Partial parts
5269
{
5370
data.partials = new Set([
54-
...decodeURIComponent(q["config.order"] ?? "").split(",").map(x => x.trim().toLocaleLowerCase()).filter(partial => partials.includes(partial)),
71+
..._partials.filter(partial => partials.includes(partial)),
5572
...partials,
5673
])
5774
console.debug(`metrics/compute/${login} > content order : ${[...data.partials]}`)

source/app/metrics/utils.mjs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ export const puppeteer = {
5252
})
5353
},
5454
headless: true,
55+
events: ["load", "domcontentloaded", "networkidle2"],
5556
}
5657

5758
/**Plural formatter */
@@ -492,7 +493,7 @@ export const svg = {
492493
console.debug("metrics/svg/pdf > loading svg")
493494
const page = await svg.resize.browser.newPage()
494495
page.on("console", ({_text: text}) => console.debug(`metrics/svg/pdf > puppeteer > ${text}`))
495-
await page.setContent(`<main class="markdown-body">${rendered}</main>`, {waitUntil: ["load", "domcontentloaded", "networkidle2"]})
496+
await page.setContent(`<main class="markdown-body">${rendered}</main>`, {waitUntil: puppeteer.events})
496497
console.debug("metrics/svg/pdf > loaded svg successfully")
497498
const margins = (Array.isArray(paddings) ? paddings : paddings.split(",")).join(" ")
498499
console.debug(`metrics/svg/pdf > margins set to ${margins}`)
@@ -537,7 +538,7 @@ export const svg = {
537538
page
538539
.on("console", message => console.debug(`metrics/svg/resize > puppeteer > ${message.text()}`))
539540
.on("pageerror", error => console.debug(`metrics/svg/resize > puppeteer > ${error.message}`))
540-
await page.setContent(rendered, {waitUntil: ["load", "domcontentloaded", "networkidle2"]})
541+
await page.setContent(rendered, {waitUntil: puppeteer.events})
541542
console.debug("metrics/svg/resize > loaded svg successfully")
542543
await page.addStyleTag({content: "body { margin: 0; padding: 0; }"})
543544
let mime = "image/svg+xml"
@@ -611,7 +612,7 @@ export const svg = {
611612
}
612613
//Compute hash
613614
const page = await svg.resize.browser.newPage()
614-
await page.setContent(rendered, {waitUntil: ["load", "domcontentloaded", "networkidle2"]})
615+
await page.setContent(rendered, {waitUntil: puppeteer.events})
615616
const data = await page.evaluate(async () => {
616617
document.querySelector("footer")?.remove()
617618
return document.querySelector("svg").outerHTML

source/plugins/core/metadata.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,13 +538,29 @@ inputs:
538538
- `--cakeday`: simulate registration anniversary
539539
- `--halloween`: enable halloween colors
540540
- `--error`: force render error
541+
- `--puppeteer-debug`: enable puppeteer debug mode\*
542+
- `--puppeteer-disable-headless`: disable puppeteer headless mode *(requires a graphical environment)*\*
543+
- `--puppeteer-wait-load`: override puppeteer wait events\*
544+
- `--puppeteer-wait-domcontentloaded`: override puppeteer wait events\*
545+
- `--puppeteer-wait-networkidle0`: override puppeteer wait events\*
546+
- `--puppeteer-wait-networkidle2`: override puppeteer wait events\*
547+
548+
> *\* 🌐 Web instances needs to have [`debug`](/source/plugins/core/README.md#debug) set in `settings.json` for these flags to be supported.*
549+
550+
> ⚠️ No backward compatibility is guaranteed for these features, they are only meant for debugging purposes.
541551
type: array
542552
format: space-separated
543553
default: ""
544554
values:
545555
- --cakeday
546556
- --halloween
547557
- --error
558+
- --puppeteer-debug
559+
- --puppeteer-disable-headless
560+
- --puppeteer-wait-load
561+
- --puppeteer-wait-domcontentloaded
562+
- --puppeteer-wait-networkidle0
563+
- --puppeteer-wait-networkidle2
548564
testing: yes
549565
preset: no
550566

0 commit comments

Comments
 (0)