doc-detective 4.15.2 → 4.16.0

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.
Files changed (35) hide show
  1. package/dist/common/src/schemas/schemas.json +280 -0
  2. package/dist/common/src/types/generated/config_v3.d.ts +16 -0
  3. package/dist/common/src/types/generated/config_v3.d.ts.map +1 -1
  4. package/dist/common/src/types/generated/context_v3.d.ts +12 -0
  5. package/dist/common/src/types/generated/context_v3.d.ts.map +1 -1
  6. package/dist/common/src/types/generated/report_v3.d.ts +12 -0
  7. package/dist/common/src/types/generated/report_v3.d.ts.map +1 -1
  8. package/dist/common/src/types/generated/resolvedTests_v3.d.ts +28 -0
  9. package/dist/common/src/types/generated/resolvedTests_v3.d.ts.map +1 -1
  10. package/dist/common/src/types/generated/spec_v3.d.ts +12 -0
  11. package/dist/common/src/types/generated/spec_v3.d.ts.map +1 -1
  12. package/dist/common/src/types/generated/test_v3.d.ts +16 -0
  13. package/dist/common/src/types/generated/test_v3.d.ts.map +1 -1
  14. package/dist/core/config.d.ts +28 -1
  15. package/dist/core/config.d.ts.map +1 -1
  16. package/dist/core/config.js +90 -13
  17. package/dist/core/config.js.map +1 -1
  18. package/dist/core/resolveTests.d.ts.map +1 -1
  19. package/dist/core/resolveTests.js +5 -0
  20. package/dist/core/resolveTests.js.map +1 -1
  21. package/dist/core/tests.d.ts +65 -2
  22. package/dist/core/tests.d.ts.map +1 -1
  23. package/dist/core/tests.js +312 -77
  24. package/dist/core/tests.js.map +1 -1
  25. package/dist/hints/hints.js +1 -1
  26. package/dist/hints/hints.js.map +1 -1
  27. package/dist/index.cjs +1190 -569
  28. package/dist/runtime/browsers.d.ts +39 -0
  29. package/dist/runtime/browsers.d.ts.map +1 -1
  30. package/dist/runtime/browsers.js +269 -39
  31. package/dist/runtime/browsers.js.map +1 -1
  32. package/dist/utils.d.ts.map +1 -1
  33. package/dist/utils.js +18 -0
  34. package/dist/utils.js.map +1 -1
  35. package/package.json +1 -1
@@ -1,6 +1,34 @@
1
1
  import { type CacheDirContext } from "./cacheDir.js";
2
2
  import { type Logger } from "./loader.js";
3
3
  export type BrowserAssetName = "chrome" | "firefox" | "chromedriver" | "geckodriver";
4
+ /** Outcome of executing a driver binary to confirm it actually works. */
5
+ export interface DriverVerifyResult {
6
+ ok: boolean;
7
+ version?: string;
8
+ error?: string;
9
+ }
10
+ /**
11
+ * Injectable executor for `verifyDriverBinary`. Resolves with the child's
12
+ * exit code (null when the process couldn't be spawned) plus its captured
13
+ * output. Tests inject a fake; production uses {@link defaultDriverExec}.
14
+ */
15
+ export type DriverExec = (binaryPath: string, args: string[], timeoutMs: number) => Promise<{
16
+ code: number | null;
17
+ stdout: string;
18
+ stderr: string;
19
+ }>;
20
+ /**
21
+ * Execute a driver binary and confirm it is functional — i.e. it runs and
22
+ * reports a parseable version. This is the single guard that stops a
23
+ * present-but-broken driver (e.g. a partially downloaded geckodriver on
24
+ * Windows that exists on disk but doesn't run) from being trusted as
25
+ * installed. Driver-agnostic: works for geckodriver, chromedriver, and
26
+ * safaridriver.
27
+ */
28
+ export declare function verifyDriverBinary(driverName: string, binaryPath: string, options?: {
29
+ exec?: DriverExec;
30
+ timeoutMs?: number;
31
+ }): Promise<DriverVerifyResult>;
4
32
  /**
5
33
  * Map a browser name to the installable asset(s) it needs to drive — the
6
34
  * browser binary plus its WebDriver. This is the single source of truth the
@@ -44,6 +72,8 @@ export interface BrowserDeps {
44
72
  browsersModule?: any;
45
73
  /** Injected `geckodriver` namespace for tests. */
46
74
  geckodriverModule?: any;
75
+ /** Injected driver executor for `verifyDriverBinary` (tests stub it). */
76
+ verifyExec?: DriverExec;
47
77
  /** Wall-clock for freshness gating — tests inject a fixed time. */
48
78
  now?: () => Date;
49
79
  }
