doc-detective 4.27.0 → 4.28.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/core/tests/appSurface.d.ts +2 -0
  2. package/dist/core/tests/appSurface.d.ts.map +1 -1
  3. package/dist/core/tests/appSurface.js +11 -10
  4. package/dist/core/tests/appSurface.js.map +1 -1
  5. package/dist/core/tests/mobileBrowser.d.ts +3 -1
  6. package/dist/core/tests/mobileBrowser.d.ts.map +1 -1
  7. package/dist/core/tests/mobileBrowser.js +6 -7
  8. package/dist/core/tests/mobileBrowser.js.map +1 -1
  9. package/dist/hints/context.d.ts +16 -0
  10. package/dist/hints/context.d.ts.map +1 -1
  11. package/dist/hints/context.js +34 -0
  12. package/dist/hints/context.js.map +1 -1
  13. package/dist/hints/hints.d.ts.map +1 -1
  14. package/dist/hints/hints.js +17 -0
  15. package/dist/hints/hints.js.map +1 -1
  16. package/dist/hints/types.d.ts +14 -0
  17. package/dist/hints/types.d.ts.map +1 -1
  18. package/dist/index.cjs +370 -269
  19. package/dist/runtime/cacheDir.d.ts +5 -0
  20. package/dist/runtime/cacheDir.d.ts.map +1 -1
  21. package/dist/runtime/cacheDir.js +3 -0
  22. package/dist/runtime/cacheDir.js.map +1 -1
  23. package/dist/runtime/iosInstaller.d.ts +44 -1
  24. package/dist/runtime/iosInstaller.d.ts.map +1 -1
  25. package/dist/runtime/iosInstaller.js +381 -13
  26. package/dist/runtime/iosInstaller.js.map +1 -1
  27. package/dist/runtime/lock.d.ts +56 -0
  28. package/dist/runtime/lock.d.ts.map +1 -0
  29. package/dist/runtime/lock.js +218 -0
  30. package/dist/runtime/lock.js.map +1 -0
  31. package/dist/runtime/wdaProducts.d.ts +147 -0
  32. package/dist/runtime/wdaProducts.d.ts.map +1 -0
  33. package/dist/runtime/wdaProducts.js +234 -0
  34. package/dist/runtime/wdaProducts.js.map +1 -0
  35. package/package.json +1 -1
@@ -15,6 +15,10 @@ export interface InstalledAndroid {
15
15
  avds: string[];
16
16
  installedAt: string;
17
17
  }
