mobilewright 0.0.16 → 0.0.18

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.
Binary file
package/dist/cli.js CHANGED
@@ -1,10 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import { Command } from 'commander';
3
3
  import { existsSync } from 'node:fs';
4
- import { resolve } from 'node:path';
4
+ import { readFile, writeFile } from 'node:fs/promises';
5
+ import { resolve, dirname } from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+ import { createRequire } from 'node:module';
5
8
  import { MobilecliDriver, DEFAULT_URL } from '@mobilewright/driver-mobilecli';
6
9
  import { ensureMobilecliReachable } from './server.js';
10
+ import { gatherChecks, renderTerminal, renderJSON } from './commands/doctor.js';
11
+ import { brandReport } from './reporter.js';
12
+ const _require = createRequire(import.meta.url);
13
+ const _pkg = _require('../package.json');
7
14
  const HTML_REPORT_DIR = 'mobilewright-report';
15
+ const TEMPLATES_DIR = resolve(dirname(fileURLToPath(import.meta.url)), '..', 'templates');
8
16
  const program = new Command();
9
17
  program.name('mobilewright');
10
18
  program.version('0.0.1');
@@ -66,6 +74,15 @@ program
66
74
  if (opts.passWithNoTests)
67
75
  c.cliPassWithNoTests = true;
68
76
  const status = await runAllTestsWithConfig(config);
77
+ // Post-process HTML report with Mobilewright branding
78
+ if (opts.reporter && opts.reporter.split(',').some(r => r.trim() === 'html')) {
79
+ try {
80
+ brandReport(resolve(process.cwd(), HTML_REPORT_DIR));
81
+ }
82
+ catch {
83
+ // Report branding is best-effort; don't fail the test run
84
+ }
85
+ }
69
86
  const exitCode = status === 'interrupted' ? 130 : status === 'passed' ? 0 : 1;
70
87
  process.exit(exitCode);
71
88
  });
@@ -117,6 +134,47 @@ program
117
134
  await serverProcess.kill();
118
135
  }
119
136
  });