@@ -64,6 +94,15 @@ export interface EnsureBrowserOptions {
64
94
  * in-flight promise so parallel installs can't corrupt each other.
65
95
  */
66
96
  export declare function ensureBrowserInstalled(name: BrowserAssetName, options?: EnsureBrowserOptions): Promise<EnsureBrowserResult>;
97
+ /**
98
+ * Probe a browsers cache dir for the geckodriver binary a download wrote.
99
+ * Returns its path if found at the cache root or one level deep (some layouts
100
+ * nest under a version dir), else undefined. Exported so the availability probe
101
+ * (Layer 2 in core/config) can resolve the same binary the install path uses
102
+ * when the geckodriver module exposes no `.path` — otherwise the functional
103
+ * driver gate would silently not run for a present-but-broken geckodriver.
104
+ */
105
+ export declare function geckodriverBinaryInCache(cacheDir: string): string | undefined;
67
106
  /**
68
107
  * Read the installed-browsers record without resolving or installing
69
108
  * anything. Mirrors @puppeteer/browsers.getInstalledBrowsers() but reads
@@ -1 +1 @@
1
- {"version":3,"file":"browsers.d.ts","sourceRoot":"","sources":["../../src/runtime/browsers.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,SAAS,GAAG,cAAc,GAAG,aAAa,CAAC;AAErF;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,EAAE,CASlF;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB;;;;;CAKnB,CAAC;AAKX,MAAM,WAAW,mBAAmB;IAClC,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,GAAG,CAAC;IACxB,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AA2ED,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,eAAe,CAAC;IACtB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAWD;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,gBAAgB,EACtB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAU9B;AA0RD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,eAAoB,GAAG,KAAK,CAAC;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC,CAQD"}
1
+ {"version":3,"file":"browsers.d.ts","sourceRoot":"","sources":["../../src/runtime/browsers.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,SAAS,GAAG,cAAc,GAAG,aAAa,CAAC;AAErF,yEAAyE;AACzE,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,CACvB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EAAE,EACd,SAAS,EAAE,MAAM,KACd,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AA8DtE;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,UAAU,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACtD,OAAO,CAAC,kBAAkB,CAAC,CAiD7B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,EAAE,CASlF;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB;;;;;CAKnB,CAAC;AAKX,MAAM,WAAW,mBAAmB;IAClC,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,GAAG,CAAC;IACxB,yEAAyE;IACzE,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AA2ED,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,eAAe,CAAC;IACtB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAWD;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,gBAAgB,EACtB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAU9B;AAyQD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAmB7E;AA4HD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,eAAoB,GAAG,KAAK,CAAC;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC,CAQD"}
@@ -1,5 +1,113 @@
1
+ import { execFile } from "node:child_process";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
1
4
  import { getBrowsersDir, readInstalledRecord, writeInstalledRecord, } from "./cacheDir.js";
2
5
  import { loadHeavyDep } from "./loader.js";
6
+ // Every WebDriver we manage answers `--version`. Kept as a table so adding
7
+ // an engine later is a one-line change rather than a new code branch.
8
+ const DRIVER_VERSION_ARGS = {
9
+ geckodriver: ["--version"],
10
+ chromedriver: ["--version"],
11
+ safaridriver: ["--version"],
12
+ };
13
+ const DRIVER_VERIFY_TIMEOUT_MS = 10_000;
14
+ // The only executables `verifyDriverBinary` is ever allowed to run. The path it
15
+ // receives is derived from the (user-configurable) cache dir, so before it
16
+ // reaches a child-process call we constrain the value itself: it must be an
17
+ // absolute path ending in a recognized WebDriver filename (a path separator
18
+ // immediately precedes the name, so it's the final segment). Testing the whole
19
+ // path with a single anchored regex — rather than a derived basename — both
20
+ // refuses an arbitrarily-named binary and gives static analysis a barrier on
21
+ // the exact value that reaches the child process.
22
+ const ALLOWED_DRIVER_PATH = /[\\/](?:geckodriver|chromedriver|safaridriver)(?:\.exe)?$/i;
23
+ function isAllowedDriverPath(binaryPath) {
24
+ return (typeof binaryPath === "string" &&
25
+ path.isAbsolute(binaryPath) &&
26
+ ALLOWED_DRIVER_PATH.test(binaryPath));
27
+ }
28
+ // A version is any dotted numeric run in the output ("geckodriver 0.36.0",
29
+ // "ChromeDriver 124.0.6367.207", "Included with Safari 17.4 ..."). A binary
30
+ // that runs but emits nothing version-shaped is treated as broken — that is
31
+ // exactly the partial-download symptom this guards against.
32
+ function parseDriverVersion(output) {
33
+ const m = output.match(/(\d+\.\d+(?:\.\d+)*)/);
34
+ return m ? m[1] : undefined;
35
+ }
36
+ const defaultDriverExec = (binaryPath, args, timeoutMs) => new Promise((resolve) => {
37
+ execFile(binaryPath, args, { timeout: timeoutMs, windowsHide: true }, (err, stdout, stderr) => {
38
+ const out = typeof stdout === "string" ? stdout : String(stdout ?? "");
39
+ const errOut = typeof stderr === "string" ? stderr : String(stderr ?? "");
40
+ if (err && typeof err.code === "number") {
41
+ // Real process exit with a non-zero status.
42
+ resolve({ code: err.code, stdout: out, stderr: errOut });
43
+ }
44
+ else if (err) {
45
+ // Spawn failure (ENOENT, EACCES, timeout, …) — no exit code.
46
+ resolve({ code: null, stdout: out, stderr: `${errOut}${String(err)}` });
47
+ }
48
+ else {
49
+ resolve({ code: 0, stdout: out, stderr: errOut });
50
+ }
51
+ });
52
+ });
53
+ /**
54
+ * Execute a driver binary and confirm it is functional — i.e. it runs and
55
+ * reports a parseable version. This is the single guard that stops a
56
+ * present-but-broken driver (e.g. a partially downloaded geckodriver on
57
+ * Windows that exists on disk but doesn't run) from being trusted as
58
+ * installed. Driver-agnostic: works for geckodriver, chromedriver, and
59
+ * safaridriver.
60
+ */
61
+ export async function verifyDriverBinary(driverName, binaryPath, options = {}) {
62
+ if (!binaryPath || typeof binaryPath !== "string") {
63
+ return { ok: false, error: "No driver binary path to verify." };
64
+ }
65
+ // Constrain the executable to a known WebDriver at an absolute path before it
66
+ // reaches a child process. The path derives from the user-configurable cache
67
+ // dir, so refuse anything that isn't a recognized driver binary.
68
+ if (!isAllowedDriverPath(binaryPath)) {
69
+ return {
70
+ ok: false,
71
+ error: `Refusing to execute '${binaryPath}': not a recognized driver binary path.`,
72
+ };
73
+ }
74
+ const key = String(driverName ?? "").toLowerCase();
75
+ const args = DRIVER_VERSION_ARGS[key] ?? ["--version"];
76
+ const exec = options.exec ?? defaultDriverExec;
77
+ const timeoutMs = options.timeoutMs ?? DRIVER_VERIFY_TIMEOUT_MS;
78
+ let res;
79
+ try {
80
+ res = await exec(binaryPath, args, timeoutMs);
81
+ }
82
+ catch (err) {
83
+ return { ok: false, error: `Failed to execute ${driverName}: ${String(err)}` };
84
+ }
85
+ if (res.code === null) {
86
+ // No exit code means the process never ran (ENOENT, EACCES, timeout, …) —
87
+ // report it as a spawn failure rather than the misleading "exited with
88
+ // code null".
89
+ const detail = (res.stderr || res.stdout || "").trim();
90
+ return {
91
+ ok: false,
92
+ error: `${driverName} could not be executed (spawn failed)${detail ? `: ${detail}` : ""}`,
93
+ };
94
+ }
95
+ if (res.code !== 0) {
96
+ const detail = (res.stderr || res.stdout || "").trim();
97
+ return {
98
+ ok: false,
99
+ error: `${driverName} exited with code ${res.code}${detail ? `: ${detail}` : ""}`,
100
+ };
101
+ }
102
+ const version = parseDriverVersion(`${res.stdout}\n${res.stderr}`);
103
+ if (!version) {
104
+ return {
105
+ ok: false,
106
+ error: `${driverName} ran but did not report a parseable version (likely a partial or corrupt download).`,
107
+ };
108
+ }
109
+ return { ok: true, version };
110
+ }
3
111
  /**
4
112
  * Map a browser name to the installable asset(s) it needs to drive — the
5
113
  * browser binary plus its WebDriver. This is the single source of truth the
@@ -202,8 +310,40 @@ async function ensureBrowserInstalledImpl(name, options = {}) {
202
310
  buildId: latest,
203
311
  cacheDir,
204
312
  });
205
- // If we're replacing an existing buildId, prune the old install so old
206
- // versions don't accumulate.
313
+ let path = await locateExecutable(browsersModule, name, latest, cacheDir, platform);
314
+ // Validate chromedriver by execution before recording the install (this
315
+ // branch only handles @puppeteer/browsers assets; geckodriver validation
316
+ // lives in ensureGeckodriver, and Safari's driver ships with macOS). A
317
+ // browser binary (chrome/firefox) is launched by the driver and self-checks
318
+ // at session start, but the driver itself is the thing that, when partially
319
+ // downloaded, runs and fails — so confirm it actually reports a version. On
320
+ // failure, reinstall exactly once (force a clean extract), then give up.
321
+ //
322
+ // Only when we actually located a chromedriver executable: locateExecutable
323
+ // falls back to the bare cacheDir when computeExecutablePath is unavailable
324
+ // (older/alternate @puppeteer/browsers), and validating a directory path
325
+ // would always fail and turn a best-effort install into a hard failure.
326
+ if (name === "chromedriver" && isAllowedDriverPath(path)) {
327
+ let verify = await verifyDriverBinary(name, path, { exec: deps.verifyExec });
328
+ if (!verify.ok) {
329
+ logger(`Installed ${name} ${latest} failed validation (${verify.error}); reinstalling once.`, "warn");
330
+ try {
331
+ await browsersModule.uninstall({ browser: name, buildId: latest, cacheDir });
332
+ }
333
+ catch (err) {
334
+ logger(`Failed to prune broken ${name} ${latest}: ${String(err)}`, "debug");
335
+ }
336
+ await browsersModule.install({ browser: name, buildId: latest, cacheDir });
337
+ path = await locateExecutable(browsersModule, name, latest, cacheDir, platform);
338
+ verify = await verifyDriverBinary(name, path, { exec: deps.verifyExec });
339
+ }
340
+ if (!verify.ok) {
341
+ throw new Error(`${name} ${latest} is present but non-functional after a reinstall (${verify.error}). It may be a partial or corrupt download; delete ${path} or reinstall.`);
342
+ }
343
+ }
344
+ // Prune the previous buildId only after the replacement is known-good, so a
345
+ // failed validation (above) leaves the old build intact as a rollback rather
346
+ // than deleting it for a corrupt download.
207
347
  if (existing && existing.installedVersion !== latest) {
208
348
  try {
209
349
  await browsersModule.uninstall({
@@ -223,7 +363,6 @@ async function ensureBrowserInstalledImpl(name, options = {}) {
223
363
  latestCheckedAt: now.toISOString(),
224
364
  };
225
365
  writeInstalledRecord(record, ctx);
226
- const path = await locateExecutable(browsersModule, name, latest, cacheDir, platform);
227
366
  return { path, version: latest, outdated: false };
228
367
  }
229
368
  async function locateExecutable(browsersModule, name, buildId, cacheDir, platform) {
@@ -238,29 +377,106 @@ async function locateExecutable(browsersModule, name, buildId, cacheDir, platfor
238
377
  // Fallback: report the cache dir; consumer can probe further.
239
378
  return cacheDir;
240
379
  }
380
+ // GECKODRIVER_CACHE_DIR is a process-wide env var that the geckodriver module
381
+ // reads at load and download time. ensureGeckodriver sets it and then `await`s
382
+ // async work, so two geckodriver operations targeting *different* cache dirs
383
+ // (e.g. concurrent runs in one process) could interleave and restore/resolve
384
+ // the wrong path. Serialize every GECKODRIVER_CACHE_DIR mutation through a
385
+ // single promise queue so only one is active at a time. (Same-cacheDir installs
386
+ // already dedupe on the inFlightInstalls promise in ensureBrowserInstalled.)
387
+ let geckodriverEnvQueue = Promise.resolve();
388
+ async function withGeckodriverCacheDir(cacheDir, fn) {
389
+ const previous = geckodriverEnvQueue;
390
+ let release;
391
+ geckodriverEnvQueue = new Promise((resolve) => {
392
+ release = resolve;
393
+ });
394
+ await previous;
395
+ const prevEnv = process.env.GECKODRIVER_CACHE_DIR;
396
+ process.env.GECKODRIVER_CACHE_DIR = cacheDir;
397
+ try {
398
+ return await fn();
399
+ }
400
+ finally {
401
+ if (prevEnv === undefined)
402
+ delete process.env.GECKODRIVER_CACHE_DIR;
403
+ else
404
+ process.env.GECKODRIVER_CACHE_DIR = prevEnv;
405
+ release();
406
+ }
407
+ }
408
+ // True when `child` resolves to `dir` itself or a path nested under it. Used to
409
+ // confirm a (possibly import-cached) geckodriver `.path` belongs to the current
410
+ // cache dir before trusting it.
411
+ function isPathInside(child, dir) {
412
+ const resolvedDir = path.resolve(dir);
413
+ const resolvedChild = path.resolve(child);
414
+ return (resolvedChild === resolvedDir ||
415
+ resolvedChild.startsWith(resolvedDir + path.sep));
416
+ }
417
+ /**
418
+ * Probe a browsers cache dir for the geckodriver binary a download wrote.
419
+ * Returns its path if found at the cache root or one level deep (some layouts
420
+ * nest under a version dir), else undefined. Exported so the availability probe
421
+ * (Layer 2 in core/config) can resolve the same binary the install path uses
422
+ * when the geckodriver module exposes no `.path` — otherwise the functional
423
+ * driver gate would silently not run for a present-but-broken geckodriver.
424
+ */
425
+ export function geckodriverBinaryInCache(cacheDir) {
426
+ const binName = process.platform === "win32" ? "geckodriver.exe" : "geckodriver";
427
+ const rootCandidate = path.join(cacheDir, binName);
428
+ try {
429
+ if (fs.existsSync(rootCandidate))
430
+ return rootCandidate;
431
+ }
432
+ catch {
433
+ // ignore and fall through to the shallow scan
434
+ }
435
+ try {
436
+ for (const entry of fs.readdirSync(cacheDir, { withFileTypes: true })) {
437
+ if (!entry.isDirectory())
438
+ continue;
439
+ const nested = path.join(cacheDir, entry.name, binName);
440
+ if (fs.existsSync(nested))
441
+ return nested;
442
+ }
443
+ }
444
+ catch {
445
+ // cacheDir unreadable/missing — caller falls back appropriately.
446
+ }
447
+ return undefined;
448
+ }
241
449
  // Geckodriver lives in its own npm package (not under @puppeteer/browsers).
242
450
  // Channel resolution is "always latest stable from Mozilla" via
243
451
  // geckodriver.download(); the package's GECKODRIVER_VERSION env var would
244
452
  // pin a specific version, but we leave it unset to track latest.
245
453
  async function ensureGeckodriver(ctxBag, record, existing, logger) {
246
454
  const cacheDir = getBrowsersDir(ctxBag.ctx);
247
- // Resolve the actual geckodriver binary path. The npm package exports
248
- // a `.path` field that points at the resolved binary; if that's
249
- // missing (older versions, future shape changes), fall back to the
250
- // cache directory so callers at least have a useful starting point.
455
+ // Resolve the actual geckodriver binary path. The npm package exports a
456
+ // `.path` field computed at module load from GECKODRIVER_CACHE_DIR — but the
457
+ // module is import-cached, so a non-empty `.path` can point at a *different*
458
+ // cache dir than this call's. Only trust it when it resolves inside the
459
+ // current cacheDir; otherwise probe the cache for the real binary, then fall
460
+ // back to the bare cache directory.
251
461
  const resolveBinaryPath = (gecko) => {
252
- const fromModule = gecko && typeof gecko.path === "string" && gecko.path.length > 0
462
+ const fromModule = gecko &&
463
+ typeof gecko.path === "string" &&
464
+ gecko.path.length > 0 &&
465
+ isPathInside(gecko.path, cacheDir)
253
466
  ? gecko.path
254
467
  : null;
255
- return fromModule ?? cacheDir;
468
+ return fromModule ?? geckodriverBinaryInCache(cacheDir) ?? cacheDir;
256
469
  };
257
470
  if (!ctxBag.force && existing && isStillFresh(existing.latestCheckedAt, ctxBag.now)) {
258
471
  // Load the geckodriver module so the returned `path` is the actual
259
472
  // binary path, not just the cache directory — matches the contract
260
473
  // EnsureBrowserResult documents. Tests can inject `geckodriverModule`
261
474
  // via deps to skip the real loader; in production we lazy-resolve.
475
+ // geckodriver resolves `.path` from GECKODRIVER_CACHE_DIR at module load,
476
+ // so point it at our cache before loading, serialized so concurrent
477
+ // installs for other cache dirs can't clobber the env.
262
478
  const gecko = ctxBag.deps.geckodriverModule ??
263
- (await loadGeckodriver(ctxBag.deps, ctxBag.ctx));
479
+ (await withGeckodriverCacheDir(cacheDir, () => loadGeckodriver(ctxBag.deps, ctxBag.ctx)));
264
480
  return {
265
481
  path: resolveBinaryPath(gecko),
266
482
  version: existing.installedVersion,
@@ -275,47 +491,61 @@ async function ensureGeckodriver(ctxBag, record, existing, logger) {
275
491
  existing.latestKnownVersion !== existing.installedVersion,
276
492
  };
277
493
  }
278
- const gecko = await loadGeckodriver(ctxBag.deps, ctxBag.ctx);
279
- // geckodriver writes binaries into the env-var-pointed dir; alias to ours.
280
- const prevEnv = process.env.GECKODRIVER_CACHE_DIR;
281
- process.env.GECKODRIVER_CACHE_DIR = cacheDir;
282
- try {
494
+ // geckodriver writes binaries into — and resolves `.path`/version from — the
495
+ // env-var-pointed dir at module load, so alias it to our cache BEFORE loading
496
+ // the module (otherwise resolveBinaryPath(gecko) can point at the wrong path).
497
+ // Serialized so two installs for different cache dirs can't clobber the
498
+ // process-wide env across the awaits below.
499
+ return await withGeckodriverCacheDir(cacheDir, async () => {
500
+ const gecko = await loadGeckodriver(ctxBag.deps, ctxBag.ctx);
283
501
  logger(`Installing geckodriver into ${cacheDir}`, "info");
284
- const downloadResult = await gecko.download();
285
- const resolvedVersion = (typeof gecko.GECKODRIVER_VERSION === "string"
286
- ? gecko.GECKODRIVER_VERSION
287
- : undefined) ||
288
- (downloadResult && typeof downloadResult.version === "string"
289
- ? downloadResult.version
290
- : undefined);
291
- // If neither the module nor the download result expose a version,
292
- // the literal string "latest" used to land in installedVersion —
293
- // which then broke later freshness comparisons against real
294
- // numeric versions. Mark as "unknown" instead and warn so the user
295
- // sees that future version checks will be unreliable.
296
- if (!resolvedVersion) {
297
- logger("Could not determine geckodriver version after install. Freshness checks for geckodriver will be unreliable until the next forced reinstall.", "warn");
502
+ await gecko.download();
503
+ // Validate by execution, not just presence: a partial download (seen on
504
+ // Windows) leaves a binary on disk that doesn't actually run. If the
505
+ // first download fails validation, quarantine the artifact and
506
+ // re-download exactly once before giving up.
507
+ let binaryPath = resolveBinaryPath(gecko);
508
+ let verify = await verifyDriverBinary("geckodriver", binaryPath, {
509
+ exec: ctxBag.deps.verifyExec,
510
+ });
511
+ if (!verify.ok) {
512
+ logger(`Downloaded geckodriver failed validation (${verify.error}); re-downloading once.`, "warn");
513
+ try {
514
+ if (binaryPath && binaryPath !== cacheDir && fs.existsSync(binaryPath)) {
515
+ fs.rmSync(binaryPath, { force: true });
516
+ }
517
+ }
518
+ catch {
519
+ // Best-effort quarantine; re-download will overwrite regardless.
520
+ }
521
+ await gecko.download();
522
+ binaryPath = resolveBinaryPath(gecko);
523
+ verify = await verifyDriverBinary("geckodriver", binaryPath, {
524
+ exec: ctxBag.deps.verifyExec,
525
+ });
298
526
  }
299
- const installedVersion = resolvedVersion ?? "unknown";
527
+ if (!verify.ok) {
528
+ // Don't launder a broken binary into a "valid" record. Throwing lets
529
+ // the install-gate caller record this asset as failed, and the runner
530
+ // surface a diagnostic skip / fall back to another browser.
531
+ throw new Error(`geckodriver is present but non-functional after a re-download (${verify.error}). It may be a partial or corrupt download; delete ${binaryPath} or reinstall.`);
532
+ }
533
+ // The validated binary's own --version output is the source of truth —
534
+ // never record "unknown".
535
+ const installedVersion = verify.version;
300
536
  record.browsers.geckodriver = {
301
537
  installedVersion,
302
538
  installedAt: ctxBag.now.toISOString(),
303
- latestKnownVersion: resolvedVersion,
539
+ latestKnownVersion: installedVersion,
304
540
  latestCheckedAt: ctxBag.now.toISOString(),
305
541
  };
306
542
  writeInstalledRecord(record, ctxBag.ctx);
307
543
  return {
308
- path: resolveBinaryPath(gecko),
544
+ path: binaryPath,
309
545
  version: installedVersion,
310
546
  outdated: false,
311
547
  };
312
- }
313
- finally {
314
- if (prevEnv === undefined)
315
- delete process.env.GECKODRIVER_CACHE_DIR;
316
- else
317
- process.env.GECKODRIVER_CACHE_DIR = prevEnv;
318
- }
548
+ });
319
549
  }
320
550
  /**
321
551
  * Read the installed-browsers record without resolving or installing
@@ -1 +1 @@
1
- {"version":3,"file":"browsers.js","sourceRoot":"","sources":["../../src/runtime/browsers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browsers.js","sourceRoot":"","sources":["../../src/runtime/browsers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,oBAAoB,GAErB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAe,MAAM,aAAa,CAAC;AAsBxD,2EAA2E;AAC3E,sEAAsE;AACtE,MAAM,mBAAmB,GAA6B;IACpD,WAAW,EAAE,CAAC,WAAW,CAAC;IAC1B,YAAY,EAAE,CAAC,WAAW,CAAC;IAC3B,YAAY,EAAE,CAAC,WAAW,CAAC;CAC5B,CAAC;AAEF,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAExC,gFAAgF;AAChF,2EAA2E;AAC3E,4EAA4E;AAC5E,4EAA4E;AAC5E,+EAA+E;AAC/E,4EAA4E;AAC5E,6EAA6E;AAC7E,kDAAkD;AAClD,MAAM,mBAAmB,GACvB,4DAA4D,CAAC;AAE/D,SAAS,mBAAmB,CAAC,UAAkB;IAC7C,OAAO,CACL,OAAO,UAAU,KAAK,QAAQ;QAC9B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAC3B,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CACrC,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,4EAA4E;AAC5E,4EAA4E;AAC5E,4DAA4D;AAC5D,SAAS,kBAAkB,CAAC,MAAc;IACxC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC/C,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9B,CAAC;AAED,MAAM,iBAAiB,GAAe,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CACpE,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;IACtB,QAAQ,CACN,UAAU,EACV,IAAI,EACJ,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,EACzC,CAAC,GAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QAC3B,MAAM,GAAG,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAC1E,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACxC,4CAA4C;YAC5C,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3D,CAAC;aAAM,IAAI,GAAG,EAAE,CAAC;YACf,6DAA6D;YAC7D,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAAkB,EAClB,UAAkB,EAClB,UAAqD,EAAE;IAEvD,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QAClD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC;IAClE,CAAC;IACD,8EAA8E;IAC9E,6EAA6E;IAC7E,iEAAiE;IACjE,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC;QACrC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,wBAAwB,UAAU,yCAAyC;SACnF,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACnD,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,iBAAiB,CAAC;IAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,wBAAwB,CAAC;IAEhE,IAAI,GAA4D,CAAC;IACjE,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,UAAU,KAAK,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;IACjF,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACtB,0EAA0E;QAC1E,uEAAuE;QACvE,cAAc;QACd,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,GAAG,UAAU,wCAAwC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;SAC1F,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,GAAG,UAAU,qBAAqB,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;SAClF,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACnE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,GAAG,UAAU,qFAAqF;SAC1G,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAwB;IAC5D,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACnC,KAAK,QAAQ;YACX,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACpC,KAAK,SAAS;YACZ,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACpC;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,QAAQ;IACjB,YAAY,EAAE,QAAQ;IACtB,WAAW,EAAE,QAAQ;CACb,CAAC;AAEX,MAAM,gBAAgB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO;AACrD,MAAM,kBAAkB,GAAG,KAAK,CAAC;AA0BjC,mEAAmE;AACnE,0EAA0E;AAC1E,sEAAsE;AACtE,yDAAyD;AACzD,qEAAqE;AACrE,wEAAwE;AACxE,sCAAsC;AACtC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,GAAG,CAAC;AACtE,MAAM,aAAa,GAAW,CAAC,GAAG,EAAE,KAAK,GAAG,MAAM,EAAE,EAAE;IACpD,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,aAAa;QAAE,OAAO;IAChD,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;QACrC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF,KAAK,UAAU,qBAAqB,CAAC,IAAiB,EAAE,GAAoB;IAC1E,IAAI,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC,cAAc,CAAC;IACpD,OAAO,MAAM,YAAY,CAAM,qBAAqB,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAChG,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,IAAiB,EAAE,GAAoB;IACpE,IAAI,IAAI,CAAC,iBAAiB;QAAE,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAC1D,OAAO,MAAM,YAAY,CAAM,aAAa,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,YAAY,CAAC,eAAmC,EAAE,GAAS;IAClE,IAAI,CAAC,eAAe;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAClC,OAAO,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,gBAAgB,CAAC;AAC9C,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,cAAmB,EACnB,SAA2B,EAC3B,QAAa;IAEb,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC5C,OAAO,MAAM,WAAW,CACtB,OAAO,CAAC,OAAO,CACb,cAAc,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAC5D,EACD,kBAAkB,EAClB,kBAAkB,SAAS,KAAK,OAAO,GAAG,CAC3C,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAClB,CAAa,EACb,EAAU,EACV,KAAa;IAEb,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,GAAG,UAAU,CAClB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,oBAAoB,EAAE,IAAI,CAAC,CAAC,EAC3D,EAAE,CACH,CAAC;QACF,mEAAmE;QACnE,mEAAmE;QACnE,kCAAkC;QAClC,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,UAAU;YAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QAC7C,CAAC,CAAC,IAAI,CACJ,CAAC,CAAC,EAAE,EAAE;YACJ,YAAY,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,EACD,CAAC,GAAG,EAAE,EAAE;YACN,YAAY,CAAC,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAQD,iEAAiE;AACjE,sEAAsE;AACtE,mEAAmE;AACnE,oEAAoE;AACpE,mEAAmE;AACnE,kEAAkE;AAClE,2DAA2D;AAC3D,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAwC,CAAC;AAEzE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAAsB,EACtB,UAAgC,EAAE;IAElC,MAAM,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;IAC7B,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;IACnD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACjD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,CAAC,GAAG,0BAA0B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;QAC/D,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IACH,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,0BAA0B,CACvC,IAAsB,EACtB,UAAgC,EAAE;IAElC,MAAM,EAAE,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,aAAa,CAAC;IAC5C,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEvC,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QAC3B,OAAO,MAAM,iBAAiB,CAC5B,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAC9C,MAAM,EACN,QAAQ,EACR,MAAM,CACP,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAQ,cAAc,CAAC,qBAAqB;QACxD,CAAC,CAAC,cAAc,CAAC,qBAAqB,EAAE;QACxC,CAAC,CAAC,SAAS,CAAC;IACd,uEAAuE;IACvE,kEAAkE;IAClE,mEAAmE;IACnE,qEAAqE;IACrE,iEAAiE;IACjE,mEAAmE;IACnE,uBAAuB;IACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,2CAA2C,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,qDAAqD,IAAI,qHAAqH,CAC1P,CAAC;IACJ,CAAC;IAED,sEAAsE;IACtE,mEAAmE;IACnE,IAAI,CAAC,KAAK,IAAI,QAAQ,IAAI,YAAY,CAAC,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE,CAAC;QACtE,IAAI,QAAQ,CAAC,kBAAkB,KAAK,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YAC9D,MAAM,IAAI,GAAG,MAAM,gBAAgB,CACjC,cAAc,EACd,IAAI,EACJ,QAAQ,CAAC,gBAAgB,EACzB,QAAQ,EACR,QAAQ,CACT,CAAC;YACF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACvE,CAAC;QACD,oCAAoC;QACpC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CACjC,cAAc,EACd,IAAI,EACJ,QAAQ,CAAC,gBAAgB,EACzB,QAAQ,EACR,QAAQ,CACT,CAAC;QACF,MAAM,CACJ,GAAG,IAAI,IAAI,QAAQ,CAAC,gBAAgB,iBAAiB,QAAQ,MAAM,gBAAgB,CAAC,IAAI,CAAC,oBAAoB,QAAQ,CAAC,kBAAkB,0CAA0C,IAAI,uBAAuB,EAC7M,MAAM,CACP,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACtE,CAAC;IAED,2EAA2E;IAC3E,yEAAyE;IACzE,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,qBAAqB,CAAC,cAAc,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACvE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,0BAA0B,IAAI,aAAa,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC1E,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,MAAM,gBAAgB,CACjC,cAAc,EACd,IAAI,EACJ,QAAQ,CAAC,gBAAgB,EACzB,QAAQ,EACR,QAAQ,CACT,CAAC;YACF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACvE,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,KAAK,IAAI,QAAQ,IAAI,QAAQ,CAAC,gBAAgB,KAAK,MAAM,EAAE,CAAC;QAC/D,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG;YACtB,GAAG,QAAQ;YACX,kBAAkB,EAAE,MAAM;YAC1B,eAAe,EAAE,GAAG,CAAC,WAAW,EAAE;SACnC,CAAC;QACF,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CACjC,cAAc,EACd,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,QAAQ,CACT,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACpD,CAAC;IAED,IAAI,CAAC,KAAK,IAAI,QAAQ,EAAE,CAAC;QACvB,iDAAiD;QACjD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG;YACtB,GAAG,QAAQ;YACX,kBAAkB,EAAE,MAAM;YAC1B,eAAe,EAAE,GAAG,CAAC,WAAW,EAAE;SACnC,CAAC;QACF,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClC,MAAM,CACJ,GAAG,IAAI,IAAI,QAAQ,CAAC,gBAAgB,iBAAiB,QAAQ,MAAM,gBAAgB,CAAC,IAAI,CAAC,oBAAoB,MAAM,0CAA0C,IAAI,uBAAuB,EACxL,MAAM,CACP,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,gBAAgB,CACjC,cAAc,EACd,IAAI,EACJ,QAAQ,CAAC,gBAAgB,EACzB,QAAQ,EACR,QAAQ,CACT,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACtE,CAAC;IAED,mCAAmC;IACnC,MAAM,CAAC,cAAc,IAAI,IAAI,MAAM,SAAS,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;IAChE,MAAM,cAAc,CAAC,OAAO,CAAC;QAC3B,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,MAAM;QACf,QAAQ;KACT,CAAC,CAAC;IAEH,IAAI,IAAI,GAAG,MAAM,gBAAgB,CAC/B,cAAc,EACd,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,QAAQ,CACT,CAAC;IAEF,wEAAwE;IACxE,yEAAyE;IACzE,uEAAuE;IACvE,4EAA4E;IAC5E,4EAA4E;IAC5E,4EAA4E;IAC5E,yEAAyE;IACzE,EAAE;IACF,4EAA4E;IAC5E,4EAA4E;IAC5E,yEAAyE;IACzE,wEAAwE;IACxE,IAAI,IAAI,KAAK,cAAc,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;QACzD,IAAI,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,CACJ,aAAa,IAAI,IAAI,MAAM,uBAAuB,MAAM,CAAC,KAAK,uBAAuB,EACrF,MAAM,CACP,CAAC;YACF,IAAI,CAAC;gBACH,MAAM,cAAc,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC/E,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,0BAA0B,IAAI,IAAI,MAAM,KAAK,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAC9E,CAAC;YACD,MAAM,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC3E,IAAI,GAAG,MAAM,gBAAgB,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAChF,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,IAAI,MAAM,qDAAqD,MAAM,CAAC,KAAK,sDAAsD,IAAI,gBAAgB,CAC7J,CAAC;QACJ,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,6EAA6E;IAC7E,2CAA2C;IAC3C,IAAI,QAAQ,IAAI,QAAQ,CAAC,gBAAgB,KAAK,MAAM,EAAE,CAAC;QACrD,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,SAAS,CAAC;gBAC7B,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,QAAQ,CAAC,gBAAgB;gBAClC,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CACJ,uBAAuB,IAAI,YAAY,QAAQ,CAAC,gBAAgB,KAAK,MAAM,CAAC,GAAG,CAAC,EAAE,EAClF,OAAO,CACR,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG;QACtB,gBAAgB,EAAE,MAAM;QACxB,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE;QAC9B,kBAAkB,EAAE,MAAM;QAC1B,eAAe,EAAE,GAAG,CAAC,WAAW,EAAE;KACnC,CAAC;IACF,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACpD,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,cAAmB,EACnB,IAAsB,EACtB,OAAe,EACf,QAAgB,EAChB,QAAa;IAEb,IAAI,OAAO,cAAc,CAAC,qBAAqB,KAAK,UAAU,EAAE,CAAC;QAC/D,OAAO,cAAc,CAAC,qBAAqB,CAAC;YAC1C,OAAO,EAAE,IAAI;YACb,OAAO;YACP,QAAQ;YACR,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IACD,8DAA8D;IAC9D,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,8EAA8E;AAC9E,+EAA+E;AAC/E,6EAA6E;AAC7E,6EAA6E;AAC7E,2EAA2E;AAC3E,gFAAgF;AAChF,6EAA6E;AAC7E,IAAI,mBAAmB,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;AAC3D,KAAK,UAAU,uBAAuB,CACpC,QAAgB,EAChB,EAAoB;IAEpB,MAAM,QAAQ,GAAG,mBAAmB,CAAC;IACrC,IAAI,OAAoB,CAAC;IACzB,mBAAmB,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClD,OAAO,GAAG,OAAO,CAAC;IACpB,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,CAAC;IACf,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,QAAQ,CAAC;IAC7C,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;;YAC/D,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,OAAO,CAAC;QACjD,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,gFAAgF;AAChF,gCAAgC;AAChC,SAAS,YAAY,CAAC,KAAa,EAAE,GAAW;IAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1C,OAAO,CACL,aAAa,KAAK,WAAW;QAC7B,aAAa,CAAC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CACjD,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAAgB;IACvD,MAAM,OAAO,GACX,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC;IACnE,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC;YAAE,OAAO,aAAa,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,8CAA8C;IAChD,CAAC;IACD,IAAI,CAAC;QACH,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACtE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBAAE,SAAS;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACxD,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,OAAO,MAAM,CAAC;QAC3C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;IACnE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,4EAA4E;AAC5E,gEAAgE;AAChE,0EAA0E;AAC1E,iEAAiE;AACjE,KAAK,UAAU,iBAAiB,CAC9B,MAKC,EACD,MAA8C,EAC9C,QAAa,EACb,MAAc;IAEd,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5C,wEAAwE;IACxE,6EAA6E;IAC7E,6EAA6E;IAC7E,wEAAwE;IACxE,6EAA6E;IAC7E,oCAAoC;IACpC,MAAM,iBAAiB,GAAG,CAAC,KAAU,EAAU,EAAE;QAC/C,MAAM,UAAU,GACd,KAAK;YACL,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAC9B,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YACrB,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC;YAChC,CAAC,CAAC,KAAK,CAAC,IAAI;YACZ,CAAC,CAAC,IAAI,CAAC;QACX,OAAO,UAAU,IAAI,wBAAwB,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;IACtE,CAAC,CAAC;IAEF,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,QAAQ,IAAI,YAAY,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACpF,mEAAmE;QACnE,mEAAmE;QACnE,sEAAsE;QACtE,mEAAmE;QACnE,0EAA0E;QAC1E,oEAAoE;QACpE,uDAAuD;QACvD,MAAM,KAAK,GACT,MAAM,CAAC,IAAI,CAAC,iBAAiB;YAC7B,CAAC,MAAM,uBAAuB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAC5C,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CACzC,CAAC,CAAC;QACL,OAAO;YACL,IAAI,EAAE,iBAAiB,CAAC,KAAK,CAAC;YAC9B,OAAO,EAAE,QAAQ,CAAC,gBAAgB;YAClC,8DAA8D;YAC9D,kEAAkE;YAClE,yDAAyD;YACzD,uEAAuE;YACvE,+DAA+D;YAC/D,aAAa;YACb,QAAQ,EACN,OAAO,QAAQ,CAAC,kBAAkB,KAAK,QAAQ;gBAC/C,QAAQ,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC;gBACtC,QAAQ,CAAC,kBAAkB,KAAK,QAAQ,CAAC,gBAAgB;SAC5D,CAAC;IACJ,CAAC;IACD,6EAA6E;IAC7E,8EAA8E;IAC9E,+EAA+E;IAC/E,wEAAwE;IACxE,4CAA4C;IAC5C,OAAO,MAAM,uBAAuB,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,CAAC,+BAA+B,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvB,wEAAwE;QACxE,qEAAqE;QACrE,+DAA+D;QAC/D,6CAA6C;QAC7C,IAAI,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,MAAM,GAAG,MAAM,kBAAkB,CAAC,aAAa,EAAE,UAAU,EAAE;YAC/D,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;SAC7B,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,CACJ,6CAA6C,MAAM,CAAC,KAAK,yBAAyB,EAClF,MAAM,CACP,CAAC;YACF,IAAI,CAAC;gBACH,IAAI,UAAU,IAAI,UAAU,KAAK,QAAQ,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBACvE,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,iEAAiE;YACnE,CAAC;YACD,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;YACvB,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACtC,MAAM,GAAG,MAAM,kBAAkB,CAAC,aAAa,EAAE,UAAU,EAAE;gBAC3D,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;aAC7B,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,qEAAqE;YACrE,sEAAsE;YACtE,4DAA4D;YAC5D,MAAM,IAAI,KAAK,CACb,kEAAkE,MAAM,CAAC,KAAK,sDAAsD,UAAU,gBAAgB,CAC/J,CAAC;QACJ,CAAC;QACD,uEAAuE;QACvE,0BAA0B;QAC1B,MAAM,gBAAgB,GAAW,MAAM,CAAC,OAAiB,CAAC;QAC1D,MAAM,CAAC,QAAQ,CAAC,WAAW,GAAG;YAC5B,gBAAgB;YAChB,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE;YACrC,kBAAkB,EAAE,gBAAgB;YACpC,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE;SAC1C,CAAC;QACF,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,gBAAgB;YACzB,QAAQ,EAAE,KAAK;SAChB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAuB,EAAE;IAM5D,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,IAAI;QACJ,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;KAC7C,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,UAAU,EACV,OAAO,EACP,SAAS,EACT,aAAa,EACb,YAAY,EACZ,OAAO,EACP,cAAc,EACd,GAAG,EACH,uBAAuB,EACvB,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,gBAAgB,GACjB,CAAC;AASF,iBAAS,gBAAgB,IAAI,OAAO,CAKnC;AAGD,iBAAS,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,GAAE,MAAe,EAAE,MAAM,GAAE,GAAQ,QAclE;AAMD,iBAAS,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAuFlC;AAGD,iBAAS,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAG/B;AAGD,iBAAe,uBAAuB,CAAC,MAAM,GAAE,GAAQ;;;UAyEtD;AA8CD,iBAAe,SAAS,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE;IAAE,UAAU,CAAC,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,gBAuK7E;AAgCD,QAAA,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CA8kBzG,CAAC;AAGF,iBAAS,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,WAM5D;AAED,iBAAe,aAAa,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;IAAE,SAAS,EAAE,GAAG,CAAC;IAAC,OAAO,EAAE,GAAG,CAAA;CAAE,iBA8DpF;AAED,iBAAe,aAAa,CAAC,MAAM,EAAE,GAAG,YAAK,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAE,GAAQ,kBA0D9F;AAGD,iBAAe,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE;;;;GAwCvD;AAED,iBAAS,OAAO,SAuBf;AAGD,iBAAS,cAAc,QA+GtB"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,UAAU,EACV,OAAO,EACP,SAAS,EACT,aAAa,EACb,YAAY,EACZ,OAAO,EACP,cAAc,EACd,GAAG,EACH,uBAAuB,EACvB,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,gBAAgB,GACjB,CAAC;AASF,iBAAS,gBAAgB,IAAI,OAAO,CAKnC;AAGD,iBAAS,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,GAAE,MAAe,EAAE,MAAM,GAAE,GAAQ,QAclE;AAMD,iBAAS,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CA4FlC;AAGD,iBAAS,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAG/B;AAGD,iBAAe,uBAAuB,CAAC,MAAM,GAAE,GAAQ;;;UAyEtD;AA8CD,iBAAe,SAAS,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE;IAAE,UAAU,CAAC,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,gBAwL7E;AAgCD,QAAA,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CA8kBzG,CAAC;AAGF,iBAAS,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,WAM5D;AAED,iBAAe,aAAa,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;IAAE,SAAS,EAAE,GAAG,CAAC;IAAC,OAAO,EAAE,GAAG,CAAA;CAAE,iBA8DpF;AAED,iBAAe,aAAa,CAAC,MAAM,EAAE,GAAG,YAAK,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAE,GAAQ,kBA0D9F;AAGD,iBAAe,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE;;;;GAwCvD;AAED,iBAAS,OAAO,SAuBf;AAGD,iBAAS,cAAc,QA+GtB"}
package/dist/utils.js CHANGED
@@ -114,6 +114,10 @@ function buildYargs(args) {
114
114
  .option("concurrent-runners", {
115
115
  description: "Number of test contexts to run concurrently (default 1). Pass a number (for example, --concurrent-runners 4), or pass the flag with no value to use the CPU core count (capped at 4). With more than 1 runner, log lines from different contexts interleave and cross-context variable dependencies are unsupported.",
116
116
  type: "string",
117
+ })
118
+ .option("browser-fallback", {
119
+ description: "How to handle a context whose browser cannot start a driver session. auto (default): fall back to any other available browser (a fallback away from an explicitly requested browser reports WARNING). explicit: fall back only for auto-selected browsers; a broken explicitly-requested browser is skipped with a diagnostic reason. off: never fall back across browsers. Drivers are validated by execution, so a present-but-broken driver (e.g. a partially downloaded geckodriver) no longer silently skips coverage.",
120
+ type: "string",
117
121
  })
118
122
  .version(require("../package.json").version)
119
123
  .help()
@@ -337,6 +341,20 @@ async function setConfig({ configPath, args }) {
337
341
  // `--cache-dir " "` override is neutralized at the consumption site.
338
342
  config.cacheDir = args.cacheDir;
339
343
  }
344
+ if (typeof args.browserFallback === "string" && args.browserFallback.length > 0) {
345
+ // Only accept a known mode. Unlike most overrides, the schema validation
346
+ // above can't catch a bad CLI value (it runs before this block), and a
347
+ // garbage mode would reach the runner unvalidated on the pre-resolved-tests
348
+ // API path — so drop unknown values and keep the validated config value
349
+ // (which defaults to "auto").
350
+ const mode = args.browserFallback.trim().toLowerCase();
351
+ if (mode === "auto" || mode === "explicit" || mode === "off") {
352
+ config.browserFallback = mode;
353
+ }
354
+ else {
355
+ log(`Ignoring invalid --browser-fallback value '${args.browserFallback}'. Expected one of: auto, explicit, off.`, "warning", config);
356
+ }
357
+ }
340
358
  if (typeof args.concurrentRunners === "string") {
341
359
  // The bare flag ("" after yargs string parsing) and an explicit "true"
342
360
  // select CPU-count mode; anything else must parse as a positive integer.