@ramarivera/chofi 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -85,6 +85,7 @@ chofi maestro run flows/smoke.yaml --json
85
85
  |---------|-------------|
86
86
  | `chofi app install <udid> <path> --json` | Install .app bundle |
87
87
  | `chofi app launch <udid> <bundleId> --json` | Launch app |
88
+ | `chofi app launch <udid> <bundleId> --json -- <args...>` | Launch app with app arguments |
88
89
  | `chofi app terminate <udid> <bundleId> --json` | Terminate app |
89
90
  | `chofi app terminate <udid> <bundleId> --force --json` | Force kill (SIGKILL) |
90
91
  | `chofi app terminate-all <udid> --force --json` | Kill ALL apps |
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,WAAW,EACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,WAAW,EAEjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AAQvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAC3C;AA0pCD,wBAAsB,WAAW,CAC/B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,YAAY,GAAE,eAAoB,GACjC,OAAO,CAAC,MAAM,CAAC,CA2DjB"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,WAAW,EACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,WAAW,EAEjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AAQvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAC3C;AA2sCD,wBAAsB,WAAW,CAC/B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,YAAY,GAAE,eAAoB,GACjC,OAAO,CAAC,MAAM,CAAC,CA2DjB"}
package/dist/cli.js CHANGED
@@ -17,6 +17,20 @@ class CliError extends Error {
17
17
  this.phase = phase;
18
18
  }
19
19
  }
20
+ function parseLaunchEnv(values) {
21
+ if (!values || values.length === 0) {
22
+ return {};
23
+ }
24
+ const env = {};
25
+ for (const value of values) {
26
+ const equalsIndex = value.indexOf("=");
27
+ if (equalsIndex <= 0) {
28
+ return { error: `Invalid --launch-env value "${value}". Use KEY=VALUE.` };
29
+ }
30
+ env[value.slice(0, equalsIndex)] = value.slice(equalsIndex + 1);
31
+ }
32
+ return { env };
33
+ }
20
34
  function createProgram(ctx, deps) {
21
35
  const program = new Command("chofi")
22
36
  .description("JSON-first CLI for iOS, Android, Expo, and React Native workflows")
@@ -633,15 +647,28 @@ function createProgram(ctx, deps) {
633
647
  });
634
648
  });
635
649
  appCmd
636
- .command("launch <udid> <bundleId>")
650
+ .command("launch <udid> <bundleId> [appArgs...]")
637
651
  .description("Launch app on simulator/device")