18
+ export interface InstalledIos {
19
+ wdaKeys: string[];
20
+ updatedAt: string;
21
+ }
18
22
  export interface InstalledTool {
19
23
  installedVersion: string;
20
24
  installedAt: string;
@@ -23,6 +27,7 @@ export interface InstalledRecord {
23
27
  npmPackages: Record<string, InstalledNpmPackage>;
24
28
  browsers: Record<string, InstalledBrowser>;
25
29
  android?: InstalledAndroid;
30
+ ios?: InstalledIos;
26
31
  tools?: Record<string, InstalledTool>;
27
32
  }
28
33
  export interface CacheDirContext {
@@ -1 +1 @@
1
- {"version":3,"file":"cacheDir.d.ts","sourceRoot":"","sources":["../../src/runtime/cacheDir.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAMD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAID,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAE3C,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAE3B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAUD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,GAAG,GAAE,eAAoB,GAAG,MAAM,CAsB7D;AAiCD,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CASpE;AAED,wBAAgB,aAAa,CAAC,GAAG,GAAE,eAAoB,GAAG,MAAM,CAE/D;AAED,wBAAgB,cAAc,CAAC,GAAG,GAAE,eAAoB,GAAG,MAAM,CAgChE;AAgBD,wBAAgB,sBAAsB,CAAC,GAAG,GAAE,eAAoB,GAAG,MAAM,CAExE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,eAAoB,GAAG,eAAe,CA8B9E;AAMD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,EACvB,GAAG,GAAE,eAAoB,GACxB,IAAI,CA8BN"}
1
+ {"version":3,"file":"cacheDir.d.ts","sourceRoot":"","sources":["../../src/runtime/cacheDir.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAMD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAKD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAE3C,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAE3B,GAAG,CAAC,EAAE,YAAY,CAAC;IAEnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAUD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,GAAG,GAAE,eAAoB,GAAG,MAAM,CAsB7D;AAiCD,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CASpE;AAED,wBAAgB,aAAa,CAAC,GAAG,GAAE,eAAoB,GAAG,MAAM,CAE/D;AAED,wBAAgB,cAAc,CAAC,GAAG,GAAE,eAAoB,GAAG,MAAM,CAgChE;AAgBD,wBAAgB,sBAAsB,CAAC,GAAG,GAAE,eAAoB,GAAG,MAAM,CAExE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,eAAoB,GAAG,eAAe,CAgC9E;AAMD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,EACvB,GAAG,GAAE,eAAoB,GACxB,IAAI,CA8BN"}
@@ -166,6 +166,9 @@ export function readInstalledRecord(ctx = {}) {
166
166
  // carried through, mirroring the coercion above.
167
167
  if (isPlainObject(parsed?.android))
168
168
  record.android = parsed.android;
169
+ // Same treatment for the optional ios (WDA prebuild) slot.
170
+ if (isPlainObject(parsed?.ios))
171
+ record.ios = parsed.ios;
169
172
  // Same treatment for the optional tools slot (git-bash etc.).
170
173
  if (isPlainObject(parsed?.tools))
171
174
  record.tools = parsed.tools;
@@ -1 +1 @@
1
- {"version":3,"file":"cacheDir.js","sourceRoot":"","sources":["../../src/runtime/cacheDir.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cacheDir.js","sourceRoot":"","sources":["../../src/runtime/cacheDir.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
- import type { CacheDirContext } from "./cacheDir.js";
1
+ import { type CacheDirContext, type InstalledRecord } from "./cacheDir.js";
2
2
  import type { Logger } from "./loader.js";
3
+ import { type AcquireLockOptions, type LockHandle } from "./lock.js";
4
+ import { type WdaFs } from "./wdaProducts.js";
3
5
  export interface InstallReport {
4
6
  kind: "ios";
5
7
  assetId: string;
@@ -12,8 +14,49 @@ export interface IOSInstallerDeps {
12
14
  run?: (command: string, args: string[]) => {
13
15
  status: number | null;
14
16
  stderr?: string;
17
+ stdout?: string;
15
18
  };
19
+ /** Long-running async spawn for xcodebuild (async so the lock heartbeat can fire). */
20
+ runBuild?: (command: string, args: string[], opts?: {
21
+ timeoutMs?: number;
22
+ }) => Promise<{
23
+ status: number | null;
24
+ stdout?: string;
25
+ stderr?: string;
26
+ /** True when the runner killed the build at the timeout ceiling — never retried. */
27
+ timedOut?: boolean;
28
+ }>;
29
+ /** Driver install, routed through the loader (npm-prune defenses stay engaged). */
30
+ ensureInstalled?: (packages: string[], options?: {
31
+ ctx?: CacheDirContext;
32
+ }) => Promise<void>;
33
+ resolveDriverPath?: (name: string, ctx: CacheDirContext) => string | null;
34
+ resolveDriverVersion?: (name: string, ctx: CacheDirContext) => string | null;
35
+ fs?: WdaFs;
36
+ /** Test override for the managed WDA root (default: <cacheDir>/ios/wda). */
37
+ wdaRootDir?: string;
38
+ acquire?: (options: AcquireLockOptions) => Promise<LockHandle | null>;
39
+ readRecord?: (ctx: CacheDirContext) => InstalledRecord;
40
+ writeRecord?: (record: InstalledRecord, ctx: CacheDirContext) => void;
41
+ now?: () => number;
42
+ /** Inter-attempt backoff for the transient-build retry; no-op in tests. */
43
+ sleep?: (ms: number) => Promise<void>;
16
44
  }
45
+ /** Ceiling for one xcodebuild build-for-testing attempt (~10 min typical cold). */
46
+ export declare const WDA_BUILD_TIMEOUT_MS: number;
47
+ /** Total attempts for a transient xcodebuild failure (20-min ops — retry once). */
48
+ export declare const WDA_BUILD_MAX_ATTEMPTS = 2;
49
+ /**
50
+ * How long a second `install ios` waits for a concurrent build before
51
+ * skipping. Sized to cover one full build attempt (WDA_BUILD_TIMEOUT_MS,
52
+ * 20 min — ceiling kills are never retried) plus setup slack; a transient
53
+ * retry that pushes the holder past this window just means the contender
54
+ * reports `skipped` and the products land for the NEXT run — best-effort.
55
+ */
56
+ export declare const WDA_LOCK_WAIT_MS: number;
57
+ /** Keyed build dirs whose last-used stamp is older than this get pruned. */
58
+ export declare const WDA_PRUNE_AFTER_MS: number;
59
+ export declare function isTransientXcodebuildError(message: unknown): boolean;
17
60
  export declare function installIos({ yes, dryRun, ctx, deps, }?: {
18
61
  yes?: boolean;
19
62
  dryRun?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"iosInstaller.d.ts","sourceRoot":"","sources":["../../src/runtime/iosInstaller.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,KAAK,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACvF;AAiBD,wBAAsB,UAAU,CAAC,EAC/B,GAAW,EACX,MAAc,EACd,GAAQ,EACR,IAAS,GACV,GAAE;IACD,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,eAAe,CAAC;IACtB,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACpB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA6FhC"}
1
+ {"version":3,"file":"iosInstaller.d.ts","sourceRoot":"","sources":["../../src/runtime/iosInstaller.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,62 @@
1
- import { spawnSync } from "node:child_process";
1
+ import { spawn, spawnSync } from "node:child_process";
2
+ import fsDefault from "node:fs";
3
+ import path from "node:path";
4
+ import { readInstalledRecord, writeInstalledRecord, } from "./cacheDir.js";
5
+ import { ensureRuntimeInstalled, resolveHeavyDepPath, resolveHeavyDepVersion, } from "./loader.js";
6
+ import { acquireLock } from "./lock.js";
7
+ import { computeWdaKey, findWdaSource, getWdaRoot, LAST_USED_STAMP, MIN_PREBUILT_WDA_DRIVER_MAJOR, MIN_XCODE_MAJOR, parseXcodebuildVersion, PRODUCTS_MARKER, readProductsMarker, RUNNER_APP_RELATIVE, touchLastUsed, WDA_LOCK_DIRNAME, xcodeMajor, } from "./wdaProducts.js";
8
+ /** Ceiling for one xcodebuild build-for-testing attempt (~10 min typical cold). */
9
+ export const WDA_BUILD_TIMEOUT_MS = 20 * 60_000;
10
+ /** Total attempts for a transient xcodebuild failure (20-min ops — retry once). */
11
+ export const WDA_BUILD_MAX_ATTEMPTS = 2;
12
+ /**
13
+ * How long a second `install ios` waits for a concurrent build before
14
+ * skipping. Sized to cover one full build attempt (WDA_BUILD_TIMEOUT_MS,
15
+ * 20 min — ceiling kills are never retried) plus setup slack; a transient
16
+ * retry that pushes the holder past this window just means the contender
17
+ * reports `skipped` and the products land for the NEXT run — best-effort.
18
+ */
19
+ export const WDA_LOCK_WAIT_MS = 25 * 60_000;
20
+ /** Keyed build dirs whose last-used stamp is older than this get pruned. */
21
+ export const WDA_PRUNE_AFTER_MS = 30 * 24 * 60 * 60_000;
22
+ // Transient xcodebuild failure signatures — deliberately tight (the android
23
+ // installer's pattern): infrastructure blips that a fresh attempt genuinely
24
+ // heals. Anything else (compile error, bad project, signing) is a real
25
+ // failure immediately. Deliberately ABSENT: "timed out" — a build that hit
26
+ // the 20-minute ceiling must not earn a second ceiling-length attempt (a
27
+ // 40-minute worst case would blow the CI jobs' budgets); ceiling kills are
28
+ // excluded structurally via the runner's `timedOut` flag as well.
29
+ const TRANSIENT_XCODEBUILD_SIGNATURES = [
30
+ "econnreset",
31
+ "connection reset",
32
+ "build service",
33
+ "unexpectedly quit",
34
+ "database is locked",
35
+ ];
36
+ export function isTransientXcodebuildError(message) {
37
+ const lower = String(message ?? "").toLowerCase();
38
+ return TRANSIENT_XCODEBUILD_SIGNATURES.some((sig) => lower.includes(sig));
39
+ }
2
40
  function defaultRun(command, args) {
3
41
  const result = spawnSync(command, args, {
4
42
  encoding: "utf8",
5
43
  windowsHide: true,
6
44
  // `xcrun simctl` gets the same generous ceiling probeIosToolchain uses: the
7
45
  // first cold simctl call on a hosted macOS image launches CoreSimulator and
8
- // can take far longer than a warm call. `xcode-select` is a cheap lookup.
9
- timeout: command === "xcrun" ? 120000 : 15000,
46
+ // can take far longer than a warm call. The FIRST `xcodebuild -version` on
47
+ // a fresh image pays the same first-launch initialization, and a probe
48
+ // timeout here silently skips the whole prebuild with misleading
49
+ // "full Xcode required" guidance — so it shares the generous bucket.
50
+ // `xcode-select` stays a cheap lookup.
51
+ timeout: command === "xcrun" || command === "xcodebuild" ? 120000 : 15000,
10
52
  });
11
53
  return {
12
54
  status: result.status,
13
55
  stderr: typeof result.stderr === "string" ? result.stderr : "",
56
+ stdout: typeof result.stdout === "string" ? result.stdout : "",
14
57
  };
15
58
  }
16
59
  export async function installIos({ yes = false, dryRun = false, ctx = {}, deps = {}, } = {}) {
17
- const _ctx = ctx;
18
- void _ctx;
19
60
  const logger = deps.logger ?? (() => { });
20
61
  const platform = deps.platform ?? process.platform;
21
62
  const run = deps.run ?? defaultRun;
@@ -28,6 +69,7 @@ export async function installIos({ yes = false, dryRun = false, ctx = {}, deps =
28
69
  notes: [
29
70
  "would verify xcode-select and xcrun simctl availability on macOS",
30
71
  "would report guidance for XCUITest/WebDriverAgent prerequisites",
72
+ "would verify or perform a WebDriverAgent prebuild (keyed by Xcode + driver version) for fast first XCUITest sessions",
31
73
  ],
32
74
  },
33
75
  ];
@@ -89,16 +131,342 @@ export async function installIos({ yes = false, dryRun = false, ctx = {}, deps =
89
131
  ];
90
132
  }
91
133
  logger("iOS toolchain checks passed (xcode-select + simctl).", "info");
92
- return [
93
- {
134
+ const toolchainReport = {
135
+ kind: "ios",
136
+ assetId: "ios-toolchain",
137
+ action: "already-up-to-date",
138
+ notes: [
139
+ "xcode-select and simctl are available",
140
+ "use a macOS fixture leg to validate iOS app-surface execution",
141
+ ],
142
+ };
143
+ // Best-effort to the last: even an unexpected throw (ENOSPC on a mkdir,
144
+ // a spawn ENOMEM, an unwritable installed.json) must degrade to a skipped
145
+ // row — `install ios` never exits non-zero because a prebuild couldn't
146
+ // happen, and a plain `run:` step in CI must not fail the job over it.
147
+ let wdaReport;
148
+ try {
149
+ wdaReport = await prebuildWda({ ctx, deps, run, logger });
150
+ }
151
+ catch (error) {
152
+ wdaReport = {
94
153
  kind: "ios",
95
- assetId: "ios-toolchain",
96
- action: "already-up-to-date",
154
+ assetId: "ios-wda",
155
+ action: "skipped",
97
156
  notes: [
98
- "xcode-select and simctl are available",
99
- "use a macOS fixture leg to validate iOS app-surface execution",
157
+ "the WebDriverAgent prebuild failed unexpectedly; the first iOS session will build WDA itself",
158
+ String(error?.message ?? error),
100
159
  ],
101
- },
102
- ];
160
+ };
161
+ }
162
+ return [toolchainReport, wdaReport];
163
+ }
164
+ /* c8 ignore start — real spawn; unit tests inject runBuild. */
165
+ // Keep only the tail of each output stream: the transient-signature scan and
166
+ // the reported failure tail both live at the end, and a cold WDA build can
167
+ // emit tens of MB that would otherwise sit in memory for ~20 minutes.
168
+ const BUILD_OUTPUT_TAIL_BYTES = 64 * 1024;
169
+ function defaultRunBuild(command, args, opts = {}) {
170
+ return new Promise((resolve, reject) => {
171
+ // detached: give xcodebuild its own process group so a ceiling kill can
172
+ // take down XCBBuildService/clang children too — an orphaned build
173
+ // service holding the DerivedData would poison the keyed dir.
174
+ const child = spawn(command, args, { windowsHide: true, detached: true });
175
+ let stdout = "";
176
+ let stderr = "";
177
+ let timedOut = false;
178
+ const append = (buf, d) => (buf + d).slice(-BUILD_OUTPUT_TAIL_BYTES);
179
+ child.stdout?.on("data", (d) => (stdout = append(stdout, d)));
180
+ child.stderr?.on("data", (d) => (stderr = append(stderr, d)));
181
+ let timer;
182
+ if (opts.timeoutMs) {
183
+ timer = setTimeout(() => {
184
+ timedOut = true;
185
+ stderr += `\nxcodebuild killed at the ${opts.timeoutMs} ms ceiling`;
186
+ try {
187
+ if (child.pid)
188
+ process.kill(-child.pid, "SIGKILL");
189
+ else
190
+ child.kill("SIGKILL");
191
+ }
192
+ catch {
193
+ child.kill("SIGKILL");
194
+ }
195
+ }, opts.timeoutMs);
196
+ timer.unref?.();
197
+ }
198
+ child.on("error", (err) => {
199
+ if (timer)
200
+ clearTimeout(timer);
201
+ reject(err);
202
+ });
203
+ child.on("close", (status) => {
204
+ if (timer)
205
+ clearTimeout(timer);
206
+ resolve({ status, stdout, stderr, timedOut });
207
+ });
208
+ });
209
+ }
210
+ function defaultSleep(ms) {
211
+ return new Promise((resolve) => {
212
+ const timer = setTimeout(resolve, ms);
213
+ timer.unref?.();
214
+ });
215
+ }
216
+ /* c8 ignore stop */
217
+ // --- WebDriverAgent prebuild (docs/design/ios-wda-prebuild.md, phase 2) ---
218
+ //
219
+ // Best-effort: every failure degrades to a `skipped` report row with
220
+ // guidance; `install ios` never exits non-zero because a prebuild couldn't
221
+ // happen (the session-time fallback is today's behavior — WDA builds inside
222
+ // the first XCUITest session).
223
+ async function prebuildWda({ ctx, deps, run, logger, }) {
224
+ const fs = deps.fs ?? fsDefault;
225
+ const runBuild = deps.runBuild ?? defaultRunBuild;
226
+ const ensureInstalled = deps.ensureInstalled ??
227
+ ((packages, options) => ensureRuntimeInstalled(packages, options));
228
+ const resolveDriverPath = deps.resolveDriverPath ?? resolveHeavyDepPath;
229
+ const resolveDriverVersion = deps.resolveDriverVersion ?? resolveHeavyDepVersion;
230
+ const acquire = deps.acquire ?? acquireLock;
231
+ const readRecord = deps.readRecord ?? readInstalledRecord;
232
+ const writeRecord = deps.writeRecord ?? writeInstalledRecord;
233
+ const now = deps.now ?? Date.now;
234
+ const sleep = deps.sleep ?? defaultSleep;
235
+ const report = (action, notes) => ({
236
+ kind: "ios",
237
+ assetId: "ios-wda",
238
+ action,
239
+ notes,
240
+ });
241
+ const skipped = (notes) => report("skipped", notes);
242
+ // Only full Xcode ships xcodebuild; the Command Line Tools alone cannot
243
+ // build WDA (and `xcode-select -p` can't tell the two apart).
244
+ const versionProbe = run("xcodebuild", ["-version"]);
245
+ const xcode = versionProbe.status === 0
246
+ ? parseXcodebuildVersion(versionProbe.stdout)
247
+ : null;
248
+ if (!xcode) {
249
+ return skipped([
250
+ "full Xcode is required to prebuild WebDriverAgent (xcodebuild is unavailable — Command Line Tools alone are not enough)",
251
+ "install Xcode from the App Store, run xcode-select -s <Xcode.app path>, then rerun: doc-detective install ios --yes",
252
+ (versionProbe.stderr || "").trim(),
253
+ ].filter(Boolean));
254
+ }
255
+ if (xcodeMajor(xcode) < MIN_XCODE_MAJOR) {
256
+ return skipped([
257
+ `Xcode ${xcode.version} is below the minimum (Xcode ${MIN_XCODE_MAJOR}) supported for the WebDriverAgent prebuild`,
258
+ "update Xcode, then rerun: doc-detective install ios --yes",
259
+ ]);
260
+ }
261
+ // The driver install is the heavy part of `install ios` now — routed
262
+ // through the loader so the npm-prune defenses stay engaged.
263
+ try {
264
+ await ensureInstalled(["appium-xcuitest-driver"], { ctx });
265
+ }
266
+ catch (error) {
267
+ return skipped([
268
+ "installing appium-xcuitest-driver failed; the first iOS session will retry the install",
269
+ String(error?.message ?? error),
270
+ ]);
271
+ }
272
+ const driverEntry = resolveDriverPath("appium-xcuitest-driver", ctx);
273
+ const driverVersion = resolveDriverVersion("appium-xcuitest-driver", ctx);
274
+ if (!driverEntry || !driverVersion) {
275
+ return skipped([
276
+ "appium-xcuitest-driver did not resolve after install; cannot locate the WebDriverAgent source",
277
+ ]);
278
+ }
279
+ // Mirror the session locator's floor: products built for a driver below it
280
+ // would never be consumed (the locator returns null there), so a build
281
+ // would be up to 20 minutes and ~1 GB of pure waste. Happens only with a
282
+ // user-pinned old driver in the shim's node_modules.
283
+ const driverMajor = Number.parseInt(driverVersion, 10);
284
+ if (!Number.isFinite(driverMajor) ||
285
+ driverMajor < MIN_PREBUILT_WDA_DRIVER_MAJOR) {
286
+ return skipped([
287
+ `appium-xcuitest-driver ${driverVersion} is below the minimum (${MIN_PREBUILT_WDA_DRIVER_MAJOR}.x) supported for prebuilt-WDA consumption — sessions would ignore the products`,
288
+ "upgrade the pinned driver (or remove the pin so doc-detective installs its declared version), then rerun: doc-detective install ios --yes",
289
+ ]);
290
+ }
291
+ const wdaSource = findWdaSource(driverEntry, fs);
292
+ if (!wdaSource) {
293
+ return skipped([
294
+ "the appium-webdriveragent package (WebDriverAgent.xcodeproj) was not found under the installed driver",
295
+ ]);
296
+ }
297
+ // Normalize so the root always uses the platform separator — every keyDir
298
+ // below goes through path.join, and a separator mismatch on an injected
299
+ // root would silently break the prune pass's readdir prefix matching.
300
+ const wdaRoot = path.normalize(deps.wdaRootDir ?? getWdaRoot(ctx));
301
+ const key = computeWdaKey(xcode, driverVersion);
302
+ const keyDir = path.join(wdaRoot, key);
303
+ // Pre-lock fast path: a completed build for this exact toolchain.
304
+ if (readProductsMarker(keyDir, fs)) {
305
+ touchLastUsed(keyDir, fs, now);
306
+ return report("already-up-to-date", [
307
+ `WebDriverAgent build products present for ${key}`,
308
+ ]);
309
+ }
310
+ const lock = await acquire({
311
+ dir: path.join(wdaRoot, WDA_LOCK_DIRNAME),
312
+ waitMs: WDA_LOCK_WAIT_MS,
313
+ });
314
+ if (!lock) {
315
+ return skipped([
316
+ "another install is currently building WebDriverAgent (lock wait elapsed); rerun later or let the concurrent build finish",
317
+ ]);
318
+ }
319
+ try {
320
+ // Re-check under the lock: a contender that waited out a concurrent
321
+ // build finds the now-valid marker and must not build again (the
322
+ // check-then-lock TOCTOU close from the design doc).
323
+ if (readProductsMarker(keyDir, fs)) {
324
+ touchLastUsed(keyDir, fs, now);
325
+ return report("already-up-to-date", [
326
+ `WebDriverAgent build products present for ${key} (built concurrently)`,
327
+ ]);
328
+ }
329
+ logger(`Prebuilding WebDriverAgent for ${key} (first build takes ~10 minutes)…`, "info");
330
+ const derivedDataPath = path.join(keyDir, "DerivedData");
331
+ fs.mkdirSync(derivedDataPath, { recursive: true });
332
+ const buildArgs = [
333
+ "build-for-testing",
334
+ "-project",
335
+ path.join(wdaSource, "WebDriverAgent.xcodeproj"),
336
+ "-scheme",
337
+ "WebDriverAgentRunner",
338
+ "-destination",
339
+ "generic/platform=iOS Simulator",
340
+ "-derivedDataPath",
341
+ derivedDataPath,
342
+ ];
343
+ for (let attempt = 1; attempt <= WDA_BUILD_MAX_ATTEMPTS; attempt++) {
344
+ const build = await runBuild("xcodebuild", buildArgs, {
345
+ timeoutMs: WDA_BUILD_TIMEOUT_MS,
346
+ });
347
+ if (build.status === 0)
348
+ break;
349
+ const failureText = `${build.stderr ?? ""}\n${build.stdout ?? ""}`;
350
+ // A ceiling kill is never retried: a second ceiling-length attempt
351
+ // would double the worst case to ~40 minutes and blow the CI jobs'
352
+ // budgets — and a build that needs >20 minutes isn't transient.
353
+ if (build.timedOut) {
354
+ return skipped([
355
+ `the WebDriverAgent build was killed at the ${WDA_BUILD_TIMEOUT_MS} ms ceiling; the first iOS session will build WDA itself`,
356
+ tail(failureText),
357
+ ]);
358
+ }
359
+ if (attempt < WDA_BUILD_MAX_ATTEMPTS &&
360
+ isTransientXcodebuildError(failureText)) {
361
+ logger(`Transient xcodebuild failure (attempt ${attempt}/${WDA_BUILD_MAX_ATTEMPTS}); retrying: ${tail(failureText)}`, "warn");
362
+ await sleep(attempt * 2000);
363
+ continue;
364
+ }
365
+ return skipped([
366
+ "the WebDriverAgent build failed; the first iOS session will build WDA itself",
367
+ tail(failureText),
368
+ ]);
369
+ }
370
+ const runnerApp = path.join(keyDir, RUNNER_APP_RELATIVE);
371
+ if (!fs.existsSync(runnerApp)) {
372
+ return skipped([
373
+ "the WebDriverAgent build completed but its products are missing (WebDriverAgentRunner-Runner.app not found)",
374
+ `expected: ${runnerApp}`,
375
+ ]);
376
+ }
377
+ // Publish the completeness marker LAST and atomically (temp + rename) so
378
+ // a lock-free reader never observes a half-built dir as valid.
379
+ const marker = {
380
+ key,
381
+ driverVersion,
382
+ xcode,
383
+ runnerApp,
384
+ builtAt: new Date(now()).toISOString(),
385
+ };
386
+ const markerPath = path.join(keyDir, PRODUCTS_MARKER);
387
+ // Unique tmp name (the writeInstalledRecord pattern) — belt over the
388
+ // writer lock's suspenders, so even an out-of-band writer can't clobber
389
+ // a half-written tmp.
390
+ const tmpPath = `${markerPath}.${now()}.tmp`;
391
+ fs.writeFileSync(tmpPath, JSON.stringify(marker, null, 2));
392
+ fs.renameSync(tmpPath, markerPath);
393
+ touchLastUsed(keyDir, fs, now);
394
+ // Record + prune in the same pass so installed.json never references a
395
+ // deleted key. Keys are additive subdirs: "updated" means the current
396
+ // toolchain moved to a new key, never a rebuild in place.
397
+ const record = readRecord(ctx);
398
+ const previousKeys = record.ios?.wdaKeys ?? [];
399
+ const survivors = pruneStaleKeys({ wdaRoot, keepKey: key, fs, now });
400
+ record.ios = {
401
+ wdaKeys: survivors,
402
+ updatedAt: new Date(now()).toISOString(),
403
+ };
404
+ writeRecord(record, ctx);
405
+ const action = previousKeys.length > 0 && !previousKeys.includes(key)
406
+ ? "updated"
407
+ : "installed";
408
+ logger(`WebDriverAgent prebuilt for ${key}.`, "info");
409
+ return report(action, [
410
+ `WebDriverAgent built for ${key}`,
411
+ `products: ${runnerApp}`,
412
+ ]);
413
+ }
414
+ finally {
415
+ lock.release();
416
+ }
417
+ }
418
+ /**
419
+ * Under the writer lock: delete sibling key dirs that are provably stale —
420
+ * no completeness marker (a crashed half-build; invisible to readers and
421
+ * safe to clear since we hold the only writer lock), or a last-used stamp
422
+ * older than the prune window. Returns the surviving keys, current first.
423
+ */
424
+ function pruneStaleKeys({ wdaRoot, keepKey, fs, now, }) {
425
+ const survivors = [keepKey];
426
+ let entries = [];
427
+ try {
428
+ entries = fs.readdirSync(wdaRoot);
429
+ }
430
+ catch {
431
+ return survivors;
432
+ }
433
+ for (const entry of entries) {
434
+ // Skip the live lock dir itself; its `.lock.stale-*` takeover-trash
435
+ // siblings are markerless and get cleaned like any crashed half-build.
436
+ if (entry === keepKey || entry === WDA_LOCK_DIRNAME)
437
+ continue;
438
+ const dir = path.join(wdaRoot, entry);
439
+ let stale = false;
440
+ if (!readProductsMarker(dir, fs)) {
441
+ stale = true;
442
+ }
443
+ else {
444
+ try {
445
+ const stamp = fs.statSync(path.join(dir, LAST_USED_STAMP));
446
+ stale = now() - stamp.mtimeMs > WDA_PRUNE_AFTER_MS;
447
+ }
448
+ catch {
449
+ // Marked but stampless (pre-stamp layout or manual tampering):
450
+ // keep it — deleting live products is the worse failure.
451
+ stale = false;
452
+ }
453
+ }
454
+ if (stale) {
455
+ try {
456
+ fs.rmSync(dir, { recursive: true, force: true });
457
+ }
458
+ catch {
459
+ survivors.push(entry);
460
+ }
461
+ }
462
+ else {
463
+ survivors.push(entry);
464
+ }
465
+ }
466
+ return survivors;
467
+ }
468
+ function tail(text, max = 400) {
469
+ const trimmed = (text || "").trim();
470
+ return trimmed.length <= max ? trimmed : `…${trimmed.slice(-max)}`;
103
471
  }
104
472
  //# sourceMappingURL=iosInstaller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"iosInstaller.js","sourceRoot":"","sources":["../../src/runtime/iosInstaller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"iosInstaller.js","sourceRoot":"","sources":["../../src/runtime/iosInstaller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ export interface LockFs {
2
+ mkdirSync(p: string, opts?: {
3
+ recursive?: boolean;
4
+ }): unknown;
5
+ writeFileSync(p: string, data: string): void;
6
+ readFileSync(p: string): string | Buffer;
7
+ rmSync(p: string, opts?: {
8
+ recursive?: boolean;
9
+ force?: boolean;
10
+ }): void;
11
+ renameSync(from: string, to: string): void;
12
+ }
13
+ export interface LockDeps {
14
+ fs?: LockFs;
15
+ now?: () => number;
16
+ sleep?: (ms: number) => Promise<void>;
17
+ pid?: number;
18
+ hostname?: string;
19
+ /** Whether a pid is alive on THIS host (only consulted for same-hostname metadata). */
20
+ isPidAlive?: (pid: number) => boolean;
21
+ /** Start a repeating timer; returns a stop function. Default: unref'd setInterval. */
22
+ startInterval?: (fn: () => void, ms: number) => () => void;
23
+ }
24
+ export interface AcquireLockOptions {
25
+ /** The lock directory itself (created exclusively; its existence IS the lock). */
26
+ dir: string;
27
+ /** Max time to wait for the lock before giving up (default 10 min). */
28
+ waitMs?: number;
29
+ /** Poll interval while waiting (default 1 s). */
30
+ pollMs?: number;
31
+ /** Holder heartbeat refresh interval (default 30 s). */
32
+ heartbeatMs?: number;
33
+ /** Heartbeat age beyond which a contender may take over (default 5 min). */
34
+ staleMs?: number;
35
+ deps?: LockDeps;
36
+ }
37
+ export interface LockHandle {
38
+ /** Stop the heartbeat and remove the lock dir. Safe to call twice. */
39
+ release(): void;
40
+ }
41
+ /**
42
+ * Acquire the advisory lock at `dir`, waiting up to `waitMs`. Returns a
43
+ * handle whose `release()` frees the lock, or `null` when the wait elapsed
44
+ * with the lock still held by a live owner.
45
+ */
46
+ export declare function acquireLock(options: AcquireLockOptions): Promise<LockHandle | null>;
47
+ /**
48
+ * Run `fn` while holding the lock, releasing on both success and throw.
49
+ * Returns `null` without running `fn` when the lock could not be acquired
50
+ * within the wait bound.
51
+ */
52
+ export declare function withLock<T>(options: AcquireLockOptions, fn: () => Promise<T> | T): Promise<{
53
+ acquired: boolean;
54
+ result?: T;
55
+ }>;
56
+ //# sourceMappingURL=lock.d.ts.map