137
+ // ── doctor ─────────────────────────────────────────────────────────────
138
+ program
139
+ .command('doctor')
140
+ .description('check your environment for mobile development readiness')
141
+ .option('--json', 'output as JSON — machine-readable, ideal for AI agent consumption')
142
+ .option('--category <name>', 'run checks for one category only: system | ios | android')
143
+ .action((opts) => {
144
+ const validCategories = ['system', 'ios', 'android'];
145
+ if (opts.category && !validCategories.includes(opts.category)) {
146
+ console.error(`Unknown category "${opts.category}". Valid options: ${validCategories.join(', ')}`);
147
+ process.exit(1);
148
+ }
149
+ const checks = gatherChecks(opts.category);
150
+ if (opts.json) {
151
+ console.log(JSON.stringify(renderJSON(checks, _pkg.version), null, 2));
152
+ }
153
+ else {
154
+ process.stdout.write(renderTerminal(checks, _pkg.version));
155
+ }
156
+ if (checks.some(c => c.status === 'error'))
157
+ process.exitCode = 1;
158
+ });
159
+ // ── init ───────────────────────────────────────────────────────────────
160
+ program
161
+ .command('init')
162
+ .description('scaffold a mobilewright.config.ts and example test in the current directory')
163
+ .action(async () => {
164
+ const files = [
165
+ { src: 'mobilewright.config.ts', dest: resolve(process.cwd(), 'mobilewright.config.ts') },
166
+ { src: 'example.test.ts', dest: resolve(process.cwd(), 'example.test.ts') },
167
+ ];
168
+ for (const { src, dest } of files) {
169
+ if (existsSync(dest)) {
170
+ console.log(`skipped ${src} (already exists)`);
171
+ continue;
172
+ }
173
+ const content = await readFile(resolve(TEMPLATES_DIR, src), 'utf8');
174
+ await writeFile(dest, content, 'utf8');
175
+ console.log(`created ${src}`);
176
+ }
177
+ });
120
178
  function padRight(str, len) {
121
179
  return str.length >= len ? str + ' ' : str + ' '.repeat(len - str.length);
122
180
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,iBAAiB,CAAwB,CAAC;AAEhE,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAC9C,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AAE1F,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC7B,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAEzB,0EAA0E;AAC1E,OAAO;KACJ,OAAO,CAAC,uBAAuB,CAAC;KAChC,WAAW,CAAC,WAAW,CAAC;KACxB,MAAM,CAAC,qBAAqB,EAAE,oBAAoB,CAAC;KACnD,MAAM,CAAC,uBAAuB,EAAE,yCAAyC,CAAC;KAC1E,MAAM,CAAC,eAAe,EAAE,oCAAoC,CAAC;KAC7D,MAAM,CAAC,sBAAsB,EAAE,wCAAwC,CAAC;KACxE,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;KACvE,MAAM,CAAC,qBAAqB,EAAE,qCAAqC,CAAC;KACpE,MAAM,CAAC,qBAAqB,EAAE,8BAA8B,CAAC;KAC7D,MAAM,CAAC,qBAAqB,EAAE,8BAA8B,CAAC;KAC7D,MAAM,CAAC,sBAAsB,EAAE,sCAAsC,CAAC;KACtE,MAAM,CAAC,QAAQ,EAAE,qCAAqC,CAAC;KACvD,MAAM,CAAC,KAAK,EAAE,IAAc,EAAE,IAA6B,EAAE,EAAE;IAC9D,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAClF,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,kCAAkC,CAAC,CAAC;IAEnF,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,IAAI,IAAI,CAAC,OAAO;QAAE,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,IAAI,CAAC,OAAO;QAAE,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,IAAI,CAAC,OAAO;QAAE,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IACnD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,KAAK,GAAI,IAAI,CAAC,QAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnD,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE;YAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,MAAM;gBAAE,OAAO,CAAC,CAAC,EAAE,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC,CAAC;YAChE,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kEAAkE;IAClE,IAAI,UAAU,GAAG,IAAI,CAAC,MAA4B,CAAC;IACnD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,KAAK,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;YACjE,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,qBAAqB,GAAG,GAAG,CAAC,CAAC;YACtE,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC1B,UAAU,GAAG,SAAS,CAAC;gBACvB,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAC/D,MAAM,CAAC,GAAG,MAAiC,CAAC;IAC5C,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;IACjB,IAAI,IAAI,CAAC,IAAI;QAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;IACrC,IAAI,IAAI,CAAC,UAAU;QAAE,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;IACvD,IAAI,IAAI,CAAC,OAAO;QAAE,CAAC,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC;IACpD,IAAI,IAAI,CAAC,IAAI;QAAE,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC;IACpC,IAAI,IAAI,CAAC,eAAe;QAAE,CAAC,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAEtD,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAEnD,sDAAsD;IACtD,IAAI,IAAI,CAAC,QAAQ,IAAK,IAAI,CAAC,QAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC;QACzF,IAAI,CAAC;YACH,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,0DAA0D;QAC5D,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC,CAAC,CAAC;AAEL,0EAA0E;AAC1E,+DAA+D;AAC/D,sEAAsE;AACtE,OAAO;KACJ,OAAO,CAAC,sBAAsB,CAAC;KAC/B,WAAW,CAAC,kBAAkB,CAAC;KAC/B,MAAM,CAAC,eAAe,EAAE,yBAAyB,EAAE,WAAW,CAAC;KAC/D,MAAM,CAAC,eAAe,EAAE,yBAAyB,EAAE,MAAM,CAAC;KAC1D,MAAM,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAoC,EAAE,EAAE;IACjF,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;IACnD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,eAAe,CAAC,CAAC;IACrC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEL,0EAA0E;AAC1E,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,uDAAuD,CAAC;KACpE,MAAM,CAAC,aAAa,EAAE,sBAAsB,EAAE,WAAW,CAAC;KAC1D,MAAM,CAAC,KAAK,EAAE,IAAqB,EAAE,EAAE;IACtC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,wBAAwB,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;QAE3C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YACjC,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CACT,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;YAChB,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACpB,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC;YACxB,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACpB,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CACxB,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAE5B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CACT,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;gBAChB,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBACpB,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACxB,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBACpB,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACxB,CAAC;QACJ,CAAC;IACH,CAAC;YAAS,CAAC;QACT,IAAI,aAAa;YAAE,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;IAChD,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,0EAA0E;AAC1E,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,yDAAyD,CAAC;KACtE,MAAM,CAAC,QAAQ,EAAE,mEAAmE,CAAC;KACrF,MAAM,CAAC,mBAAmB,EAAE,0DAA0D,CAAC;KACvF,MAAM,CAAC,CAAC,IAA2C,EAAE,EAAE;IACtD,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAU,CAAC;IAG9D,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAoB,CAAC,EAAE,CAAC;QAC1E,OAAO,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,QAAQ,qBAAqB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,QAAgC,CAAC,CAAC;IAEnE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC;QAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACnE,CAAC,CAAC,CAAC;AAEL,0EAA0E;AAC1E,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,6EAA6E,CAAC;KAC1F,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,KAAK,GAAG;QACZ,EAAE,GAAG,EAAE,wBAAwB,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,wBAAwB,CAAC,EAAE;QACzF,EAAE,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,EAAE;KAC5E,CAAC;IAEF,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC;QAClC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,mBAAmB,CAAC,CAAC;YAChD,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QACpE,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;IACjC,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,SAAS,QAAQ,CAAC,GAAW,EAAE,GAAW;IACxC,OAAO,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;AAC7E,CAAC;AAED,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * mobilewright doctor
3
+ *
4
+ * Checks the local environment for everything needed to do iOS and Android
5
+ * development. Supports macOS and Windows. Prints a human-readable report
6
+ * by default; pass --json for structured output designed for AI agent
7
+ * consumption.
8
+ *
9
+ * Each check result has the shape:
10
+ * id – stable identifier for programmatic use
11
+ * name – human-readable label
12
+ * category – 'system' | 'ios' | 'android'
13
+ * status – 'ok' | 'warning' | 'error'
14
+ * version – detected version string (null if not applicable)
15
+ * path – detected binary / directory path (null if not applicable)
16
+ * details – explanation when status !== 'ok' (null otherwise)
17
+ * fix – ordered shell commands to resolve the issue (null if ok)
18
+ */
19
+ export type CheckStatus = 'ok' | 'warning' | 'error';
20
+ export type CheckCategory = 'system' | 'ios' | 'android';
21
+ export interface CheckResult {
22
+ id: string;
23
+ name: string;
24
+ category: CheckCategory;
25
+ status: CheckStatus;
26
+ version: string | null;
27
+ path: string | null;
28
+ details: string | null;
29
+ /** Ordered list of shell commands that resolve this issue. */
30
+ fix: string[] | null;
31
+ }
32
+ export interface DoctorReport {
33
+ _schema: 'mobilewright-doctor-v1';
34
+ mobilewright_version: string;
35
+ timestamp: string;
36
+ platform: string;
37
+ arch: string;
38
+ platform_version: string;
39
+ summary: {
40
+ total: number;
41
+ ok: number;
42
+ warnings: number;
43
+ errors: number;
44
+ ready: boolean;
45
+ };
46
+ /**
47
+ * Plain-English instructions for an AI agent reading this JSON.
48
+ * Tells it what to do with the `fix` arrays.
49
+ */
50
+ agent_instructions: string;
51
+ checks: CheckResult[];
52
+ }
53
+ export declare function gatherChecks(categoryFilter?: CheckCategory): CheckResult[];
54
+ export declare function renderTerminal(checks: CheckResult[], version: string): string;
55
+ export declare function renderJSON(checks: CheckResult[], version: string): DoctorReport;
56
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AASH,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;AACrD,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,8DAA8D;IAC9D,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,wBAAwB,CAAC;IAClC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;IACF;;;OAGG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAqrBD,wBAAgB,YAAY,CAAC,cAAc,CAAC,EAAE,aAAa,GAAG,WAAW,EAAE,CA8B1E;AAID,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAsE7E;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,CAwB/E"}
@@ -0,0 +1,760 @@
1
+ /**
2
+ * mobilewright doctor
3
+ *
4
+ * Checks the local environment for everything needed to do iOS and Android
5
+ * development. Supports macOS and Windows. Prints a human-readable report
6
+ * by default; pass --json for structured output designed for AI agent
7
+ * consumption.
8
+ *
9
+ * Each check result has the shape:
10
+ * id – stable identifier for programmatic use
11
+ * name – human-readable label
12
+ * category – 'system' | 'ios' | 'android'
13
+ * status – 'ok' | 'warning' | 'error'
14
+ * version – detected version string (null if not applicable)
15
+ * path – detected binary / directory path (null if not applicable)
16
+ * details – explanation when status !== 'ok' (null otherwise)
17
+ * fix – ordered shell commands to resolve the issue (null if ok)
18
+ */
19
+ import { spawnSync } from 'node:child_process';
20
+ import { accessSync, constants, readdirSync } from 'node:fs';
21
+ import { arch, homedir, release } from 'node:os';
22
+ import { join } from 'node:path';
23
+ // ─── ANSI helpers ─────────────────────────────────────────────────────────────
24
+ const C = {
25
+ reset: '\x1b[0m',
26
+ bold: '\x1b[1m',
27
+ dim: '\x1b[2m',
28
+ green: '\x1b[32m',
29
+ yellow: '\x1b[33m',
30
+ red: '\x1b[31m',
31
+ cyan: '\x1b[36m',
32
+ gray: '\x1b[90m',
33
+ white: '\x1b[97m',
34
+ };
35
+ const ICON = {
36
+ ok: `${C.green}✓${C.reset}`,
37
+ warning: `${C.yellow}⚠${C.reset}`,
38
+ error: `${C.red}✗${C.reset}`,
39
+ };
40
+ // ─── Platform helpers ─────────────────────────────────────────────────────────
41
+ function isMac() { return process.platform === 'darwin'; }
42
+ function isWin() { return process.platform === 'win32'; }
43
+ // ─── Low-level utilities ──────────────────────────────────────────────────────
44
+ function run(cmd, args = [], opts = {}) {
45
+ const r = spawnSync(cmd, args, { encoding: 'utf8', timeout: 8000, env: process.env, ...opts });
46
+ if (r.error || r.status !== 0)
47
+ return null;
48
+ return (r.stdout || '').trim() || null;
49
+ }
50
+ /** Like run() but merges stdout + stderr — needed for java -version. */
51
+ function runCombined(cmd, args = []) {
52
+ const r = spawnSync(cmd, args, { encoding: 'utf8', timeout: 8000, env: process.env });
53
+ return ((r.stderr || '') + (r.stdout || '')).trim() || null;
54
+ }
55
+ function which(bin) {
56
+ // On Windows use `where`, on Unix use `which`
57
+ if (isWin()) {
58
+ const r = spawnSync('where', [bin], { encoding: 'utf8', timeout: 5000, env: process.env });
59
+ if (r.error || r.status !== 0)
60
+ return null;
61
+ // `where` returns all matches — take the first line
62
+ return (r.stdout || '').split(/\r?\n/)[0]?.trim() || null;
63
+ }
64
+ return run('which', [bin]);
65
+ }
66
+ function pathExists(p) {
67
+ try {
68
+ accessSync(p, constants.F_OK);
69
+ return true;
70
+ }
71
+ catch {
72
+ return false;
73
+ }
74
+ }
75
+ function check(id, name, category, status, opts = {}) {
76
+ return {
77
+ id, name, category, status,
78
+ version: opts.version ?? null,
79
+ path: opts.path ?? null,
80
+ details: opts.details ?? null,
81
+ fix: opts.fix ?? null,
82
+ };
83
+ }
84
+ // ─── System checks ────────────────────────────────────────────────────────────
85
+ function checkMacOS() {
86
+ if (!isMac())
87
+ return null;
88
+ const version = run('sw_vers', ['-productVersion']);
89
+ const name = run('sw_vers', ['-productName']) ?? 'macOS';
90
+ if (!version) {
91
+ return check('macos', 'macOS', 'system', 'error', {
92
+ details: 'Could not determine macOS version.',
93
+ });
94
+ }
95
+ const major = parseInt(version.split('.')[0], 10);
96
+ const cpu = arch() === 'arm64' ? 'Apple Silicon (arm64)' : 'Intel (x86_64)';
97
+ return check('macos', 'macOS', 'system', major >= 13 ? 'ok' : 'warning', {
98
+ version: `${name} ${version} [${cpu}]`,
99
+ details: major < 13 ? 'macOS 13 Ventura or newer is recommended.' : null,
100
+ fix: major < 13 ? ['# Open System Settings → General → Software Update'] : null,
101
+ });
102
+ }
103
+ function checkWindows() {
104
+ if (!isWin())
105
+ return null;
106
+ // `ver` outputs e.g. "Microsoft Windows [Version 10.0.22631.4460]"
107
+ const raw = run('cmd', ['/c', 'ver']);
108
+ const match = raw?.match(/\[Version ([^\]]+)\]/);
109
+ const version = match ? match[1] : raw ?? 'unknown';
110
+ // Build number 22000+ = Windows 11
111
+ const build = parseInt(version.split('.')[2] ?? '0', 10);
112
+ const isWin11 = build >= 22000;
113
+ return check('windows', 'Windows', 'system', isWin11 ? 'ok' : 'warning', {
114
+ version,
115
+ details: !isWin11 ? 'Windows 11 is recommended for the best Android development experience.' : null,
116
+ });
117
+ }
118
+ function checkHomebrew() {
119
+ if (!isMac())
120
+ return null;
121
+ const brewPath = which('brew');
122
+ if (!brewPath) {
123
+ return check('homebrew', 'Homebrew', 'system', 'error', {
124
+ details: 'Homebrew is the primary package manager for macOS dev tooling.',
125
+ fix: [
126
+ '/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"',
127
+ '# Follow the "Next steps" printed by the installer to add brew to your PATH',
128
+ ],
129
+ });
130
+ }
131
+ const version = run('brew', ['--version'])?.split('\n')[0]?.replace('Homebrew ', '');
132
+ return check('homebrew', 'Homebrew', 'system', 'ok', { version, path: brewPath });
133
+ }
134
+ function checkWingetOrChoco() {
135
+ if (!isWin())
136
+ return null;
137
+ // Prefer winget (built into Windows 11), fall back to choco
138
+ const wingetPath = which('winget');
139
+ if (wingetPath) {
140
+ const version = run('winget', ['--version'])?.replace('v', '');
141
+ return check('package_manager', 'winget', 'system', 'ok', { version, path: wingetPath });
142
+ }
143
+ const chocoPath = which('choco');
144
+ if (chocoPath) {
145
+ const version = run('choco', ['--version']);
146
+ return check('package_manager', 'Chocolatey', 'system', 'ok', { version, path: chocoPath });
147
+ }
148
+ return check('package_manager', 'Package Manager (winget / Chocolatey)', 'system', 'warning', {
149
+ details: 'A package manager makes installing dev tools much easier.',
150
+ fix: [
151
+ '# winget ships with Windows 11 — update via Microsoft Store if missing',
152
+ '# Or install Chocolatey (run in admin PowerShell):',
153
+ 'Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString("https://community.chocolatey.org/install.ps1"))',
154
+ ],
155
+ });
156
+ }
157
+ function checkGit() {
158
+ const gitPath = which('git');
159
+ if (!gitPath) {
160
+ return check('git', 'Git', 'system', 'error', {
161
+ details: 'Git is required for cloning repos and most toolchains.',
162
+ fix: isMac()
163
+ ? ['xcode-select --install']
164
+ : ['winget install --id Git.Git', '# Or: choco install git'],
165
+ });
166
+ }
167
+ return check('git', 'Git', 'system', 'ok', {
168
+ version: run('git', ['--version'])?.replace('git version ', ''),
169
+ path: gitPath,
170
+ });
171
+ }
172
+ function checkNode() {
173
+ const nodePath = which('node');
174
+ if (!nodePath) {
175
+ return check('node', 'Node.js', 'system', 'error', {
176
+ details: 'Node.js 18+ is required.',
177
+ fix: isMac()
178
+ ? [
179
+ 'brew install node',
180
+ '# Or use nvm: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/install.sh | bash && nvm install --lts',
181
+ ]
182
+ : [
183
+ 'winget install OpenJS.NodeJS.LTS',
184
+ '# Or: choco install nodejs-lts',
185
+ '# Or use nvm-windows: winget install CoreyButler.NVMforWindows',
186
+ ],
187
+ });
188
+ }
189
+ const version = run('node', ['--version']);
190
+ const major = parseInt(version?.replace('v', '').split('.')[0] ?? '0', 10);
191
+ const ok = major >= 18;
192
+ return check('node', 'Node.js', 'system', ok ? 'ok' : 'warning', {
193
+ version,
194
+ path: nodePath,
195
+ details: !ok ? 'Node.js 18 or newer is required.' : null,
196
+ fix: !ok
197
+ ? isMac()
198
+ ? ['brew upgrade node']
199
+ : ['winget upgrade OpenJS.NodeJS.LTS']
200
+ : null,
201
+ });
202
+ }
203
+ function checkNpm() {
204
+ const p = which('npm');
205
+ if (!p) {
206
+ return check('npm', 'npm', 'system', 'error', {
207
+ details: 'npm ships with Node.js — reinstall Node.js.',
208
+ fix: isMac() ? ['brew install node'] : ['winget install OpenJS.NodeJS.LTS'],
209
+ });
210
+ }
211
+ return check('npm', 'npm', 'system', 'ok', { version: run('npm', ['--version']), path: p });
212
+ }
213
+ // ─── iOS checks (macOS only) ──────────────────────────────────────────────────
214
+ function checkXcode() {
215
+ if (!isMac())
216
+ return null;
217
+ const raw = run('xcodebuild', ['-version']);
218
+ if (!raw) {
219
+ return check('xcode', 'Xcode', 'ios', 'error', {
220
+ details: 'Xcode is required for building iOS apps and running simulators.',
221
+ fix: [
222
+ '# Install from the Mac App Store:',
223
+ 'open "https://apps.apple.com/app/xcode/id497799835"',
224
+ '# Or via mas-cli:',
225
+ 'brew install mas && mas install 497799835',
226
+ '# Accept the license after install:',
227
+ 'sudo xcodebuild -license accept',
228
+ ],
229
+ });
230
+ }
231
+ const lines = raw.split('\n');
232
+ const version = lines[0]?.replace('Xcode ', '');
233
+ const build = lines[1]?.replace('Build version ', '');
234
+ const xcPath = run('xcode-select', ['-p']);
235
+ return check('xcode', 'Xcode', 'ios', 'ok', {
236
+ version: `${version} (${build})`,
237
+ path: xcPath,
238
+ });
239
+ }
240
+ function checkXcodeCLT() {
241
+ if (!isMac())
242
+ return null;
243
+ const cltPath = run('xcode-select', ['-p']);
244
+ if (!cltPath) {
245
+ return check('xcode_clt', 'Xcode Command Line Tools', 'ios', 'error', {
246
+ details: 'CLT provides compilers and build tools required by many packages.',
247
+ fix: ['xcode-select --install'],
248
+ });
249
+ }
250
+ return check('xcode_clt', 'Xcode Command Line Tools', 'ios', 'ok', {
251
+ path: cltPath,
252
+ details: cltPath.includes('Xcode.app') ? 'Provided by full Xcode install' : 'Standalone CLT install',
253
+ });
254
+ }
255
+ function checkIOSSimulators() {
256
+ if (!isMac())
257
+ return null;
258
+ if (!which('xcrun')) {
259
+ return check('ios_simulators', 'iOS Simulators', 'ios', 'error', {
260
+ fix: ['xcode-select --install'],
261
+ });
262
+ }
263
+ // Also validates xcrun/simctl responds — a hang here would block mobilecli
264
+ const raw = run('xcrun', ['simctl', 'list', 'devices', '--json'], { timeout: 10000 });
265
+ if (!raw) {
266
+ return check('ios_simulators', 'iOS Simulators', 'ios', 'error', {
267
+ details: '`xcrun simctl list` timed out or failed. Xcode may need repair.',
268
+ fix: [
269
+ 'sudo xcode-select --reset',
270
+ 'sudo xcodebuild -license accept',
271
+ '# If the issue persists, reinstall Xcode Command Line Tools:',
272
+ 'sudo rm -rf /Library/Developer/CommandLineTools',
273
+ 'xcode-select --install',
274
+ ],
275
+ });
276
+ }
277
+ try {
278
+ const data = JSON.parse(raw);
279
+ const iosDevices = Object.entries(data.devices ?? {})
280
+ .filter(([runtime]) => runtime.toLowerCase().includes('ios'))
281
+ .flatMap(([, devs]) => devs.filter(d => d.isAvailable));
282
+ if (iosDevices.length === 0) {
283
+ return check('ios_simulators', 'iOS Simulators', 'ios', 'warning', {
284
+ details: 'No iOS simulators found. Install one via Xcode → Settings → Platforms.',
285
+ fix: ['open -a Xcode', '# Xcode → Settings (⌘,) → Platforms → click + → iOS'],
286
+ });
287
+ }
288
+ return check('ios_simulators', 'iOS Simulators', 'ios', 'ok', {
289
+ version: `${iosDevices.length} simulator${iosDevices.length !== 1 ? 's' : ''} available`,
290
+ });
291
+ }
292
+ catch {
293
+ return check('ios_simulators', 'iOS Simulators', 'ios', 'warning', {
294
+ details: 'Could not parse simulator list.',
295
+ });
296
+ }
297
+ }
298
+ // ─── Android checks ───────────────────────────────────────────────────────────
299
+ function checkJava() {
300
+ const javaPath = which('java');
301
+ if (!javaPath) {
302
+ return check('java', 'Java (JDK)', 'android', 'error', {
303
+ details: 'JDK 17 is recommended for Android development.',
304
+ fix: isMac()
305
+ ? [
306
+ 'brew install --cask zulu@17',
307
+ '# Add to your shell profile (~/.zshrc):',
308
+ 'export JAVA_HOME=$(/usr/libexec/java_home -v 17)',
309
+ ]
310
+ : [
311
+ '# Install Azul Zulu JDK 17 (recommended for Android):',
312
+ 'winget install Azul.Zulu.17.JDK',
313
+ '# Or: choco install zulu17',
314
+ '# Then set JAVA_HOME in System Environment Variables to:',
315
+ '# C:\\Program Files\\Zulu\\zulu-17',
316
+ ],
317
+ });
318
+ }
319
+ const raw = runCombined('java', ['-version']);
320
+ const match = raw?.match(/version "([^"]+)"/);
321
+ const version = match ? match[1] : raw?.split('\n')[0] ?? null;
322
+ const parts = version?.split('.') ?? [];
323
+ const major = parts[0] === '1' ? parseInt(parts[1] ?? '0', 10) : parseInt(parts[0] ?? '0', 10);
324
+ const ok = major >= 11;
325
+ return check('java', 'Java (JDK)', 'android', ok ? 'ok' : 'warning', {
326
+ version,
327
+ path: javaPath,
328
+ details: !ok ? 'Java 17 is recommended for Android.' : null,
329
+ fix: !ok
330
+ ? isMac()
331
+ ? ['brew install --cask zulu@17']
332
+ : ['winget install Azul.Zulu.17.JDK']
333
+ : null,
334
+ });
335
+ }
336
+ function checkJavaHome() {
337
+ const javaHome = process.env['JAVA_HOME'];
338
+ if (!javaHome) {
339
+ return check('java_home', 'JAVA_HOME', 'android', 'warning', {
340
+ details: 'JAVA_HOME is not set. Some Android build tools require it explicitly.',
341
+ fix: isMac()
342
+ ? [
343
+ '# Add to your shell profile (~/.zshrc or ~/.bashrc):',
344
+ 'export JAVA_HOME=$(/usr/libexec/java_home)',
345
+ '# Or for a specific version:',
346
+ 'export JAVA_HOME=$(/usr/libexec/java_home -v 17)',
347
+ ]
348
+ : [
349
+ '# Set JAVA_HOME in System Environment Variables (run in admin PowerShell):',
350
+ '[System.Environment]::SetEnvironmentVariable("JAVA_HOME", "C:\\Program Files\\Zulu\\zulu-17", "Machine")',
351
+ ],
352
+ });
353
+ }
354
+ if (!pathExists(javaHome)) {
355
+ return check('java_home', 'JAVA_HOME', 'android', 'error', {
356
+ details: `JAVA_HOME="${javaHome}" does not exist.`,
357
+ fix: isMac()
358
+ ? ['export JAVA_HOME=$(/usr/libexec/java_home)']
359
+ : ['# Update JAVA_HOME in System Environment Variables to a valid JDK path'],
360
+ });
361
+ }
362
+ return check('java_home', 'JAVA_HOME', 'android', 'ok', { path: javaHome });
363
+ }
364
+ function checkAndroidHome() {
365
+ const androidHome = process.env['ANDROID_HOME'] ?? process.env['ANDROID_SDK_ROOT'];
366
+ // Default SDK locations per platform
367
+ const defaultPath = isMac()
368
+ ? join(homedir(), 'Library', 'Android', 'sdk')
369
+ : isWin()
370
+ ? join(process.env['LOCALAPPDATA'] ?? join(homedir(), 'AppData', 'Local'), 'Android', 'Sdk')
371
+ : join(homedir(), 'Android', 'Sdk');
372
+ if (!androidHome) {
373
+ return check('android_home', 'ANDROID_HOME', 'android', 'error', {
374
+ details: 'ANDROID_HOME is not set. Install Android Studio and configure it.',
375
+ fix: isMac()
376
+ ? [
377
+ 'brew install --cask android-studio',
378
+ '# Open Android Studio and complete the setup wizard (downloads the SDK)',
379
+ '# Then add to your shell profile (~/.zshrc or ~/.bashrc):',
380
+ 'export ANDROID_HOME=$HOME/Library/Android/sdk',
381
+ 'export PATH=$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator',
382
+ ]
383
+ : [
384
+ 'winget install Google.AndroidStudio',
385
+ '# Or: choco install androidstudio',
386
+ '# Open Android Studio and complete the setup wizard (downloads the SDK)',
387
+ '# Then set ANDROID_HOME in System Environment Variables (admin PowerShell):',
388
+ `[System.Environment]::SetEnvironmentVariable("ANDROID_HOME", "$env:LOCALAPPDATA\\Android\\Sdk", "Machine")`,
389
+ `$path = [System.Environment]::GetEnvironmentVariable("PATH", "Machine")`,
390
+ `[System.Environment]::SetEnvironmentVariable("PATH", "$path;$env:LOCALAPPDATA\\Android\\Sdk\\platform-tools;$env:LOCALAPPDATA\\Android\\Sdk\\emulator", "Machine")`,
391
+ ],
392
+ });
393
+ }
394
+ if (!pathExists(androidHome)) {
395
+ return check('android_home', 'ANDROID_HOME', 'android', 'error', {
396
+ details: `ANDROID_HOME="${androidHome}" does not exist. Run Android Studio setup.`,
397
+ fix: isMac()
398
+ ? ['open -a "Android Studio"']
399
+ : ['# Open Android Studio to download the SDK, or run: winget install Google.AndroidStudio'],
400
+ });
401
+ }
402
+ const envVar = process.env['ANDROID_HOME'] ? 'ANDROID_HOME' : 'ANDROID_SDK_ROOT';
403
+ return check('android_home', 'ANDROID_HOME', 'android', 'ok', {
404
+ path: androidHome,
405
+ details: `Set via ${envVar}`,
406
+ });
407
+ }
408
+ function findAdb() {
409
+ const androidHome = process.env['ANDROID_HOME'] ?? process.env['ANDROID_SDK_ROOT'];
410
+ if (androidHome) {
411
+ const candidate = join(androidHome, 'platform-tools', isWin() ? 'adb.exe' : 'adb');
412
+ if (pathExists(candidate))
413
+ return candidate;
414
+ }
415
+ return which('adb');
416
+ }
417
+ function checkADB() {
418
+ const adbPath = findAdb();
419
+ if (!adbPath) {
420
+ return check('adb', 'ADB (Android Debug Bridge)', 'android', 'error', {
421
+ details: 'ADB is required to communicate with Android devices and emulators.',
422
+ fix: isMac()
423
+ ? ['brew install android-platform-tools']
424
+ : [
425
+ 'winget install Google.PlatformTools',
426
+ '# Or: choco install adb',
427
+ '# Ensure platform-tools is on your PATH',
428
+ ],
429
+ });
430
+ }
431
+ const raw = run(adbPath, ['version']);
432
+ const match = raw?.match(/Android Debug Bridge version ([^\n\r]+)/);
433
+ const version = match ? match[1].trim() : null;
434
+ return check('adb', 'ADB (Android Debug Bridge)', 'android', 'ok', { version, path: adbPath });
435
+ }
436
+ function checkADBDevices() {
437
+ const adbPath = findAdb();
438
+ if (!adbPath) {
439
+ return check('adb_devices', 'ADB Devices', 'android', 'error', {
440
+ details: 'ADB not found — install it first.',
441
+ });
442
+ }
443
+ const devicesRaw = run(adbPath, ['devices'], { timeout: 10000 });
444
+ if (devicesRaw === null) {
445
+ return check('adb_devices', 'ADB Devices', 'android', 'error', {
446
+ path: adbPath,
447
+ details: '`adb devices` did not complete within 10 seconds. The ADB server may be stuck.',
448
+ fix: [
449
+ `${adbPath} kill-server`,
450
+ `${adbPath} start-server`,
451
+ '# Then re-run: npx mobilewright doctor',
452
+ ],
453
+ });
454
+ }
455
+ if (!devicesRaw.includes('List of devices attached')) {
456
+ return check('adb_devices', 'ADB Devices', 'android', 'error', {
457
+ path: adbPath,
458
+ details: '`adb devices` returned unexpected output (missing "List of devices attached").',
459
+ });
460
+ }
461
+ const lines = devicesRaw.split('\n').slice(1); // skip "List of devices attached"
462
+ const deviceIds = lines
463
+ .map(line => line.trim().split(/\s+/)[0])
464
+ .filter(id => id && id.length > 0);
465
+ return check('adb_devices', 'ADB Devices', 'android', 'ok', {
466
+ path: adbPath,
467
+ version: `${deviceIds.length} device${deviceIds.length !== 1 ? 's' : ''} connected`,
468
+ details: deviceIds.length > 0 ? JSON.stringify(deviceIds) : null,
469
+ });
470
+ }
471
+ function checkAndroidEmulator() {
472
+ const androidHome = process.env['ANDROID_HOME'] ?? process.env['ANDROID_SDK_ROOT'];
473
+ let emulatorPath = null;
474
+ if (androidHome) {
475
+ const candidate = join(androidHome, 'emulator', isWin() ? 'emulator.exe' : 'emulator');
476
+ if (pathExists(candidate))
477
+ emulatorPath = candidate;
478
+ }
479
+ if (!emulatorPath)
480
+ emulatorPath = which('emulator');
481
+ if (!emulatorPath) {
482
+ return check('android_emulator', 'Android Emulator', 'android', 'warning', {
483
+ details: 'Required to run Android virtual devices locally.',
484
+ fix: isMac()
485
+ ? [
486
+ '# Open Android Studio → SDK Manager → SDK Tools',
487
+ '# Check "Android Emulator" → Apply',
488
+ 'export PATH=$PATH:$ANDROID_HOME/emulator',
489
+ ]
490
+ : [
491
+ '# Open Android Studio → SDK Manager → SDK Tools',
492
+ '# Check "Android Emulator" → Apply',
493
+ '# Ensure emulator directory is on your PATH',
494
+ ],
495
+ });
496
+ }
497
+ const r = spawnSync(emulatorPath, ['-version'], { encoding: 'utf8', timeout: 8000 });
498
+ const raw = ((r.stdout || '') + (r.stderr || '')).trim();
499
+ const match = raw.match(/Android emulator version ([^\n\r\s-]+)/);
500
+ const version = match ? match[1] : null;
501
+ return check('android_emulator', 'Android Emulator', 'android', 'ok', {
502
+ version,
503
+ path: emulatorPath,
504
+ });
505
+ }
506
+ function checkAndroidSDKPlatforms() {
507
+ const androidHome = process.env['ANDROID_HOME'] ?? process.env['ANDROID_SDK_ROOT'];
508
+ if (!androidHome)
509
+ return null;
510
+ const platformsDir = join(androidHome, 'platforms');
511
+ if (!pathExists(platformsDir)) {
512
+ return check('android_sdk_platforms', 'Android SDK Platforms', 'android', 'error', {
513
+ details: 'No Android SDK platforms installed.',
514
+ fix: [
515
+ '# Open Android Studio → SDK Manager → SDK Platforms',
516
+ '# Install "Android 14 (API 34)" or the latest stable release',
517
+ ],
518
+ });
519
+ }
520
+ let platforms = [];
521
+ try {
522
+ platforms = readdirSync(platformsDir).filter(d => d.startsWith('android-'));
523
+ }
524
+ catch { /* ignore */ }
525
+ if (platforms.length === 0) {
526
+ return check('android_sdk_platforms', 'Android SDK Platforms', 'android', 'error', {
527
+ details: 'No Android SDK platforms installed.',
528
+ fix: ['# Open Android Studio → SDK Manager → SDK Platforms → install Android 14 (API 34)'],
529
+ });
530
+ }
531
+ const apiLevels = platforms
532
+ .map(p => parseInt(p.replace('android-', ''), 10))
533
+ .filter(n => !isNaN(n))
534
+ .sort((a, b) => b - a);
535
+ return check('android_sdk_platforms', 'Android SDK Platforms', 'android', 'ok', {
536
+ version: `API ${apiLevels[0]} (latest) [${platforms.length} platform${platforms.length !== 1 ? 's' : ''} installed]`,
537
+ });
538
+ }
539
+ function checkAndroidBuildTools() {
540
+ const androidHome = process.env['ANDROID_HOME'] ?? process.env['ANDROID_SDK_ROOT'];
541
+ if (!androidHome)
542
+ return null;
543
+ const buildToolsDir = join(androidHome, 'build-tools');
544
+ if (!pathExists(buildToolsDir)) {
545
+ return check('android_build_tools', 'Android Build Tools', 'android', 'warning', {
546
+ details: 'Build tools are required to compile Android apps.',
547
+ fix: ['# Open Android Studio → SDK Manager → SDK Tools → check "Android SDK Build-Tools" → Apply'],
548
+ });
549
+ }
550
+ let versions = [];
551
+ try {
552
+ versions = readdirSync(buildToolsDir)
553
+ .filter(d => /^\d/.test(d))
554
+ .sort((a, b) => b.localeCompare(a, undefined, { numeric: true }));
555
+ }
556
+ catch { /* ignore */ }
557
+ if (versions.length === 0) {
558
+ return check('android_build_tools', 'Android Build Tools', 'android', 'warning', {
559
+ details: 'No build-tools versions found.',
560
+ fix: ['# Open Android Studio → SDK Manager → SDK Tools → check "Android SDK Build-Tools" → Apply'],
561
+ });
562
+ }
563
+ return check('android_build_tools', 'Android Build Tools', 'android', 'ok', {
564
+ version: `${versions[0]} (latest) [${versions.length} version${versions.length !== 1 ? 's' : ''} installed]`,
565
+ });
566
+ }
567
+ // ─── Windows-specific Android checks ─────────────────────────────────────────
568
+ /**
569
+ * On Windows, Android Emulator requires Hardware Acceleration (HAXM or
570
+ * Windows Hypervisor Platform). Check that Hyper-V / WHPX is enabled.
571
+ */
572
+ function checkWindowsHypervisor() {
573
+ if (!isWin())
574
+ return null;
575
+ // `systeminfo` is slow; use a quicker PowerShell query
576
+ const raw = run('powershell', [
577
+ '-NoProfile', '-Command',
578
+ '(Get-WindowsOptionalFeature -Online -FeatureName HypervisorPlatform).State',
579
+ ]);
580
+ if (!raw) {
581
+ return check('windows_hypervisor', 'Windows Hypervisor Platform', 'android', 'warning', {
582
+ details: 'Could not determine Hypervisor Platform status. Android Emulator requires hardware acceleration.',
583
+ fix: [
584
+ '# Enable via admin PowerShell:',
585
+ 'Enable-WindowsOptionalFeature -Online -FeatureName HypervisorPlatform -All -NoRestart',
586
+ '# Or: Settings → System → Optional Features → Windows Hypervisor Platform',
587
+ ],
588
+ });
589
+ }
590
+ const enabled = raw.trim().toLowerCase() === 'enabled';
591
+ return check('windows_hypervisor', 'Windows Hypervisor Platform', 'android', enabled ? 'ok' : 'error', {
592
+ details: !enabled ? 'Required for Android Emulator hardware acceleration.' : null,
593
+ fix: !enabled
594
+ ? [
595
+ '# Enable via admin PowerShell:',
596
+ 'Enable-WindowsOptionalFeature -Online -FeatureName HypervisorPlatform -All',
597
+ '# Restart required after enabling',
598
+ ]
599
+ : null,
600
+ });
601
+ }
602
+ /**
603
+ * Windows Defender can heavily slow down Android builds and the emulator.
604
+ * Check if the Android SDK path is excluded from real-time scanning.
605
+ */
606
+ function checkWindowsDefenderExclusion() {
607
+ if (!isWin())
608
+ return null;
609
+ const androidHome = process.env['ANDROID_HOME'] ?? process.env['ANDROID_SDK_ROOT'];
610
+ if (!androidHome)
611
+ return null;
612
+ const raw = run('powershell', [
613
+ '-NoProfile', '-Command',
614
+ '(Get-MpPreference).ExclusionPath -join ";"',
615
+ ]);
616
+ if (!raw) {
617
+ return check('windows_defender', 'Windows Defender SDK Exclusion', 'android', 'warning', {
618
+ details: 'Could not read Defender exclusions. Adding the Android SDK improves build performance.',
619
+ fix: [
620
+ '# Run in admin PowerShell:',
621
+ `Add-MpPreference -ExclusionPath "$env:LOCALAPPDATA\\Android\\Sdk"`,
622
+ `Add-MpPreference -ExclusionPath "$env:USERPROFILE\\.gradle"`,
623
+ ],
624
+ });
625
+ }
626
+ const excluded = raw.split(';').some(p => p.trim().toLowerCase() === androidHome.toLowerCase());
627
+ return check('windows_defender', 'Windows Defender SDK Exclusion', 'android', excluded ? 'ok' : 'warning', {
628
+ path: excluded ? androidHome : null,
629
+ details: !excluded
630
+ ? 'Android SDK is not excluded from Windows Defender. This can significantly slow down builds and the emulator.'
631
+ : null,
632
+ fix: !excluded
633
+ ? [
634
+ '# Run in admin PowerShell:',
635
+ `Add-MpPreference -ExclusionPath "${androidHome}"`,
636
+ `Add-MpPreference -ExclusionPath "$env:USERPROFILE\\.gradle"`,
637
+ ]
638
+ : null,
639
+ });
640
+ }
641
+ // ─── Orchestrator ─────────────────────────────────────────────────────────────
642
+ export function gatherChecks(categoryFilter) {
643
+ const all = [
644
+ // System
645
+ checkMacOS(),
646
+ checkWindows(),
647
+ checkHomebrew(),
648
+ checkWingetOrChoco(),
649
+ checkGit(),
650
+ checkNode(),
651
+ checkNpm(),
652
+ // iOS (macOS only — each returns null on other platforms)
653
+ checkXcode(),
654
+ checkXcodeCLT(),
655
+ checkIOSSimulators(),
656
+ // Android
657
+ checkJava(),
658
+ checkJavaHome(),
659
+ checkAndroidHome(),
660
+ checkADB(),
661
+ checkADBDevices(),
662
+ checkAndroidEmulator(),
663
+ checkAndroidSDKPlatforms(),
664
+ checkAndroidBuildTools(),
665
+ // Windows-specific Android
666
+ checkWindowsHypervisor(),
667
+ checkWindowsDefenderExclusion(),
668
+ ];
669
+ const checks = all.filter((c) => c !== null);
670
+ return categoryFilter ? checks.filter(c => c.category === categoryFilter) : checks;
671
+ }
672
+ // ─── Renderers ────────────────────────────────────────────────────────────────
673
+ export function renderTerminal(checks, version) {
674
+ const SEP = `${C.dim}${'─'.repeat(60)}${C.reset}`;
675
+ const out = [];
676
+ out.push('');
677
+ out.push(`${C.bold}${C.white}mobilewright doctor${C.reset} ${C.dim}v${version}${C.reset}`);
678
+ out.push(SEP);
679
+ const categories = [
680
+ { id: 'system', label: 'System' },
681
+ { id: 'ios', label: 'iOS' },
682
+ { id: 'android', label: 'Android' },
683
+ ];
684
+ for (const cat of categories) {
685
+ const items = checks.filter(c => c.category === cat.id);
686
+ if (items.length === 0)
687
+ continue;
688
+ out.push('');
689
+ out.push(` ${C.bold}${cat.label}${C.reset}`);
690
+ for (const item of items) {
691
+ const icon = ICON[item.status];
692
+ const versionStr = item.version ? ` ${C.dim}${item.version}${C.reset}` : '';
693
+ const pathStr = item.path && !item.version ? ` ${C.gray}${item.path}${C.reset}` : '';
694
+ out.push(` ${icon} ${C.white}${item.name}${C.reset}${versionStr}${pathStr}`);
695
+ if (item.details) {
696
+ const dc = item.status === 'error' ? C.red : item.status === 'warning' ? C.yellow : C.gray;
697
+ out.push(` ${dc}${item.details}${C.reset}`);
698
+ }
699
+ if (item.fix) {
700
+ for (const line of item.fix) {
701
+ if (line.startsWith('#')) {
702
+ out.push(` ${C.gray}${line}${C.reset}`);
703
+ }
704
+ else {
705
+ out.push(` ${C.cyan}→ ${line}${C.reset}`);
706
+ }
707
+ }
708
+ }
709
+ }
710
+ }
711
+ out.push('');
712
+ out.push(SEP);
713
+ const ok = checks.filter(c => c.status === 'ok').length;
714
+ const warnings = checks.filter(c => c.status === 'warning').length;
715
+ const errors = checks.filter(c => c.status === 'error').length;
716
+ const parts = [];
717
+ if (ok > 0)
718
+ parts.push(`${C.green}${ok} ok${C.reset}`);
719
+ if (warnings > 0)
720
+ parts.push(`${C.yellow}${warnings} warning${warnings !== 1 ? 's' : ''}${C.reset}`);
721
+ if (errors > 0)
722
+ parts.push(`${C.red}${errors} error${errors !== 1 ? 's' : ''}${C.reset}`);
723
+ out.push(` ${C.bold}Summary${C.reset} ${parts.join(C.dim + ' · ' + C.reset)}`);
724
+ if (errors === 0 && warnings === 0) {
725
+ out.push(` ${C.green}${C.bold}✓ Ready for mobile development!${C.reset}`);
726
+ }
727
+ else if (errors > 0) {
728
+ out.push(` ${C.dim}Fix the errors above, then re-run: npx mobilewright doctor${C.reset}`);
729
+ out.push(` ${C.dim}For AI-assisted fixes: npx mobilewright doctor --json | pbcopy${C.reset}`);
730
+ }
731
+ else {
732
+ out.push(` ${C.dim}Warnings are optional but recommended.${C.reset}`);
733
+ }
734
+ out.push('');
735
+ return out.join('\n');
736
+ }
737
+ export function renderJSON(checks, version) {
738
+ const ok = checks.filter(c => c.status === 'ok').length;
739
+ const warnings = checks.filter(c => c.status === 'warning').length;
740
+ const errors = checks.filter(c => c.status === 'error').length;
741
+ const platformVersion = isMac()
742
+ ? (run('sw_vers', ['-productVersion']) ?? release())
743
+ : isWin()
744
+ ? (run('cmd', ['/c', 'ver'])?.match(/\[Version ([^\]]+)\]/)?.[1] ?? release())
745
+ : release();
746
+ return {
747
+ _schema: 'mobilewright-doctor-v1',
748
+ mobilewright_version: version,
749
+ timestamp: new Date().toISOString(),
750
+ platform: process.platform,
751
+ arch: arch(),
752
+ platform_version: platformVersion,
753
+ summary: { total: checks.length, ok, warnings, errors, ready: errors === 0 },
754
+ agent_instructions: errors > 0
755
+ ? 'Environment has issues. For each check where status is "error" or "warning", run the commands in its "fix" array to resolve it. Re-run "npx mobilewright doctor --json" after fixes to verify.'
756
+ : 'Environment looks good. No action required.',
757
+ checks,
758
+ };
759
+ }
760
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Custom HTML reporter that wraps Playwright's built-in HTML reporter
3
+ * and post-processes the output to rebrand it as Mobilewright.
4
+ *
5
+ * - Replaces "Playwright Test Report" with "Mobilewright"
6
+ * - Adds mobilewright favicon
7
+ * - Adds header link to the GitHub repo
8
+ * - Adds click-to-fullscreen for screenshot thumbnails
9
+ */
10
+ /**
11
+ * Post-processes a Playwright HTML report to apply Mobilewright branding.
12
+ */
13
+ export declare function brandReport(reportPath: string): void;
14
+ //# sourceMappingURL=reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAiBH;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAiKpD"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Custom HTML reporter that wraps Playwright's built-in HTML reporter
3
+ * and post-processes the output to rebrand it as Mobilewright.
4
+ *
5
+ * - Replaces "Playwright Test Report" with "Mobilewright"
6
+ * - Adds mobilewright favicon
7
+ * - Adds header link to the GitHub repo
8
+ * - Adds click-to-fullscreen for screenshot thumbnails
9
+ */
10
+ import { readFileSync, writeFileSync } from 'node:fs';
11
+ import { resolve, dirname } from 'node:path';
12
+ import { fileURLToPath } from 'node:url';
13
+ const __filename = fileURLToPath(import.meta.url);
14
+ const __dirname = dirname(__filename);
15
+ const GITHUB_REPO_URL = 'https://github.com/mobile-next/mobilewright';
16
+ function getFaviconDataUrl() {
17
+ const iconPath = resolve(__dirname, '..', 'assets', 'mobilewright-icon.png');
18
+ const iconData = readFileSync(iconPath);
19
+ return `data:image/png;base64,${iconData.toString('base64')}`;
20
+ }
21
+ /**
22
+ * Post-processes a Playwright HTML report to apply Mobilewright branding.
23
+ */
24
+ export function brandReport(reportPath) {
25
+ const indexPath = resolve(reportPath, 'index.html');
26
+ let html = readFileSync(indexPath, 'utf-8');
27
+ const faviconDataUrl = getFaviconDataUrl();
28
+ // 1. Replace title
29
+ html = html.replace('<title>Playwright Test Report</title>', `<title>Mobilewright Test Report</title>`);
30
+ // 2. Replace the JS-side document.title fallback
31
+ html = html.replace(/document\.title="Playwright Test Report"/g, 'document.title="Mobilewright Test Report"');
32
+ // 3. Add favicon link and custom styles/scripts in <head>
33
+ const headInjection = `
34
+ <link rel="icon" type="image/png" href="${faviconDataUrl}">
35
+ <style>
36
+ /* Mobilewright branding header */
37
+ .mobilewright-brand {
38
+ display: flex;
39
+ align-items: center;
40
+ gap: 8px;
41
+ text-decoration: none;
42
+ color: inherit;
43
+ }
44
+ .mobilewright-brand:hover {
45
+ opacity: 0.8;
46
+ }
47
+ .mobilewright-brand img {
48
+ height: 24px;
49
+ width: auto;
50
+ }
51
+ .mobilewright-brand span {
52
+ font-weight: 600;
53
+ font-size: 14px;
54
+ }
55
+
56
+ /* Screenshot thumbnails */
57
+ .screenshot {
58
+ max-width: 250px !important;
59
+ cursor: pointer;
60
+ transition: opacity 0.15s;
61
+ }
62
+ .screenshot:hover {
63
+ opacity: 0.85;
64
+ }
65
+
66
+ /* Fullscreen overlay */
67
+ .mw-fullscreen-overlay {
68
+ position: fixed;
69
+ top: 0;
70
+ left: 0;
71
+ width: 100vw;
72
+ height: 100vh;
73
+ background: rgba(0, 0, 0, 0.85);
74
+ display: flex;
75
+ align-items: center;
76
+ justify-content: center;
77
+ z-index: 10000;
78
+ cursor: pointer;
79
+ }
80
+ .mw-fullscreen-overlay img {
81
+ max-width: 95vw;
82
+ max-height: 95vh;
83
+ object-fit: contain;
84
+ border-radius: 4px;
85
+ box-shadow: 0 4px 32px rgba(0, 0, 0, 0.5);
86
+ }
87
+ </style>
88
+ `;
89
+ html = html.replace('</head>', headInjection + '\n </head>');
90
+ // 4. Add script for branding injection and screenshot fullscreen
91
+ const bodyScript = `
92
+ <script>
93
+ (function() {
94
+ var REPO_URL = '${GITHUB_REPO_URL}';
95
+ var FAVICON_URL = '${faviconDataUrl}';
96
+
97
+ // Inject mobilewright brand into header
98
+ function injectBrand() {
99
+ var superHeader = document.querySelector('.header-superheader');
100
+ if (!superHeader) return false;
101
+ if (superHeader.querySelector('.mobilewright-brand')) return true;
102
+
103
+ var link = document.createElement('a');
104
+ link.href = REPO_URL;
105
+ link.target = '_blank';
106
+ link.rel = 'noopener noreferrer';
107
+ link.className = 'mobilewright-brand';
108
+
109
+ var img = document.createElement('img');
110
+ img.src = FAVICON_URL;
111
+ img.alt = 'Mobilewright';
112
+ link.appendChild(img);
113
+
114
+ var span = document.createElement('span');
115
+ span.textContent = 'Mobilewright';
116
+ link.appendChild(span);
117
+
118
+ superHeader.prepend(link);
119
+ return true;
120
+ }
121
+
122
+ // Fullscreen overlay for screenshots
123
+ function setupScreenshotFullscreen() {
124
+ document.addEventListener('click', function(e) {
125
+ var target = e.target;
126
+ if (target.tagName !== 'IMG' || !target.classList.contains('screenshot')) return;
127
+
128
+ e.preventDefault();
129
+ e.stopPropagation();
130
+
131
+ var overlay = document.createElement('div');
132
+ overlay.className = 'mw-fullscreen-overlay';
133
+
134
+ var fullImg = document.createElement('img');
135
+ fullImg.src = target.src;
136
+ fullImg.alt = target.alt || 'Screenshot';
137
+ overlay.appendChild(fullImg);
138
+
139
+ overlay.addEventListener('click', function() {
140
+ overlay.remove();
141
+ });
142
+
143
+ document.addEventListener('keydown', function handler(ke) {
144
+ if (ke.key === 'Escape') {
145
+ overlay.remove();
146
+ document.removeEventListener('keydown', handler);
147
+ }
148
+ });
149
+
150
+ document.body.appendChild(overlay);
151
+ }, true);
152
+ }
153
+
154
+ // Observe DOM for SPA navigation
155
+ var observer = new MutationObserver(function() { injectBrand(); });
156
+ observer.observe(document.body || document.documentElement, { childList: true, subtree: true });
157
+
158
+ // Initial setup
159
+ if (document.readyState === 'loading') {
160
+ document.addEventListener('DOMContentLoaded', function() {
161
+ injectBrand();
162
+ setupScreenshotFullscreen();
163
+ });
164
+ } else {
165
+ injectBrand();
166
+ setupScreenshotFullscreen();
167
+ }
168
+ })();
169
+ </script>
170
+ `;
171
+ html = html.replace('</body>', bodyScript + '\n </body>');
172
+ writeFileSync(indexPath, html, 'utf-8');
173
+ }
174
+ //# sourceMappingURL=reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,MAAM,eAAe,GAAG,6CAA6C,CAAC;AAEtE,SAAS,iBAAiB;IACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,uBAAuB,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACxC,OAAO,yBAAyB,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,UAAkB;IAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACpD,IAAI,IAAI,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAE5C,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAE3C,mBAAmB;IACnB,IAAI,GAAG,IAAI,CAAC,OAAO,CACjB,uCAAuC,EACvC,yCAAyC,CAC1C,CAAC;IAEF,iDAAiD;IACjD,IAAI,GAAG,IAAI,CAAC,OAAO,CACjB,2CAA2C,EAC3C,2CAA2C,CAC5C,CAAC;IAEF,0DAA0D;IAC1D,MAAM,aAAa,GAAG;8CACsB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDzD,CAAC;IACF,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,GAAG,aAAa,CAAC,CAAC;IAE9D,iEAAiE;IACjE,MAAM,UAAU,GAAG;;;wBAGG,eAAe;2BACZ,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2EtC,CAAC;IACF,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,GAAG,aAAa,CAAC,CAAC;IAE3D,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mobilewright",
3
- "version": "0.0.16",
3
+ "version": "0.0.18",
4
4
  "description": "Mobile device automation framework inspired by Playwright",
5
5
  "homepage": "https://mobilewright.dev",
6
6
  "license": "Apache-2.0",
@@ -29,13 +29,14 @@
29
29
  "directory": "packages/mobilewright"
30
30
  },
31
31
  "files": [
32
- "dist"
32
+ "dist",
33
+ "assets"
33
34
  ],
34
35
  "dependencies": {
35
- "@mobilewright/core": "^0.0.16",
36
- "@mobilewright/driver-mobilecli": "^0.0.16",
37
- "@mobilewright/protocol": "^0.0.16",
38
- "@mobilewright/test": "^0.0.16",
36
+ "@mobilewright/core": "^0.0.18",
37
+ "@mobilewright/driver-mobilecli": "^0.0.18",
38
+ "@mobilewright/protocol": "^0.0.18",
39
+ "@mobilewright/test": "^0.0.18",
39
40
  "commander": "^14.0.3",
40
41
  "playwright": "1.58.2",
41
42
  "ws": "^8.18.0"