638
- .action(async (udid, bundleId) => {
652
+ .action(async (udid, bundleId, appArgs = []) => {
639
653
  await runSimAction({
640
654
  clock: ctx.clock,
641
655
  runtime: ctx.runtime,
642
656
  writer: ctx.writer,
643
657
  phase: "app.launch",
644
- action: () => ctx.runtime.appLaunch(udid, bundleId),
658
+ action: () => ctx.runtime.appLaunch(udid, bundleId, appArgs),
659
+ target: udid
660
+ });
661
+ });
662
+ appCmd
663
+ .command("openurl <udid> <url>")
664
+ .description("Open URL on simulator/device")
665
+ .action(async (udid, url) => {
666
+ await runSimAction({
667
+ clock: ctx.clock,
668
+ runtime: ctx.runtime,
669
+ writer: ctx.writer,
670
+ phase: "app.openurl",
671
+ action: () => ctx.runtime.appOpenUrl(udid, url),
645
672
  target: udid
646
673
  });
647
674
  });
@@ -718,6 +745,7 @@ function createProgram(ctx, deps) {
718
745
  .option("--confirm", "Explicitly confirm")
719
746
  .option("--yes", "Alias for --confirm")
720
747
  .option("--no-build", "Skip build, launch existing app")
748
+ .option("--device <device>", "iOS simulator/device name or UDID")
721
749
  .option("--launch-env <env...>", "Environment variables for launch (KEY=VALUE)")
722
750
  .action(async (options) => {
723
751
  if (!options.confirm && !options.yes) {
@@ -730,6 +758,17 @@ function createProgram(ctx, deps) {
730
758
  }));
731
759
  throw new CliError("", 1);
732
760
  }
761
+ const launchEnv = parseLaunchEnv(options.launchEnv);
762
+ if (launchEnv.error) {
763
+ ctx.writer.write(createChofiEvent({
764
+ clock: ctx.clock,
765
+ event: "summary",
766
+ phase: "run.ios",
767
+ status: "failed",
768
+ data: { message: launchEnv.error }
769
+ }));
770
+ throw new CliError("", 2);
771
+ }
733
772
  await runExecution({
734
773
  clock: ctx.clock,
735
774
  writer: ctx.writer,
@@ -739,7 +778,10 @@ function createProgram(ctx, deps) {
739
778
  if (!options.noBuild) {
740
779
  await ctx.runtime.prebuild(c.repoRoot, "ios");
741
780
  }
742
- await ctx.runtime.runExpoIos(c.mobilePath);
781
+ await ctx.runtime.runExpoIos(c.mobilePath, {
782
+ device: options.device,
783
+ env: launchEnv.env
784
+ });
743
785
  }
744
786
  });
745
787
  });
@@ -38,8 +38,9 @@ export declare class AppleDriver implements Driver {
38
38
  createSimulator(name: string, deviceType: string, runtime: string): Promise<ProcessResult>;
39
39
  deleteSimulator(nameOrUdid: string): Promise<ProcessResult>;
40
40
  installApp(udid: string, appPath: string): Promise<ProcessResult>;
41
- launchApp(udid: string, bundleId: string): Promise<ProcessResult>;
41
+ launchApp(udid: string, bundleId: string, appArgs?: readonly string[]): Promise<ProcessResult>;
42
42
  terminateApp(udid: string, bundleId: string): Promise<ProcessResult>;
43
+ openUrl(udid: string, url: string): Promise<ProcessResult>;
43
44
  uninstallApp(udid: string, bundleId: string): Promise<ProcessResult>;
44
45
  pruneUnavailableSimulators(): Promise<ProcessResult>;
45
46
  streamLogs(udid: string, timeoutMs?: number): Promise<ProcessResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"apple.d.ts","sourceRoot":"","sources":["../../src/drivers/apple.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apple.d.ts","sourceRoot":"","sources":["../../src/drivers/apple.ts"],"names":[],"mappings":"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"}
@@ -135,12 +135,21 @@ export class AppleDriver {
135
135
  async installApp(udid, appPath) {
136
136
  return this.spawner.run("xcrun", ["simctl", "install", udid, appPath]);
137
137
  }
138
- async launchApp(udid, bundleId) {
139
- return this.spawner.run("xcrun", ["simctl", "launch", udid, bundleId]);
138
+ async launchApp(udid, bundleId, appArgs = []) {
139
+ return this.spawner.run("xcrun", [
140
+ "simctl",
141
+ "launch",
142
+ udid,
143
+ bundleId,
144
+ ...appArgs
145
+ ]);
140
146
  }
141
147
  async terminateApp(udid, bundleId) {
142
148
  return this.spawner.run("xcrun", ["simctl", "terminate", udid, bundleId]);
143
149
  }
150
+ async openUrl(udid, url) {
151
+ return this.spawner.run("xcrun", ["simctl", "openurl", udid, url]);
152
+ }
144
153
  async uninstallApp(udid, bundleId) {
145
154
  return this.spawner.run("xcrun", ["simctl", "uninstall", udid, bundleId]);
146
155
  }
@@ -1,12 +1,16 @@
1
1
  import type { ProcessSpawner, ProcessResult } from "../spawn.js";
2
2
  import type { Driver, ToolStatus } from "./types.js";
3
+ export interface ExpoRunOptions {
4
+ readonly device?: string | undefined;
5
+ readonly env?: Readonly<Record<string, string | undefined>> | undefined;
6
+ }
3
7
  export declare class ExpoDriver implements Driver {
4
8
  private readonly spawner;
5
9
  readonly name = "expo";
6
10
  constructor(spawner?: ProcessSpawner);
7
11
  check(): Promise<ToolStatus>;
8
12
  prebuild(cwd: string, platform?: "ios" | "android"): Promise<ProcessResult>;
9
- runIos(cwd: string, device?: string): Promise<ProcessResult>;
13
+ runIos(cwd: string, options?: ExpoRunOptions): Promise<ProcessResult>;
10
14
  runAndroid(cwd: string, device?: string): Promise<ProcessResult>;
11
15
  start(cwd: string): Promise<ProcessResult>;
12
16
  doctor(cwd: string): Promise<ProcessResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"expo.d.ts","sourceRoot":"","sources":["../../src/drivers/expo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAErD,qBAAa,UAAW,YAAW,MAAM;IAG3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,QAAQ,CAAC,IAAI,UAAU;gBAEM,OAAO,GAAE,cAA+B;IAE/D,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC;IAW5B,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;IAM3E,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAM5D,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAMhE,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAI1C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;CAGlD"}
1
+ {"version":3,"file":"expo.d.ts","sourceRoot":"","sources":["../../src/drivers/expo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC;CACzE;AAED,qBAAa,UAAW,YAAW,MAAM;IAG3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,QAAQ,CAAC,IAAI,UAAU;gBAEM,OAAO,GAAE,cAA+B;IAE/D,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC;IAW5B,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;IAM3E,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;IAMzE,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAMhE,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAI1C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;CAGlD"}
@@ -21,11 +21,11 @@ export class ExpoDriver {
21
21
  args.push("--platform", platform);
22
22
  return this.spawner.run("npx", args, { cwd });
23
23
  }
24
- async runIos(cwd, device) {
24
+ async runIos(cwd, options = {}) {
25
25
  const args = ["expo", "run:ios"];
26
- if (device)
27
- args.push("--device", device);
28
- return this.spawner.run("npx", args, { cwd });
26
+ if (options.device)
27
+ args.push("--device", options.device);
28
+ return this.spawner.run("npx", args, { cwd, env: options.env });
29
29
  }
30
30
  async runAndroid(cwd, device) {
31
31
  const args = ["expo", "run:android"];
package/dist/runtime.d.ts CHANGED
@@ -25,6 +25,10 @@ export interface TestProgress {
25
25
  readonly durationMs?: number | undefined;
26
26
  readonly failureMessage?: string | undefined;
27
27
  }
28
+ export interface RuntimeExpoRunOptions {
29
+ readonly device?: string | undefined;
30
+ readonly env?: Readonly<Record<string, string | undefined>> | undefined;
31
+ }
28
32
  export declare class RuntimeController {
29
33
  readonly apple: AppleDriver;
30
34
  readonly maestro: MaestroDriver;
@@ -51,8 +55,9 @@ export declare class RuntimeController {
51
55
  simRunningApps(udid: string): Promise<RunningApp[]>;
52
56
  deviceList(platform?: string): Promise<PhysicalDevice[]>;
53
57
  appInstall(udid: string, appPath: string): Promise<void>;
54
- appLaunch(udid: string, bundleId: string): Promise<void>;
58
+ appLaunch(udid: string, bundleId: string, appArgs?: readonly string[]): Promise<void>;
55
59
  appTerminate(udid: string, bundleId: string, force?: boolean): Promise<void>;
60
+ appOpenUrl(udid: string, url: string): Promise<void>;
56
61
  appTerminateAll(udid: string, force?: boolean): Promise<void>;
57
62
  appUninstall(udid: string, bundleId: string): Promise<void>;
58
63
  appListRunning(udid: string): Promise<RunningApp[]>;
@@ -90,7 +95,7 @@ export declare class RuntimeController {
90
95
  xcodeCache?: boolean | undefined;
91
96
  }): Promise<void>;
92
97
  prebuild(cwd: string, platform?: "ios" | "android"): Promise<void>;
93
- runExpoIos(cwd: string, device?: string): Promise<void>;
98
+ runExpoIos(cwd: string, options?: RuntimeExpoRunOptions): Promise<void>;
94
99
  runExpoAndroid(cwd: string, device?: string): Promise<void>;
95
100
  runMaestroTest(flowPath: string, options: {
96
101
  cwd: string;
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
package/dist/runtime.js CHANGED
@@ -3,7 +3,10 @@ import { AppleDriver } from "./drivers/apple.js";
3
3
  import { MaestroDriver } from "./drivers/maestro.js";
4
4
  import { ExpoDriver } from "./drivers/expo.js";
5
5
  import { IdbDriver } from "./drivers/idb.js";
6
- import { SimulatorStateError, AppNotInstalledError, AppNotRunningError, BuildFailedError, TestsFailedError, ToolOutputError, classifyError } from "./errors.js";
6
+ import { SimulatorStateError, AppNotInstalledError, BuildFailedError, TestsFailedError, ToolOutputError, classifyError } from "./errors.js";
7
+ function isAppAlreadyStopped(output) {
8
+ return /not\s+(?:currently\s+)?running|no such process|could not find process/i.test(output);
9
+ }
7
10
  export class RuntimeController {
8
11
  apple;
9
12
  maestro;
@@ -144,12 +147,12 @@ export class RuntimeController {
144
147
  throw new ToolOutputError("simctl", result.stderr || `Failed to install ${appPath}`);
145
148
  }
146
149
  }
147
- async appLaunch(udid, bundleId) {
150
+ async appLaunch(udid, bundleId, appArgs = []) {
148
151
  const installed = await this.apple.isAppInstalled(udid, bundleId);
149
152
  if (!installed) {
150
153
  throw new AppNotInstalledError(bundleId, udid);
151
154
  }
152
- const result = await this.apple.launchApp(udid, bundleId);
155
+ const result = await this.apple.launchApp(udid, bundleId, appArgs);
153
156
  if (result.exitCode !== 0) {
154
157
  throw new ToolOutputError("simctl", result.stderr || `Failed to launch ${bundleId}`);
155
158
  }
@@ -158,20 +161,27 @@ export class RuntimeController {
158
161
  if (force) {
159
162
  const result = await this.spawner.run("xcrun", ["simctl", "spawn", udid, "launchctl", "kill", "9", bundleId]);
160
163
  if (result.exitCode !== 0) {
164
+ if (isAppAlreadyStopped(result.stderr || result.stdout)) {
165
+ return;
166
+ }
161
167
  throw new ToolOutputError("simctl", result.stderr || `Failed to force-terminate ${bundleId}`);
162
168
  }
163
169
  return;
164
170
  }
165
- const apps = await this.apple.listRunningApps(udid);
166
- const running = apps.some((a) => a.bundleId === bundleId);
167
- if (!running) {
168
- throw new AppNotRunningError(bundleId, udid);
169
- }
170
171
  const result = await this.apple.terminateApp(udid, bundleId);
171
172
  if (result.exitCode !== 0) {
173
+ if (isAppAlreadyStopped(result.stderr || result.stdout)) {
174
+ return;
175
+ }
172
176
  throw new ToolOutputError("simctl", result.stderr || `Failed to terminate ${bundleId}`);
173
177
  }
174
178
  }
179
+ async appOpenUrl(udid, url) {
180
+ const result = await this.apple.openUrl(udid, url);
181
+ if (result.exitCode !== 0) {
182
+ throw new ToolOutputError("simctl", result.stderr || `Failed to open ${url}`);
183
+ }
184
+ }
175
185
  async appTerminateAll(udid, force = false) {
176
186
  const apps = await this.apple.listRunningApps(udid);
177
187
  for (const app of apps) {
@@ -298,8 +308,8 @@ export class RuntimeController {
298
308
  throw new ToolOutputError("expo", result.stderr || "Expo prebuild failed");
299
309
  }
300
310
  }
301
- async runExpoIos(cwd, device) {
302
- const result = await this.expo.runIos(cwd, device);
311
+ async runExpoIos(cwd, options = {}) {
312
+ const result = await this.expo.runIos(cwd, options);
303
313
  if (result.exitCode !== 0) {
304
314
  throw new ToolOutputError("expo", result.stderr || "Expo iOS run failed");
305
315
  }
package/dist/spawn.d.ts CHANGED
@@ -9,14 +9,17 @@ export interface ProcessResult {
9
9
  export interface LineHandler {
10
10
  (line: string): void;
11
11
  }
12
+ export type ProcessEnv = Readonly<Record<string, string | undefined>>;
12
13
  export interface ProcessSpawner {
13
14
  run(command: string, args: readonly string[], options?: {
14
15
  cwd?: string | undefined;
16
+ env?: ProcessEnv | undefined;
15
17
  timeoutMs?: number | undefined;
16
18
  maxOutputBytes?: number | undefined;
17
19
  }): Promise<ProcessResult>;
18
20
  runStream(command: string, args: readonly string[], onLine: LineHandler, options?: {
19
21
  cwd?: string | undefined;
22
+ env?: ProcessEnv | undefined;
20
23
  timeoutMs?: number | undefined;
21
24
  }): Promise<ProcessResult>;
22
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../src/spawn.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,CACD,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC/B,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KACrC,GACA,OAAO,CAAC,aAAa,CAAC,CAAC;IAE1B,SAAS,CACP,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAChC,GACA,OAAO,CAAC,aAAa,CAAC,CAAC;CAC3B;AAMD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC;CAC3D;AAED,wBAAsB,SAAS,CAC7B,SAAS,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,EACvC,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,aAAa,CAAC,CAiBxB;AAED,eAAO,MAAM,cAAc,EAAE,cA6L5B,CAAC"}
1
+ {"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../src/spawn.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;AAEtE,MAAM,WAAW,cAAc;IAC7B,GAAG,CACD,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,GAAG,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;QAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC/B,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KACrC,GACA,OAAO,CAAC,aAAa,CAAC,CAAC;IAE1B,SAAS,CACP,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,GAAG,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;QAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAChC,GACA,OAAO,CAAC,aAAa,CAAC,CAAC;CAC3B;AAMD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC;CAC3D;AAED,wBAAsB,SAAS,CAC7B,SAAS,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,EACvC,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,aAAa,CAAC,CAiBxB;AAED,eAAO,MAAM,cAAc,EAAE,cAiM5B,CAAC"}
package/dist/spawn.js CHANGED
@@ -27,6 +27,7 @@ export const defaultSpawner = {
27
27
  const maxOutputBytes = options.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES;
28
28
  const child = spawn(command, args, {
29
29
  cwd: options.cwd,
30
+ env: options.env ? { ...process.env, ...options.env } : process.env,
30
31
  shell: false,
31
32
  stdio: ["ignore", "pipe", "pipe"]
32
33
  });
@@ -109,6 +110,7 @@ export const defaultSpawner = {
109
110
  const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
110
111
  const child = spawn(command, args, {
111
112
  cwd: options.cwd,
113
+ env: options.env ? { ...process.env, ...options.env } : process.env,
112
114
  shell: false,
113
115
  stdio: ["ignore", "pipe", "pipe"]
114
116
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ramarivera/chofi",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "JSON-first CLI for iOS, Android, Expo, simulator, device, build, test, screenshot, logs, and Maestro workflows",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",