@qawolf/cli 1.4.0 → 1.4.2

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 (2) hide show
  1. package/dist/cli.js +997 -839
  2. package/package.json +3 -2
package/dist/cli.js CHANGED
@@ -4087,7 +4087,7 @@ var require_thread_stream = __commonJS((exports, module) => {
4087
4087
  var { version: version2 } = require_package();
4088
4088
  var { EventEmitter } = __require("events");
4089
4089
  var { Worker } = __require("worker_threads");
4090
- var { join: join4 } = __require("path");
4090
+ var { join: join5 } = __require("path");
4091
4091
  var { pathToFileURL } = __require("url");
4092
4092
  var { wait } = require_wait();
4093
4093
  var {
@@ -4137,7 +4137,7 @@ var require_thread_stream = __commonJS((exports, module) => {
4137
4137
  function createWorker(stream, opts) {
4138
4138
  const { filename, workerData } = opts;
4139
4139
  const bundlerOverrides = "__bundlerPathsOverrides" in globalThis ? globalThis.__bundlerPathsOverrides : {};
4140
- const toExecute = bundlerOverrides["thread-stream-worker"] || join4(__dirname, "lib", "worker.js");
4140
+ const toExecute = bundlerOverrides["thread-stream-worker"] || join5(__dirname, "lib", "worker.js");
4141
4141
  const worker = new Worker(toExecute, {
4142
4142
  ...opts.workerOpts,
4143
4143
  name: opts.workerOpts?.name || "thread-stream",
@@ -4603,7 +4603,7 @@ var require_transport = __commonJS((exports, module) => {
4603
4603
  var { createRequire: createRequire2 } = __require("module");
4604
4604
  var { existsSync: existsSync2 } = __require("node:fs");
4605
4605
  var getCallers = require_caller();
4606
- var { join: join4, isAbsolute, sep } = __require("node:path");
4606
+ var { join: join5, isAbsolute, sep } = __require("node:path");
4607
4607
  var { fileURLToPath } = __require("node:url");
4608
4608
  var sleep = require_atomic_sleep();
4609
4609
  var onExit = require_on_exit_leak_free();
@@ -4756,7 +4756,7 @@ var require_transport = __commonJS((exports, module) => {
4756
4756
  throw new Error("only one of target or targets can be specified");
4757
4757
  }
4758
4758
  if (targets) {
4759
- target = bundlerOverrides["pino-worker"] || join4(__dirname, "worker.js");
4759
+ target = bundlerOverrides["pino-worker"] || join5(__dirname, "worker.js");
4760
4760
  options.targets = targets.filter((dest) => dest.target).map((dest) => {
4761
4761
  return {
4762
4762
  ...dest,
@@ -4773,7 +4773,7 @@ var require_transport = __commonJS((exports, module) => {
4773
4773
  });
4774
4774
  });
4775
4775
  } else if (pipeline) {
4776
- target = bundlerOverrides["pino-worker"] || join4(__dirname, "worker.js");
4776
+ target = bundlerOverrides["pino-worker"] || join5(__dirname, "worker.js");
4777
4777
  options.pipelines = [pipeline.map((dest) => {
4778
4778
  return {
4779
4779
  ...dest,
@@ -4796,7 +4796,7 @@ var require_transport = __commonJS((exports, module) => {
4796
4796
  return origin;
4797
4797
  }
4798
4798
  if (origin === "pino/file") {
4799
- return join4(__dirname, "..", "file.js");
4799
+ return join5(__dirname, "..", "file.js");
4800
4800
  }
4801
4801
  let fixTarget2;
4802
4802
  for (const filePath of callers) {
@@ -5725,7 +5725,7 @@ var require_safe_stable_stringify = __commonJS((exports, module) => {
5725
5725
  return circularValue;
5726
5726
  }
5727
5727
  let res = "";
5728
- let join4 = ",";
5728
+ let join5 = ",";
5729
5729
  const originalIndentation = indentation;
5730
5730
  if (Array.isArray(value)) {
5731
5731
  if (value.length === 0) {
@@ -5739,7 +5739,7 @@ var require_safe_stable_stringify = __commonJS((exports, module) => {
5739
5739
  indentation += spacer;
5740
5740
  res += `
5741
5741
  ${indentation}`;
5742
- join4 = `,
5742
+ join5 = `,
5743
5743
  ${indentation}`;
5744
5744
  }
5745
5745
  const maximumValuesToStringify = Math.min(value.length, maximumBreadth);
@@ -5747,13 +5747,13 @@ ${indentation}`;
5747
5747
  for (;i < maximumValuesToStringify - 1; i++) {
5748
5748
  const tmp2 = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation);
5749
5749
  res += tmp2 !== undefined ? tmp2 : "null";
5750
- res += join4;
5750
+ res += join5;
5751
5751
  }
5752
5752
  const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation);
5753
5753
  res += tmp !== undefined ? tmp : "null";
5754
5754
  if (value.length - 1 > maximumBreadth) {
5755
5755
  const removedKeys = value.length - maximumBreadth - 1;
5756
- res += `${join4}"... ${getItemCount(removedKeys)} not stringified"`;
5756
+ res += `${join5}"... ${getItemCount(removedKeys)} not stringified"`;
5757
5757
  }
5758
5758
  if (spacer !== "") {
5759
5759
  res += `
@@ -5774,7 +5774,7 @@ ${originalIndentation}`;
5774
5774
  let separator = "";
5775
5775
  if (spacer !== "") {
5776
5776
  indentation += spacer;
5777
- join4 = `,
5777
+ join5 = `,
5778
5778
  ${indentation}`;
5779
5779
  whitespace = " ";
5780
5780
  }
@@ -5788,13 +5788,13 @@ ${indentation}`;
5788
5788
  const tmp = stringifyFnReplacer(key2, value, stack, replacer, spacer, indentation);
5789
5789
  if (tmp !== undefined) {
5790
5790
  res += `${separator}${strEscape(key2)}:${whitespace}${tmp}`;
5791
- separator = join4;
5791
+ separator = join5;
5792
5792
  }
5793
5793
  }
5794
5794
  if (keyLength > maximumBreadth) {
5795
5795
  const removedKeys = keyLength - maximumBreadth;
5796
5796
  res += `${separator}"...":${whitespace}"${getItemCount(removedKeys)} not stringified"`;
5797
- separator = join4;
5797
+ separator = join5;
5798
5798
  }
5799
5799
  if (spacer !== "" && separator.length > 1) {
5800
5800
  res = `
@@ -5834,7 +5834,7 @@ ${originalIndentation}`;
5834
5834
  }
5835
5835
  const originalIndentation = indentation;
5836
5836
  let res = "";
5837
- let join4 = ",";
5837
+ let join5 = ",";
5838
5838
  if (Array.isArray(value)) {
5839
5839
  if (value.length === 0) {
5840
5840
  return "[]";
@@ -5847,7 +5847,7 @@ ${originalIndentation}`;
5847
5847
  indentation += spacer;
5848
5848
  res += `
5849
5849
  ${indentation}`;
5850
- join4 = `,
5850
+ join5 = `,
5851
5851
  ${indentation}`;
5852
5852
  }
5853
5853
  const maximumValuesToStringify = Math.min(value.length, maximumBreadth);
@@ -5855,13 +5855,13 @@ ${indentation}`;
5855
5855
  for (;i < maximumValuesToStringify - 1; i++) {
5856
5856
  const tmp2 = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation);
5857
5857
  res += tmp2 !== undefined ? tmp2 : "null";
5858
- res += join4;
5858
+ res += join5;
5859
5859
  }
5860
5860
  const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation);
5861
5861
  res += tmp !== undefined ? tmp : "null";
5862
5862
  if (value.length - 1 > maximumBreadth) {
5863
5863
  const removedKeys = value.length - maximumBreadth - 1;
5864
- res += `${join4}"... ${getItemCount(removedKeys)} not stringified"`;
5864
+ res += `${join5}"... ${getItemCount(removedKeys)} not stringified"`;
5865
5865
  }
5866
5866
  if (spacer !== "") {
5867
5867
  res += `
@@ -5874,7 +5874,7 @@ ${originalIndentation}`;
5874
5874
  let whitespace = "";
5875
5875
  if (spacer !== "") {
5876
5876
  indentation += spacer;
5877
- join4 = `,
5877
+ join5 = `,
5878
5878
  ${indentation}`;
5879
5879
  whitespace = " ";
5880
5880
  }
@@ -5883,7 +5883,7 @@ ${indentation}`;
5883
5883
  const tmp = stringifyArrayReplacer(key2, value[key2], stack, replacer, spacer, indentation);
5884
5884
  if (tmp !== undefined) {
5885
5885
  res += `${separator}${strEscape(key2)}:${whitespace}${tmp}`;
5886
- separator = join4;
5886
+ separator = join5;
5887
5887
  }
5888
5888
  }
5889
5889
  if (spacer !== "" && separator.length > 1) {
@@ -5940,20 +5940,20 @@ ${originalIndentation}`;
5940
5940
  indentation += spacer;
5941
5941
  let res2 = `
5942
5942
  ${indentation}`;
5943
- const join5 = `,
5943
+ const join6 = `,
5944
5944
  ${indentation}`;
5945
5945
  const maximumValuesToStringify = Math.min(value.length, maximumBreadth);
5946
5946
  let i = 0;
5947
5947
  for (;i < maximumValuesToStringify - 1; i++) {
5948
5948
  const tmp2 = stringifyIndent(String(i), value[i], stack, spacer, indentation);
5949
5949
  res2 += tmp2 !== undefined ? tmp2 : "null";
5950
- res2 += join5;
5950
+ res2 += join6;
5951
5951
  }
5952
5952
  const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation);
5953
5953
  res2 += tmp !== undefined ? tmp : "null";
5954
5954
  if (value.length - 1 > maximumBreadth) {
5955
5955
  const removedKeys = value.length - maximumBreadth - 1;
5956
- res2 += `${join5}"... ${getItemCount(removedKeys)} not stringified"`;
5956
+ res2 += `${join6}"... ${getItemCount(removedKeys)} not stringified"`;
5957
5957
  }
5958
5958
  res2 += `
5959
5959
  ${originalIndentation}`;
@@ -5969,16 +5969,16 @@ ${originalIndentation}`;
5969
5969
  return '"[Object]"';
5970
5970
  }
5971
5971
  indentation += spacer;
5972
- const join4 = `,
5972
+ const join5 = `,
5973
5973
  ${indentation}`;
5974
5974
  let res = "";
5975
5975
  let separator = "";
5976
5976
  let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth);
5977
5977
  if (isTypedArrayWithEntries(value)) {
5978
- res += stringifyTypedArray(value, join4, maximumBreadth);
5978
+ res += stringifyTypedArray(value, join5, maximumBreadth);
5979
5979
  keys = keys.slice(value.length);
5980
5980
  maximumPropertiesToStringify -= value.length;
5981
- separator = join4;
5981
+ separator = join5;
5982
5982
  }
5983
5983
  if (deterministic) {
5984
5984
  keys = sort(keys, comparator);
@@ -5989,13 +5989,13 @@ ${indentation}`;
5989
5989
  const tmp = stringifyIndent(key2, value[key2], stack, spacer, indentation);
5990
5990
  if (tmp !== undefined) {
5991
5991
  res += `${separator}${strEscape(key2)}: ${tmp}`;
5992
- separator = join4;
5992
+ separator = join5;
5993
5993
  }
5994
5994
  }
5995
5995
  if (keyLength > maximumBreadth) {
5996
5996
  const removedKeys = keyLength - maximumBreadth;
5997
5997
  res += `${separator}"...": "${getItemCount(removedKeys)} not stringified"`;
5998
- separator = join4;
5998
+ separator = join5;
5999
5999
  }
6000
6000
  if (separator !== "") {
6001
6001
  res = `
@@ -10517,8 +10517,8 @@ var require_lib2 = __commonJS((exports, module) => {
10517
10517
  return this;
10518
10518
  }
10519
10519
  var p3 = this.constructor;
10520
- return this.then(resolve10, reject2);
10521
- function resolve10(value) {
10520
+ return this.then(resolve11, reject2);
10521
+ function resolve11(value) {
10522
10522
  function yes() {
10523
10523
  return value;
10524
10524
  }
@@ -10671,8 +10671,8 @@ var require_lib2 = __commonJS((exports, module) => {
10671
10671
  }
10672
10672
  return out;
10673
10673
  }
10674
- Promise2.resolve = resolve9;
10675
- function resolve9(value) {
10674
+ Promise2.resolve = resolve10;
10675
+ function resolve10(value) {
10676
10676
  if (value instanceof this) {
10677
10677
  return value;
10678
10678
  }
@@ -11171,10 +11171,10 @@ var require_utils2 = __commonJS((exports) => {
11171
11171
  var promise3 = external2.Promise.resolve(inputData).then(function(data) {
11172
11172
  var isBlob2 = support.blob && (data instanceof Blob || ["[object File]", "[object Blob]"].indexOf(Object.prototype.toString.call(data)) !== -1);
11173
11173
  if (isBlob2 && typeof FileReader !== "undefined") {
11174
- return new external2.Promise(function(resolve9, reject) {
11174
+ return new external2.Promise(function(resolve10, reject) {
11175
11175
  var reader = new FileReader;
11176
11176
  reader.onload = function(e) {
11177
- resolve9(e.target.result);
11177
+ resolve10(e.target.result);
11178
11178
  };
11179
11179
  reader.onerror = function(e) {
11180
11180
  reject(e.target.error);
@@ -11638,7 +11638,7 @@ var require_StreamHelper = __commonJS((exports, module) => {
11638
11638
  }
11639
11639
  }
11640
11640
  function accumulate(helper, updateCallback) {
11641
- return new external2.Promise(function(resolve9, reject) {
11641
+ return new external2.Promise(function(resolve10, reject) {
11642
11642
  var dataArray = [];
11643
11643
  var { _internalType: chunkType, _outputType: resultType, _mimeType: mimeType } = helper;
11644
11644
  helper.on("data", function(data, meta3) {
@@ -11652,7 +11652,7 @@ var require_StreamHelper = __commonJS((exports, module) => {
11652
11652
  }).on("end", function() {
11653
11653
  try {
11654
11654
  var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType);
11655
- resolve9(result);
11655
+ resolve10(result);
11656
11656
  } catch (e) {
11657
11657
  reject(e);
11658
11658
  }
@@ -17228,7 +17228,7 @@ var require_load = __commonJS((exports, module) => {
17228
17228
  var Crc32Probe = require_Crc32Probe();
17229
17229
  var nodejsUtils = require_nodejsUtils();
17230
17230
  function checkEntryCRC32(zipEntry) {
17231
- return new external2.Promise(function(resolve9, reject) {
17231
+ return new external2.Promise(function(resolve10, reject) {
17232
17232
  var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe);
17233
17233
  worker.on("error", function(e) {
17234
17234
  reject(e);
@@ -17236,7 +17236,7 @@ var require_load = __commonJS((exports, module) => {
17236
17236
  if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) {
17237
17237
  reject(new Error("Corrupted zip : CRC32 mismatch"));
17238
17238
  } else {
17239
- resolve9();
17239
+ resolve10();
17240
17240
  }
17241
17241
  }).resume();
17242
17242
  });
@@ -19133,14 +19133,14 @@ var init_build = __esm(() => {
19133
19133
  maskingPatternsConfig = {};
19134
19134
  logCache = /* @__PURE__ */ new Set;
19135
19135
  originalFactory = import_loglevel.default.methodFactory;
19136
- getLogger.waitForBuffer = async () => new Promise((resolve9) => {
19136
+ getLogger.waitForBuffer = async () => new Promise((resolve10) => {
19137
19137
  if (logFile && Array.isArray(logFile.writableBuffer) && logFile.writableBuffer.length !== 0) {
19138
19138
  return setTimeout(async () => {
19139
19139
  await getLogger.waitForBuffer();
19140
- resolve9();
19140
+ resolve10();
19141
19141
  }, 20);
19142
19142
  }
19143
- resolve9();
19143
+ resolve10();
19144
19144
  });
19145
19145
  getLogger.setLevel = (name, level) => loggers[name].setLevel(level);
19146
19146
  getLogger.clearLogger = () => {
@@ -20046,9 +20046,9 @@ var require_readdir_glob = __commonJS((exports, module) => {
20046
20046
  var fs4 = __require("fs");
20047
20047
  var { EventEmitter } = __require("events");
20048
20048
  var { Minimatch } = require_minimatch();
20049
- var { resolve: resolve9 } = __require("path");
20049
+ var { resolve: resolve10 } = __require("path");
20050
20050
  function readdir3(dir, strict) {
20051
- return new Promise((resolve10, reject) => {
20051
+ return new Promise((resolve11, reject) => {
20052
20052
  fs4.readdir(dir, { withFileTypes: true }, (err, files) => {
20053
20053
  if (err) {
20054
20054
  switch (err.code) {
@@ -20056,14 +20056,14 @@ var require_readdir_glob = __commonJS((exports, module) => {
20056
20056
  if (strict) {
20057
20057
  reject(err);
20058
20058
  } else {
20059
- resolve10([]);
20059
+ resolve11([]);
20060
20060
  }
20061
20061
  break;
20062
20062
  case "ENOTSUP":
20063
20063
  case "ENOENT":
20064
20064
  case "ENAMETOOLONG":
20065
20065
  case "UNKNOWN":
20066
- resolve10([]);
20066
+ resolve11([]);
20067
20067
  break;
20068
20068
  case "ELOOP":
20069
20069
  default:
@@ -20071,30 +20071,30 @@ var require_readdir_glob = __commonJS((exports, module) => {
20071
20071
  break;
20072
20072
  }
20073
20073
  } else {
20074
- resolve10(files);
20074
+ resolve11(files);
20075
20075
  }
20076
20076
  });
20077
20077
  });
20078
20078
  }
20079
20079
  function stat2(file2, followSymlinks) {
20080
- return new Promise((resolve10, reject) => {
20080
+ return new Promise((resolve11, reject) => {
20081
20081
  const statFunc = followSymlinks ? fs4.stat : fs4.lstat;
20082
20082
  statFunc(file2, (err, stats) => {
20083
20083
  if (err) {
20084
20084
  switch (err.code) {
20085
20085
  case "ENOENT":
20086
20086
  if (followSymlinks) {
20087
- resolve10(stat2(file2, false));
20087
+ resolve11(stat2(file2, false));
20088
20088
  } else {
20089
- resolve10(null);
20089
+ resolve11(null);
20090
20090
  }
20091
20091
  break;
20092
20092
  default:
20093
- resolve10(null);
20093
+ resolve11(null);
20094
20094
  break;
20095
20095
  }
20096
20096
  } else {
20097
- resolve10(stats);
20097
+ resolve11(stats);
20098
20098
  }
20099
20099
  });
20100
20100
  });
@@ -20179,7 +20179,7 @@ var require_readdir_glob = __commonJS((exports, module) => {
20179
20179
  const skipPatterns = Array.isArray(this.options.skip) ? this.options.skip : [this.options.skip];
20180
20180
  this.skipMatchers = skipPatterns.map((skip) => new Minimatch(skip, { dot: true }));
20181
20181
  }
20182
- this.iterator = explore(resolve9(cwd || "."), this.options.follow, this.options.stat, this._shouldSkipDirectory.bind(this));
20182
+ this.iterator = explore(resolve10(cwd || "."), this.options.follow, this.options.stat, this._shouldSkipDirectory.bind(this));
20183
20183
  this.paused = false;
20184
20184
  this.inactive = false;
20185
20185
  this.aborted = false;
@@ -20346,11 +20346,11 @@ var require_async = __commonJS((exports, module) => {
20346
20346
  if (typeof args[arity - 1] === "function") {
20347
20347
  return asyncFn.apply(this, args);
20348
20348
  }
20349
- return new Promise((resolve9, reject2) => {
20349
+ return new Promise((resolve10, reject2) => {
20350
20350
  args[arity - 1] = (err, ...cbArgs) => {
20351
20351
  if (err)
20352
20352
  return reject2(err);
20353
- resolve9(cbArgs.length > 1 ? cbArgs : cbArgs[0]);
20353
+ resolve10(cbArgs.length > 1 ? cbArgs : cbArgs[0]);
20354
20354
  };
20355
20355
  asyncFn.apply(this, args);
20356
20356
  });
@@ -20605,14 +20605,14 @@ var require_async = __commonJS((exports, module) => {
20605
20605
  var applyEachSeries = applyEach$1(mapSeries$1);
20606
20606
  const PROMISE_SYMBOL = Symbol("promiseCallback");
20607
20607
  function promiseCallback() {
20608
- let resolve9, reject2;
20608
+ let resolve10, reject2;
20609
20609
  function callback2(err, ...args) {
20610
20610
  if (err)
20611
20611
  return reject2(err);
20612
- resolve9(args.length > 1 ? args : args[0]);
20612
+ resolve10(args.length > 1 ? args : args[0]);
20613
20613
  }
20614
20614
  callback2[PROMISE_SYMBOL] = new Promise((res, rej) => {
20615
- resolve9 = res, reject2 = rej;
20615
+ resolve10 = res, reject2 = rej;
20616
20616
  });
20617
20617
  return callback2;
20618
20618
  }
@@ -20980,8 +20980,8 @@ Source:
20980
20980
  });
20981
20981
  }
20982
20982
  if (rejectOnError || !callback2) {
20983
- return new Promise((resolve9, reject2) => {
20984
- res = resolve9;
20983
+ return new Promise((resolve10, reject2) => {
20984
+ res = resolve10;
20985
20985
  rej = reject2;
20986
20986
  });
20987
20987
  }
@@ -21020,11 +21020,11 @@ Source:
21020
21020
  }
21021
21021
  const eventMethod = (name) => (handler) => {
21022
21022
  if (!handler) {
21023
- return new Promise((resolve9, reject2) => {
21023
+ return new Promise((resolve10, reject2) => {
21024
21024
  once2(name, (err, data) => {
21025
21025
  if (err)
21026
21026
  return reject2(err);
21027
- resolve9(data);
21027
+ resolve10(data);
21028
21028
  });
21029
21029
  });
21030
21030
  }
@@ -26584,25 +26584,25 @@ var require_util3 = __commonJS((exports, module) => {
26584
26584
  };
26585
26585
  },
26586
26586
  createDeferredPromise: function() {
26587
- let resolve9;
26587
+ let resolve10;
26588
26588
  let reject;
26589
26589
  const promise3 = new Promise((res, rej) => {
26590
- resolve9 = res;
26590
+ resolve10 = res;
26591
26591
  reject = rej;
26592
26592
  });
26593
26593
  return {
26594
26594
  promise: promise3,
26595
- resolve: resolve9,
26595
+ resolve: resolve10,
26596
26596
  reject
26597
26597
  };
26598
26598
  },
26599
26599
  promisify(fn2) {
26600
- return new Promise((resolve9, reject) => {
26600
+ return new Promise((resolve10, reject) => {
26601
26601
  fn2((err, ...args) => {
26602
26602
  if (err) {
26603
26603
  return reject(err);
26604
26604
  }
26605
- return resolve9(...args);
26605
+ return resolve10(...args);
26606
26606
  });
26607
26607
  });
26608
26608
  },
@@ -27392,7 +27392,7 @@ var require_end_of_stream = __commonJS((exports, module) => {
27392
27392
  validateBoolean(opts.cleanup, "cleanup");
27393
27393
  autoCleanup = opts.cleanup;
27394
27394
  }
27395
- return new Promise2((resolve9, reject) => {
27395
+ return new Promise2((resolve10, reject) => {
27396
27396
  const cleanup = eos(stream, opts, (err) => {
27397
27397
  if (autoCleanup) {
27398
27398
  cleanup();
@@ -27400,7 +27400,7 @@ var require_end_of_stream = __commonJS((exports, module) => {
27400
27400
  if (err) {
27401
27401
  reject(err);
27402
27402
  } else {
27403
- resolve9();
27403
+ resolve10();
27404
27404
  }
27405
27405
  });
27406
27406
  });
@@ -28562,7 +28562,7 @@ var require_readable3 = __commonJS((exports, module) => {
28562
28562
  error51 = this.readableEnded ? null : new AbortError;
28563
28563
  this.destroy(error51);
28564
28564
  }
28565
- return new Promise2((resolve9, reject) => eos(this, (err) => err && err !== error51 ? reject(err) : resolve9(null)));
28565
+ return new Promise2((resolve10, reject) => eos(this, (err) => err && err !== error51 ? reject(err) : resolve10(null)));
28566
28566
  };
28567
28567
  Readable.prototype.push = function(chunk, encoding) {
28568
28568
  return readableAddChunk(this, chunk, encoding, false);
@@ -29140,12 +29140,12 @@ var require_readable3 = __commonJS((exports, module) => {
29140
29140
  }
29141
29141
  async function* createAsyncIterator(stream, options) {
29142
29142
  let callback2 = nop;
29143
- function next(resolve9) {
29143
+ function next(resolve10) {
29144
29144
  if (this === stream) {
29145
29145
  callback2();
29146
29146
  callback2 = nop;
29147
29147
  } else {
29148
- callback2 = resolve9;
29148
+ callback2 = resolve10;
29149
29149
  }
29150
29150
  }
29151
29151
  stream.on("readable", next);
@@ -30181,7 +30181,7 @@ var require_duplexify = __commonJS((exports, module) => {
30181
30181
  ], body);
30182
30182
  };
30183
30183
  function fromAsyncGen(fn2) {
30184
- let { promise: promise3, resolve: resolve9 } = createDeferredPromise();
30184
+ let { promise: promise3, resolve: resolve10 } = createDeferredPromise();
30185
30185
  const ac = new AbortController2;
30186
30186
  const signal = ac.signal;
30187
30187
  const value = fn2(async function* () {
@@ -30196,7 +30196,7 @@ var require_duplexify = __commonJS((exports, module) => {
30196
30196
  throw new AbortError(undefined, {
30197
30197
  cause: signal.reason
30198
30198
  });
30199
- ({ promise: promise3, resolve: resolve9 } = createDeferredPromise());
30199
+ ({ promise: promise3, resolve: resolve10 } = createDeferredPromise());
30200
30200
  yield chunk;
30201
30201
  }
30202
30202
  }(), {
@@ -30205,8 +30205,8 @@ var require_duplexify = __commonJS((exports, module) => {
30205
30205
  return {
30206
30206
  value,
30207
30207
  write(chunk, encoding, cb) {
30208
- const _resolve = resolve9;
30209
- resolve9 = null;
30208
+ const _resolve = resolve10;
30209
+ resolve10 = null;
30210
30210
  _resolve({
30211
30211
  chunk,
30212
30212
  done: false,
@@ -30214,8 +30214,8 @@ var require_duplexify = __commonJS((exports, module) => {
30214
30214
  });
30215
30215
  },
30216
30216
  final(cb) {
30217
- const _resolve = resolve9;
30218
- resolve9 = null;
30217
+ const _resolve = resolve10;
30218
+ resolve10 = null;
30219
30219
  _resolve({
30220
30220
  done: true,
30221
30221
  cb
@@ -30652,7 +30652,7 @@ var require_pipeline = __commonJS((exports, module) => {
30652
30652
  callback2();
30653
30653
  }
30654
30654
  };
30655
- const wait = () => new Promise2((resolve9, reject) => {
30655
+ const wait = () => new Promise2((resolve10, reject) => {
30656
30656
  if (error51) {
30657
30657
  reject(error51);
30658
30658
  } else {
@@ -30660,7 +30660,7 @@ var require_pipeline = __commonJS((exports, module) => {
30660
30660
  if (error51) {
30661
30661
  reject(error51);
30662
30662
  } else {
30663
- resolve9();
30663
+ resolve10();
30664
30664
  }
30665
30665
  };
30666
30666
  }
@@ -31267,8 +31267,8 @@ var require_operators = __commonJS((exports, module) => {
31267
31267
  next = null;
31268
31268
  }
31269
31269
  if (!done && (queue.length >= highWaterMark || cnt >= concurrency)) {
31270
- await new Promise2((resolve9) => {
31271
- resume = resolve9;
31270
+ await new Promise2((resolve10) => {
31271
+ resume = resolve10;
31272
31272
  });
31273
31273
  }
31274
31274
  }
@@ -31302,8 +31302,8 @@ var require_operators = __commonJS((exports, module) => {
31302
31302
  queue.shift();
31303
31303
  maybeResume();
31304
31304
  }
31305
- await new Promise2((resolve9) => {
31306
- next = resolve9;
31305
+ await new Promise2((resolve10) => {
31306
+ next = resolve10;
31307
31307
  });
31308
31308
  }
31309
31309
  } finally {
@@ -31555,7 +31555,7 @@ var require_promises = __commonJS((exports, module) => {
31555
31555
  var { finished } = require_end_of_stream();
31556
31556
  require_stream();
31557
31557
  function pipeline(...streams) {
31558
- return new Promise2((resolve9, reject) => {
31558
+ return new Promise2((resolve10, reject) => {
31559
31559
  let signal;
31560
31560
  let end;
31561
31561
  const lastArg = streams[streams.length - 1];
@@ -31568,7 +31568,7 @@ var require_promises = __commonJS((exports, module) => {
31568
31568
  if (err) {
31569
31569
  reject(err);
31570
31570
  } else {
31571
- resolve9(value);
31571
+ resolve10(value);
31572
31572
  }
31573
31573
  }, {
31574
31574
  signal,
@@ -35801,10 +35801,10 @@ var require_commonjs3 = __commonJS((exports) => {
35801
35801
  return this[ENCODING] ? buf.join("") : Buffer.concat(buf, buf.dataLength);
35802
35802
  }
35803
35803
  async promise() {
35804
- return new Promise((resolve9, reject) => {
35804
+ return new Promise((resolve10, reject) => {
35805
35805
  this.on(DESTROYED, () => reject(new Error("stream destroyed")));
35806
35806
  this.on("error", (er2) => reject(er2));
35807
- this.on("end", () => resolve9());
35807
+ this.on("end", () => resolve10());
35808
35808
  });
35809
35809
  }
35810
35810
  [Symbol.asyncIterator]() {
@@ -35823,7 +35823,7 @@ var require_commonjs3 = __commonJS((exports) => {
35823
35823
  return Promise.resolve({ done: false, value: res });
35824
35824
  if (this[EOF])
35825
35825
  return stop();
35826
- let resolve9;
35826
+ let resolve10;
35827
35827
  let reject;
35828
35828
  const onerr = (er2) => {
35829
35829
  this.off("data", ondata);
@@ -35837,19 +35837,19 @@ var require_commonjs3 = __commonJS((exports) => {
35837
35837
  this.off("end", onend);
35838
35838
  this.off(DESTROYED, ondestroy);
35839
35839
  this.pause();
35840
- resolve9({ value, done: !!this[EOF] });
35840
+ resolve10({ value, done: !!this[EOF] });
35841
35841
  };
35842
35842
  const onend = () => {
35843
35843
  this.off("error", onerr);
35844
35844
  this.off("data", ondata);
35845
35845
  this.off(DESTROYED, ondestroy);
35846
35846
  stop();
35847
- resolve9({ done: true, value: undefined });
35847
+ resolve10({ done: true, value: undefined });
35848
35848
  };
35849
35849
  const ondestroy = () => onerr(new Error("stream destroyed"));
35850
35850
  return new Promise((res2, rej) => {
35851
35851
  reject = rej;
35852
- resolve9 = res2;
35852
+ resolve10 = res2;
35853
35853
  this.once(DESTROYED, ondestroy);
35854
35854
  this.once("error", onerr);
35855
35855
  this.once("end", onend);
@@ -36597,8 +36597,8 @@ var require_commonjs4 = __commonJS((exports) => {
36597
36597
  if (this.#asyncReaddirInFlight) {
36598
36598
  await this.#asyncReaddirInFlight;
36599
36599
  } else {
36600
- let resolve9 = () => {};
36601
- this.#asyncReaddirInFlight = new Promise((res) => resolve9 = res);
36600
+ let resolve10 = () => {};
36601
+ this.#asyncReaddirInFlight = new Promise((res) => resolve10 = res);
36602
36602
  try {
36603
36603
  for (const e of await this.#fs.promises.readdir(fullpath, {
36604
36604
  withFileTypes: true
@@ -36611,7 +36611,7 @@ var require_commonjs4 = __commonJS((exports) => {
36611
36611
  children.provisional = 0;
36612
36612
  }
36613
36613
  this.#asyncReaddirInFlight = undefined;
36614
- resolve9();
36614
+ resolve10();
36615
36615
  }
36616
36616
  return children.slice(0, children.provisional);
36617
36617
  }
@@ -39134,25 +39134,25 @@ var require_util4 = __commonJS((exports, module) => {
39134
39134
  };
39135
39135
  },
39136
39136
  createDeferredPromise: function() {
39137
- let resolve9;
39137
+ let resolve10;
39138
39138
  let reject;
39139
39139
  const promise3 = new Promise((res, rej) => {
39140
- resolve9 = res;
39140
+ resolve10 = res;
39141
39141
  reject = rej;
39142
39142
  });
39143
39143
  return {
39144
39144
  promise: promise3,
39145
- resolve: resolve9,
39145
+ resolve: resolve10,
39146
39146
  reject
39147
39147
  };
39148
39148
  },
39149
39149
  promisify(fn2) {
39150
- return new Promise((resolve9, reject) => {
39150
+ return new Promise((resolve10, reject) => {
39151
39151
  fn2((err, ...args) => {
39152
39152
  if (err) {
39153
39153
  return reject(err);
39154
39154
  }
39155
- return resolve9(...args);
39155
+ return resolve10(...args);
39156
39156
  });
39157
39157
  });
39158
39158
  },
@@ -39937,7 +39937,7 @@ var require_end_of_stream2 = __commonJS((exports, module) => {
39937
39937
  validateBoolean(opts.cleanup, "cleanup");
39938
39938
  autoCleanup = opts.cleanup;
39939
39939
  }
39940
- return new Promise2((resolve9, reject) => {
39940
+ return new Promise2((resolve10, reject) => {
39941
39941
  const cleanup = eos(stream, opts, (err) => {
39942
39942
  if (autoCleanup) {
39943
39943
  cleanup();
@@ -39945,7 +39945,7 @@ var require_end_of_stream2 = __commonJS((exports, module) => {
39945
39945
  if (err) {
39946
39946
  reject(err);
39947
39947
  } else {
39948
- resolve9();
39948
+ resolve10();
39949
39949
  }
39950
39950
  });
39951
39951
  });
@@ -40793,7 +40793,7 @@ var require_readable4 = __commonJS((exports, module) => {
40793
40793
  error51 = this.readableEnded ? null : new AbortError;
40794
40794
  this.destroy(error51);
40795
40795
  }
40796
- return new Promise2((resolve9, reject) => eos(this, (err) => err && err !== error51 ? reject(err) : resolve9(null)));
40796
+ return new Promise2((resolve10, reject) => eos(this, (err) => err && err !== error51 ? reject(err) : resolve10(null)));
40797
40797
  };
40798
40798
  Readable.prototype.push = function(chunk, encoding) {
40799
40799
  return readableAddChunk(this, chunk, encoding, false);
@@ -41371,12 +41371,12 @@ var require_readable4 = __commonJS((exports, module) => {
41371
41371
  }
41372
41372
  async function* createAsyncIterator(stream, options) {
41373
41373
  let callback2 = nop;
41374
- function next(resolve9) {
41374
+ function next(resolve10) {
41375
41375
  if (this === stream) {
41376
41376
  callback2();
41377
41377
  callback2 = nop;
41378
41378
  } else {
41379
- callback2 = resolve9;
41379
+ callback2 = resolve10;
41380
41380
  }
41381
41381
  }
41382
41382
  stream.on("readable", next);
@@ -42412,7 +42412,7 @@ var require_duplexify2 = __commonJS((exports, module) => {
42412
42412
  ], body);
42413
42413
  };
42414
42414
  function fromAsyncGen(fn2) {
42415
- let { promise: promise3, resolve: resolve9 } = createDeferredPromise();
42415
+ let { promise: promise3, resolve: resolve10 } = createDeferredPromise();
42416
42416
  const ac = new AbortController2;
42417
42417
  const signal = ac.signal;
42418
42418
  const value = fn2(async function* () {
@@ -42427,7 +42427,7 @@ var require_duplexify2 = __commonJS((exports, module) => {
42427
42427
  throw new AbortError(undefined, {
42428
42428
  cause: signal.reason
42429
42429
  });
42430
- ({ promise: promise3, resolve: resolve9 } = createDeferredPromise());
42430
+ ({ promise: promise3, resolve: resolve10 } = createDeferredPromise());
42431
42431
  yield chunk;
42432
42432
  }
42433
42433
  }(), {
@@ -42436,8 +42436,8 @@ var require_duplexify2 = __commonJS((exports, module) => {
42436
42436
  return {
42437
42437
  value,
42438
42438
  write(chunk, encoding, cb) {
42439
- const _resolve = resolve9;
42440
- resolve9 = null;
42439
+ const _resolve = resolve10;
42440
+ resolve10 = null;
42441
42441
  _resolve({
42442
42442
  chunk,
42443
42443
  done: false,
@@ -42445,8 +42445,8 @@ var require_duplexify2 = __commonJS((exports, module) => {
42445
42445
  });
42446
42446
  },
42447
42447
  final(cb) {
42448
- const _resolve = resolve9;
42449
- resolve9 = null;
42448
+ const _resolve = resolve10;
42449
+ resolve10 = null;
42450
42450
  _resolve({
42451
42451
  done: true,
42452
42452
  cb
@@ -42883,7 +42883,7 @@ var require_pipeline2 = __commonJS((exports, module) => {
42883
42883
  callback2();
42884
42884
  }
42885
42885
  };
42886
- const wait = () => new Promise2((resolve9, reject) => {
42886
+ const wait = () => new Promise2((resolve10, reject) => {
42887
42887
  if (error51) {
42888
42888
  reject(error51);
42889
42889
  } else {
@@ -42891,7 +42891,7 @@ var require_pipeline2 = __commonJS((exports, module) => {
42891
42891
  if (error51) {
42892
42892
  reject(error51);
42893
42893
  } else {
42894
- resolve9();
42894
+ resolve10();
42895
42895
  }
42896
42896
  };
42897
42897
  }
@@ -43498,8 +43498,8 @@ var require_operators2 = __commonJS((exports, module) => {
43498
43498
  next = null;
43499
43499
  }
43500
43500
  if (!done && (queue.length >= highWaterMark || cnt >= concurrency)) {
43501
- await new Promise2((resolve9) => {
43502
- resume = resolve9;
43501
+ await new Promise2((resolve10) => {
43502
+ resume = resolve10;
43503
43503
  });
43504
43504
  }
43505
43505
  }
@@ -43533,8 +43533,8 @@ var require_operators2 = __commonJS((exports, module) => {
43533
43533
  queue.shift();
43534
43534
  maybeResume();
43535
43535
  }
43536
- await new Promise2((resolve9) => {
43537
- next = resolve9;
43536
+ await new Promise2((resolve10) => {
43537
+ next = resolve10;
43538
43538
  });
43539
43539
  }
43540
43540
  } finally {
@@ -43786,7 +43786,7 @@ var require_promises2 = __commonJS((exports, module) => {
43786
43786
  var { finished } = require_end_of_stream2();
43787
43787
  require_stream2();
43788
43788
  function pipeline(...streams) {
43789
- return new Promise2((resolve9, reject) => {
43789
+ return new Promise2((resolve10, reject) => {
43790
43790
  let signal;
43791
43791
  let end;
43792
43792
  const lastArg = streams[streams.length - 1];
@@ -43799,7 +43799,7 @@ var require_promises2 = __commonJS((exports, module) => {
43799
43799
  if (err) {
43800
43800
  reject(err);
43801
43801
  } else {
43802
- resolve9(value);
43802
+ resolve10(value);
43803
43803
  }
43804
43804
  }, {
43805
43805
  signal,
@@ -44447,11 +44447,11 @@ var require_core = __commonJS((exports, module) => {
44447
44447
  this._finalize();
44448
44448
  }
44449
44449
  var self2 = this;
44450
- return new Promise(function(resolve9, reject) {
44450
+ return new Promise(function(resolve10, reject) {
44451
44451
  var errored;
44452
44452
  self2._module.on("end", function() {
44453
44453
  if (!errored) {
44454
- resolve9();
44454
+ resolve10();
44455
44455
  }
44456
44456
  });
44457
44457
  self2._module.on("error", function(err) {
@@ -45397,25 +45397,25 @@ var require_util6 = __commonJS((exports, module) => {
45397
45397
  };
45398
45398
  },
45399
45399
  createDeferredPromise: function() {
45400
- let resolve9;
45400
+ let resolve10;
45401
45401
  let reject;
45402
45402
  const promise3 = new Promise((res, rej) => {
45403
- resolve9 = res;
45403
+ resolve10 = res;
45404
45404
  reject = rej;
45405
45405
  });
45406
45406
  return {
45407
45407
  promise: promise3,
45408
- resolve: resolve9,
45408
+ resolve: resolve10,
45409
45409
  reject
45410
45410
  };
45411
45411
  },
45412
45412
  promisify(fn2) {
45413
- return new Promise((resolve9, reject) => {
45413
+ return new Promise((resolve10, reject) => {
45414
45414
  fn2((err, ...args) => {
45415
45415
  if (err) {
45416
45416
  return reject(err);
45417
45417
  }
45418
- return resolve9(...args);
45418
+ return resolve10(...args);
45419
45419
  });
45420
45420
  });
45421
45421
  },
@@ -46200,7 +46200,7 @@ var require_end_of_stream3 = __commonJS((exports, module) => {
46200
46200
  validateBoolean(opts.cleanup, "cleanup");
46201
46201
  autoCleanup = opts.cleanup;
46202
46202
  }
46203
- return new Promise2((resolve9, reject) => {
46203
+ return new Promise2((resolve10, reject) => {
46204
46204
  const cleanup = eos(stream, opts, (err) => {
46205
46205
  if (autoCleanup) {
46206
46206
  cleanup();
@@ -46208,7 +46208,7 @@ var require_end_of_stream3 = __commonJS((exports, module) => {
46208
46208
  if (err) {
46209
46209
  reject(err);
46210
46210
  } else {
46211
- resolve9();
46211
+ resolve10();
46212
46212
  }
46213
46213
  });
46214
46214
  });
@@ -47056,7 +47056,7 @@ var require_readable5 = __commonJS((exports, module) => {
47056
47056
  error51 = this.readableEnded ? null : new AbortError;
47057
47057
  this.destroy(error51);
47058
47058
  }
47059
- return new Promise2((resolve9, reject) => eos(this, (err) => err && err !== error51 ? reject(err) : resolve9(null)));
47059
+ return new Promise2((resolve10, reject) => eos(this, (err) => err && err !== error51 ? reject(err) : resolve10(null)));
47060
47060
  };
47061
47061
  Readable.prototype.push = function(chunk, encoding) {
47062
47062
  return readableAddChunk(this, chunk, encoding, false);
@@ -47634,12 +47634,12 @@ var require_readable5 = __commonJS((exports, module) => {
47634
47634
  }
47635
47635
  async function* createAsyncIterator(stream, options) {
47636
47636
  let callback2 = nop;
47637
- function next(resolve9) {
47637
+ function next(resolve10) {
47638
47638
  if (this === stream) {
47639
47639
  callback2();
47640
47640
  callback2 = nop;
47641
47641
  } else {
47642
- callback2 = resolve9;
47642
+ callback2 = resolve10;
47643
47643
  }
47644
47644
  }
47645
47645
  stream.on("readable", next);
@@ -48675,7 +48675,7 @@ var require_duplexify3 = __commonJS((exports, module) => {
48675
48675
  ], body);
48676
48676
  };
48677
48677
  function fromAsyncGen(fn2) {
48678
- let { promise: promise3, resolve: resolve9 } = createDeferredPromise();
48678
+ let { promise: promise3, resolve: resolve10 } = createDeferredPromise();
48679
48679
  const ac = new AbortController2;
48680
48680
  const signal = ac.signal;
48681
48681
  const value = fn2(async function* () {
@@ -48690,7 +48690,7 @@ var require_duplexify3 = __commonJS((exports, module) => {
48690
48690
  throw new AbortError(undefined, {
48691
48691
  cause: signal.reason
48692
48692
  });
48693
- ({ promise: promise3, resolve: resolve9 } = createDeferredPromise());
48693
+ ({ promise: promise3, resolve: resolve10 } = createDeferredPromise());
48694
48694
  yield chunk;
48695
48695
  }
48696
48696
  }(), {
@@ -48699,8 +48699,8 @@ var require_duplexify3 = __commonJS((exports, module) => {
48699
48699
  return {
48700
48700
  value,
48701
48701
  write(chunk, encoding, cb) {
48702
- const _resolve = resolve9;
48703
- resolve9 = null;
48702
+ const _resolve = resolve10;
48703
+ resolve10 = null;
48704
48704
  _resolve({
48705
48705
  chunk,
48706
48706
  done: false,
@@ -48708,8 +48708,8 @@ var require_duplexify3 = __commonJS((exports, module) => {
48708
48708
  });
48709
48709
  },
48710
48710
  final(cb) {
48711
- const _resolve = resolve9;
48712
- resolve9 = null;
48711
+ const _resolve = resolve10;
48712
+ resolve10 = null;
48713
48713
  _resolve({
48714
48714
  done: true,
48715
48715
  cb
@@ -49146,7 +49146,7 @@ var require_pipeline3 = __commonJS((exports, module) => {
49146
49146
  callback2();
49147
49147
  }
49148
49148
  };
49149
- const wait = () => new Promise2((resolve9, reject) => {
49149
+ const wait = () => new Promise2((resolve10, reject) => {
49150
49150
  if (error51) {
49151
49151
  reject(error51);
49152
49152
  } else {
@@ -49154,7 +49154,7 @@ var require_pipeline3 = __commonJS((exports, module) => {
49154
49154
  if (error51) {
49155
49155
  reject(error51);
49156
49156
  } else {
49157
- resolve9();
49157
+ resolve10();
49158
49158
  }
49159
49159
  };
49160
49160
  }
@@ -49761,8 +49761,8 @@ var require_operators3 = __commonJS((exports, module) => {
49761
49761
  next = null;
49762
49762
  }
49763
49763
  if (!done && (queue.length >= highWaterMark || cnt >= concurrency)) {
49764
- await new Promise2((resolve9) => {
49765
- resume = resolve9;
49764
+ await new Promise2((resolve10) => {
49765
+ resume = resolve10;
49766
49766
  });
49767
49767
  }
49768
49768
  }
@@ -49796,8 +49796,8 @@ var require_operators3 = __commonJS((exports, module) => {
49796
49796
  queue.shift();
49797
49797
  maybeResume();
49798
49798
  }
49799
- await new Promise2((resolve9) => {
49800
- next = resolve9;
49799
+ await new Promise2((resolve10) => {
49800
+ next = resolve10;
49801
49801
  });
49802
49802
  }
49803
49803
  } finally {
@@ -50049,7 +50049,7 @@ var require_promises3 = __commonJS((exports, module) => {
50049
50049
  var { finished } = require_end_of_stream3();
50050
50050
  require_stream3();
50051
50051
  function pipeline(...streams) {
50052
- return new Promise2((resolve9, reject) => {
50052
+ return new Promise2((resolve10, reject) => {
50053
50053
  let signal;
50054
50054
  let end;
50055
50055
  const lastArg = streams[streams.length - 1];
@@ -50062,7 +50062,7 @@ var require_promises3 = __commonJS((exports, module) => {
50062
50062
  if (err) {
50063
50063
  reject(err);
50064
50064
  } else {
50065
- resolve9(value);
50065
+ resolve10(value);
50066
50066
  }
50067
50067
  }, {
50068
50068
  signal,
@@ -50954,25 +50954,25 @@ var require_util8 = __commonJS((exports, module) => {
50954
50954
  };
50955
50955
  },
50956
50956
  createDeferredPromise: function() {
50957
- let resolve9;
50957
+ let resolve10;
50958
50958
  let reject;
50959
50959
  const promise3 = new Promise((res, rej) => {
50960
- resolve9 = res;
50960
+ resolve10 = res;
50961
50961
  reject = rej;
50962
50962
  });
50963
50963
  return {
50964
50964
  promise: promise3,
50965
- resolve: resolve9,
50965
+ resolve: resolve10,
50966
50966
  reject
50967
50967
  };
50968
50968
  },
50969
50969
  promisify(fn2) {
50970
- return new Promise((resolve9, reject) => {
50970
+ return new Promise((resolve10, reject) => {
50971
50971
  fn2((err, ...args) => {
50972
50972
  if (err) {
50973
50973
  return reject(err);
50974
50974
  }
50975
- return resolve9(...args);
50975
+ return resolve10(...args);
50976
50976
  });
50977
50977
  });
50978
50978
  },
@@ -51757,7 +51757,7 @@ var require_end_of_stream4 = __commonJS((exports, module) => {
51757
51757
  validateBoolean(opts.cleanup, "cleanup");
51758
51758
  autoCleanup = opts.cleanup;
51759
51759
  }
51760
- return new Promise2((resolve9, reject) => {
51760
+ return new Promise2((resolve10, reject) => {
51761
51761
  const cleanup = eos(stream, opts, (err) => {
51762
51762
  if (autoCleanup) {
51763
51763
  cleanup();
@@ -51765,7 +51765,7 @@ var require_end_of_stream4 = __commonJS((exports, module) => {
51765
51765
  if (err) {
51766
51766
  reject(err);
51767
51767
  } else {
51768
- resolve9();
51768
+ resolve10();
51769
51769
  }
51770
51770
  });
51771
51771
  });
@@ -52613,7 +52613,7 @@ var require_readable6 = __commonJS((exports, module) => {
52613
52613
  error51 = this.readableEnded ? null : new AbortError;
52614
52614
  this.destroy(error51);
52615
52615
  }
52616
- return new Promise2((resolve9, reject) => eos(this, (err) => err && err !== error51 ? reject(err) : resolve9(null)));
52616
+ return new Promise2((resolve10, reject) => eos(this, (err) => err && err !== error51 ? reject(err) : resolve10(null)));
52617
52617
  };
52618
52618
  Readable.prototype.push = function(chunk, encoding) {
52619
52619
  return readableAddChunk(this, chunk, encoding, false);
@@ -53191,12 +53191,12 @@ var require_readable6 = __commonJS((exports, module) => {
53191
53191
  }
53192
53192
  async function* createAsyncIterator(stream, options) {
53193
53193
  let callback2 = nop;
53194
- function next(resolve9) {
53194
+ function next(resolve10) {
53195
53195
  if (this === stream) {
53196
53196
  callback2();
53197
53197
  callback2 = nop;
53198
53198
  } else {
53199
- callback2 = resolve9;
53199
+ callback2 = resolve10;
53200
53200
  }
53201
53201
  }
53202
53202
  stream.on("readable", next);
@@ -54232,7 +54232,7 @@ var require_duplexify4 = __commonJS((exports, module) => {
54232
54232
  ], body);
54233
54233
  };
54234
54234
  function fromAsyncGen(fn2) {
54235
- let { promise: promise3, resolve: resolve9 } = createDeferredPromise();
54235
+ let { promise: promise3, resolve: resolve10 } = createDeferredPromise();
54236
54236
  const ac = new AbortController2;
54237
54237
  const signal = ac.signal;
54238
54238
  const value = fn2(async function* () {
@@ -54247,7 +54247,7 @@ var require_duplexify4 = __commonJS((exports, module) => {
54247
54247
  throw new AbortError(undefined, {
54248
54248
  cause: signal.reason
54249
54249
  });
54250
- ({ promise: promise3, resolve: resolve9 } = createDeferredPromise());
54250
+ ({ promise: promise3, resolve: resolve10 } = createDeferredPromise());
54251
54251
  yield chunk;
54252
54252
  }
54253
54253
  }(), {
@@ -54256,8 +54256,8 @@ var require_duplexify4 = __commonJS((exports, module) => {
54256
54256
  return {
54257
54257
  value,
54258
54258
  write(chunk, encoding, cb) {
54259
- const _resolve = resolve9;
54260
- resolve9 = null;
54259
+ const _resolve = resolve10;
54260
+ resolve10 = null;
54261
54261
  _resolve({
54262
54262
  chunk,
54263
54263
  done: false,
@@ -54265,8 +54265,8 @@ var require_duplexify4 = __commonJS((exports, module) => {
54265
54265
  });
54266
54266
  },
54267
54267
  final(cb) {
54268
- const _resolve = resolve9;
54269
- resolve9 = null;
54268
+ const _resolve = resolve10;
54269
+ resolve10 = null;
54270
54270
  _resolve({
54271
54271
  done: true,
54272
54272
  cb
@@ -54703,7 +54703,7 @@ var require_pipeline4 = __commonJS((exports, module) => {
54703
54703
  callback2();
54704
54704
  }
54705
54705
  };
54706
- const wait = () => new Promise2((resolve9, reject) => {
54706
+ const wait = () => new Promise2((resolve10, reject) => {
54707
54707
  if (error51) {
54708
54708
  reject(error51);
54709
54709
  } else {
@@ -54711,7 +54711,7 @@ var require_pipeline4 = __commonJS((exports, module) => {
54711
54711
  if (error51) {
54712
54712
  reject(error51);
54713
54713
  } else {
54714
- resolve9();
54714
+ resolve10();
54715
54715
  }
54716
54716
  };
54717
54717
  }
@@ -55318,8 +55318,8 @@ var require_operators4 = __commonJS((exports, module) => {
55318
55318
  next = null;
55319
55319
  }
55320
55320
  if (!done && (queue.length >= highWaterMark || cnt >= concurrency)) {
55321
- await new Promise2((resolve9) => {
55322
- resume = resolve9;
55321
+ await new Promise2((resolve10) => {
55322
+ resume = resolve10;
55323
55323
  });
55324
55324
  }
55325
55325
  }
@@ -55353,8 +55353,8 @@ var require_operators4 = __commonJS((exports, module) => {
55353
55353
  queue.shift();
55354
55354
  maybeResume();
55355
55355
  }
55356
- await new Promise2((resolve9) => {
55357
- next = resolve9;
55356
+ await new Promise2((resolve10) => {
55357
+ next = resolve10;
55358
55358
  });
55359
55359
  }
55360
55360
  } finally {
@@ -55606,7 +55606,7 @@ var require_promises4 = __commonJS((exports, module) => {
55606
55606
  var { finished } = require_end_of_stream4();
55607
55607
  require_stream4();
55608
55608
  function pipeline(...streams) {
55609
- return new Promise2((resolve9, reject) => {
55609
+ return new Promise2((resolve10, reject) => {
55610
55610
  let signal;
55611
55611
  let end;
55612
55612
  const lastArg = streams[streams.length - 1];
@@ -55619,7 +55619,7 @@ var require_promises4 = __commonJS((exports, module) => {
55619
55619
  if (err) {
55620
55620
  reject(err);
55621
55621
  } else {
55622
- resolve9(value);
55622
+ resolve10(value);
55623
55623
  }
55624
55624
  }, {
55625
55625
  signal,
@@ -57564,8 +57564,8 @@ var require_streamx = __commonJS((exports, module) => {
57564
57564
  return this;
57565
57565
  },
57566
57566
  next() {
57567
- return new Promise(function(resolve9, reject) {
57568
- promiseResolve = resolve9;
57567
+ return new Promise(function(resolve10, reject) {
57568
+ promiseResolve = resolve10;
57569
57569
  promiseReject = reject;
57570
57570
  const data = stream.read();
57571
57571
  if (data !== null)
@@ -57602,14 +57602,14 @@ var require_streamx = __commonJS((exports, module) => {
57602
57602
  }
57603
57603
  function destroy(err) {
57604
57604
  stream.destroy(err);
57605
- return new Promise((resolve9, reject) => {
57605
+ return new Promise((resolve10, reject) => {
57606
57606
  if (stream._duplexState & DESTROYED)
57607
- return resolve9({ value: undefined, done: true });
57607
+ return resolve10({ value: undefined, done: true });
57608
57608
  stream.once("close", function() {
57609
57609
  if (err)
57610
57610
  reject(err);
57611
57611
  else
57612
- resolve9({ value: undefined, done: true });
57612
+ resolve10({ value: undefined, done: true });
57613
57613
  });
57614
57614
  });
57615
57615
  }
@@ -57661,8 +57661,8 @@ var require_streamx = __commonJS((exports, module) => {
57661
57661
  return Promise.resolve(true);
57662
57662
  if (state.drains === null)
57663
57663
  state.drains = [];
57664
- return new Promise((resolve9) => {
57665
- state.drains.push({ writes, resolve: resolve9 });
57664
+ return new Promise((resolve10) => {
57665
+ state.drains.push({ writes, resolve: resolve10 });
57666
57666
  });
57667
57667
  }
57668
57668
  write(data) {
@@ -57776,11 +57776,11 @@ var require_streamx = __commonJS((exports, module) => {
57776
57776
  cb(null);
57777
57777
  }
57778
57778
  function pipelinePromise(...streams) {
57779
- return new Promise((resolve9, reject) => {
57779
+ return new Promise((resolve10, reject) => {
57780
57780
  return pipeline(...streams, (err) => {
57781
57781
  if (err)
57782
57782
  return reject(err);
57783
- resolve9();
57783
+ resolve10();
57784
57784
  });
57785
57785
  });
57786
57786
  }
@@ -58505,16 +58505,16 @@ var require_extract = __commonJS((exports, module) => {
58505
58505
  entryCallback = null;
58506
58506
  cb(err);
58507
58507
  }
58508
- function onnext(resolve9, reject) {
58508
+ function onnext(resolve10, reject) {
58509
58509
  if (error51) {
58510
58510
  return reject(error51);
58511
58511
  }
58512
58512
  if (entryStream) {
58513
- resolve9({ value: entryStream, done: false });
58513
+ resolve10({ value: entryStream, done: false });
58514
58514
  entryStream = null;
58515
58515
  return;
58516
58516
  }
58517
- promiseResolve = resolve9;
58517
+ promiseResolve = resolve10;
58518
58518
  promiseReject = reject;
58519
58519
  consumeCallback(null);
58520
58520
  if (extract._finished && promiseResolve) {
@@ -58545,14 +58545,14 @@ var require_extract = __commonJS((exports, module) => {
58545
58545
  function destroy(err) {
58546
58546
  extract.destroy(err);
58547
58547
  consumeCallback(err);
58548
- return new Promise((resolve9, reject) => {
58548
+ return new Promise((resolve10, reject) => {
58549
58549
  if (extract.destroyed)
58550
- return resolve9({ value: undefined, done: true });
58550
+ return resolve10({ value: undefined, done: true });
58551
58551
  extract.once("close", function() {
58552
58552
  if (err)
58553
58553
  reject(err);
58554
58554
  else
58555
- resolve9({ value: undefined, done: true });
58555
+ resolve10({ value: undefined, done: true });
58556
58556
  });
58557
58557
  });
58558
58558
  }
@@ -59703,7 +59703,7 @@ async function executeHooksWithArgs(hookName, hooks = [], args = []) {
59703
59703
  return true;
59704
59704
  }
59705
59705
  };
59706
- const hooksPromises = hooks.map((hook) => new Promise((resolve9, reject) => {
59706
+ const hooksPromises = hooks.map((hook) => new Promise((resolve10, reject) => {
59707
59707
  let result2;
59708
59708
  try {
59709
59709
  result2 = hook.apply(this, args);
@@ -59712,18 +59712,18 @@ async function executeHooksWithArgs(hookName, hooks = [], args = []) {
59712
59712
  return;
59713
59713
  }
59714
59714
  log32.error(e.stack);
59715
- return resolve9(e);
59715
+ return resolve10(e);
59716
59716
  }
59717
59717
  if (result2 && typeof result2.then === "function") {
59718
- return result2.then(resolve9, (e) => {
59718
+ return result2.then(resolve10, (e) => {
59719
59719
  if (rejectIfSkipped(e, reject)) {
59720
59720
  return;
59721
59721
  }
59722
59722
  log32.error(e.stack || e.message);
59723
- resolve9(e);
59723
+ resolve10(e);
59724
59724
  });
59725
59725
  }
59726
- resolve9(result2);
59726
+ resolve10(result2);
59727
59727
  }));
59728
59728
  const start = Date.now();
59729
59729
  const result = await Promise.all(hooksPromises);
@@ -60018,17 +60018,17 @@ var __defProp2, __export2 = (target, all) => {
60018
60018
  }
60019
60019
  return result;
60020
60020
  }, find2 = (array2, callback2, thisArg) => {
60021
- return new Promise((resolve9, reject) => {
60021
+ return new Promise((resolve10, reject) => {
60022
60022
  if (array2.length === 0) {
60023
- return resolve9(undefined);
60023
+ return resolve10(undefined);
60024
60024
  }
60025
60025
  let counter = 1;
60026
60026
  for (let i2 = 0;i2 < array2.length; i2++) {
60027
60027
  const check2 = (found) => {
60028
60028
  if (found) {
60029
- resolve9(array2[i2]);
60029
+ resolve10(array2[i2]);
60030
60030
  } else if (counter === array2.length) {
60031
- resolve9(undefined);
60031
+ resolve10(undefined);
60032
60032
  }
60033
60033
  counter++;
60034
60034
  };
@@ -60042,17 +60042,17 @@ var __defProp2, __export2 = (target, all) => {
60042
60042
  }
60043
60043
  }
60044
60044
  }, findIndex = (array2, callback2, thisArg) => {
60045
- return new Promise((resolve9, reject) => {
60045
+ return new Promise((resolve10, reject) => {
60046
60046
  if (array2.length === 0) {
60047
- return resolve9(-1);
60047
+ return resolve10(-1);
60048
60048
  }
60049
60049
  let counter = 1;
60050
60050
  for (let i2 = 0;i2 < array2.length; i2++) {
60051
60051
  const check2 = (found) => {
60052
60052
  if (found) {
60053
- resolve9(i2);
60053
+ resolve10(i2);
60054
60054
  } else if (counter === array2.length) {
60055
- resolve9(-1);
60055
+ resolve10(-1);
60056
60056
  }
60057
60057
  counter++;
60058
60058
  };
@@ -60066,9 +60066,9 @@ var __defProp2, __export2 = (target, all) => {
60066
60066
  }
60067
60067
  }
60068
60068
  }, some = (array2, callback2, thisArg) => {
60069
- return new Promise((resolve9, reject) => {
60069
+ return new Promise((resolve10, reject) => {
60070
60070
  if (array2.length === 0) {
60071
- return resolve9(false);
60071
+ return resolve10(false);
60072
60072
  }
60073
60073
  let counter = 1;
60074
60074
  for (let i2 = 0;i2 < array2.length; i2++) {
@@ -60078,9 +60078,9 @@ var __defProp2, __export2 = (target, all) => {
60078
60078
  }
60079
60079
  const check2 = (found) => {
60080
60080
  if (found) {
60081
- resolve9(true);
60081
+ resolve10(true);
60082
60082
  } else if (counter === array2.length) {
60083
- resolve9(false);
60083
+ resolve10(false);
60084
60084
  }
60085
60085
  counter++;
60086
60086
  };
@@ -60095,9 +60095,9 @@ var __defProp2, __export2 = (target, all) => {
60095
60095
  }
60096
60096
  return false;
60097
60097
  }, every = (array2, callback2, thisArg) => {
60098
- return new Promise((resolve9, reject) => {
60098
+ return new Promise((resolve10, reject) => {
60099
60099
  if (array2.length === 0) {
60100
- return resolve9(true);
60100
+ return resolve10(true);
60101
60101
  }
60102
60102
  let counter = 1;
60103
60103
  for (let i2 = 0;i2 < array2.length; i2++) {
@@ -60107,9 +60107,9 @@ var __defProp2, __export2 = (target, all) => {
60107
60107
  }
60108
60108
  const check2 = (found) => {
60109
60109
  if (!found) {
60110
- resolve9(false);
60110
+ resolve10(false);
60111
60111
  } else if (counter === array2.length) {
60112
- resolve9(true);
60112
+ resolve10(true);
60113
60113
  }
60114
60114
  counter++;
60115
60115
  };
@@ -60124,7 +60124,7 @@ var __defProp2, __export2 = (target, all) => {
60124
60124
  }
60125
60125
  return true;
60126
60126
  }, filter = (array2, callback2, thisArg) => {
60127
- return new Promise((resolve9, reject) => {
60127
+ return new Promise((resolve10, reject) => {
60128
60128
  const promiseArray = [];
60129
60129
  for (let i2 = 0;i2 < array2.length; i2++) {
60130
60130
  if (i2 in array2) {
@@ -60138,7 +60138,7 @@ var __defProp2, __export2 = (target, all) => {
60138
60138
  return await array2[i2];
60139
60139
  }
60140
60140
  return;
60141
- })).then((result) => result.filter((val) => typeof val !== "undefined")).then(resolve9, reject);
60141
+ })).then((result) => result.filter((val) => typeof val !== "undefined")).then(resolve10, reject);
60142
60142
  });
60143
60143
  }, filterSeries = async (array2, callback2, thisArg) => {
60144
60144
  const result = [];
@@ -61984,7 +61984,7 @@ var require_websocket = __commonJS((exports, module) => {
61984
61984
  var http = __require("http");
61985
61985
  var net2 = __require("net");
61986
61986
  var tls = __require("tls");
61987
- var { randomBytes: randomBytes4, createHash: createHash4 } = __require("crypto");
61987
+ var { randomBytes: randomBytes4, createHash: createHash5 } = __require("crypto");
61988
61988
  var { Duplex, Readable } = __require("stream");
61989
61989
  var { URL: URL2 } = __require("url");
61990
61990
  var PerMessageDeflate = require_permessage_deflate();
@@ -62523,7 +62523,7 @@ var require_websocket = __commonJS((exports, module) => {
62523
62523
  abortHandshake(websocket, socket, "Invalid Upgrade header");
62524
62524
  return;
62525
62525
  }
62526
- const digest = createHash4("sha1").update(key + GUID).digest("base64");
62526
+ const digest = createHash5("sha1").update(key + GUID).digest("base64");
62527
62527
  if (res.headers["sec-websocket-accept"] !== digest) {
62528
62528
  abortHandshake(websocket, socket, "Invalid Sec-WebSocket-Accept header");
62529
62529
  return;
@@ -62896,7 +62896,7 @@ var require_websocket_server = __commonJS((exports, module) => {
62896
62896
  var EventEmitter = __require("events");
62897
62897
  var http = __require("http");
62898
62898
  var { Duplex } = __require("stream");
62899
- var { createHash: createHash4 } = __require("crypto");
62899
+ var { createHash: createHash5 } = __require("crypto");
62900
62900
  var extension = require_extension();
62901
62901
  var PerMessageDeflate = require_permessage_deflate();
62902
62902
  var subprotocol = require_subprotocol();
@@ -63109,7 +63109,7 @@ var require_websocket_server = __commonJS((exports, module) => {
63109
63109
  }
63110
63110
  if (this._state > RUNNING)
63111
63111
  return abortHandshake(socket, 503);
63112
- const digest = createHash4("sha1").update(key + GUID).digest("base64");
63112
+ const digest = createHash5("sha1").update(key + GUID).digest("base64");
63113
63113
  const headers = [
63114
63114
  "HTTP/1.1 101 Switching Protocols",
63115
63115
  "Upgrade: websocket",
@@ -71654,9 +71654,9 @@ var require_dispatcher_base = __commonJS((exports, module) => {
71654
71654
  }
71655
71655
  close(callback2) {
71656
71656
  if (callback2 === undefined) {
71657
- return new Promise((resolve9, reject) => {
71657
+ return new Promise((resolve10, reject) => {
71658
71658
  this.close((err, data) => {
71659
- return err ? reject(err) : resolve9(data);
71659
+ return err ? reject(err) : resolve10(data);
71660
71660
  });
71661
71661
  });
71662
71662
  }
@@ -71694,9 +71694,9 @@ var require_dispatcher_base = __commonJS((exports, module) => {
71694
71694
  err = null;
71695
71695
  }
71696
71696
  if (callback2 === undefined) {
71697
- return new Promise((resolve9, reject) => {
71697
+ return new Promise((resolve10, reject) => {
71698
71698
  this.destroy(err, (err2, data) => {
71699
- return err2 ? reject(err2) : resolve9(data);
71699
+ return err2 ? reject(err2) : resolve10(data);
71700
71700
  });
71701
71701
  });
71702
71702
  }
@@ -73702,8 +73702,8 @@ var require_util10 = __commonJS((exports, module) => {
73702
73702
  function createDeferredPromise() {
73703
73703
  let res;
73704
73704
  let rej;
73705
- const promise3 = new Promise((resolve9, reject) => {
73706
- res = resolve9;
73705
+ const promise3 = new Promise((resolve10, reject) => {
73706
+ res = resolve10;
73707
73707
  rej = reject;
73708
73708
  });
73709
73709
  return { promise: promise3, resolve: res, reject: rej };
@@ -75756,12 +75756,12 @@ upgrade: ${upgrade}\r
75756
75756
  cb();
75757
75757
  }
75758
75758
  }
75759
- const waitForDrain = () => new Promise((resolve9, reject) => {
75759
+ const waitForDrain = () => new Promise((resolve10, reject) => {
75760
75760
  assert2(callback2 === null);
75761
75761
  if (socket[kError]) {
75762
75762
  reject(socket[kError]);
75763
75763
  } else {
75764
- callback2 = resolve9;
75764
+ callback2 = resolve10;
75765
75765
  }
75766
75766
  });
75767
75767
  socket.on("close", onDrain).on("drain", onDrain);
@@ -76342,12 +76342,12 @@ var require_client_h2 = __commonJS((exports, module) => {
76342
76342
  cb();
76343
76343
  }
76344
76344
  }
76345
- const waitForDrain = () => new Promise((resolve9, reject) => {
76345
+ const waitForDrain = () => new Promise((resolve10, reject) => {
76346
76346
  assert2(callback2 === null);
76347
76347
  if (socket[kError]) {
76348
76348
  reject(socket[kError]);
76349
76349
  } else {
76350
- callback2 = resolve9;
76350
+ callback2 = resolve10;
76351
76351
  }
76352
76352
  });
76353
76353
  h2stream.on("close", onDrain).on("drain", onDrain);
@@ -76807,16 +76807,16 @@ var require_client = __commonJS((exports, module) => {
76807
76807
  return this[kNeedDrain] < 2;
76808
76808
  }
76809
76809
  async[kClose]() {
76810
- return new Promise((resolve9) => {
76810
+ return new Promise((resolve10) => {
76811
76811
  if (this[kSize]) {
76812
- this[kClosedResolve] = resolve9;
76812
+ this[kClosedResolve] = resolve10;
76813
76813
  } else {
76814
- resolve9(null);
76814
+ resolve10(null);
76815
76815
  }
76816
76816
  });
76817
76817
  }
76818
76818
  async[kDestroy](err) {
76819
- return new Promise((resolve9) => {
76819
+ return new Promise((resolve10) => {
76820
76820
  const requests = this[kQueue].splice(this[kPendingIdx]);
76821
76821
  for (let i2 = 0;i2 < requests.length; i2++) {
76822
76822
  const request = requests[i2];
@@ -76827,7 +76827,7 @@ var require_client = __commonJS((exports, module) => {
76827
76827
  this[kClosedResolve]();
76828
76828
  this[kClosedResolve] = null;
76829
76829
  }
76830
- resolve9(null);
76830
+ resolve10(null);
76831
76831
  };
76832
76832
  if (this[kHTTPContext]) {
76833
76833
  this[kHTTPContext].destroy(err, callback2);
@@ -76878,7 +76878,7 @@ var require_client = __commonJS((exports, module) => {
76878
76878
  });
76879
76879
  }
76880
76880
  try {
76881
- const socket = await new Promise((resolve9, reject) => {
76881
+ const socket = await new Promise((resolve10, reject) => {
76882
76882
  client[kConnector]({
76883
76883
  host,
76884
76884
  hostname: hostname3,
@@ -76890,7 +76890,7 @@ var require_client = __commonJS((exports, module) => {
76890
76890
  if (err) {
76891
76891
  reject(err);
76892
76892
  } else {
76893
- resolve9(socket2);
76893
+ resolve10(socket2);
76894
76894
  }
76895
76895
  });
76896
76896
  });
@@ -77221,8 +77221,8 @@ var require_pool_base = __commonJS((exports, module) => {
77221
77221
  if (this[kQueue].isEmpty()) {
77222
77222
  await Promise.all(this[kClients].map((c2) => c2.close()));
77223
77223
  } else {
77224
- await new Promise((resolve9) => {
77225
- this[kClosedResolve] = resolve9;
77224
+ await new Promise((resolve10) => {
77225
+ this[kClosedResolve] = resolve10;
77226
77226
  });
77227
77227
  }
77228
77228
  }
@@ -78367,7 +78367,7 @@ var require_readable7 = __commonJS((exports, module) => {
78367
78367
  if (this._readableState.closeEmitted) {
78368
78368
  return null;
78369
78369
  }
78370
- return await new Promise((resolve9, reject) => {
78370
+ return await new Promise((resolve10, reject) => {
78371
78371
  if (this[kContentLength] > limit) {
78372
78372
  this.destroy(new AbortError);
78373
78373
  }
@@ -78380,7 +78380,7 @@ var require_readable7 = __commonJS((exports, module) => {
78380
78380
  if (signal?.aborted) {
78381
78381
  reject(signal.reason ?? new AbortError);
78382
78382
  } else {
78383
- resolve9(null);
78383
+ resolve10(null);
78384
78384
  }
78385
78385
  }).on("error", noop).on("data", function(chunk) {
78386
78386
  limit -= chunk.length;
@@ -78399,7 +78399,7 @@ var require_readable7 = __commonJS((exports, module) => {
78399
78399
  }
78400
78400
  async function consume(stream, type) {
78401
78401
  assert2(!stream[kConsume]);
78402
- return new Promise((resolve9, reject) => {
78402
+ return new Promise((resolve10, reject) => {
78403
78403
  if (isUnusable(stream)) {
78404
78404
  const rState = stream._readableState;
78405
78405
  if (rState.destroyed && rState.closeEmitted === false) {
@@ -78416,7 +78416,7 @@ var require_readable7 = __commonJS((exports, module) => {
78416
78416
  stream[kConsume] = {
78417
78417
  type,
78418
78418
  stream,
78419
- resolve: resolve9,
78419
+ resolve: resolve10,
78420
78420
  reject,
78421
78421
  length: 0,
78422
78422
  body: []
@@ -78485,18 +78485,18 @@ var require_readable7 = __commonJS((exports, module) => {
78485
78485
  return buffer;
78486
78486
  }
78487
78487
  function consumeEnd(consume2) {
78488
- const { type, body, resolve: resolve9, stream, length } = consume2;
78488
+ const { type, body, resolve: resolve10, stream, length } = consume2;
78489
78489
  try {
78490
78490
  if (type === "text") {
78491
- resolve9(chunksDecode(body, length));
78491
+ resolve10(chunksDecode(body, length));
78492
78492
  } else if (type === "json") {
78493
- resolve9(JSON.parse(chunksDecode(body, length)));
78493
+ resolve10(JSON.parse(chunksDecode(body, length)));
78494
78494
  } else if (type === "arrayBuffer") {
78495
- resolve9(chunksConcat(body, length).buffer);
78495
+ resolve10(chunksConcat(body, length).buffer);
78496
78496
  } else if (type === "blob") {
78497
- resolve9(new Blob(body, { type: stream[kContentType] }));
78497
+ resolve10(new Blob(body, { type: stream[kContentType] }));
78498
78498
  } else if (type === "bytes") {
78499
- resolve9(chunksConcat(body, length));
78499
+ resolve10(chunksConcat(body, length));
78500
78500
  }
78501
78501
  consumeFinish(consume2);
78502
78502
  } catch (err) {
@@ -78744,9 +78744,9 @@ var require_api_request = __commonJS((exports, module) => {
78744
78744
  }
78745
78745
  function request(opts, callback2) {
78746
78746
  if (callback2 === undefined) {
78747
- return new Promise((resolve9, reject) => {
78747
+ return new Promise((resolve10, reject) => {
78748
78748
  request.call(this, opts, (err, data) => {
78749
- return err ? reject(err) : resolve9(data);
78749
+ return err ? reject(err) : resolve10(data);
78750
78750
  });
78751
78751
  });
78752
78752
  }
@@ -78961,9 +78961,9 @@ var require_api_stream = __commonJS((exports, module) => {
78961
78961
  }
78962
78962
  function stream(opts, factory, callback2) {
78963
78963
  if (callback2 === undefined) {
78964
- return new Promise((resolve9, reject) => {
78964
+ return new Promise((resolve10, reject) => {
78965
78965
  stream.call(this, opts, factory, (err, data) => {
78966
- return err ? reject(err) : resolve9(data);
78966
+ return err ? reject(err) : resolve10(data);
78967
78967
  });
78968
78968
  });
78969
78969
  }
@@ -79246,9 +79246,9 @@ var require_api_upgrade = __commonJS((exports, module) => {
79246
79246
  }
79247
79247
  function upgrade(opts, callback2) {
79248
79248
  if (callback2 === undefined) {
79249
- return new Promise((resolve9, reject) => {
79249
+ return new Promise((resolve10, reject) => {
79250
79250
  upgrade.call(this, opts, (err, data) => {
79251
- return err ? reject(err) : resolve9(data);
79251
+ return err ? reject(err) : resolve10(data);
79252
79252
  });
79253
79253
  });
79254
79254
  }
@@ -79338,9 +79338,9 @@ var require_api_connect = __commonJS((exports, module) => {
79338
79338
  }
79339
79339
  function connect(opts, callback2) {
79340
79340
  if (callback2 === undefined) {
79341
- return new Promise((resolve9, reject) => {
79341
+ return new Promise((resolve10, reject) => {
79342
79342
  connect.call(this, opts, (err, data) => {
79343
- return err ? reject(err) : resolve9(data);
79343
+ return err ? reject(err) : resolve10(data);
79344
79344
  });
79345
79345
  });
79346
79346
  }
@@ -79844,7 +79844,7 @@ var require_mock_interceptor = __commonJS((exports, module) => {
79844
79844
 
79845
79845
  // node_modules/webdriver/node_modules/undici/lib/mock/mock-client.js
79846
79846
  var require_mock_client = __commonJS((exports, module) => {
79847
- var { promisify: promisify3 } = __require("node:util");
79847
+ var { promisify: promisify2 } = __require("node:util");
79848
79848
  var Client = require_client();
79849
79849
  var { buildMockDispatch } = require_mock_utils();
79850
79850
  var {
@@ -79882,7 +79882,7 @@ var require_mock_client = __commonJS((exports, module) => {
79882
79882
  return new MockInterceptor(opts, this[kDispatches]);
79883
79883
  }
79884
79884
  async[kClose]() {
79885
- await promisify3(this[kOriginalClose])();
79885
+ await promisify2(this[kOriginalClose])();
79886
79886
  this[kConnected] = 0;
79887
79887
  this[kMockAgent][Symbols.kClients].delete(this[kOrigin]);
79888
79888
  }
@@ -79892,7 +79892,7 @@ var require_mock_client = __commonJS((exports, module) => {
79892
79892
 
79893
79893
  // node_modules/webdriver/node_modules/undici/lib/mock/mock-pool.js
79894
79894
  var require_mock_pool = __commonJS((exports, module) => {
79895
- var { promisify: promisify3 } = __require("node:util");
79895
+ var { promisify: promisify2 } = __require("node:util");
79896
79896
  var Pool = require_pool();
79897
79897
  var { buildMockDispatch } = require_mock_utils();
79898
79898
  var {
@@ -79930,7 +79930,7 @@ var require_mock_pool = __commonJS((exports, module) => {
79930
79930
  return new MockInterceptor(opts, this[kDispatches]);
79931
79931
  }
79932
79932
  async[kClose]() {
79933
- await promisify3(this[kOriginalClose])();
79933
+ await promisify2(this[kOriginalClose])();
79934
79934
  this[kConnected] = 0;
79935
79935
  this[kMockAgent][Symbols.kClients].delete(this[kOrigin]);
79936
79936
  }
@@ -82842,7 +82842,7 @@ var require_fetch = __commonJS((exports, module) => {
82842
82842
  function dispatch({ body }) {
82843
82843
  const url2 = requestCurrentURL(request);
82844
82844
  const agent = fetchParams.controller.dispatcher;
82845
- return new Promise((resolve9, reject) => agent.dispatch({
82845
+ return new Promise((resolve10, reject) => agent.dispatch({
82846
82846
  path: url2.pathname + url2.search,
82847
82847
  origin: url2.origin,
82848
82848
  method: request.method,
@@ -82912,7 +82912,7 @@ var require_fetch = __commonJS((exports, module) => {
82912
82912
  }
82913
82913
  }
82914
82914
  const onError = this.onError.bind(this);
82915
- resolve9({
82915
+ resolve10({
82916
82916
  status,
82917
82917
  statusText,
82918
82918
  headersList,
@@ -82958,7 +82958,7 @@ var require_fetch = __commonJS((exports, module) => {
82958
82958
  for (let i2 = 0;i2 < rawHeaders.length; i2 += 2) {
82959
82959
  headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i2]), rawHeaders[i2 + 1].toString("latin1"), true);
82960
82960
  }
82961
- resolve9({
82961
+ resolve10({
82962
82962
  status,
82963
82963
  statusText: STATUS_CODES[status],
82964
82964
  headersList,
@@ -86334,8 +86334,8 @@ var require_util16 = __commonJS((exports, module) => {
86334
86334
  return true;
86335
86335
  }
86336
86336
  function delay(ms2) {
86337
- return new Promise((resolve9) => {
86338
- setTimeout(resolve9, ms2).unref();
86337
+ return new Promise((resolve10) => {
86338
+ setTimeout(resolve10, ms2).unref();
86339
86339
  });
86340
86340
  }
86341
86341
  module.exports = {
@@ -87716,8 +87716,8 @@ var require_helpers = __commonJS((exports) => {
87716
87716
  function req(url2, opts = {}) {
87717
87717
  const href = typeof url2 === "string" ? url2 : url2.href;
87718
87718
  const req2 = (href.startsWith("https:") ? https : http).request(url2, opts);
87719
- const promise3 = new Promise((resolve9, reject) => {
87720
- req2.once("response", resolve9).once("error", reject).end();
87719
+ const promise3 = new Promise((resolve10, reject) => {
87720
+ req2.once("response", resolve10).once("error", reject).end();
87721
87721
  });
87722
87722
  req2.then = promise3.then.bind(promise3);
87723
87723
  return req2;
@@ -87886,7 +87886,7 @@ var require_parse_proxy_response = __commonJS((exports) => {
87886
87886
  var debug_1 = __importDefault(require_src2());
87887
87887
  var debug = (0, debug_1.default)("https-proxy-agent:parse-proxy-response");
87888
87888
  function parseProxyResponse(socket) {
87889
- return new Promise((resolve9, reject) => {
87889
+ return new Promise((resolve10, reject) => {
87890
87890
  let buffersLength = 0;
87891
87891
  const buffers = [];
87892
87892
  function read() {
@@ -87955,7 +87955,7 @@ var require_parse_proxy_response = __commonJS((exports) => {
87955
87955
  }
87956
87956
  debug("got proxy server response: %o %o", firstLine3, headers);
87957
87957
  cleanup();
87958
- resolve9({
87958
+ resolve10({
87959
87959
  connect: {
87960
87960
  statusCode,
87961
87961
  statusText,
@@ -88582,20 +88582,20 @@ async function connectWebsocket(candidateUrls, options) {
88582
88582
  }
88583
88583
  }).filter(Boolean);
88584
88584
  const wsConnectPromises = websockets.map((ws2, index) => {
88585
- const promise3 = new Promise((resolve9) => {
88586
- ws2.once("open", () => resolve9({ ws: ws2, isConnected: true, index }));
88585
+ const promise3 = new Promise((resolve10) => {
88586
+ ws2.once("open", () => resolve10({ ws: ws2, isConnected: true, index }));
88587
88587
  ws2.once("error", (err) => {
88588
88588
  log6.debug(`Could not connect to Bidi protocol at ${candidateUrls[index]}: ${err.message}`);
88589
- resolve9({ ws: ws2, isConnected: false, errorMessage: err.message, index });
88589
+ resolve10({ ws: ws2, isConnected: false, errorMessage: err.message, index });
88590
88590
  });
88591
88591
  });
88592
88592
  return { promise: promise3, index };
88593
88593
  });
88594
88594
  let timeoutId;
88595
- const connectionTimeoutPromise = new Promise((resolve9) => {
88595
+ const connectionTimeoutPromise = new Promise((resolve10) => {
88596
88596
  timeoutId = setTimeout(() => {
88597
88597
  log6.error(`Could not connect to Bidi protocol of any candidate url in time: "${candidateUrls.join('", "')}"`);
88598
- return resolve9(undefined);
88598
+ return resolve10(undefined);
88599
88599
  }, CONNECTION_TIMEOUT);
88600
88600
  });
88601
88601
  const wsInfo = await Promise.race([
@@ -88667,8 +88667,8 @@ var import_https_proxy_agent, isNode, environment, CommandRuntimeOptions = class
88667
88667
  this.#webSocketUrl = webSocketUrl;
88668
88668
  this.#clientOptions = opts;
88669
88669
  this.#resolveWaitForConnected = () => {};
88670
- this.#waitForConnected = new Promise((resolve9) => {
88671
- this.#resolveWaitForConnected = resolve9;
88670
+ this.#waitForConnected = new Promise((resolve10) => {
88671
+ this.#resolveWaitForConnected = resolve10;
88672
88672
  });
88673
88673
  }
88674
88674
  attachClient(client) {
@@ -88731,13 +88731,13 @@ var import_https_proxy_agent, isNode, environment, CommandRuntimeOptions = class
88731
88731
  }
88732
88732
  log5.info("BIDI RESULT", resultLog);
88733
88733
  this.client?.emit("bidiResult", payload);
88734
- const resolve9 = this.#pendingCommands.get(payload.id);
88735
- if (!resolve9) {
88734
+ const resolve10 = this.#pendingCommands.get(payload.id);
88735
+ if (!resolve10) {
88736
88736
  log5.error(`Couldn't resolve command with id ${payload.id}`);
88737
88737
  return;
88738
88738
  }
88739
88739
  this.#pendingCommands.delete(payload.id);
88740
- resolve9(payload);
88740
+ resolve10(payload);
88741
88741
  } catch (err) {
88742
88742
  const error51 = err instanceof Error ? err : new Error(`Failed parse message: ${String(err)}`);
88743
88743
  log5.error(`Failed parse message: ${error51.message}`);
@@ -88746,14 +88746,14 @@ var import_https_proxy_agent, isNode, environment, CommandRuntimeOptions = class
88746
88746
  async send(params) {
88747
88747
  const id = this.sendAsync(params);
88748
88748
  const failError = new Error(`WebDriver Bidi command "${params.method}" failed`);
88749
- const payload = await new Promise((resolve9, reject) => {
88749
+ const payload = await new Promise((resolve10, reject) => {
88750
88750
  const t2 = setTimeout(() => {
88751
88751
  reject(new Error(`Command ${params.method} with id ${id} (with the following parameter: ${JSON.stringify(params.params)}) timed out`));
88752
88752
  this.#pendingCommands.delete(id);
88753
88753
  }, RESPONSE_TIMEOUT);
88754
88754
  this.#pendingCommands.set(id, (payload2) => {
88755
88755
  clearTimeout(t2);
88756
- resolve9(payload2);
88756
+ resolve10(payload2);
88757
88757
  });
88758
88758
  });
88759
88759
  if (payload.type === "error" || "error" in payload) {
@@ -91273,8 +91273,8 @@ var init_build6 = __esm(() => {
91273
91273
  };
91274
91274
  }
91275
91275
  this._replServer = repl.start(this._config);
91276
- return new Promise((resolve9) => {
91277
- return this._replServer.on("exit", resolve9);
91276
+ return new Promise((resolve10) => {
91277
+ return this._replServer.on("exit", resolve10);
91278
91278
  });
91279
91279
  }
91280
91280
  };
@@ -124103,9 +124103,9 @@ var require_dispatcher_base2 = __commonJS((exports, module) => {
124103
124103
  }
124104
124104
  close(callback2) {
124105
124105
  if (callback2 === undefined) {
124106
- return new Promise((resolve9, reject) => {
124106
+ return new Promise((resolve10, reject) => {
124107
124107
  this.close((err, data2) => {
124108
- return err ? reject(err) : resolve9(data2);
124108
+ return err ? reject(err) : resolve10(data2);
124109
124109
  });
124110
124110
  });
124111
124111
  }
@@ -124143,9 +124143,9 @@ var require_dispatcher_base2 = __commonJS((exports, module) => {
124143
124143
  err = null;
124144
124144
  }
124145
124145
  if (callback2 === undefined) {
124146
- return new Promise((resolve9, reject) => {
124146
+ return new Promise((resolve10, reject) => {
124147
124147
  this.destroy(err, (err2, data2) => {
124148
- return err2 ? reject(err2) : resolve9(data2);
124148
+ return err2 ? reject(err2) : resolve10(data2);
124149
124149
  });
124150
124150
  });
124151
124151
  }
@@ -127269,8 +127269,8 @@ var require_promise = __commonJS((exports, module) => {
127269
127269
  function createDeferredPromise() {
127270
127270
  let res;
127271
127271
  let rej;
127272
- const promise3 = new Promise((resolve9, reject) => {
127273
- res = resolve9;
127272
+ const promise3 = new Promise((resolve10, reject) => {
127273
+ res = resolve10;
127274
127274
  rej = reject;
127275
127275
  });
127276
127276
  return { promise: promise3, resolve: res, reject: rej };
@@ -128460,12 +128460,12 @@ upgrade: ${upgrade}\r
128460
128460
  cb();
128461
128461
  }
128462
128462
  }
128463
- const waitForDrain = () => new Promise((resolve9, reject) => {
128463
+ const waitForDrain = () => new Promise((resolve10, reject) => {
128464
128464
  assert2(callback2 === null);
128465
128465
  if (socket[kError]) {
128466
128466
  reject(socket[kError]);
128467
128467
  } else {
128468
- callback2 = resolve9;
128468
+ callback2 = resolve10;
128469
128469
  }
128470
128470
  });
128471
128471
  socket.on("close", onDrain).on("drain", onDrain);
@@ -129216,12 +129216,12 @@ var require_client_h22 = __commonJS((exports, module) => {
129216
129216
  cb();
129217
129217
  }
129218
129218
  }
129219
- const waitForDrain = () => new Promise((resolve9, reject) => {
129219
+ const waitForDrain = () => new Promise((resolve10, reject) => {
129220
129220
  assert2(callback2 === null);
129221
129221
  if (socket[kError]) {
129222
129222
  reject(socket[kError]);
129223
129223
  } else {
129224
- callback2 = resolve9;
129224
+ callback2 = resolve10;
129225
129225
  }
129226
129226
  });
129227
129227
  h2stream.on("close", onDrain).on("drain", onDrain);
@@ -129520,16 +129520,16 @@ var require_client2 = __commonJS((exports, module) => {
129520
129520
  return this[kNeedDrain] < 2;
129521
129521
  }
129522
129522
  [kClose]() {
129523
- return new Promise((resolve9) => {
129523
+ return new Promise((resolve10) => {
129524
129524
  if (this[kSize]) {
129525
- this[kClosedResolve] = resolve9;
129525
+ this[kClosedResolve] = resolve10;
129526
129526
  } else {
129527
- resolve9(null);
129527
+ resolve10(null);
129528
129528
  }
129529
129529
  });
129530
129530
  }
129531
129531
  [kDestroy](err) {
129532
- return new Promise((resolve9) => {
129532
+ return new Promise((resolve10) => {
129533
129533
  const requests = this[kQueue].splice(this[kPendingIdx]);
129534
129534
  for (let i2 = 0;i2 < requests.length; i2++) {
129535
129535
  const request = requests[i2];
@@ -129540,7 +129540,7 @@ var require_client2 = __commonJS((exports, module) => {
129540
129540
  this[kClosedResolve]();
129541
129541
  this[kClosedResolve] = null;
129542
129542
  }
129543
- resolve9(null);
129543
+ resolve10(null);
129544
129544
  };
129545
129545
  if (this[kHTTPContext]) {
129546
129546
  this[kHTTPContext].destroy(err, callback2);
@@ -129927,8 +129927,8 @@ var require_pool_base2 = __commonJS((exports, module) => {
129927
129927
  }
129928
129928
  return Promise.all(closeAll);
129929
129929
  } else {
129930
- return new Promise((resolve9) => {
129931
- this[kClosedResolve] = resolve9;
129930
+ return new Promise((resolve10) => {
129931
+ this[kClosedResolve] = resolve10;
129932
129932
  });
129933
129933
  }
129934
129934
  }
@@ -130961,10 +130961,10 @@ var require_socks5_proxy_agent = __commonJS((exports, module) => {
130961
130961
  const proxyHost = this[kProxyUrl].hostname;
130962
130962
  const proxyPort = parseInt(this[kProxyUrl].port) || 1080;
130963
130963
  debug("creating SOCKS5 connection to", proxyHost, proxyPort);
130964
- const socket = await new Promise((resolve9, reject) => {
130964
+ const socket = await new Promise((resolve10, reject) => {
130965
130965
  const onConnect = () => {
130966
130966
  socket2.removeListener("error", onError);
130967
- resolve9(socket2);
130967
+ resolve10(socket2);
130968
130968
  };
130969
130969
  const onError = (err) => {
130970
130970
  socket2.removeListener("connect", onConnect);
@@ -130983,14 +130983,14 @@ var require_socks5_proxy_agent = __commonJS((exports, module) => {
130983
130983
  socket.destroy();
130984
130984
  });
130985
130985
  await socks5Client.handshake();
130986
- await new Promise((resolve9, reject) => {
130986
+ await new Promise((resolve10, reject) => {
130987
130987
  const timeout = setTimeout(() => {
130988
130988
  reject(new Error("SOCKS5 authentication timeout"));
130989
130989
  }, 5000);
130990
130990
  const onAuthenticated = () => {
130991
130991
  clearTimeout(timeout);
130992
130992
  socks5Client.removeListener("error", onError);
130993
- resolve9();
130993
+ resolve10();
130994
130994
  };
130995
130995
  const onError = (err) => {
130996
130996
  clearTimeout(timeout);
@@ -130999,14 +130999,14 @@ var require_socks5_proxy_agent = __commonJS((exports, module) => {
130999
130999
  };
131000
131000
  if (socks5Client.state === "authenticated") {
131001
131001
  clearTimeout(timeout);
131002
- resolve9();
131002
+ resolve10();
131003
131003
  } else {
131004
131004
  socks5Client.once("authenticated", onAuthenticated);
131005
131005
  socks5Client.once("error", onError);
131006
131006
  }
131007
131007
  });
131008
131008
  await socks5Client.connect(targetHost, targetPort);
131009
- await new Promise((resolve9, reject) => {
131009
+ await new Promise((resolve10, reject) => {
131010
131010
  const timeout = setTimeout(() => {
131011
131011
  reject(new Error("SOCKS5 connection timeout"));
131012
131012
  }, 5000);
@@ -131014,7 +131014,7 @@ var require_socks5_proxy_agent = __commonJS((exports, module) => {
131014
131014
  debug("SOCKS5 tunnel established to", targetHost, targetPort, "via", info);
131015
131015
  clearTimeout(timeout);
131016
131016
  socks5Client.removeListener("error", onError);
131017
- resolve9();
131017
+ resolve10();
131018
131018
  };
131019
131019
  const onError = (err) => {
131020
131020
  clearTimeout(timeout);
@@ -131052,8 +131052,8 @@ var require_socks5_proxy_agent = __commonJS((exports, module) => {
131052
131052
  servername: targetHost,
131053
131053
  ...connectOpts.tls || {}
131054
131054
  });
131055
- await new Promise((resolve9, reject) => {
131056
- finalSocket.once("secureConnect", resolve9);
131055
+ await new Promise((resolve10, reject) => {
131056
+ finalSocket.once("secureConnect", resolve10);
131057
131057
  finalSocket.once("error", reject);
131058
131058
  });
131059
131059
  }
@@ -131929,7 +131929,7 @@ var require_readable8 = __commonJS((exports, module) => {
131929
131929
  if (this._readableState.closeEmitted) {
131930
131930
  return Promise.resolve(null);
131931
131931
  }
131932
- return new Promise((resolve9, reject) => {
131932
+ return new Promise((resolve10, reject) => {
131933
131933
  if (this[kContentLength] && this[kContentLength] > limit || this[kBytesRead] > limit) {
131934
131934
  this.destroy(new AbortError);
131935
131935
  }
@@ -131943,11 +131943,11 @@ var require_readable8 = __commonJS((exports, module) => {
131943
131943
  if (signal.aborted) {
131944
131944
  reject(signal.reason ?? new AbortError);
131945
131945
  } else {
131946
- resolve9(null);
131946
+ resolve10(null);
131947
131947
  }
131948
131948
  });
131949
131949
  } else {
131950
- this.on("close", resolve9);
131950
+ this.on("close", resolve10);
131951
131951
  }
131952
131952
  this.on("error", noop).on("data", () => {
131953
131953
  if (this[kBytesRead] > limit) {
@@ -131971,7 +131971,7 @@ var require_readable8 = __commonJS((exports, module) => {
131971
131971
  }
131972
131972
  function consume(stream, type) {
131973
131973
  assert2(!stream[kConsume]);
131974
- return new Promise((resolve9, reject) => {
131974
+ return new Promise((resolve10, reject) => {
131975
131975
  if (isUnusable(stream)) {
131976
131976
  const rState = stream._readableState;
131977
131977
  if (rState.destroyed && rState.closeEmitted === false) {
@@ -131986,7 +131986,7 @@ var require_readable8 = __commonJS((exports, module) => {
131986
131986
  stream[kConsume] = {
131987
131987
  type,
131988
131988
  stream,
131989
- resolve: resolve9,
131989
+ resolve: resolve10,
131990
131990
  reject,
131991
131991
  length: 0,
131992
131992
  body: []
@@ -132059,18 +132059,18 @@ var require_readable8 = __commonJS((exports, module) => {
132059
132059
  return buffer;
132060
132060
  }
132061
132061
  function consumeEnd(consume2, encoding) {
132062
- const { type, body, resolve: resolve9, stream, length } = consume2;
132062
+ const { type, body, resolve: resolve10, stream, length } = consume2;
132063
132063
  try {
132064
132064
  if (type === "text") {
132065
- resolve9(chunksDecode(body, length, encoding));
132065
+ resolve10(chunksDecode(body, length, encoding));
132066
132066
  } else if (type === "json") {
132067
- resolve9(JSON.parse(chunksDecode(body, length, encoding)));
132067
+ resolve10(JSON.parse(chunksDecode(body, length, encoding)));
132068
132068
  } else if (type === "arrayBuffer") {
132069
- resolve9(chunksConcat(body, length).buffer);
132069
+ resolve10(chunksConcat(body, length).buffer);
132070
132070
  } else if (type === "blob") {
132071
- resolve9(new Blob(body, { type: stream[kContentType] }));
132071
+ resolve10(new Blob(body, { type: stream[kContentType] }));
132072
132072
  } else if (type === "bytes") {
132073
- resolve9(chunksConcat(body, length));
132073
+ resolve10(chunksConcat(body, length));
132074
132074
  }
132075
132075
  consumeFinish(consume2);
132076
132076
  } catch (err) {
@@ -132257,9 +132257,9 @@ var require_api_request2 = __commonJS((exports, module) => {
132257
132257
  }
132258
132258
  function request(opts, callback2) {
132259
132259
  if (callback2 === undefined) {
132260
- return new Promise((resolve9, reject) => {
132260
+ return new Promise((resolve10, reject) => {
132261
132261
  request.call(this, opts, (err, data2) => {
132262
- return err ? reject(err) : resolve9(data2);
132262
+ return err ? reject(err) : resolve10(data2);
132263
132263
  });
132264
132264
  });
132265
132265
  }
@@ -132465,9 +132465,9 @@ var require_api_stream2 = __commonJS((exports, module) => {
132465
132465
  }
132466
132466
  function stream(opts, factory, callback2) {
132467
132467
  if (callback2 === undefined) {
132468
- return new Promise((resolve9, reject) => {
132468
+ return new Promise((resolve10, reject) => {
132469
132469
  stream.call(this, opts, factory, (err, data2) => {
132470
- return err ? reject(err) : resolve9(data2);
132470
+ return err ? reject(err) : resolve10(data2);
132471
132471
  });
132472
132472
  });
132473
132473
  }
@@ -132752,9 +132752,9 @@ var require_api_upgrade2 = __commonJS((exports, module) => {
132752
132752
  }
132753
132753
  function upgrade(opts, callback2) {
132754
132754
  if (callback2 === undefined) {
132755
- return new Promise((resolve9, reject) => {
132755
+ return new Promise((resolve10, reject) => {
132756
132756
  upgrade.call(this, opts, (err, data2) => {
132757
- return err ? reject(err) : resolve9(data2);
132757
+ return err ? reject(err) : resolve10(data2);
132758
132758
  });
132759
132759
  });
132760
132760
  }
@@ -132845,9 +132845,9 @@ var require_api_connect2 = __commonJS((exports, module) => {
132845
132845
  }
132846
132846
  function connect(opts, callback2) {
132847
132847
  if (callback2 === undefined) {
132848
- return new Promise((resolve9, reject) => {
132848
+ return new Promise((resolve10, reject) => {
132849
132849
  connect.call(this, opts, (err, data2) => {
132850
- return err ? reject(err) : resolve9(data2);
132850
+ return err ? reject(err) : resolve10(data2);
132851
132851
  });
132852
132852
  });
132853
132853
  }
@@ -133445,7 +133445,7 @@ var require_mock_interceptor2 = __commonJS((exports, module) => {
133445
133445
 
133446
133446
  // node_modules/undici/lib/mock/mock-client.js
133447
133447
  var require_mock_client2 = __commonJS((exports, module) => {
133448
- var { promisify: promisify3 } = __require("node:util");
133448
+ var { promisify: promisify2 } = __require("node:util");
133449
133449
  var Client2 = require_client2();
133450
133450
  var { buildMockDispatch } = require_mock_utils2();
133451
133451
  var {
@@ -133488,7 +133488,7 @@ var require_mock_client2 = __commonJS((exports, module) => {
133488
133488
  this[kDispatches] = [];
133489
133489
  }
133490
133490
  async[kClose]() {
133491
- await promisify3(this[kOriginalClose])();
133491
+ await promisify2(this[kOriginalClose])();
133492
133492
  this[kConnected] = 0;
133493
133493
  this[kMockAgent][Symbols.kClients].delete(this[kOrigin]);
133494
133494
  }
@@ -133695,7 +133695,7 @@ var require_mock_call_history = __commonJS((exports, module) => {
133695
133695
 
133696
133696
  // node_modules/undici/lib/mock/mock-pool.js
133697
133697
  var require_mock_pool2 = __commonJS((exports, module) => {
133698
- var { promisify: promisify3 } = __require("node:util");
133698
+ var { promisify: promisify2 } = __require("node:util");
133699
133699
  var Pool2 = require_pool2();
133700
133700
  var { buildMockDispatch } = require_mock_utils2();
133701
133701
  var {
@@ -133738,7 +133738,7 @@ var require_mock_pool2 = __commonJS((exports, module) => {
133738
133738
  this[kDispatches] = [];
133739
133739
  }
133740
133740
  async[kClose]() {
133741
- await promisify3(this[kOriginalClose])();
133741
+ await promisify2(this[kOriginalClose])();
133742
133742
  this[kConnected] = 0;
133743
133743
  this[kMockAgent][Symbols.kClients].delete(this[kOrigin]);
133744
133744
  }
@@ -134044,7 +134044,7 @@ var require_snapshot_utils = __commonJS((exports, module) => {
134044
134044
  // node_modules/undici/lib/mock/snapshot-recorder.js
134045
134045
  var require_snapshot_recorder = __commonJS((exports, module) => {
134046
134046
  var { writeFile, readFile, mkdir } = __require("node:fs/promises");
134047
- var { dirname: dirname11, resolve: resolve9 } = __require("node:path");
134047
+ var { dirname: dirname11, resolve: resolve10 } = __require("node:path");
134048
134048
  var { setTimeout: setTimeout3, clearTimeout: clearTimeout2 } = __require("node:timers");
134049
134049
  var { InvalidArgumentError: InvalidArgumentError3, UndiciError } = require_errors6();
134050
134050
  var { hashId, isUrlExcludedFactory, normalizeHeaders, createHeaderFilters } = require_snapshot_utils();
@@ -134215,7 +134215,7 @@ var require_snapshot_recorder = __commonJS((exports, module) => {
134215
134215
  throw new InvalidArgumentError3("Snapshot path is required");
134216
134216
  }
134217
134217
  try {
134218
- const data2 = await readFile(resolve9(path4), "utf8");
134218
+ const data2 = await readFile(resolve10(path4), "utf8");
134219
134219
  const parsed = JSON.parse(data2);
134220
134220
  if (Array.isArray(parsed)) {
134221
134221
  this.#snapshots.clear();
@@ -134238,7 +134238,7 @@ var require_snapshot_recorder = __commonJS((exports, module) => {
134238
134238
  if (!path4) {
134239
134239
  throw new InvalidArgumentError3("Snapshot path is required");
134240
134240
  }
134241
- const resolvedPath = resolve9(path4);
134241
+ const resolvedPath = resolve10(path4);
134242
134242
  await mkdir(dirname11(resolvedPath), { recursive: true });
134243
134243
  const data2 = Array.from(this.#snapshots.entries()).map(([hash2, snapshot]) => ({
134244
134244
  hash: hash2,
@@ -140186,7 +140186,7 @@ var require_fetch2 = __commonJS((exports, module) => {
140186
140186
  const agent = fetchParams.controller.dispatcher;
140187
140187
  const path4 = url2.pathname + url2.search;
140188
140188
  const hasTrailingQuestionMark = url2.search.length === 0 && url2.href[url2.href.length - url2.hash.length - 1] === "?";
140189
- return new Promise((resolve9, reject) => agent.dispatch({
140189
+ return new Promise((resolve10, reject) => agent.dispatch({
140190
140190
  path: hasTrailingQuestionMark ? `${path4}?` : path4,
140191
140191
  origin: url2.origin,
140192
140192
  method: request.method,
@@ -140268,7 +140268,7 @@ var require_fetch2 = __commonJS((exports, module) => {
140268
140268
  }
140269
140269
  }
140270
140270
  const onError = this.onError.bind(this);
140271
- resolve9({
140271
+ resolve10({
140272
140272
  status,
140273
140273
  statusText,
140274
140274
  headersList,
@@ -140321,7 +140321,7 @@ var require_fetch2 = __commonJS((exports, module) => {
140321
140321
  headersList.append(headerName, String(value), true);
140322
140322
  }
140323
140323
  }
140324
- resolve9({
140324
+ resolve10({
140325
140325
  status,
140326
140326
  statusText: STATUS_CODES[status],
140327
140327
  headersList,
@@ -140345,7 +140345,7 @@ var require_fetch2 = __commonJS((exports, module) => {
140345
140345
  headersList.append(nameStr, value.toString("latin1"), true);
140346
140346
  }
140347
140347
  }
140348
- resolve9({
140348
+ resolve10({
140349
140349
  status,
140350
140350
  statusText: STATUS_CODES[status],
140351
140351
  headersList,
@@ -144354,7 +144354,7 @@ async function fromURL(url2, options = {}) {
144354
144354
  path: urlObject.pathname + urlObject.search,
144355
144355
  ...requestOptions
144356
144356
  };
144357
- const promise3 = new Promise((resolve9, reject) => {
144357
+ const promise3 = new Promise((resolve10, reject) => {
144358
144358
  undiciStream = new $Client(urlObject.origin).compose($interceptors2.redirect({ maxRedirections: 5 })).stream(streamOptions, (res) => {
144359
144359
  var _a6, _b;
144360
144360
  if (res.statusCode < 200 || res.statusCode >= 300) {
@@ -144376,7 +144376,7 @@ async function fromURL(url2, options = {}) {
144376
144376
  baseURI,
144377
144377
  ...cheerioOptions
144378
144378
  };
144379
- return decodeStream(opts, (err, $3) => err ? reject(err) : resolve9($3));
144379
+ return decodeStream(opts, (err, $3) => err ? reject(err) : resolve10($3));
144380
144380
  });
144381
144381
  });
144382
144382
  await undiciStream;
@@ -144506,8 +144506,8 @@ async function uploadFile(localPath) {
144506
144506
  }
144507
144507
  const zipData = [];
144508
144508
  const source = fs52.createReadStream(localPath);
144509
- return new Promise((resolve9, reject) => {
144510
- import_archiver.default("zip").on("error", (err) => reject(err)).on("data", (data2) => zipData.push(data2)).on("end", () => this.file(Buffer.concat(zipData).toString("base64")).then((localPath2) => resolve9(localPath2), reject)).append(source, { name: path5.basename(localPath) }).finalize();
144509
+ return new Promise((resolve10, reject) => {
144510
+ import_archiver.default("zip").on("error", (err) => reject(err)).on("data", (data2) => zipData.push(data2)).on("end", () => this.file(Buffer.concat(zipData).toString("base64")).then((localPath2) => resolve10(localPath2), reject)).append(source, { name: path5.basename(localPath) }).finalize();
144511
144511
  });
144512
144512
  }
144513
144513
  function isUnknownMethodError(err) {
@@ -144620,19 +144620,19 @@ async function takeScreenshotBidi(filepath, options) {
144620
144620
  type: imageFormat,
144621
144621
  quality
144622
144622
  };
144623
- const clip = options?.clip ? {
144623
+ const clip2 = options?.clip ? {
144624
144624
  type: "box",
144625
144625
  x: options.clip.x,
144626
144626
  y: options.clip.y,
144627
144627
  width: options.clip.width,
144628
144628
  height: options.clip.height
144629
144629
  } : undefined;
144630
- if (clip) {
144631
- if (typeof clip.x !== "number" || typeof clip.y !== "number" || typeof clip.width !== "number" || typeof clip.height !== "number") {
144630
+ if (clip2) {
144631
+ if (typeof clip2.x !== "number" || typeof clip2.y !== "number" || typeof clip2.width !== "number" || typeof clip2.height !== "number") {
144632
144632
  throw new Error("Invalid clip, use an object with x, y, width and height properties");
144633
144633
  }
144634
144634
  }
144635
- const { data: data2 } = contextManager.findParentContext(context, tree.contexts) ? await browser.$("html").getElement().then((el) => this.takeElementScreenshot(el.elementId).then((data22) => ({ data: data22 }))) : await this.browsingContextCaptureScreenshot({ context, origin, format, clip });
144635
+ const { data: data2 } = contextManager.findParentContext(context, tree.contexts) ? await browser.$("html").getElement().then((el) => this.takeElementScreenshot(el.elementId).then((data22) => ({ data: data22 }))) : await this.browsingContextCaptureScreenshot({ context, origin, format, clip: clip2 });
144636
144636
  return data2;
144637
144637
  }
144638
144638
  async function saveElementScreenshot(filepath) {
@@ -145021,7 +145021,7 @@ function debug(commandTimeout = 5000) {
145021
145021
  });
145022
145022
  }
145023
145023
  });
145024
- return new Promise((resolve9) => commandResolve = resolve9);
145024
+ return new Promise((resolve10) => commandResolve = resolve10);
145025
145025
  }
145026
145026
  async function deleteCookies(filter5) {
145027
145027
  const filterArray2 = typeof filter5 === "undefined" ? undefined : Array.isArray(filter5) ? filter5 : [filter5];
@@ -145599,7 +145599,7 @@ async function newWindow2(url2, { type = "window", windowName = "", windowFeatur
145599
145599
  return { handle: newTab, type };
145600
145600
  }
145601
145601
  function pause(milliseconds = 1000) {
145602
- return new Promise((resolve9) => setTimeout(resolve9, milliseconds));
145602
+ return new Promise((resolve10) => setTimeout(resolve10, milliseconds));
145603
145603
  }
145604
145604
  async function react$$3(selector, { props = {}, state: state2 = {} } = {}) {
145605
145605
  await this.executeScript(resqScript, []);
@@ -146528,7 +146528,7 @@ async function getCurrentContexts({
146528
146528
  }
146529
146529
  return parsedContexts;
146530
146530
  }
146531
- await new Promise((resolve9) => setTimeout(resolve9, retryInterval));
146531
+ await new Promise((resolve10) => setTimeout(resolve10, retryInterval));
146532
146532
  }
146533
146533
  throw new Error(`The packageName '${packageName}' ${isPackageNameMissing ? "could not be found!" : "matches, but no webview with pages was loaded in this response: " + JSON.stringify(contexts) + "'"}`);
146534
146534
  }
@@ -151128,8 +151128,8 @@ window.__wdio_sinon = withGlobal(globalThis);
151128
151128
  this._fn = _fn;
151129
151129
  this._leading = _leading;
151130
151130
  this._signal = _signal;
151131
- this.#retPromise = new Promise((resolve9, reject) => {
151132
- this._resolve = resolve9;
151131
+ this.#retPromise = new Promise((resolve10, reject) => {
151132
+ this._resolve = resolve10;
151133
151133
  this._reject = reject;
151134
151134
  });
151135
151135
  this._start();
@@ -155130,6 +155130,9 @@ function errorCode(err) {
155130
155130
  function isNoEntError(err) {
155131
155131
  return errorCode(err) === "ENOENT";
155132
155132
  }
155133
+ function isTimeoutError(err) {
155134
+ return err instanceof Error && err.name === "TimeoutError";
155135
+ }
155133
155136
  var missingPackagePattern = /Cannot find (?:package|module) '([^']+)'/;
155134
155137
  var pathLikeSpecifierPattern = /^(?:\.|\/|[A-Za-z]:[\\/])/;
155135
155138
  function extractMissingPackage(text) {
@@ -155140,6 +155143,11 @@ function extractMissingPackage(text) {
155140
155143
  return specifier;
155141
155144
  }
155142
155145
 
155146
+ // src/core/formatSeconds.ts
155147
+ function formatSeconds(ms) {
155148
+ return `${Math.round(ms / 1000)}s`;
155149
+ }
155150
+
155143
155151
  // src/core/messages/auth.ts
155144
155152
  var authMessages = {
155145
155153
  title: "QA Wolf Authentication",
@@ -155174,7 +155182,8 @@ var authMessages = {
155174
155182
  invalidOrUnauthorized: "API key is invalid or unauthorized",
155175
155183
  unexpectedFormat: "Could not verify API key: unexpected response format",
155176
155184
  couldNotVerify: (detail, status) => `Could not verify API key: ${detail || `HTTP ${status}`}`,
155177
- couldNotVerifyNetwork: (cause) => `Could not verify API key: ${cause}`
155185
+ couldNotVerifyNetwork: (cause) => `Could not verify API key: ${cause}`,
155186
+ timedOut: (timeoutMs) => `Could not verify API key: the QA Wolf API did not answer within ${formatSeconds(timeoutMs)}.`
155178
155187
  },
155179
155188
  request: {
155180
155189
  rejected401: (noun) => `QA Wolf API rejected the${noun ? ` ${noun}` : ""} request (HTTP 401). Check your API key.`,
@@ -155182,12 +155191,14 @@ var authMessages = {
155182
155191
  notFound404: (noun) => `QA Wolf API could not find ${noun ? `${noun} for that environment` : "that environment"} (HTTP 404). Check the --env value.`,
155183
155192
  failedWithStatus: (status, noun) => `QA Wolf API${noun ? ` ${noun}` : ""} request failed (HTTP ${status}).`,
155184
155193
  networkUnreachable: (baseUrl, noun) => `Could not reach the QA Wolf API at ${baseUrl}${noun ? ` to fetch ${noun}` : ""}. Check your network connection and QAWOLF_HOST_URL.`,
155194
+ timedOut: (timeoutMs, noun) => `The QA Wolf API${noun ? ` ${noun}` : ""} request timed out after ${formatSeconds(timeoutMs)}. The work may still be finishing on the platform.`,
155185
155195
  unexpectedResponse: (noun) => `Unexpected${noun ? ` ${noun}` : ""} response from the QA Wolf API.`
155186
155196
  },
155187
155197
  bundle: {
155188
155198
  linkExpired: "The flow bundle download link has expired. Please run `qawolf flows pull` again to refresh.",
155189
155199
  failedWithStatus: (status) => `Could not download the flow bundle (HTTP ${status}).`,
155190
155200
  networkUnreachable: "Could not reach the flow bundle storage. Check your network connection and try again.",
155201
+ timedOut: (timeoutMs) => `Downloading the flow bundle timed out after ${formatSeconds(timeoutMs)}. Please try again.`,
155191
155202
  malformed: "The flow bundle download was malformed. Please run `qawolf flows pull` again."
155192
155203
  }
155193
155204
  },
@@ -155205,6 +155216,21 @@ var authMessages = {
155205
155216
  `)
155206
155217
  }
155207
155218
  };
155219
+ // src/core/messages/toolNotFound.ts
155220
+ var installRemedy = "Run `qawolf install` to install the runtime dependencies.";
155221
+ function toolNotInstalled(tool, path) {
155222
+ const located = path === undefined ? `${tool} is not installed.` : `${tool} not found at ${path}.`;
155223
+ return `${located}
155224
+ ${installRemedy}`;
155225
+ }
155226
+ function toolNotRunnable(what, detail) {
155227
+ return `${what} (${detail}).
155228
+ ${installRemedy}`;
155229
+ }
155230
+ function packageLoadFailed(pkg, envDir, detail) {
155231
+ return toolNotRunnable(`Could not load ${pkg} from ${envDir}`, detail);
155232
+ }
155233
+
155208
155234
  // src/core/messages/doctor.ts
155209
155235
  var doctorMessages = {
155210
155236
  intro: "qawolf doctor",
@@ -155242,14 +155268,13 @@ var doctorMessages = {
155242
155268
  notInstalled: "npm is not installed or not on PATH"
155243
155269
  },
155244
155270
  playwright: {
155245
- notFound: "Could not find Playwright. Run `qawolf flows run` to install it, or run `npm install playwright` in your flow directory.",
155271
+ notFound: (path) => toolNotInstalled("Playwright", path),
155246
155272
  launchFailed: "Could not launch Playwright. Try reinstalling the qawolf CLI.",
155247
155273
  versionUnparseable: "Could not parse playwright version output"
155248
155274
  },
155249
155275
  appium: {
155250
- noEnvDir: "No env dir found. Run `qawolf flows run` to install Appium dependencies.",
155251
- binaryMissing: (bin) => `Appium binary missing at ${bin}. Run \`qawolf flows run\` to install.`,
155252
- driverListFailed: (detail) => `Could not run \`appium driver list\` (${detail}). The Appium binary may be broken — try \`qawolf flows run\` to reinstall.`,
155276
+ notFound: (path) => toolNotInstalled("Appium", path),
155277
+ driverListFailed: (detail) => toolNotRunnable("Could not run `appium driver list`", detail),
155253
155278
  cannotCheckDriverList: "Cannot check driver list without Appium binary.",
155254
155279
  uiautomator2NotInstalled: "uiautomator2 driver not installed. Run `qawolf install android` to install it."
155255
155280
  },
@@ -155355,6 +155380,7 @@ var installMessages = {
155355
155380
  ` + "Install Android Studio and open Tools > SDK Manager to install the SDK.",
155356
155381
  installingBrowser: (browser) => `Install ${browser}`,
155357
155382
  browsersInstalled: (count) => `Installed ${pluralize(count, "browser")}.`,
155383
+ playwrightNotFound: (playwrightPath) => toolNotInstalled("Playwright", playwrightPath),
155358
155384
  playwrightInstallFailed: (browser, detail) => `playwright install ${browser} failed: ${detail}`,
155359
155385
  playwrightInstallLaunchFailed: (browser) => `playwright install ${browser} failed: process failed to launch`,
155360
155386
  clear: {
@@ -155381,11 +155407,13 @@ var installMessages = {
155381
155407
  avdAlreadyExists: (avdName) => `AVD ${avdName} already exists, skipping.`,
155382
155408
  creatingAvd: (avdName) => `Creating AVD ${avdName}`,
155383
155409
  avdmanagerCreateFailed: (avdName, detail) => `avdmanager failed to create ${avdName}: ${detail}`,
155384
- uiautomator2InstallFailed: (detail) => `appium driver install uiautomator2 failed: ${detail}`
155410
+ uiautomator2InstallFailed: (detail) => `appium driver install uiautomator2 failed: ${detail}`,
155411
+ appiumNotFound: (appiumPath) => toolNotInstalled("Appium", appiumPath)
155385
155412
  }
155386
155413
  };
155387
155414
  // src/core/messages/runner.ts
155388
155415
  var runnerMessages = {
155416
+ playwrightLoadFailed: (envDir, detail) => packageLoadFailed("Playwright", envDir, detail),
155389
155417
  androidWorkersUnsupported: "Android flows are not yet supported with --workers > 1; rerun Android flows with --workers 1.",
155390
155418
  noFlowsMatched: "No flows matched.",
155391
155419
  androidBootFailed: "Android boot failed",
@@ -155406,9 +155434,18 @@ var runnerMessages = {
155406
155434
  managedRuntimeNote: (dir) => `Using managed runtime — override with --deps <dir> or QAWOLF_RUNTIME_DIR:
155407
155435
  ${dir}`,
155408
155436
  installingProjectDeps: (count) => `Installing ${pluralize(count, "project dependency", "project dependencies")}…`,
155437
+ depsDirIncomplete: (dir, failures) => [
155438
+ `--deps directory ${dir} is missing required pinned dependencies:`,
155439
+ ...failures.map((failure) => ` - ${failure}`),
155440
+ `Run 'npm install' in that directory or point to a valid managed env directory.`
155441
+ ].join(`
155442
+ `),
155409
155443
  outerHopCandidateRejected: (dir, missing) => `outer-hop candidate rejected: ${dir} missing ${missing.join(", ")}`,
155410
155444
  moduleNotFoundHint: (pkg, projectDir) => projectDir === undefined ? `Hint: '${pkg}' could not be resolved. Run from within your flows project so its dependencies can be found.` : `Hint: '${pkg}' could not be resolved. Ensure it is declared in ${projectDir}/package.json "dependencies" and run npm install in that project.`
155411
155445
  };
155446
+ // src/core/paths.ts
155447
+ import { join } from "node:path";
155448
+
155412
155449
  // node_modules/env-paths/index.js
155413
155450
  import path from "node:path";
155414
155451
  import os from "node:os";
@@ -155509,6 +155546,9 @@ function getDataDir() {
155509
155546
  _paths ??= envPaths("qawolf");
155510
155547
  return _paths.data;
155511
155548
  }
155549
+ function getAppiumHome() {
155550
+ return join(getDataDir(), "appium");
155551
+ }
155512
155552
 
155513
155553
  // src/shell/exit.ts
155514
155554
  var exitCodes = {
@@ -155639,7 +155679,7 @@ function resolveHostUrl(env2) {
155639
155679
  import { Entry as Entry3 } from "@napi-rs/keyring";
155640
155680
 
155641
155681
  // src/domains/auth/store/delete.ts
155642
- import { join } from "node:path";
155682
+ import { join as join2 } from "node:path";
155643
155683
  import { Entry } from "@napi-rs/keyring";
155644
155684
 
155645
155685
  // src/domains/auth/store/constants.ts
@@ -155658,7 +155698,7 @@ function deleteFromKeychain() {
155658
155698
  }
155659
155699
  async function deleteFromFile(configDir, fs2) {
155660
155700
  try {
155661
- await fs2.unlink(join(configDir, credentialsFile));
155701
+ await fs2.unlink(join2(configDir, credentialsFile));
155662
155702
  return "deleted";
155663
155703
  } catch {
155664
155704
  return "not-found";
@@ -155672,7 +155712,7 @@ async function deleteApiKey(configDir, fs2) {
155672
155712
  return { keychain, file };
155673
155713
  }
155674
155714
  // src/domains/auth/store/load.ts
155675
- import { join as join2 } from "node:path";
155715
+ import { join as join3 } from "node:path";
155676
155716
 
155677
155717
  // node_modules/zod/v4/classic/external.js
155678
155718
  var exports_external = {};
@@ -169967,7 +170007,7 @@ async function loadApiKey(configDir, deps) {
169967
170007
  errors3.keychain = errorMessage(err);
169968
170008
  }
169969
170009
  try {
169970
- const content = await deps.fs.readFile(join2(configDir, credentialsFile));
170010
+ const content = await deps.fs.readFile(join3(configDir, credentialsFile));
169971
170011
  const parsed = credentialsFileSchema.safeParse(JSON.parse(content));
169972
170012
  if (parsed.success) {
169973
170013
  return { found: true, key: parsed.data.apiKey, source: "file" };
@@ -169979,12 +170019,12 @@ async function loadApiKey(configDir, deps) {
169979
170019
  return { found: false, errors: errors3 };
169980
170020
  }
169981
170021
  // src/domains/auth/store/save.ts
169982
- import { join as join3 } from "node:path";
170022
+ import { join as join4 } from "node:path";
169983
170023
  import { Entry as Entry2 } from "@napi-rs/keyring";
169984
170024
  async function saveToFile(configDir, key, fs2) {
169985
170025
  const payload = { apiKey: key };
169986
170026
  await fs2.mkdir(configDir, { recursive: true, mode: 448 });
169987
- await fs2.writeFile(join3(configDir, credentialsFile), JSON.stringify(payload, undefined, 2), { mode: 384 });
170027
+ await fs2.writeFile(join4(configDir, credentialsFile), JSON.stringify(payload, undefined, 2), { mode: 384 });
169988
170028
  }
169989
170029
  async function saveApiKey(configDir, key, fs2) {
169990
170030
  try {
@@ -170024,7 +170064,7 @@ async function requireApiKey(configDir, fs2, deps) {
170024
170064
  }
170025
170065
  // src/domains/auth/validate.ts
170026
170066
  async function validateApiKey(deps) {
170027
- const result = await deps.platform.getIdentity();
170067
+ const result = await deps.platformClient.getIdentity();
170028
170068
  if (!result.ok) {
170029
170069
  return { valid: false, error: result.error };
170030
170070
  }
@@ -170036,9 +170076,9 @@ async function validateApiKey(deps) {
170036
170076
  // src/shell/logger.ts
170037
170077
  var import_pino = __toESM(require_pino(), 1);
170038
170078
  import { mkdirSync as mkdirSync2, openSync } from "node:fs";
170039
- import { dirname, join as join4 } from "node:path";
170079
+ import { dirname, join as join5 } from "node:path";
170040
170080
  function defaultLogPath() {
170041
- return join4(envPaths("qawolf", { suffix: "" }).log, "cli.log");
170081
+ return join5(envPaths("qawolf", { suffix: "" }).log, "cli.log");
170042
170082
  }
170043
170083
  function resolveStderrLevel(env2, verbose) {
170044
170084
  if (verbose)
@@ -170118,6 +170158,8 @@ function describeIdentityError(err) {
170118
170158
  if (err.kind === "network") {
170119
170159
  return m.identity.couldNotVerifyNetwork(err.cause.message);
170120
170160
  }
170161
+ if (err.kind === "timeout")
170162
+ return m.identity.timedOut(err.timeoutMs);
170121
170163
  return m.identity.unexpectedFormat;
170122
170164
  }
170123
170165
  function parseErrorBody(body) {
@@ -170144,6 +170186,8 @@ function describeRequestError(err, baseUrl, noun) {
170144
170186
  if (err.kind === "network") {
170145
170187
  return m.request.networkUnreachable(baseUrl, noun);
170146
170188
  }
170189
+ if (err.kind === "timeout")
170190
+ return m.request.timedOut(err.timeoutMs, noun);
170147
170191
  return m.request.unexpectedResponse(noun);
170148
170192
  }
170149
170193
  function describeBundleDownloadError(err) {
@@ -170154,6 +170198,8 @@ function describeBundleDownloadError(err) {
170154
170198
  }
170155
170199
  if (err.kind === "network")
170156
170200
  return m.bundle.networkUnreachable;
170201
+ if (err.kind === "timeout")
170202
+ return m.bundle.timedOut(err.timeoutMs);
170157
170203
  return m.bundle.malformed;
170158
170204
  }
170159
170205
  function describeTeamStorageDownloadError(path2, err) {
@@ -170166,6 +170212,9 @@ function describeTeamStorageDownloadError(path2, err) {
170166
170212
  if (err.kind === "network") {
170167
170213
  return `Could not reach team-storage while downloading ${path2}. Check your network connection and try again.`;
170168
170214
  }
170215
+ if (err.kind === "timeout") {
170216
+ return `Downloading the team-storage asset ${path2} timed out after ${formatSeconds(err.timeoutMs)}. Please try again.`;
170217
+ }
170169
170218
  return `The team-storage download for ${path2} was malformed. Please run \`qawolf flows pull\` again.`;
170170
170219
  }
170171
170220
 
@@ -170181,7 +170230,7 @@ async function requestWithRetry(args) {
170181
170230
  if (result.ok)
170182
170231
  return { ok: true, value: result.data };
170183
170232
  const backoff = args.backoffMs[attempt];
170184
- const retryable = result.error.kind === "network";
170233
+ const retryable = result.error.kind === "network" || result.error.kind === "timeout";
170185
170234
  if (backoff === undefined || !retryable) {
170186
170235
  return { ok: false, error: args.describe(result.error) };
170187
170236
  }
@@ -170190,16 +170239,16 @@ async function requestWithRetry(args) {
170190
170239
  }
170191
170240
 
170192
170241
  // src/shell/platform/callPublicApi.ts
170193
- function callPublicApi(trpc, contract, input) {
170242
+ function callPublicApi(trpc, contract, input, options) {
170194
170243
  const path2 = `public.${contract.name}`;
170195
170244
  if (contract.kind === "read") {
170196
- return trpc.query(path2, input, contract.output);
170245
+ return trpc.query(path2, input, contract.output, options);
170197
170246
  }
170198
- return trpc.mutation(path2, input, contract.output);
170247
+ return trpc.mutation(path2, input, contract.output, options);
170199
170248
  }
170200
170249
  function makeCallPublicApiMethod(trpc, deps, readBackoffMs) {
170201
- return async (contract, input) => requestWithRetry({
170202
- call: () => callPublicApi(trpc, contract, input),
170250
+ return async (contract, input, options) => requestWithRetry({
170251
+ call: () => callPublicApi(trpc, contract, input, options),
170203
170252
  backoffMs: contract.kind === "read" ? readBackoffMs : [],
170204
170253
  describe: (err) => describeRequestError(err, deps.baseUrl, contract.name),
170205
170254
  sleep: deps.sleep
@@ -171002,52 +171051,18 @@ function toError(value) {
171002
171051
  return value instanceof Error ? value : new Error(String(value));
171003
171052
  }
171004
171053
 
171005
- // src/shell/platform/createTrpcClient.ts
171006
- var timeoutMs = 15000;
171007
- function createTrpcClient(apiKey, deps) {
171008
- const authHeader = { Authorization: `Bearer ${apiKey}` };
171009
- const { logger } = deps;
171010
- async function withLogging(path2, call) {
171011
- logger?.debug(`→ ${path2}`);
171012
- const result = await call();
171013
- if (result.ok) {
171014
- logger?.debug(`← ${path2} ok`);
171015
- } else {
171016
- const e = result.error;
171017
- const raw = e.kind === "http" ? e.body : e.cause.message;
171018
- const clipped = raw.length > 200 ? raw.slice(0, 200) + "…" : raw;
171019
- const msg = e.kind === "http" ? `${e.status} ${clipped}` : clipped;
171020
- logger?.warn(`← ${path2} error (${e.kind}): ${msg}`);
171021
- }
171022
- return result;
171023
- }
171024
- return {
171025
- query: (path2, input, schema) => {
171026
- const encoded = encodeURIComponent(JSON.stringify(dist_default.serialize(input)));
171027
- const url2 = `${deps.baseUrl}/api/trpc/${path2}?input=${encoded}`;
171028
- return withLogging(path2, () => send(deps.fetch, url2, {
171029
- headers: authHeader,
171030
- method: "GET",
171031
- signal: AbortSignal.timeout(timeoutMs)
171032
- }, schema));
171033
- },
171034
- mutation: (path2, input, schema) => {
171035
- const url2 = `${deps.baseUrl}/api/trpc/${path2}`;
171036
- const body = JSON.stringify(dist_default.serialize(input));
171037
- return withLogging(path2, () => send(deps.fetch, url2, {
171038
- body,
171039
- headers: { ...authHeader, "content-type": "application/json" },
171040
- method: "POST",
171041
- signal: AbortSignal.timeout(timeoutMs)
171042
- }, schema));
171043
- }
171044
- };
171045
- }
171046
- async function send(fetchFn, url2, init, schema) {
171054
+ // src/shell/platform/sendWireRequest.ts
171055
+ async function sendWireRequest(fetchFn, url2, init, schema, timeoutMs) {
171047
171056
  let response;
171048
171057
  try {
171049
- response = await fetchFn(url2, init);
171058
+ response = await fetchFn(url2, {
171059
+ ...init,
171060
+ signal: AbortSignal.timeout(timeoutMs)
171061
+ });
171050
171062
  } catch (error51) {
171063
+ if (isTimeoutError(error51)) {
171064
+ return { ok: false, error: { kind: "timeout", timeoutMs } };
171065
+ }
171051
171066
  return { ok: false, error: { cause: toError(error51), kind: "network" } };
171052
171067
  }
171053
171068
  if (!response.ok) {
@@ -171061,6 +171076,9 @@ async function send(fetchFn, url2, init, schema) {
171061
171076
  try {
171062
171077
  body = await response.json();
171063
171078
  } catch (error51) {
171079
+ if (isTimeoutError(error51)) {
171080
+ return { ok: false, error: { kind: "timeout", timeoutMs } };
171081
+ }
171064
171082
  return { ok: false, error: { cause: toError(error51), kind: "parse" } };
171065
171083
  }
171066
171084
  try {
@@ -171082,23 +171100,71 @@ function unwrap(body) {
171082
171100
  return dist_default.deserialize(data);
171083
171101
  return data;
171084
171102
  }
171085
- var isRecord = (v) => typeof v === "object" && v !== null;
171086
- var isSuperJSONResult = (v) => isRecord(v) && ("json" in v);
171103
+ var isRecord = (value) => typeof value === "object" && value !== null;
171104
+ var isSuperJSONResult = (value) => isRecord(value) && ("json" in value);
171105
+
171106
+ // src/shell/platform/createTrpcClient.ts
171107
+ var defaultRequestTimeoutMs = 15000;
171108
+ function createTrpcClient(apiKey, deps) {
171109
+ const authHeader = { Authorization: `Bearer ${apiKey}` };
171110
+ const { logger } = deps;
171111
+ const defaultTimeoutMs2 = deps.defaultTimeoutMs ?? defaultRequestTimeoutMs;
171112
+ async function withLogging(path2, call) {
171113
+ logger?.debug(`→ ${path2}`);
171114
+ const result = await call();
171115
+ if (result.ok) {
171116
+ logger?.debug(`← ${path2} ok`);
171117
+ } else {
171118
+ const e = result.error;
171119
+ logger?.warn(`← ${path2} error (${e.kind}): ${summarize(e)}`);
171120
+ }
171121
+ return result;
171122
+ }
171123
+ return {
171124
+ query: (path2, input, schema, options) => {
171125
+ const encoded = encodeURIComponent(JSON.stringify(dist_default.serialize(input)));
171126
+ const url2 = `${deps.baseUrl}/api/trpc/${path2}?input=${encoded}`;
171127
+ return withLogging(path2, () => sendWireRequest(deps.fetch, url2, { headers: authHeader, method: "GET" }, schema, options?.timeoutMs ?? defaultTimeoutMs2));
171128
+ },
171129
+ mutation: (path2, input, schema, options) => {
171130
+ const url2 = `${deps.baseUrl}/api/trpc/${path2}`;
171131
+ const body = JSON.stringify(dist_default.serialize(input));
171132
+ return withLogging(path2, () => sendWireRequest(deps.fetch, url2, {
171133
+ body,
171134
+ headers: { ...authHeader, "content-type": "application/json" },
171135
+ method: "POST"
171136
+ }, schema, options?.timeoutMs ?? defaultTimeoutMs2));
171137
+ }
171138
+ };
171139
+ }
171140
+ function clip(text) {
171141
+ return text.length > 200 ? text.slice(0, 200) + "…" : text;
171142
+ }
171143
+ function summarize(error51) {
171144
+ if (error51.kind === "http")
171145
+ return `${error51.status} ${clip(error51.body)}`;
171146
+ if (error51.kind === "timeout")
171147
+ return `timed out after ${error51.timeoutMs}ms`;
171148
+ return clip(error51.cause.message);
171149
+ }
171087
171150
 
171088
171151
  // src/shell/platform/downloadBundle.ts
171089
171152
  import { randomBytes } from "node:crypto";
171090
171153
  import { tmpdir as tmpdir2 } from "node:os";
171091
- import { join as join5 } from "node:path";
171154
+ import { join as join6 } from "node:path";
171092
171155
 
171093
171156
  // src/shell/platform/fetchSignedUrl.ts
171094
- var timeoutMs2 = 30000;
171157
+ var timeoutMs = 30000;
171095
171158
  async function fetchSignedUrl(args, deps = { fetch: globalThis.fetch }) {
171096
171159
  let response;
171097
171160
  try {
171098
171161
  response = await deps.fetch(args.url, {
171099
- signal: AbortSignal.timeout(timeoutMs2)
171162
+ signal: AbortSignal.timeout(timeoutMs)
171100
171163
  });
171101
171164
  } catch (error51) {
171165
+ if (isTimeoutError(error51)) {
171166
+ return { ok: false, error: { kind: "timeout", timeoutMs } };
171167
+ }
171102
171168
  return { ok: false, error: { cause: toError(error51), kind: "network" } };
171103
171169
  }
171104
171170
  if (!response.ok) {
@@ -171114,8 +171180,17 @@ async function fetchSignedUrl(args, deps = { fetch: globalThis.fetch }) {
171114
171180
  error: { cause: new Error("response had no body"), kind: "network" }
171115
171181
  };
171116
171182
  }
171183
+ let downloaded;
171117
171184
  try {
171118
- await (deps.fs ?? makeDefaultFs()).writeFile(args.dest, new Uint8Array(await response.arrayBuffer()));
171185
+ downloaded = await response.arrayBuffer();
171186
+ } catch (error51) {
171187
+ if (isTimeoutError(error51)) {
171188
+ return { ok: false, error: { kind: "timeout", timeoutMs } };
171189
+ }
171190
+ return { ok: false, error: { cause: toError(error51), kind: "network" } };
171191
+ }
171192
+ try {
171193
+ await (deps.fs ?? makeDefaultFs()).writeFile(args.dest, new Uint8Array(downloaded));
171119
171194
  } catch (error51) {
171120
171195
  return { ok: false, error: { cause: toError(error51), kind: "network" } };
171121
171196
  }
@@ -171124,7 +171199,7 @@ async function fetchSignedUrl(args, deps = { fetch: globalThis.fetch }) {
171124
171199
 
171125
171200
  // src/shell/platform/downloadBundle.ts
171126
171201
  async function downloadBundle(signedUrl, deps) {
171127
- const tmpArchive = join5(tmpdir2(), `qawolf-pull-${randomBytes(8).toString("hex")}.tar.gz`);
171202
+ const tmpArchive = join6(tmpdir2(), `qawolf-pull-${randomBytes(8).toString("hex")}.tar.gz`);
171128
171203
  const result = await fetchSignedUrl({ url: signedUrl, dest: tmpArchive }, { fetch: deps.fetch, fs: deps.fs });
171129
171204
  if (!result.ok) {
171130
171205
  await deps.fs.unlink(tmpArchive).catch(() => {});
@@ -171142,15 +171217,19 @@ var identityResponseSchema = exports_external.object({
171142
171217
  slug: exports_external.string().optional()
171143
171218
  })
171144
171219
  });
171220
+ var timeoutMs2 = 1e4;
171145
171221
  async function getIdentity(apiKey, deps) {
171146
171222
  const url2 = `${deps.baseUrl}/api/v0/identity`;
171147
171223
  let response;
171148
171224
  try {
171149
171225
  response = await deps.fetch(url2, {
171150
171226
  headers: { Authorization: `Bearer ${apiKey}` },
171151
- signal: AbortSignal.timeout(1e4)
171227
+ signal: AbortSignal.timeout(timeoutMs2)
171152
171228
  });
171153
171229
  } catch (error51) {
171230
+ if (isTimeoutError(error51)) {
171231
+ return { ok: false, error: { kind: "timeout", timeoutMs: timeoutMs2 } };
171232
+ }
171154
171233
  return {
171155
171234
  ok: false,
171156
171235
  error: { kind: "network", cause: toError(error51) }
@@ -171163,9 +171242,15 @@ async function getIdentity(apiKey, deps) {
171163
171242
  error: { kind: "http", status: response.status, body }
171164
171243
  };
171165
171244
  }
171166
- const json2 = await response.json().catch(() => {
171167
- return;
171168
- });
171245
+ let json2;
171246
+ try {
171247
+ json2 = await response.json();
171248
+ } catch (error51) {
171249
+ if (isTimeoutError(error51)) {
171250
+ return { ok: false, error: { kind: "timeout", timeoutMs: timeoutMs2 } };
171251
+ }
171252
+ json2 = undefined;
171253
+ }
171169
171254
  const parsed = identityResponseSchema.safeParse(json2);
171170
171255
  if (!parsed.success) {
171171
171256
  return { ok: false, error: { kind: "parse", cause: parsed.error } };
@@ -171226,7 +171311,7 @@ async function listTeamStorageFiles(trpc, args, deps) {
171226
171311
  }
171227
171312
 
171228
171313
  // src/shell/platform/teamStorageAssets.ts
171229
- import { dirname as dirname3, join as join8 } from "node:path";
171314
+ import { dirname as dirname3, join as join9 } from "node:path";
171230
171315
 
171231
171316
  // src/shell/platform/teamStorageAssetManifest.ts
171232
171317
  import { dirname as dirname2 } from "node:path";
@@ -171303,7 +171388,7 @@ function isUnsafeSegment(segment) {
171303
171388
 
171304
171389
  // src/shell/platform/teamStorageAssetSnapshot.ts
171305
171390
  import { randomBytes as randomBytes2 } from "node:crypto";
171306
- import { join as join6, sep as sep2 } from "node:path";
171391
+ import { join as join7, sep as sep2 } from "node:path";
171307
171392
  function mintAssetSnapshotPath(assetsAbs, label) {
171308
171393
  return `${assetsAbs}.${label}-${randomBytes2(8).toString("hex")}`;
171309
171394
  }
@@ -171353,9 +171438,9 @@ function expectedEntries(filePaths) {
171353
171438
  return entries;
171354
171439
  }
171355
171440
  async function collectEntries(root, relDir, out, fs2) {
171356
- const current = relDir ? join6(root, relDir) : root;
171441
+ const current = relDir ? join7(root, relDir) : root;
171357
171442
  for (const entry of await fs2.readdirWithTypes(current)) {
171358
- const relPath = relDir ? join6(relDir, entry.name) : entry.name;
171443
+ const relPath = relDir ? join7(relDir, entry.name) : entry.name;
171359
171444
  out.add(relPath);
171360
171445
  if (entry.isDirectory()) {
171361
171446
  await collectEntries(root, relPath, out, fs2);
@@ -171369,7 +171454,7 @@ function setsEqual(left, right) {
171369
171454
  }
171370
171455
 
171371
171456
  // src/shell/platform/teamStorageAssetReuse.ts
171372
- import { join as join7 } from "node:path";
171457
+ import { join as join8 } from "node:path";
171373
171458
  async function reusableAssetPaths(assetsAbs, safeFiles, manifest, fs2) {
171374
171459
  const reusable = new Set;
171375
171460
  for (const { file: file2, relativePath } of safeFiles) {
@@ -171385,7 +171470,7 @@ async function canReuseAsset(assetsAbs, relativePath, file2, manifest, fs2) {
171385
171470
  const previous = manifest.get(relativePath);
171386
171471
  if (previous?.etag !== file2.etag)
171387
171472
  return false;
171388
- return fs2.pathExists(join7(assetsAbs, relativePath));
171473
+ return fs2.pathExists(join8(assetsAbs, relativePath));
171389
171474
  }
171390
171475
 
171391
171476
  // src/shell/platform/teamStorageAssets.ts
@@ -171438,10 +171523,10 @@ async function writeAssetSnapshot(args) {
171438
171523
  let downloadedCount = 0;
171439
171524
  await args.deps.fs.mkdir(args.tmpAssets, { recursive: true });
171440
171525
  for (const { file: file2, relativePath } of args.safeFiles) {
171441
- const dest = join8(args.tmpAssets, relativePath);
171526
+ const dest = join9(args.tmpAssets, relativePath);
171442
171527
  await args.deps.fs.mkdir(dirname3(dest), { recursive: true });
171443
171528
  if (args.reusable.has(relativePath)) {
171444
- await args.deps.fs.copyFile(join8(args.assetsAbs, relativePath), dest);
171529
+ await args.deps.fs.copyFile(join9(args.assetsAbs, relativePath), dest);
171445
171530
  continue;
171446
171531
  }
171447
171532
  const result = await fetchSignedUrl({ url: file2.signedUrl, dest }, { fetch: args.deps.fetch, fs: args.deps.fs });
@@ -173437,11 +173522,11 @@ function withAuthContext(signals, fn, deps = {}) {
173437
173522
  loggingSystem.flush();
173438
173523
  return;
173439
173524
  }
173440
- const platform = (deps.createPlatform ?? createPlatformClient)(resolved.key, { baseUrl: apiBaseUrl, fetch: globalThis.fetch, logger: ctx.log("trpc") });
173525
+ const platformClient = (deps.createPlatform ?? createPlatformClient)(resolved.key, { baseUrl: apiBaseUrl, fetch: globalThis.fetch, logger: ctx.log("trpc") });
173441
173526
  try {
173442
173527
  const result = await fn({
173443
173528
  ...ctx,
173444
- platform,
173529
+ platformClient,
173445
173530
  apiKeySource: resolved.source
173446
173531
  });
173447
173532
  if (result !== undefined) {
@@ -173487,7 +173572,7 @@ async function handleLogin(ctx) {
173487
173572
  message: authMessages.verifying,
173488
173573
  task: async () => {
173489
173574
  const v = await validateApiKey({
173490
- platform: createPlatformClient(result.value, {
173575
+ platformClient: createPlatformClient(result.value, {
173491
173576
  baseUrl: ctx.apiBaseUrl,
173492
173577
  fetch: globalThis.fetch
173493
173578
  })
@@ -173553,12 +173638,12 @@ async function handleWhoami(ctx, deps = {}) {
173553
173638
  }
173554
173639
  return { error: "not authenticated" };
173555
173640
  }
173556
- const platform = (deps.createPlatform ?? createPlatformClient)(resolved.key, {
173641
+ const platformClient = (deps.createPlatform ?? createPlatformClient)(resolved.key, {
173557
173642
  baseUrl: ctx.apiBaseUrl,
173558
173643
  fetch: globalThis.fetch,
173559
173644
  logger: ctx.log("trpc")
173560
173645
  });
173561
- const identity = await platform.getIdentity();
173646
+ const identity = await platformClient.getIdentity();
173562
173647
  if (!identity.ok) {
173563
173648
  if (ctx.ui.mode === "human") {
173564
173649
  ctx.ui.note(authMessages.whoami.source(resolved.source), authMessages.whoamiFailed);
@@ -173598,7 +173683,7 @@ function registerAuthCommand(program2, signals) {
173598
173683
  // package.json
173599
173684
  var package_default = {
173600
173685
  name: "@qawolf/cli",
173601
- version: "1.4.0",
173686
+ version: "1.4.2",
173602
173687
  description: "Run and manage QA Wolf flows from the terminal, CI, or an AI agent",
173603
173688
  keywords: [
173604
173689
  "automation",
@@ -173633,7 +173718,8 @@ var package_default = {
173633
173718
  access: "public"
173634
173719
  },
173635
173720
  scripts: {
173636
- build: "bun run generate && bun scripts/build.ts",
173721
+ build: "bun run build:bundle",
173722
+ "build:bundle": "bun run generate && bun scripts/build.ts",
173637
173723
  "build:binary": "bun run build && bun scripts/buildBinary.ts",
173638
173724
  dev: "bun run src/main.ts",
173639
173725
  format: "oxfmt .",
@@ -173741,38 +173827,41 @@ async function* batchMap(items, fn, size) {
173741
173827
  }
173742
173828
  }
173743
173829
 
173830
+ // src/core/nodeModulesBins.ts
173831
+ import { join as join10 } from "node:path";
173832
+ function nodeModulesBinCandidates(envDir, name, platform) {
173833
+ const binDir = join10(envDir, "node_modules", ".bin");
173834
+ const names = platform === "win32" ? [`${name}.cmd`, `${name}.exe`] : [name];
173835
+ return names.map((shim) => join10(binDir, shim));
173836
+ }
173837
+ function appiumCliCandidates(envDir, platform) {
173838
+ return nodeModulesBinCandidates(envDir, "appium", platform);
173839
+ }
173840
+ function playwrightCliCandidates(envDir, platform) {
173841
+ return nodeModulesBinCandidates(envDir, "playwright", platform);
173842
+ }
173843
+
173744
173844
  // src/domains/doctor/checks/androidAppium.ts
173745
- import { join as join9 } from "node:path";
173746
173845
  function firstLine(result) {
173747
173846
  return (result.stderr || result.stdout).split(`
173748
173847
  `)[0]?.trim() || `exit code ${result.exitCode}`;
173749
173848
  }
173750
- var appiumHome = join9(envPaths("qawolf").data, "appium");
173751
- function checkAppium(envDir, resolveAppiumBin, checkExists) {
173752
- if (!envDir) {
173753
- return {
173754
- appium: {
173755
- name: "appium",
173756
- status: "warn",
173757
- detail: doctorMessages.appium.noEnvDir
173758
- },
173759
- bin: undefined
173760
- };
173761
- }
173762
- const bin = resolveAppiumBin(envDir);
173763
- if (!checkExists(bin)) {
173849
+ function checkAppium(envDir, platform, checkExists) {
173850
+ const candidates = envDir ? appiumCliCandidates(envDir, platform) : [];
173851
+ const bin = candidates.find(checkExists);
173852
+ if (!bin) {
173764
173853
  return {
173765
173854
  appium: {
173766
173855
  name: "appium",
173767
173856
  status: "warn",
173768
- detail: doctorMessages.appium.binaryMissing(bin)
173857
+ detail: doctorMessages.appium.notFound(candidates[0])
173769
173858
  },
173770
173859
  bin: undefined
173771
173860
  };
173772
173861
  }
173773
173862
  return { appium: { name: "appium", status: "pass" }, bin };
173774
173863
  }
173775
- async function checkUiautomator2(spawn, appiumBin) {
173864
+ async function checkUiautomator2(spawn, appiumBin, platform) {
173776
173865
  if (!appiumBin) {
173777
173866
  return {
173778
173867
  name: "uiautomator2-driver",
@@ -173781,7 +173870,8 @@ async function checkUiautomator2(spawn, appiumBin) {
173781
173870
  };
173782
173871
  }
173783
173872
  const result = await spawn(appiumBin, ["driver", "list", "--installed"], {
173784
- env: { APPIUM_HOME: appiumHome }
173873
+ env: { APPIUM_HOME: getAppiumHome() },
173874
+ platform
173785
173875
  });
173786
173876
  if (result.exitCode !== 0) {
173787
173877
  return {
@@ -173801,6 +173891,30 @@ async function checkUiautomator2(spawn, appiumBin) {
173801
173891
  };
173802
173892
  }
173803
173893
 
173894
+ // src/core/androidBins.ts
173895
+ import { join as join11 } from "node:path";
173896
+ function withExeSuffix(name, platform) {
173897
+ return platform === "win32" ? `${name}.exe` : name;
173898
+ }
173899
+ function emulatorBin(home, platform) {
173900
+ const name = withExeSuffix("emulator", platform);
173901
+ return home ? join11(home, "emulator", name) : name;
173902
+ }
173903
+ function adbBin(home, platform) {
173904
+ const name = withExeSuffix("adb", platform);
173905
+ return home ? join11(home, "platform-tools", name) : name;
173906
+ }
173907
+ function cmdlineToolsBin(home, name, platform) {
173908
+ const file2 = platform === "win32" ? `${name}.bat` : name;
173909
+ return join11(home, "cmdline-tools", "latest", "bin", file2);
173910
+ }
173911
+ function sdkManagerBin(home, platform) {
173912
+ return cmdlineToolsBin(home, "sdkmanager", platform);
173913
+ }
173914
+ function avdManagerBin(home, platform) {
173915
+ return cmdlineToolsBin(home, "avdmanager", platform);
173916
+ }
173917
+
173804
173918
  // src/domains/doctor/checks/androidSdk.ts
173805
173919
  function firstLine2(result) {
173806
173920
  return (result.stderr || result.stdout).split(`
@@ -173823,9 +173937,9 @@ function checkHome(androidHome, checkExists) {
173823
173937
  }
173824
173938
  return { name: "android-home", status: "pass", detail: androidHome };
173825
173939
  }
173826
- async function checkAdb(spawn, androidHome) {
173827
- const bin = androidHome ? `${androidHome}/platform-tools/adb` : "adb";
173828
- const result = await spawn(bin, ["--version"]);
173940
+ async function checkAdb(spawn, androidHome, platform) {
173941
+ const bin = adbBin(androidHome, platform);
173942
+ const result = await spawn(bin, ["--version"], { platform });
173829
173943
  if (result.exitCode < 0) {
173830
173944
  return {
173831
173945
  name: "adb",
@@ -173838,9 +173952,9 @@ async function checkAdb(spawn, androidHome) {
173838
173952
  }
173839
173953
  return { name: "adb", status: "pass" };
173840
173954
  }
173841
- async function checkEmulatorBin(spawn, androidHome) {
173842
- const bin = androidHome ? `${androidHome}/emulator/emulator` : "emulator";
173843
- const result = await spawn(bin, ["-version"]);
173955
+ async function checkEmulatorBin(spawn, androidHome, platform) {
173956
+ const bin = emulatorBin(androidHome, platform);
173957
+ const result = await spawn(bin, ["-version"], { platform });
173844
173958
  if (result.exitCode < 0) {
173845
173959
  return {
173846
173960
  name: "android-emulator",
@@ -173857,11 +173971,11 @@ async function checkEmulatorBin(spawn, androidHome) {
173857
173971
  }
173858
173972
  return { name: "android-emulator", status: "pass" };
173859
173973
  }
173860
- async function checkAvds(spawn, androidHome, requiredAvds) {
173974
+ async function checkAvds(spawn, androidHome, requiredAvds, platform) {
173861
173975
  if (requiredAvds.length === 0)
173862
173976
  return [];
173863
- const bin = androidHome ? `${androidHome}/emulator/emulator` : "emulator";
173864
- const result = await spawn(bin, ["-list-avds"]);
173977
+ const bin = emulatorBin(androidHome, platform);
173978
+ const result = await spawn(bin, ["-list-avds"], { platform });
173865
173979
  if (result.exitCode < 0) {
173866
173980
  return [
173867
173981
  {
@@ -173898,12 +174012,12 @@ async function checkAvds(spawn, androidHome, requiredAvds) {
173898
174012
  async function checkAndroid(deps) {
173899
174013
  const home = checkHome(deps.androidHome, deps.checkExists);
173900
174014
  const [adb, emulator, avds] = await Promise.all([
173901
- checkAdb(deps.spawn, deps.androidHome),
173902
- checkEmulatorBin(deps.spawn, deps.androidHome),
173903
- checkAvds(deps.spawn, deps.androidHome, deps.requiredAvds)
174015
+ checkAdb(deps.spawn, deps.androidHome, deps.platform),
174016
+ checkEmulatorBin(deps.spawn, deps.androidHome, deps.platform),
174017
+ checkAvds(deps.spawn, deps.androidHome, deps.requiredAvds, deps.platform)
173904
174018
  ]);
173905
- const { appium, bin } = checkAppium(deps.envDir, deps.resolveAppiumBin, deps.checkExists);
173906
- const uiautomator2 = await checkUiautomator2(deps.spawn, bin);
174019
+ const { appium, bin } = checkAppium(deps.envDir, deps.platform, deps.checkExists);
174020
+ const uiautomator2 = await checkUiautomator2(deps.spawn, bin, deps.platform);
173907
174021
  return [home, adb, emulator, ...avds, appium, uiautomator2];
173908
174022
  }
173909
174023
 
@@ -174061,10 +174175,19 @@ function compareVersions(a2, b2) {
174061
174175
  return a2[0] - b2[0] || a2[1] - b2[1] || a2[2] - b2[2];
174062
174176
  }
174063
174177
 
174178
+ // src/shell/npm.ts
174179
+ function resolveNpmCommand(platform) {
174180
+ return platform === "win32" ? "npm.cmd" : "npm";
174181
+ }
174182
+
174064
174183
  // src/domains/doctor/checks/npmRegistry.ts
174065
174184
  async function checkNpmRegistry(deps) {
174066
- const result = await deps.spawn("npm", ["ping"]);
174067
- if (result.exitCode < 0) {
174185
+ const { platform } = deps;
174186
+ const result = await deps.spawn(resolveNpmCommand(platform), ["ping"], {
174187
+ platform
174188
+ });
174189
+ const cmdNotFound = deps.platform === "win32" && result.exitCode === 9009;
174190
+ if (result.exitCode < 0 || cmdNotFound) {
174068
174191
  return {
174069
174192
  name: "npm-registry",
174070
174193
  status: "warn",
@@ -174081,14 +174204,18 @@ async function checkNpmRegistry(deps) {
174081
174204
 
174082
174205
  // src/domains/doctor/checks/playwright.ts
174083
174206
  async function checkPlaywright(deps) {
174084
- if (deps.playwrightCliPath === undefined) {
174207
+ const candidates = deps.envDir ? playwrightCliCandidates(deps.envDir, deps.platform) : [];
174208
+ const cliPath = candidates.find(deps.checkExists);
174209
+ if (cliPath === undefined) {
174085
174210
  return {
174086
174211
  name: "playwright",
174087
174212
  status: "fail",
174088
- detail: doctorMessages.playwright.notFound
174213
+ detail: doctorMessages.playwright.notFound(candidates[0])
174089
174214
  };
174090
174215
  }
174091
- const result = await deps.spawn(deps.playwrightCliPath, ["--version"]);
174216
+ const result = await deps.spawn(cliPath, ["--version"], {
174217
+ platform: deps.platform
174218
+ });
174092
174219
  if (result.exitCode < 0) {
174093
174220
  return {
174094
174221
  name: "playwright",
@@ -174129,11 +174256,13 @@ async function runChecks(deps) {
174129
174256
  }),
174130
174257
  checkPlaywright({
174131
174258
  spawn: deps.spawn,
174132
- playwrightCliPath: deps.playwrightCliPath
174259
+ envDir: deps.envDir,
174260
+ platform: deps.platform,
174261
+ checkExists: deps.checkExists
174133
174262
  }),
174134
174263
  checkApiKey({ apiKey: deps.apiKey }),
174135
174264
  checkApiUrl({ fetch: deps.fetch, apiBaseUrl: deps.apiBaseUrl }),
174136
- checkNpmRegistry({ spawn: deps.spawn }),
174265
+ checkNpmRegistry({ spawn: deps.spawn, platform: deps.platform }),
174137
174266
  checkFileAssets({
174138
174267
  files: deps.flowFiles,
174139
174268
  readFile: deps.readFile,
@@ -174144,8 +174273,8 @@ async function runChecks(deps) {
174144
174273
  androidHome: deps.androidHome,
174145
174274
  checkExists: deps.checkExists,
174146
174275
  envDir: deps.envDir,
174147
- resolveAppiumBin: deps.resolveAppiumBin,
174148
- requiredAvds: deps.requiredAvds
174276
+ requiredAvds: deps.requiredAvds,
174277
+ platform: deps.platform
174149
174278
  }) : Promise.resolve([])
174150
174279
  ]);
174151
174280
  return [
@@ -174186,11 +174315,11 @@ function renderResults(ui, results) {
174186
174315
  }
174187
174316
 
174188
174317
  // src/domains/flows/ensureDeps.ts
174189
- import { dirname as dirname4, join as join10 } from "node:path";
174318
+ import { dirname as dirname4, join as join12 } from "node:path";
174190
174319
  function findEnvDir(flowPath, fs2) {
174191
174320
  let dir = dirname4(flowPath);
174192
174321
  while (true) {
174193
- if (fs2.existsSync(join10(dir, "package.json")))
174322
+ if (fs2.existsSync(join12(dir, "package.json")))
174194
174323
  return dir;
174195
174324
  const parent = dirname4(dir);
174196
174325
  if (parent === dir)
@@ -174216,7 +174345,7 @@ function resolveProjectDirSafe(files, fs2) {
174216
174345
  }
174217
174346
 
174218
174347
  // src/domains/flows/expand.ts
174219
- import { join as join11 } from "node:path";
174348
+ import { join as join13, resolve as resolve3 } from "node:path";
174220
174349
 
174221
174350
  // node_modules/tinyglobby/dist/index.mjs
174222
174351
  import { readdir, readdirSync, realpath, realpathSync, stat, statSync } from "fs";
@@ -175107,11 +175236,11 @@ function makePeekFlowMeta(fs2) {
175107
175236
  };
175108
175237
  }
175109
175238
  async function resolveGlobRoots(cwd, fs2) {
175110
- const qawolfPath = join11(cwd, ".qawolf");
175239
+ const qawolfPath = join13(cwd, ".qawolf");
175111
175240
  let envDirs = [];
175112
175241
  try {
175113
175242
  const entries = await fs2.readdirWithTypes(qawolfPath);
175114
- envDirs = entries.filter((e) => e.isDirectory()).map((e) => join11(qawolfPath, e.name));
175243
+ envDirs = entries.filter((e) => e.isDirectory()).map((e) => join13(qawolfPath, e.name));
175115
175244
  } catch {}
175116
175245
  return [cwd, ...envDirs];
175117
175246
  }
@@ -175125,7 +175254,8 @@ async function expandPatterns(patterns, cwd, logger, fs2) {
175125
175254
  cwd: root,
175126
175255
  absolute: true
175127
175256
  });
175128
- for (const file2 of matches) {
175257
+ for (const match of matches) {
175258
+ const file2 = resolve3(match);
175129
175259
  seen.add(file2);
175130
175260
  logger?.trace(`found: ${file2}`);
175131
175261
  }
@@ -175135,11 +175265,11 @@ async function expandPatterns(patterns, cwd, logger, fs2) {
175135
175265
  }
175136
175266
 
175137
175267
  // src/domains/runtimeEnv/clearRuntimeEnv.ts
175138
- import { join as join13 } from "node:path";
175268
+ import { join as join15 } from "node:path";
175139
175269
 
175140
175270
  // src/domains/runtimeEnv/managedEnvDir.ts
175141
175271
  import { createHash } from "node:crypto";
175142
- import { join as join12, resolve as resolve3 } from "node:path";
175272
+ import { join as join14, resolve as resolve4 } from "node:path";
175143
175273
 
175144
175274
  // src/generated/dependencyVersions.ts
175145
175275
  var flowsVersion = "0.1.4";
@@ -175181,20 +175311,20 @@ function managedEnvHash() {
175181
175311
  function managedEnvBaseDir() {
175182
175312
  const override = process.env["QAWOLF_RUNTIME_DIR"]?.trim();
175183
175313
  if (override)
175184
- return resolve3(override);
175185
- return join12(getDataDir(), "runtime");
175314
+ return resolve4(override);
175315
+ return join14(getDataDir(), "runtime");
175186
175316
  }
175187
175317
  function runStagingRoot() {
175188
175318
  return `${managedEnvBaseDir()}-runs`;
175189
175319
  }
175190
175320
  function managedEnvDir() {
175191
- return join12(managedEnvBaseDir(), managedEnvHash());
175321
+ return join14(managedEnvBaseDir(), managedEnvHash());
175192
175322
  }
175193
175323
  async function scaffoldManagedEnv(dir, fs2) {
175194
175324
  await fs2.mkdir(dir, { recursive: true });
175195
175325
  const dependencies = Object.fromEntries(pinnedPackages.map(({ name, version: version2 }) => [name, version2]));
175196
- await fs2.writeFile(join12(dir, "package.json"), JSON.stringify({ name: "qawolf-runtime", private: true, dependencies }, undefined, 2));
175197
- await fs2.writeFile(join12(dir, ".npmrc"), `@qawolf:registry=https://registry.npmjs.org/
175326
+ await fs2.writeFile(join14(dir, "package.json"), JSON.stringify({ name: "qawolf-runtime", private: true, dependencies }, undefined, 2));
175327
+ await fs2.writeFile(join14(dir, ".npmrc"), `@qawolf:registry=https://registry.npmjs.org/
175198
175328
  `);
175199
175329
  }
175200
175330
 
@@ -175216,14 +175346,14 @@ async function isManagedRuntimeBase(dir, fs2) {
175216
175346
  for (const entry of entries) {
175217
175347
  if (!entry.isDirectory())
175218
175348
  return false;
175219
- if (!await hasRuntimeSentinel(join13(dir, entry.name), fs2))
175349
+ if (!await hasRuntimeSentinel(join15(dir, entry.name), fs2))
175220
175350
  return false;
175221
175351
  }
175222
175352
  return true;
175223
175353
  }
175224
175354
  async function hasRuntimeSentinel(hashDir, fs2) {
175225
175355
  try {
175226
- const pkg = JSON.parse(await fs2.readFile(join13(hashDir, "package.json")));
175356
+ const pkg = JSON.parse(await fs2.readFile(join15(hashDir, "package.json")));
175227
175357
  return pkg.name === runtimeSentinel;
175228
175358
  } catch {
175229
175359
  return false;
@@ -175231,17 +175361,36 @@ async function hasRuntimeSentinel(hashDir, fs2) {
175231
175361
  }
175232
175362
  // src/shell/spawn.ts
175233
175363
  import { spawn } from "node:child_process";
175234
- function buildSpawnOptions(cmd, platform, env2) {
175235
- const opts = {};
175364
+
175365
+ // src/core/cmdEscape.ts
175366
+ var metaChars = /([()\][%!^"`<>&|;, *?])/g;
175367
+ function escapeCommand(command) {
175368
+ return command.replace(metaChars, "^$1");
175369
+ }
175370
+ function escapeArgument(arg) {
175371
+ const escaped = arg.replace(/(?=(\\+?)?)\1"/g, "$1$1\\\"").replace(/(?=(\\+?)?)\1$/, "$1$1");
175372
+ return `"${escaped}"`.replace(metaChars, "^$1").replace(metaChars, "^$1");
175373
+ }
175374
+
175375
+ // src/shell/spawn.ts
175376
+ function buildSpawnCommand(cmd, args, platform, env2) {
175377
+ const options = {};
175236
175378
  if (env2)
175237
- opts.env = env2;
175238
- if (platform === "win32" && /\.(cmd|bat)$/i.test(cmd))
175239
- opts.shell = true;
175240
- return opts;
175379
+ options.env = env2;
175380
+ if (platform !== "win32" || !/\.(cmd|bat)$/i.test(cmd)) {
175381
+ return { cmd, args, options };
175382
+ }
175383
+ const line = [escapeCommand(cmd), ...args.map(escapeArgument)].join(" ");
175384
+ return {
175385
+ cmd: process.env["ComSpec"] ?? "cmd.exe",
175386
+ args: ["/d", "/s", "/c", `"${line}"`],
175387
+ options: { ...options, windowsVerbatimArguments: true }
175388
+ };
175241
175389
  }
175242
- var defaultSpawn = (cmd, args, opts) => new Promise((resolve4) => {
175243
- const env2 = opts?.env ? { ...process.env, ...opts.env } : undefined;
175244
- const child = spawn(cmd, args, buildSpawnOptions(cmd, process.platform, env2));
175390
+ var defaultSpawn = (cmd, args, opts) => new Promise((resolve5) => {
175391
+ const env2 = opts.env ? { ...process.env, ...opts.env } : undefined;
175392
+ const built = buildSpawnCommand(cmd, args, opts.platform, env2);
175393
+ const child = spawn(built.cmd, built.args, built.options);
175245
175394
  let stdout2 = "";
175246
175395
  let stderr = "";
175247
175396
  child.stdout?.on("data", (chunk) => {
@@ -175254,29 +175403,34 @@ var defaultSpawn = (cmd, args, opts) => new Promise((resolve4) => {
175254
175403
  child.stdin?.write(opts.stdin);
175255
175404
  child.stdin?.end();
175256
175405
  }
175257
- child.on("error", (err) => resolve4({ exitCode: -1, stdout: stdout2, stderr: stderr || err.message }));
175258
- child.on("close", (code) => resolve4({ exitCode: code ?? -1, stdout: stdout2, stderr }));
175406
+ child.on("error", (err) => resolve5({ exitCode: -1, stdout: stdout2, stderr: stderr || err.message }));
175407
+ child.on("close", (code) => resolve5({ exitCode: code ?? -1, stdout: stdout2, stderr }));
175259
175408
  });
175260
175409
 
175261
175410
  // src/domains/runtimeEnv/npmInstall.ts
175262
- function spawnNpmInstall(cwd) {
175263
- return new Promise((resolve4) => {
175264
- const child = spawn("npm", ["install", "--legacy-peer-deps"], { cwd });
175411
+ function buildNpmInstallSpawn(cwd, platform) {
175412
+ const built = buildSpawnCommand(resolveNpmCommand(platform), ["install", "--legacy-peer-deps"], platform, undefined);
175413
+ return { ...built, options: { ...built.options, cwd } };
175414
+ }
175415
+ function spawnNpmInstall(cwd, spawn2 = spawn) {
175416
+ return new Promise((resolve5) => {
175417
+ const { cmd, args, options } = buildNpmInstallSpawn(cwd, process.platform);
175418
+ const child = spawn2(cmd, args, options);
175265
175419
  let stderr = "";
175266
175420
  child.stdout?.resume();
175267
175421
  child.stderr?.on("data", (chunk) => {
175268
175422
  stderr += String(chunk);
175269
175423
  });
175270
- child.on("error", (err) => resolve4({ exitCode: -1, stderr: stderr || err.message }));
175271
- child.on("close", (code) => resolve4({ exitCode: code ?? -1, stderr }));
175424
+ child.on("error", (err) => resolve5({ exitCode: -1, stderr: stderr || err.message }));
175425
+ child.on("close", (code) => resolve5({ exitCode: code ?? -1, stderr }));
175272
175426
  });
175273
175427
  }
175274
175428
 
175275
175429
  // src/domains/runtimeEnv/resolvePinned.ts
175276
- import { join as join14 } from "node:path";
175430
+ import { join as join16 } from "node:path";
175277
175431
  function readInstalledVersion(dir, pkgName, fs2) {
175278
175432
  try {
175279
- const pkgPath = join14(dir, "node_modules", ...pkgName.split("/"), "package.json");
175433
+ const pkgPath = join16(dir, "node_modules", ...pkgName.split("/"), "package.json");
175280
175434
  const raw = JSON.parse(fs2.readFileSync(pkgPath));
175281
175435
  const { version: version2 } = raw;
175282
175436
  return typeof version2 === "string" ? version2 : undefined;
@@ -175284,20 +175438,40 @@ function readInstalledVersion(dir, pkgName, fs2) {
175284
175438
  return;
175285
175439
  }
175286
175440
  }
175287
- function allPinnedResolved(dir, fs2) {
175288
- const binDir = join14(dir, "node_modules", ".bin");
175289
- const hasPlaywrightShim = fs2.existsSync(join14(binDir, "playwright")) || fs2.existsSync(join14(binDir, "playwright.cmd"));
175290
- if (!hasPlaywrightShim) {
175291
- return false;
175441
+ var shims = [
175442
+ { name: "playwright", candidates: playwrightCliCandidates },
175443
+ { name: "appium", candidates: appiumCliCandidates }
175444
+ ];
175445
+ function pinnedResolutionFailures(dir, fs2, platform) {
175446
+ const failures = [];
175447
+ for (const { name, version: version2 } of pinnedPackages) {
175448
+ const installed = readInstalledVersion(dir, name, fs2);
175449
+ if (installed !== version2) {
175450
+ failures.push({ kind: "package", name, pinned: version2, installed });
175451
+ }
175292
175452
  }
175293
- return pinnedPackages.every(({ name, version: version2 }) => readInstalledVersion(dir, name, fs2) === version2);
175453
+ for (const { name, candidates } of shims) {
175454
+ if (!candidates(dir, platform).some((p2) => fs2.existsSync(p2))) {
175455
+ failures.push({ kind: "shim", name });
175456
+ }
175457
+ }
175458
+ return failures;
175459
+ }
175460
+ function describePinnedFailure(failure) {
175461
+ if (failure.kind === "shim") {
175462
+ return `node_modules/.bin/${failure.name} (missing)`;
175463
+ }
175464
+ return failure.installed === undefined ? `${failure.name} (missing, pinned ${failure.pinned})` : `${failure.name} ${failure.installed} (pinned ${failure.pinned})`;
175465
+ }
175466
+ function allPinnedResolved(dir, fs2, platform) {
175467
+ return pinnedResolutionFailures(dir, fs2, platform).length === 0;
175294
175468
  }
175295
175469
 
175296
175470
  // src/domains/runtimeEnv/shimDeps.ts
175297
- import { join as join16 } from "node:path";
175471
+ import { join as join18 } from "node:path";
175298
175472
 
175299
175473
  // src/shell/resolveExport.ts
175300
- import { join as join15 } from "node:path";
175474
+ import { join as join17 } from "node:path";
175301
175475
  function pickPath(entry, preference) {
175302
175476
  if (typeof entry === "string")
175303
175477
  return entry;
@@ -175329,28 +175503,28 @@ function resolveFromEnvDir(envDir, specifier, preference = "esm", fs2 = makeDefa
175329
175503
  const pkgName = parts.slice(0, pkgPartCount).join("/");
175330
175504
  const rest = parts.slice(pkgPartCount);
175331
175505
  const subpath = rest.length > 0 ? "./" + rest.join("/") : ".";
175332
- const pkgDir = join15(envDir, "node_modules", ...pkgName.split("/"));
175506
+ const pkgDir = join17(envDir, "node_modules", ...pkgName.split("/"));
175333
175507
  let pkg;
175334
175508
  try {
175335
- pkg = JSON.parse(fs2.readFileSync(join15(pkgDir, "package.json")));
175509
+ pkg = JSON.parse(fs2.readFileSync(join17(pkgDir, "package.json")));
175336
175510
  } catch (err) {
175337
175511
  if (isNoEntError(err))
175338
- throw new Error(`Package '${pkgName}' not found in ${join15(envDir, "node_modules")}`, { cause: err });
175512
+ throw new Error(`Package '${pkgName}' not found in ${join17(envDir, "node_modules")}`, { cause: err });
175339
175513
  throw err;
175340
175514
  }
175341
175515
  const exportsMap = normalizeExports(pkg.exports);
175342
175516
  const entry = exportsMap?.[subpath];
175343
175517
  const relative3 = pickPath(entry, preference) ?? (subpath === "." ? pkg.module ?? pkg.main : undefined);
175344
175518
  if (!relative3) {
175345
- throw new Error(`No entry for "${subpath}" in exports of ${join15(pkgDir, "package.json")}`);
175519
+ throw new Error(`No entry for "${subpath}" in exports of ${join17(pkgDir, "package.json")}`);
175346
175520
  }
175347
- return join15(pkgDir, relative3);
175521
+ return join17(pkgDir, relative3);
175348
175522
  }
175349
175523
 
175350
175524
  // src/domains/runtimeEnv/shimDeps.ts
175351
175525
  function readShimMarker(shimDir, fs2) {
175352
175526
  try {
175353
- const pkg = JSON.parse(fs2.readFileSync(join16(shimDir, "package.json")));
175527
+ const pkg = JSON.parse(fs2.readFileSync(join18(shimDir, "package.json")));
175354
175528
  if (pkg._qawolf_format) {
175355
175529
  return {
175356
175530
  _qawolf_version: pkg._qawolf_version ?? "",
@@ -175366,11 +175540,11 @@ function resolveBunBuild(bunBuild) {
175366
175540
  return bunBuild === false ? undefined : { build: bunBuild };
175367
175541
  }
175368
175542
  async function removeStaleShims(flowsDir, flowsDeps, fs2) {
175369
- const shimsDir = join16(flowsDir, "node_modules");
175543
+ const shimsDir = join18(flowsDir, "node_modules");
175370
175544
  if (!fs2.existsSync(shimsDir))
175371
175545
  return;
175372
175546
  for (const dep of flowsDeps) {
175373
- const shimDepDir = join16(shimsDir, ...dep.split("/"));
175547
+ const shimDepDir = join18(shimsDir, ...dep.split("/"));
175374
175548
  if (readShimMarker(shimDepDir, fs2)) {
175375
175549
  await fs2.rm(shimDepDir, { recursive: true, force: true });
175376
175550
  }
@@ -175379,17 +175553,17 @@ async function removeStaleShims(flowsDir, flowsDeps, fs2) {
175379
175553
  async function buildDepShim(args) {
175380
175554
  const { envDir, flowsDir, dep, fs: fs2, build: build2 } = args;
175381
175555
  const depParts = dep.split("/");
175382
- const depDir = join16(envDir, "node_modules", ...depParts);
175556
+ const depDir = join18(envDir, "node_modules", ...depParts);
175383
175557
  if (!fs2.existsSync(depDir))
175384
175558
  return;
175385
175559
  let depVersion;
175386
175560
  try {
175387
- const pkg = JSON.parse(fs2.readFileSync(join16(depDir, "package.json")));
175561
+ const pkg = JSON.parse(fs2.readFileSync(join18(depDir, "package.json")));
175388
175562
  depVersion = pkg.version ?? "unknown";
175389
175563
  } catch {
175390
175564
  depVersion = "unknown";
175391
175565
  }
175392
- const shimDir = join16(flowsDir, "node_modules", ...depParts);
175566
+ const shimDir = join18(flowsDir, "node_modules", ...depParts);
175393
175567
  if (fs2.existsSync(shimDir)) {
175394
175568
  const marker = readShimMarker(shimDir, fs2);
175395
175569
  if (!marker)
@@ -175416,20 +175590,20 @@ async function buildDepShim(args) {
175416
175590
  }
175417
175591
  const shimCode = await output.text();
175418
175592
  await fs2.mkdir(shimDir, { recursive: true });
175419
- await fs2.writeFile(join16(shimDir, "package.json"), JSON.stringify({
175593
+ await fs2.writeFile(join18(shimDir, "package.json"), JSON.stringify({
175420
175594
  name: dep,
175421
175595
  _qawolf_version: depVersion,
175422
175596
  _qawolf_format: "bun-build-v1"
175423
175597
  }));
175424
- await fs2.writeFile(join16(shimDir, "index.js"), shimCode);
175598
+ await fs2.writeFile(join18(shimDir, "index.js"), shimCode);
175425
175599
  }
175426
175600
  async function shimFlowsDeps(envDir, fs2 = makeDefaultFs(), bunBuild) {
175427
- const flowsDir = join16(envDir, "node_modules", "@qawolf", "flows");
175601
+ const flowsDir = join18(envDir, "node_modules", "@qawolf", "flows");
175428
175602
  if (!fs2.existsSync(flowsDir))
175429
175603
  return;
175430
175604
  let flowsDeps;
175431
175605
  try {
175432
- const flowsPkg = JSON.parse(fs2.readFileSync(join16(flowsDir, "package.json")));
175606
+ const flowsPkg = JSON.parse(fs2.readFileSync(join18(flowsDir, "package.json")));
175433
175607
  flowsDeps = Object.keys(flowsPkg.dependencies ?? {});
175434
175608
  } catch {
175435
175609
  return;
@@ -175446,11 +175620,8 @@ async function shimFlowsDeps(envDir, fs2 = makeDefaultFs(), bunBuild) {
175446
175620
 
175447
175621
  // src/domains/runtimeEnv/installPinned.ts
175448
175622
  var defaultSpawnInstall = spawnNpmInstall;
175449
- async function installPinned(targetDir, deps = {
175450
- fs: makeDefaultFs(),
175451
- spawnInstall: defaultSpawnInstall
175452
- }) {
175453
- if (allPinnedResolved(targetDir, deps.fs)) {
175623
+ async function installPinned(targetDir, deps) {
175624
+ if (allPinnedResolved(targetDir, deps.fs, deps.platform)) {
175454
175625
  return;
175455
175626
  }
175456
175627
  const tempDir = `${targetDir}.installing.${process.pid}`;
@@ -175465,7 +175636,7 @@ async function installPinned(targetDir, deps = {
175465
175636
  try {
175466
175637
  await deps.fs.rename(tempDir, targetDir);
175467
175638
  } catch (err) {
175468
- const anotherShardWon = allPinnedResolved(targetDir, deps.fs);
175639
+ const anotherShardWon = allPinnedResolved(targetDir, deps.fs, deps.platform);
175469
175640
  if (anotherShardWon) {
175470
175641
  await deps.fs.rm(tempDir, { recursive: true, force: true });
175471
175642
  return;
@@ -175478,60 +175649,49 @@ async function installPinned(targetDir, deps = {
175478
175649
  async function ensureRuntimeEnv(args, deps = {}) {
175479
175650
  const fs2 = deps.fs ?? makeDefaultFs();
175480
175651
  const resolveManagedDir = deps.resolveManagedDir ?? managedEnvDir;
175481
- const install = deps.install ?? ((t2) => installPinned(t2, { fs: fs2, spawnInstall: defaultSpawnInstall }));
175652
+ const install = deps.install ?? ((t2) => installPinned(t2, {
175653
+ fs: fs2,
175654
+ spawnInstall: defaultSpawnInstall,
175655
+ platform: args.platform
175656
+ }));
175482
175657
  if (args.overrideDir !== undefined) {
175483
- if (allPinnedResolved(args.overrideDir, fs2)) {
175658
+ const failures = pinnedResolutionFailures(args.overrideDir, fs2, args.platform);
175659
+ if (failures.length === 0) {
175484
175660
  return {
175485
175661
  depsRoot: args.overrideDir,
175486
175662
  source: "override",
175487
175663
  installed: false
175488
175664
  };
175489
175665
  }
175490
- throw new Error(`--deps directory ${args.overrideDir} is missing required pinned dependencies. ` + `Run 'npm install' in that directory or point to a valid managed env directory.`);
175666
+ throw new Error(runnerMessages.depsDirIncomplete(args.overrideDir, failures.map(describePinnedFailure)));
175491
175667
  }
175492
- if (args.projectDir !== undefined && allPinnedResolved(args.projectDir, fs2)) {
175668
+ if (args.projectDir !== undefined && allPinnedResolved(args.projectDir, fs2, args.platform)) {
175493
175669
  return { depsRoot: args.projectDir, source: "project", installed: false };
175494
175670
  }
175495
175671
  const managed = resolveManagedDir();
175496
- if (allPinnedResolved(managed, fs2)) {
175672
+ if (allPinnedResolved(managed, fs2, args.platform)) {
175497
175673
  return { depsRoot: managed, source: "managed", installed: false };
175498
175674
  }
175499
175675
  await install(managed);
175500
- if (!allPinnedResolved(managed, fs2)) {
175676
+ if (!allPinnedResolved(managed, fs2, args.platform)) {
175501
175677
  throw new Error(`Managed runtime is incomplete after install at ${managed}.`);
175502
175678
  }
175503
175679
  return { depsRoot: managed, source: "managed", installed: true };
175504
175680
  }
175505
175681
  // src/domains/runtimeEnv/resolveDepsRootIfPresent.ts
175506
175682
  function resolveDepsRootIfPresent(args, fs2 = makeDefaultFs()) {
175507
- if (args.overrideDir !== undefined && allPinnedResolved(args.overrideDir, fs2))
175683
+ if (args.overrideDir !== undefined && allPinnedResolved(args.overrideDir, fs2, args.platform))
175508
175684
  return args.overrideDir;
175509
- if (args.projectDir !== undefined && allPinnedResolved(args.projectDir, fs2))
175685
+ if (args.projectDir !== undefined && allPinnedResolved(args.projectDir, fs2, args.platform))
175510
175686
  return args.projectDir;
175511
175687
  const managed = managedEnvDir();
175512
- if (allPinnedResolved(managed, fs2))
175688
+ if (allPinnedResolved(managed, fs2, args.platform))
175513
175689
  return managed;
175514
175690
  return;
175515
175691
  }
175516
- // src/shell/appium/resolveAppiumBin.ts
175517
- import { join as join17 } from "node:path";
175518
- function resolveAppiumBin(envDir) {
175519
- return join17(envDir, "node_modules", ".bin", "appium");
175520
- }
175521
-
175522
- // src/shell/playwright.ts
175523
- import { existsSync as existsSync2 } from "node:fs";
175524
- import { join as join18 } from "node:path";
175525
- var notFoundMessage = "Could not find Playwright. Install it in your project (`npm install playwright` or `bun add playwright`).";
175526
- function resolvePlaywrightCli(envDir, platform) {
175527
- const binDir = join18(envDir, "node_modules", ".bin");
175528
- const candidates = platform === "win32" ? ["playwright.cmd", "playwright"] : ["playwright"];
175529
- for (const candidate of candidates) {
175530
- const full = join18(binDir, candidate);
175531
- if (existsSync2(full))
175532
- return full;
175533
- }
175534
- throw new Error(notFoundMessage);
175692
+ // src/shell/androidSdkHome.ts
175693
+ function androidSdkHome() {
175694
+ return process.env["ANDROID_HOME"] ?? process.env["ANDROID_SDK_ROOT"];
175535
175695
  }
175536
175696
 
175537
175697
  // src/commands/doctor/handler.ts
@@ -175551,13 +175711,10 @@ async function handleDoctor(ctx, opts) {
175551
175711
  const cwd = process.cwd();
175552
175712
  const flowFiles = await expandPatterns([], cwd, undefined, fs2);
175553
175713
  const projectDir = resolveProjectDirSafe([...flowFiles], fs2);
175554
- const envDir = resolveDepsRootIfPresent(projectDir !== undefined ? { projectDir } : {}, fs2);
175555
- let playwrightCliPath;
175556
- try {
175557
- playwrightCliPath = envDir ? resolvePlaywrightCli(envDir, process.platform) : undefined;
175558
- } catch {
175559
- playwrightCliPath = undefined;
175560
- }
175714
+ const envDir = resolveDepsRootIfPresent({
175715
+ platform: process.platform,
175716
+ ...projectDir !== undefined ? { projectDir } : {}
175717
+ }, fs2);
175561
175718
  const resolved = await resolveApiKey(ctx.configDir, fs2);
175562
175719
  const requiredAvds = await collectRequiredAvds(flowFiles, makePeekFlowMeta(fs2));
175563
175720
  const runAndroidChecks = opts.all || requiredAvds.length > 0;
@@ -175576,13 +175733,12 @@ async function handleDoctor(ctx, opts) {
175576
175733
  flowFiles,
175577
175734
  readFile: (path2) => ctx.fs.readFile(path2),
175578
175735
  cwd,
175579
- playwrightCliPath,
175580
175736
  runAndroidChecks,
175581
- androidHome: process.env["ANDROID_HOME"] ?? process.env["ANDROID_SDK_ROOT"],
175737
+ androidHome: androidSdkHome(),
175582
175738
  checkExists: (path2) => ctx.fs.existsSync(path2),
175583
175739
  envDir,
175584
- resolveAppiumBin,
175585
- requiredAvds
175740
+ requiredAvds,
175741
+ platform: process.platform
175586
175742
  });
175587
175743
  const allResults = [cliCheck, ...results];
175588
175744
  renderResults(ctx.ui, allResults);
@@ -176051,7 +176207,7 @@ var publicContractsV1 = makeContractsV1(defaultIdSchemas);
176051
176207
 
176052
176208
  // src/domains/flows/listRemote.ts
176053
176209
  async function flowsListRemote(ctx, pattern, options) {
176054
- const result = await ctx.platform.callPublicApi(publicContractsV1.flow.list, {
176210
+ const result = await ctx.platformClient.callPublicApi(publicContractsV1.flow.list, {
176055
176211
  environmentId: options.env,
176056
176212
  includeDrafts: options.includeDrafts
176057
176213
  });
@@ -176090,7 +176246,7 @@ async function flowsListRemote(ctx, pattern, options) {
176090
176246
  }
176091
176247
 
176092
176248
  // src/domains/flows/pull/handler.ts
176093
- import { dirname as dirname7, join as join23, resolve as resolve7 } from "node:path";
176249
+ import { dirname as dirname7, join as join23, resolve as resolve8 } from "node:path";
176094
176250
 
176095
176251
  // src/shell/manifest/io.ts
176096
176252
  import { createHash as createHash2 } from "node:crypto";
@@ -176145,18 +176301,18 @@ async function writeManifest(envDir, manifest, fs2 = makeDefaultFs()) {
176145
176301
  `);
176146
176302
  }
176147
176303
  function hashFile(absPath, fs2 = makeDefaultFs()) {
176148
- return new Promise((resolve4, reject) => {
176304
+ return new Promise((resolve5, reject) => {
176149
176305
  const hash2 = createHash2("sha256");
176150
176306
  const stream = fs2.createReadStream(absPath);
176151
176307
  stream.on("data", (chunk) => hash2.update(chunk));
176152
- stream.on("end", () => resolve4(hash2.digest("hex")));
176308
+ stream.on("end", () => resolve5(hash2.digest("hex")));
176153
176309
  stream.on("error", reject);
176154
176310
  });
176155
176311
  }
176156
176312
 
176157
176313
  // src/domains/flows/pull/fetchPhase.ts
176158
176314
  async function fetchBundleAndEnvVars(ctx, envId) {
176159
- const { platform } = ctx;
176315
+ const { platformClient } = ctx;
176160
176316
  let tmpArchive;
176161
176317
  let bundleFetchedAt;
176162
176318
  let envVars;
@@ -176165,7 +176321,7 @@ async function fetchBundleAndEnvVars(ctx, envId) {
176165
176321
  {
176166
176322
  message: flowsMessages.pull.downloadingBundle,
176167
176323
  task: async () => {
176168
- const result = await platform.downloadBundle(envId);
176324
+ const result = await platformClient.downloadBundle(envId);
176169
176325
  if (!result.ok)
176170
176326
  throw new Error(result.error);
176171
176327
  tmpArchive = result.value.tmpArchive;
@@ -176175,7 +176331,7 @@ async function fetchBundleAndEnvVars(ctx, envId) {
176175
176331
  {
176176
176332
  message: flowsMessages.pull.fetchingEnvVars,
176177
176333
  task: async () => {
176178
- const result = await platform.getEnvVars(envId);
176334
+ const result = await platformClient.getEnvVars(envId);
176179
176335
  if (!result.ok)
176180
176336
  throw new Error(result.error);
176181
176337
  envVars = result.value;
@@ -176190,10 +176346,10 @@ async function fetchBundleAndEnvVars(ctx, envId) {
176190
176346
  }
176191
176347
 
176192
176348
  // src/domains/flows/pull/safety.ts
176193
- import { resolve as resolve5 } from "node:path";
176349
+ import { resolve as resolve6 } from "node:path";
176194
176350
 
176195
176351
  // src/domains/flows/pull/entryPath.ts
176196
- import { isAbsolute as isAbsolute3, posix as posix2, relative as relative3, resolve as resolve4 } from "node:path";
176352
+ import { isAbsolute as isAbsolute3, posix as posix2, relative as relative3, resolve as resolve5 } from "node:path";
176197
176353
  function validateEntryPath(name, destResolved) {
176198
176354
  if (!name)
176199
176355
  throw new Error("empty entry name");
@@ -176204,7 +176360,7 @@ function validateEntryPath(name, destResolved) {
176204
176360
  if (normalized === ".." || normalized.startsWith("../")) {
176205
176361
  throw new Error(`path traversal: entry escapes destination (${name})`);
176206
176362
  }
176207
- const target = resolve4(destResolved, name);
176363
+ const target = resolve5(destResolved, name);
176208
176364
  const rel = relative3(destResolved, target);
176209
176365
  if (rel.startsWith("..") || isAbsolute3(rel)) {
176210
176366
  throw new Error(`path traversal: entry resolves outside destination (${name})`);
@@ -176214,7 +176370,7 @@ function validateEntryPath(name, destResolved) {
176214
176370
 
176215
176371
  // src/domains/flows/pull/safety.ts
176216
176372
  async function detectLocalModifications(envDir, manifest) {
176217
- const envDirResolved = resolve5(envDir);
176373
+ const envDirResolved = resolve6(envDir);
176218
176374
  const mods = [];
176219
176375
  for (const entry of manifest.flows) {
176220
176376
  const abs = validateEntryPath(entry.path, envDirResolved);
@@ -176481,7 +176637,7 @@ async function writeEnvFile(envDir, vars, fs2 = makeDefaultFs()) {
176481
176637
  }
176482
176638
 
176483
176639
  // src/domains/flows/pull/extract.ts
176484
- import { dirname as dirname6, resolve as resolve6 } from "node:path";
176640
+ import { dirname as dirname6, resolve as resolve7 } from "node:path";
176485
176641
  import { createGunzip } from "node:zlib";
176486
176642
 
176487
176643
  // node_modules/tar/dist/esm/index.min.js
@@ -179679,7 +179835,7 @@ async function extractTarGz(tgzPath, destDir, opts = {}, fs3 = makeDefaultFs())
179679
179835
  const maxEntryBytes = opts.maxEntryBytes ?? defaultMaxEntryBytes;
179680
179836
  const maxTotalBytes = opts.maxTotalBytes ?? defaultMaxTotalBytes;
179681
179837
  await fs3.mkdir(destDir, { recursive: true });
179682
- const destResolved = resolve6(destDir);
179838
+ const destResolved = resolve7(destDir);
179683
179839
  return new Promise((resolveOuter, rejectOuter) => {
179684
179840
  let total = 0;
179685
179841
  let aborted2 = false;
@@ -179848,7 +180004,7 @@ async function handleFlowsPull(ctx, opts, deps) {
179848
180004
  ctx.ui.error(validation.error);
179849
180005
  return { error: validation.error };
179850
180006
  }
179851
- const destAbs = resolve7(opts.out ?? join23(".qawolf", opts.env));
180007
+ const destAbs = resolve8(opts.out ?? join23(".qawolf", opts.env));
179852
180008
  const assetsAbs = join23(dirname7(destAbs), "assets");
179853
180009
  await resolvedDeps.fs.mkdir(assetsAbs, { recursive: true });
179854
180010
  const yes = opts.yes ?? false;
@@ -179891,7 +180047,7 @@ async function handleFlowsPull(ctx, opts, deps) {
179891
180047
  {
179892
180048
  message: flowsMessages.pull.downloadingTeamStorageAssets,
179893
180049
  task: async () => {
179894
- const result2 = await ctx.platform.syncTeamStorageAssets(assetsAbs);
180050
+ const result2 = await ctx.platformClient.syncTeamStorageAssets(assetsAbs);
179895
180051
  if (!result2.ok)
179896
180052
  throw new Error(result2.error);
179897
180053
  return result2.value;
@@ -180337,19 +180493,6 @@ import { AsyncLocalStorage } from "node:async_hooks";
180337
180493
  function createRunnerDeps(signals, depsRoot) {
180338
180494
  return {
180339
180495
  fs: makeDefaultFs(),
180340
- spawn: (cmd, args) => {
180341
- const child = spawn(cmd, args);
180342
- const exitCode = new Promise((resolve8) => {
180343
- child.on("error", () => resolve8(-1));
180344
- child.on("close", (code) => resolve8(code ?? -1));
180345
- });
180346
- return {
180347
- exitCode,
180348
- kill: () => {
180349
- child.kill();
180350
- }
180351
- };
180352
- },
180353
180496
  signals,
180354
180497
  depsRoot,
180355
180498
  createStorage: () => {
@@ -180364,46 +180507,43 @@ function createRunnerDeps(signals, depsRoot) {
180364
180507
  };
180365
180508
  }
180366
180509
 
180510
+ // src/shell/importFromPath.ts
180511
+ import { pathToFileURL } from "node:url";
180512
+ function importFromPath(absPath) {
180513
+ return import(pathToFileURL(absPath).href);
180514
+ }
180515
+
180367
180516
  // src/domains/runner/runWebFlowDeps.ts
180368
- async function defaultRunWebFlowDeps(cwd = process.cwd(), signals) {
180517
+ async function defaultRunWebFlowDeps(envDir = process.cwd(), signals) {
180369
180518
  let playwright;
180370
180519
  try {
180371
- const playwrightPath = resolveFromEnvDir(cwd, "playwright");
180372
- playwright = await import(playwrightPath);
180520
+ const playwrightPath = resolveFromEnvDir(envDir, "playwright");
180521
+ playwright = await importFromPath(playwrightPath);
180373
180522
  } catch (err) {
180374
- throw new Error("Could not load Playwright. Install it in your project: `npm install playwright` or `bun add playwright`.", { cause: err });
180523
+ throw new Error(runnerMessages.playwrightLoadFailed(envDir, errorMessage(err)), {
180524
+ cause: err
180525
+ });
180375
180526
  }
180376
180527
  const { chromium, firefox, webkit } = playwright;
180377
180528
  return {
180378
180529
  chromium,
180379
180530
  firefox,
180380
180531
  webkit,
180381
- ...createRunnerDeps(signals, cwd)
180532
+ ...createRunnerDeps(signals, envDir)
180382
180533
  };
180383
180534
  }
180384
180535
 
180385
180536
  // src/domains/runtimeEnv/prepareRunDir.ts
180386
- import { createHash as createHash3 } from "node:crypto";
180387
- import { basename as basename4, dirname as dirname10, join as join29, resolve as resolve8, sep as sep4 } from "node:path";
180388
-
180389
- // src/shell/copyDir.ts
180390
- import { cp, readdir as readdir2 } from "node:fs/promises";
180391
- import { basename as basename3, join as join24 } from "node:path";
180392
- async function copyDirExcluding(source, destination, excludedNames) {
180393
- const entries = await readdir2(source, { withFileTypes: true });
180394
- await Promise.all(entries.filter((entry) => !excludedNames.has(entry.name)).map((entry) => cp(join24(source, entry.name), join24(destination, entry.name), {
180395
- recursive: true,
180396
- filter: (path3) => !excludedNames.has(basename3(path3))
180397
- })));
180398
- }
180537
+ import { createHash as createHash4 } from "node:crypto";
180538
+ import { join as join30, resolve as resolve9 } from "node:path";
180399
180539
 
180400
180540
  // src/domains/runtimeEnv/execSubpathImports.ts
180401
- import { join as join25 } from "node:path";
180541
+ import { join as join24 } from "node:path";
180402
180542
  var flowSubpathImports = { "#playwright": "playwright" };
180403
180543
  var packageJsonSchema = exports_external.looseObject({ imports: exports_external.record(exports_external.string(), exports_external.unknown()).catch({}) }).catch({ imports: {} });
180404
180544
  async function writeExecSubpathImports(args) {
180405
180545
  const { execDir, fs: fs3 } = args;
180406
- const pkgPath = join25(execDir, "package.json");
180546
+ const pkgPath = join24(execDir, "package.json");
180407
180547
  const pkg = packageJsonSchema.parse(await readPackageJson(pkgPath, fs3));
180408
180548
  const merged = { ...pkg, imports: { ...pkg.imports, ...flowSubpathImports } };
180409
180549
  await fs3.writeFile(pkgPath, JSON.stringify(merged, undefined, 2));
@@ -180425,10 +180565,10 @@ async function readPackageJson(pkgPath, fs3) {
180425
180565
  }
180426
180566
 
180427
180567
  // src/domains/runtimeEnv/innerHop.ts
180428
- import { join as join27 } from "node:path";
180568
+ import { join as join26 } from "node:path";
180429
180569
 
180430
180570
  // src/domains/runtimeEnv/linkPinnedPackages.ts
180431
- import { dirname as dirname8, join as join26 } from "node:path";
180571
+ import { dirname as dirname8, join as join25 } from "node:path";
180432
180572
 
180433
180573
  // src/domains/runtimeEnv/symlinkDir.ts
180434
180574
  import { symlink } from "node:fs/promises";
@@ -180440,16 +180580,16 @@ async function createDirSymlink(source, target) {
180440
180580
  // src/domains/runtimeEnv/linkPinnedPackages.ts
180441
180581
  async function linkPinnedPackages(args) {
180442
180582
  const { depsRoot, nodeModulesDir, fs: fs3 } = args;
180443
- const managedModules = join26(depsRoot, "node_modules");
180583
+ const managedModules = join25(depsRoot, "node_modules");
180444
180584
  await fs3.mkdir(nodeModulesDir, { recursive: true });
180445
180585
  for (const { name } of pinnedPackages) {
180446
180586
  const segments = name.split("/");
180447
- const target = join26(nodeModulesDir, ...segments);
180587
+ const target = join25(nodeModulesDir, ...segments);
180448
180588
  if (segments.length > 1) {
180449
180589
  await fs3.mkdir(dirname8(target), { recursive: true });
180450
180590
  }
180451
180591
  await fs3.rm(target, { recursive: true, force: true });
180452
- await createDirSymlink(join26(managedModules, ...segments), target);
180592
+ await createDirSymlink(join25(managedModules, ...segments), target);
180453
180593
  }
180454
180594
  }
180455
180595
 
@@ -180458,14 +180598,14 @@ async function populateInnerHop(args) {
180458
180598
  const { depsRoot, execDir, fs: fs3 } = args;
180459
180599
  await linkPinnedPackages({
180460
180600
  depsRoot,
180461
- nodeModulesDir: join27(execDir, "node_modules"),
180601
+ nodeModulesDir: join26(execDir, "node_modules"),
180462
180602
  fs: fs3
180463
180603
  });
180464
180604
  }
180465
180605
 
180466
180606
  // src/domains/runtimeEnv/outerHop.ts
180467
180607
  import { lstat } from "node:fs/promises";
180468
- import { dirname as dirname9, join as join28 } from "node:path";
180608
+ import { dirname as dirname9, join as join27 } from "node:path";
180469
180609
  var executorPackageNames = new Set(pinnedPackages.map((p3) => p3.name));
180470
180610
  async function populateOuterHop(args) {
180471
180611
  const { projectDir, runDir, fs: fs3 } = args;
@@ -180475,7 +180615,7 @@ async function populateOuterHop(args) {
180475
180615
  const depNames = Object.keys(installableDeps);
180476
180616
  const { satisfying, rejected } = await findSatisfyingNodeModulesDir(projectDir, depNames, fs3);
180477
180617
  if (satisfying !== undefined) {
180478
- await createDirSymlink(satisfying, join28(runDir, "node_modules"));
180618
+ await createDirSymlink(satisfying, join27(runDir, "node_modules"));
180479
180619
  return { mode: "symlink", nodeModulesDir: satisfying };
180480
180620
  }
180481
180621
  if (depNames.length === 0)
@@ -180484,7 +180624,7 @@ async function populateOuterHop(args) {
180484
180624
  await installOuterDeps(runDir, installableDeps, fs3, args.install ?? spawnNpmInstall);
180485
180625
  await linkPinnedPackages({
180486
180626
  depsRoot: args.depsRoot,
180487
- nodeModulesDir: join28(runDir, "node_modules"),
180627
+ nodeModulesDir: join27(runDir, "node_modules"),
180488
180628
  fs: fs3
180489
180629
  });
180490
180630
  return { mode: "install", depCount: depNames.length, rejected };
@@ -180493,10 +180633,10 @@ async function findSatisfyingNodeModulesDir(startDir, depNames, fs3) {
180493
180633
  const rejected = [];
180494
180634
  let dir = startDir;
180495
180635
  while (true) {
180496
- const candidate = join28(dir, "node_modules");
180636
+ const candidate = join27(dir, "node_modules");
180497
180637
  const stats = await lstatSafe(candidate);
180498
180638
  if (stats !== undefined && stats.isDirectory() && !stats.isSymbolicLink()) {
180499
- const missing = depNames.filter((name) => !fs3.existsSync(join28(candidate, name, "package.json")));
180639
+ const missing = depNames.filter((name) => !fs3.existsSync(join27(candidate, name, "package.json")));
180500
180640
  if (missing.length === 0)
180501
180641
  return { satisfying: candidate, rejected };
180502
180642
  rejected.push({ dir: candidate, missing });
@@ -180517,7 +180657,7 @@ async function lstatSafe(path3) {
180517
180657
  async function readInstallableDeps(projectDir, fs3) {
180518
180658
  let content;
180519
180659
  try {
180520
- content = await fs3.readFile(join28(projectDir, "package.json"));
180660
+ content = await fs3.readFile(join27(projectDir, "package.json"));
180521
180661
  } catch {
180522
180662
  return {};
180523
180663
  }
@@ -180535,8 +180675,8 @@ async function readInstallableDeps(projectDir, fs3) {
180535
180675
  return Object.fromEntries(Object.entries(rawDeps).filter(([name]) => !executorPackageNames.has(name)).filter((entry) => typeof entry[1] === "string"));
180536
180676
  }
180537
180677
  async function installOuterDeps(runDir, deps, fs3, install) {
180538
- await fs3.writeFile(join28(runDir, "package.json"), JSON.stringify({ name: "qawolf-run", private: true, dependencies: deps }, undefined, 2));
180539
- await fs3.writeFile(join28(runDir, ".npmrc"), `@qawolf:registry=https://registry.npmjs.org/
180678
+ await fs3.writeFile(join27(runDir, "package.json"), JSON.stringify({ name: "qawolf-run", private: true, dependencies: deps }, undefined, 2));
180679
+ await fs3.writeFile(join27(runDir, ".npmrc"), `@qawolf:registry=https://registry.npmjs.org/
180540
180680
  `);
180541
180681
  const result = await install(runDir);
180542
180682
  if (result.exitCode !== 0) {
@@ -180544,16 +180684,61 @@ async function installOuterDeps(runDir, deps, fs3, install) {
180544
180684
  }
180545
180685
  }
180546
180686
 
180547
- // src/domains/runtimeEnv/prepareRunDir.ts
180687
+ // src/domains/runtimeEnv/stageFlowFiles.ts
180688
+ import { createHash as createHash3 } from "node:crypto";
180689
+ import { basename as basename4, dirname as dirname10, join as join29, sep as sep4 } from "node:path";
180690
+
180691
+ // src/shell/copyDir.ts
180692
+ import { cp, readdir as readdir2 } from "node:fs/promises";
180693
+ import { basename as basename3, join as join28 } from "node:path";
180694
+ async function copyDirExcluding(source, destination, excludedNames) {
180695
+ const entries = await readdir2(source, { withFileTypes: true });
180696
+ await Promise.all(entries.filter((entry) => !excludedNames.has(entry.name)).map((entry) => cp(join28(source, entry.name), join28(destination, entry.name), {
180697
+ recursive: true,
180698
+ filter: (path3) => !excludedNames.has(basename3(path3))
180699
+ })));
180700
+ }
180701
+
180702
+ // src/domains/runtimeEnv/stageFlowFiles.ts
180548
180703
  var excludedDirs = new Set(["node_modules", ".git", ".qawolf"]);
180704
+ async function stageFlowFiles(args) {
180705
+ const { files, projectDir, execDir, fs: fs3 } = args;
180706
+ if (projectDir !== undefined) {
180707
+ await copyDirExcluding(projectDir, execDir, excludedDirs);
180708
+ return Promise.all(files.map(async (f3) => remapPath(f3, projectDir, execDir) ?? stageOneFile(f3, execDir, fs3)));
180709
+ }
180710
+ if (files.length > 1) {
180711
+ return Promise.all(files.map((f3) => stageOneFile(f3, execDir, fs3)));
180712
+ }
180713
+ await Promise.all(files.map((f3) => fs3.copyFile(f3, join29(execDir, basename4(f3)))));
180714
+ return files.map((f3) => join29(execDir, basename4(f3)));
180715
+ }
180716
+ async function stageOneFile(file2, execDir, fs3) {
180717
+ const dirHash = createHash3("sha256").update(dirname10(file2)).digest("hex").slice(0, 8);
180718
+ const subDir = join29(execDir, dirHash);
180719
+ await fs3.mkdir(subDir, { recursive: true });
180720
+ const dest = join29(subDir, basename4(file2));
180721
+ await fs3.copyFile(file2, dest);
180722
+ return dest;
180723
+ }
180724
+ function remapPath(file2, projectDir, execDir) {
180725
+ if (file2 === projectDir)
180726
+ return execDir;
180727
+ if (file2.startsWith(projectDir + sep4)) {
180728
+ return join29(execDir, file2.slice(projectDir.length + 1));
180729
+ }
180730
+ return;
180731
+ }
180732
+
180733
+ // src/domains/runtimeEnv/prepareRunDir.ts
180549
180734
  async function prepareRunDir(args) {
180550
180735
  const { files, projectDir, depsRoot, runRoot } = args;
180551
180736
  const fs3 = args.fs ?? makeDefaultFs();
180552
180737
  const runId = buildRunId(projectDir, files);
180553
- const runDir = join29(runRoot, runId);
180738
+ const runDir = join30(runRoot, runId);
180554
180739
  await fs3.rm(runDir, { recursive: true, force: true });
180555
180740
  await fs3.mkdir(runDir, { recursive: true });
180556
- const execDir = join29(runDir, "exec");
180741
+ const execDir = join30(runDir, "exec");
180557
180742
  await fs3.mkdir(execDir, { recursive: true });
180558
180743
  await populateInnerHop({ depsRoot, execDir, fs: fs3 });
180559
180744
  const stagedFiles = await stageFlowFiles({ files, projectDir, execDir, fs: fs3 });
@@ -180579,49 +180764,22 @@ function buildRunId(projectDir, files) {
180579
180764
  if (seedPath === undefined) {
180580
180765
  throw new Error("prepareRunDir: files must be non-empty when projectDir is undefined");
180581
180766
  }
180582
- const hash2 = createHash3("sha256").update(resolve8(seedPath)).digest("hex").slice(0, 16);
180767
+ const hash2 = createHash4("sha256").update(resolve9(seedPath)).digest("hex").slice(0, 16);
180583
180768
  return `${hash2}-${process.pid}`;
180584
180769
  }
180585
- async function stageFlowFiles(args) {
180586
- const { files, projectDir, execDir, fs: fs3 } = args;
180587
- if (projectDir !== undefined) {
180588
- await copyDirExcluding(projectDir, execDir, excludedDirs);
180589
- return files.map((f3) => remapPath(f3, projectDir, execDir));
180590
- }
180591
- if (files.length > 1) {
180592
- return Promise.all(files.map(async (f3) => {
180593
- const dirHash = createHash3("sha256").update(dirname10(f3)).digest("hex").slice(0, 8);
180594
- const subDir = join29(execDir, dirHash);
180595
- await fs3.mkdir(subDir, { recursive: true });
180596
- const dest = join29(subDir, basename4(f3));
180597
- await fs3.copyFile(f3, dest);
180598
- return dest;
180599
- }));
180600
- }
180601
- await Promise.all(files.map((f3) => fs3.copyFile(f3, join29(execDir, basename4(f3)))));
180602
- return files.map((f3) => join29(execDir, basename4(f3)));
180603
- }
180604
- function remapPath(file2, projectDir, execDir) {
180605
- if (file2 === projectDir)
180606
- return execDir;
180607
- if (file2.startsWith(projectDir + sep4)) {
180608
- return join29(execDir, file2.slice(projectDir.length + 1));
180609
- }
180610
- return file2;
180611
- }
180612
180770
 
180613
180771
  // src/shell/testkit.ts
180614
- import { join as join30 } from "node:path";
180772
+ import { join as join31 } from "node:path";
180615
180773
  function notAvailableLocally(name) {
180616
180774
  throw new Error(runnerMessages.notAvailableLocally(name));
180617
180775
  }
180618
180776
  async function loadSdkDeps(cwd) {
180619
- const testkitDir = join30(cwd, "node_modules", "@qawolf", "testkit");
180777
+ const testkitDir = join31(cwd, "node_modules", "@qawolf", "testkit");
180620
180778
  try {
180621
- const clientMod = await import(resolveFromEnvDir(cwd, "@qawolf/testkit/client"));
180779
+ const clientMod = await importFromPath(resolveFromEnvDir(cwd, "@qawolf/testkit/client"));
180622
180780
  if (typeof clientMod.createTestkitClient !== "function")
180623
180781
  throw new Error("createTestkitClient is not a function");
180624
- const scopeMod = await import(join30(testkitDir, "dist", "clientScope.js"));
180782
+ const scopeMod = await importFromPath(join31(testkitDir, "dist", "clientScope.js"));
180625
180783
  if (typeof scopeMod.configureTestkitClient !== "function")
180626
180784
  throw new Error("configureTestkitClient is not a function");
180627
180785
  return {
@@ -180629,7 +180787,7 @@ async function loadSdkDeps(cwd) {
180629
180787
  configureTestkitClient: scopeMod.configureTestkitClient
180630
180788
  };
180631
180789
  } catch (err) {
180632
- throw new Error("Could not load @qawolf/testkit. Install it in your project: `npm install @qawolf/testkit` or `bun add @qawolf/testkit`.", { cause: err });
180790
+ throw new Error(packageLoadFailed("@qawolf/testkit", cwd, errorMessage(err)), { cause: err });
180633
180791
  }
180634
180792
  }
180635
180793
  async function configureTestkit(cwd, deps) {
@@ -180648,6 +180806,7 @@ function resolveDepsRoot(args) {
180648
180806
  const fs3 = args.fs ?? makeDefaultFs();
180649
180807
  const projectDir = resolveProjectDirSafe(args.files, fs3);
180650
180808
  return ensureRuntimeEnv({
180809
+ platform: args.platform,
180651
180810
  ...projectDir !== undefined ? { projectDir } : {},
180652
180811
  ...args.overrideDir !== undefined ? { overrideDir: args.overrideDir } : {}
180653
180812
  }, { fs: fs3 });
@@ -180657,9 +180816,9 @@ function resolveDepsRoot(args) {
180657
180816
  async function loadSdkDeps2(cwd) {
180658
180817
  try {
180659
180818
  const emailsPath = resolveFromEnvDir(cwd, "@qawolf/emails");
180660
- return await import(emailsPath);
180819
+ return await importFromPath(emailsPath);
180661
180820
  } catch (err) {
180662
- throw new Error("Could not load @qawolf/emails. Install it in your project: `npm install @qawolf/emails` or `bun add @qawolf/emails`.", { cause: err });
180821
+ throw new Error(packageLoadFailed("@qawolf/emails", cwd, errorMessage(err)), { cause: err });
180663
180822
  }
180664
180823
  }
180665
180824
  async function configureEmails(config2, cwd, deps) {
@@ -180678,9 +180837,9 @@ async function registerLazyEmailsClient(getInbox, cwd, deps) {
180678
180837
  }
180679
180838
 
180680
180839
  // src/commands/flows/envVarDeps.ts
180681
- import { join as join31 } from "node:path";
180840
+ import { join as join32 } from "node:path";
180682
180841
  function envFilePath(envDir) {
180683
- return join31(envDir, ".env");
180842
+ return join32(envDir, ".env");
180684
180843
  }
180685
180844
  async function readEnv(envDir, fs3) {
180686
180845
  try {
@@ -180715,14 +180874,13 @@ function makeEnvVarDeps(envDir, fs3) {
180715
180874
  }
180716
180875
 
180717
180876
  // src/commands/flows/flowRuntimeDeps.ts
180718
- async function maybeGetIdentityTeamId(platform) {
180719
- const identity = await platform.getIdentity();
180877
+ async function maybeGetIdentityTeamId(platformClient) {
180878
+ const identity = await platformClient.getIdentity();
180720
180879
  return identity.ok ? identity.value.team.id : undefined;
180721
180880
  }
180722
180881
  function lazyGetInbox({
180723
180882
  envDir,
180724
180883
  ctx,
180725
- platform,
180726
180884
  env: env2,
180727
180885
  resolveApiKeyFn,
180728
180886
  configureEmailsFn,
@@ -180733,16 +180891,13 @@ function lazyGetInbox({
180733
180891
  const explicitEmailerUrl = env2["EMAILER_URL"];
180734
180892
  let teamId = env2["CLOUD_AGENTS_INBOX_TEAM_ID"];
180735
180893
  const apiKeyResult = explicitEmailerUrl === undefined ? await resolveApiKeyFn(ctx.configDir, ctx.fs) : undefined;
180736
- if (teamId === undefined && platform !== undefined) {
180737
- teamId = await maybeGetIdentityTeamId(platform);
180738
- }
180739
180894
  if (teamId === undefined && apiKeyResult !== undefined) {
180740
- const identityPlatform = createPlatform(apiKeyResult.key, {
180895
+ const identityClient = createPlatform(apiKeyResult.key, {
180741
180896
  baseUrl: ctx.apiBaseUrl,
180742
180897
  fetch: globalThis.fetch,
180743
180898
  ...ctx.log ? { logger: ctx.log("trpc") } : {}
180744
180899
  });
180745
- teamId = await maybeGetIdentityTeamId(identityPlatform);
180900
+ teamId = await maybeGetIdentityTeamId(identityClient);
180746
180901
  }
180747
180902
  const teamIdPart = teamId !== undefined ? { teamId } : {};
180748
180903
  if (explicitEmailerUrl !== undefined) {
@@ -180764,7 +180919,6 @@ function lazyGetInbox({
180764
180919
  async function createFlowRuntimeDeps({
180765
180920
  envDir,
180766
180921
  ctx,
180767
- platform,
180768
180922
  env: env2 = process.env,
180769
180923
  resolveApiKeyFn = resolveApiKey,
180770
180924
  configureEmailsFn = configureEmails,
@@ -180773,7 +180927,6 @@ async function createFlowRuntimeDeps({
180773
180927
  const getInbox = lazyGetInbox({
180774
180928
  envDir,
180775
180929
  ctx,
180776
- platform,
180777
180930
  env: env2,
180778
180931
  resolveApiKeyFn,
180779
180932
  configureEmailsFn,
@@ -180789,30 +180942,38 @@ async function createFlowRuntimeDeps({
180789
180942
  }
180790
180943
 
180791
180944
  // src/shell/appium/createAppiumServer.ts
180792
- import { join as join32 } from "node:path";
180945
+ import { existsSync as existsSync2 } from "node:fs";
180793
180946
 
180794
180947
  // src/shell/appium/spawnAppium.ts
180795
180948
  import { spawn as spawn2 } from "node:child_process";
180796
180949
  import net from "node:net";
180797
180950
  import { PassThrough } from "node:stream";
180798
- var findFreePort = () => new Promise((resolve9, reject) => {
180951
+ var findFreePort = () => new Promise((resolve10, reject) => {
180799
180952
  const server = net.createServer();
180800
180953
  server.listen(0, () => {
180801
180954
  const addr = server.address();
180802
- server.close(() => resolve9(addr.port));
180955
+ server.close(() => resolve10(addr.port));
180803
180956
  });
180804
180957
  server.on("error", reject);
180805
180958
  });
180806
- var defaultSpawnAppium = (bin, args, env2) => {
180807
- const child = spawn2(bin, args, { stdio: ["ignore", "pipe", "pipe"], env: env2 });
180959
+ function buildAppiumSpawn(bin, args, platform, env2) {
180960
+ const built = buildSpawnCommand(bin, args, platform, env2);
180961
+ return {
180962
+ ...built,
180963
+ options: { stdio: ["ignore", "pipe", "pipe"], ...built.options }
180964
+ };
180965
+ }
180966
+ var defaultSpawnAppium = (bin, args, platform, env2) => {
180967
+ const built = buildAppiumSpawn(bin, args, platform, env2);
180968
+ const child = spawn2(built.cmd, built.args, built.options);
180808
180969
  const output = new PassThrough;
180809
180970
  child.stdout?.pipe(output, { end: false });
180810
180971
  child.stderr?.pipe(output, { end: false });
180811
- const exitCode = new Promise((resolve9, reject) => {
180972
+ const exitCode = new Promise((resolve10, reject) => {
180812
180973
  child.on("error", (err) => reject(new Error(`Failed to spawn Appium: ${err.message}`)));
180813
180974
  child.on("close", (code, signal) => {
180814
180975
  if (code !== null)
180815
- resolve9(code);
180976
+ resolve10(code);
180816
180977
  else
180817
180978
  reject(new Error(`Appium process killed by signal ${signal ?? "unknown"}`));
180818
180979
  });
@@ -180825,7 +180986,7 @@ var readyBanner = "Appium REST http interface listener started on";
180825
180986
  var defaultStartTimeoutMs = 30000;
180826
180987
  var bannerBufferMaxBytes = 1024;
180827
180988
  function waitForBanner(output, exitCode, timeoutMs3) {
180828
- return new Promise((resolve9, reject) => {
180989
+ return new Promise((resolve10, reject) => {
180829
180990
  let done = false;
180830
180991
  function cleanup() {
180831
180992
  done = true;
@@ -180843,7 +181004,7 @@ function waitForBanner(output, exitCode, timeoutMs3) {
180843
181004
  if (buffer.includes(readyBanner)) {
180844
181005
  cleanup();
180845
181006
  output.resume();
180846
- resolve9();
181007
+ resolve10();
180847
181008
  }
180848
181009
  };
180849
181010
  const timer = setTimeout(() => {
@@ -180863,15 +181024,17 @@ function waitForBanner(output, exitCode, timeoutMs3) {
180863
181024
  async function createAppiumServer(envDir, signals, params) {
180864
181025
  const spawnFn = params?.deps?.spawn ?? defaultSpawnAppium;
180865
181026
  const findFreePortFn = params?.deps?.findFreePort ?? findFreePort;
180866
- const resolveAppiumBinFn = params?.deps?.resolveAppiumBin ?? resolveAppiumBin;
180867
- const appiumHome2 = params?.options?.appiumHome ?? join32(envPaths("qawolf").data, "appium");
181027
+ const checkExists = params?.deps?.checkExists ?? existsSync2;
181028
+ const appiumHome = params?.options?.appiumHome ?? getAppiumHome();
180868
181029
  const timeoutMs3 = params?.options?.startTimeoutMs ?? defaultStartTimeoutMs;
180869
- const bin = resolveAppiumBinFn(envDir);
181030
+ const platform = params?.options?.platform ?? process.platform;
181031
+ const candidates = appiumCliCandidates(envDir, platform);
181032
+ const bin = candidates.find(checkExists);
181033
+ if (!bin) {
181034
+ throw new Error(installMessages.android.appiumNotFound(candidates[0] ?? envDir));
181035
+ }
180870
181036
  const port = await findFreePortFn();
180871
- const proc = spawnFn(bin, ["--port", String(port), "--log-level", "info"], {
180872
- ...process.env,
180873
- APPIUM_HOME: appiumHome2
180874
- });
181037
+ const proc = spawnFn(bin, ["--port", String(port), "--log-level", "info"], platform, { ...process.env, APPIUM_HOME: appiumHome });
180875
181038
  let stopped = false;
180876
181039
  const stop = () => {
180877
181040
  if (stopped)
@@ -180887,7 +181050,7 @@ async function createAppiumServer(envDir, signals, params) {
180887
181050
  });
180888
181051
  return {
180889
181052
  port,
180890
- home: appiumHome2,
181053
+ home: appiumHome,
180891
181054
  exited: proc.exitCode,
180892
181055
  stop: () => {
180893
181056
  unregister();
@@ -180897,31 +181060,25 @@ async function createAppiumServer(envDir, signals, params) {
180897
181060
  }
180898
181061
 
180899
181062
  // src/shell/appium/createAndroidEmulator.ts
180900
- import { execFile, spawn as spawn3 } from "node:child_process";
181063
+ import { spawn as spawn3 } from "node:child_process";
181064
+
181065
+ // src/shell/appium/adb.ts
181066
+ import { execFile } from "node:child_process";
180901
181067
  import { promisify } from "node:util";
180902
181068
  var execFileAsync = promisify(execFile);
181069
+ var defaultAdb = async (args) => {
181070
+ const { stdout: stdout2 } = await execFileAsync(adbBin(androidSdkHome(), process.platform), args);
181071
+ return { stdout: stdout2 };
181072
+ };
181073
+
181074
+ // src/shell/appium/createAndroidEmulator.ts
180903
181075
  var defaultBootTimeoutMs = 120000;
180904
181076
  var pollIntervalMs = 2000;
180905
- function androidHome() {
180906
- return process.env["ANDROID_HOME"] ?? process.env["ANDROID_SDK_ROOT"];
180907
- }
180908
- function emulatorBin() {
180909
- const home = androidHome();
180910
- return home ? `${home}/emulator/emulator` : "emulator";
180911
- }
180912
- function adbBin() {
180913
- const home = androidHome();
180914
- return home ? `${home}/platform-tools/adb` : "adb";
180915
- }
180916
- var defaultSpawn2 = (bin, args) => {
181077
+ var defaultSpawnEmulator = (bin, args) => {
180917
181078
  const child = spawn3(bin, args, { stdio: "ignore" });
180918
181079
  child.unref();
180919
181080
  return { stop: () => child.kill() };
180920
181081
  };
180921
- var defaultAdb = async (args) => {
180922
- const { stdout: stdout2 } = await execFileAsync(adbBin(), args);
180923
- return { stdout: stdout2 };
180924
- };
180925
181082
  async function bootSequence(adb, serial, cancelled) {
180926
181083
  await adb(["-s", serial, "wait-for-device"]);
180927
181084
  while (!cancelled()) {
@@ -180938,7 +181095,7 @@ async function bootSequence(adb, serial, cancelled) {
180938
181095
  }
180939
181096
  }
180940
181097
  function waitForBoot(adb, serial, timeoutMs3) {
180941
- return new Promise((resolve9, reject) => {
181098
+ return new Promise((resolve10, reject) => {
180942
181099
  let done = false;
180943
181100
  const timer = setTimeout(() => {
180944
181101
  done = true;
@@ -180948,7 +181105,7 @@ function waitForBoot(adb, serial, timeoutMs3) {
180948
181105
  if (!done) {
180949
181106
  done = true;
180950
181107
  clearTimeout(timer);
180951
- resolve9();
181108
+ resolve10();
180952
181109
  }
180953
181110
  }).catch((err) => {
180954
181111
  if (!done) {
@@ -180961,11 +181118,11 @@ function waitForBoot(adb, serial, timeoutMs3) {
180961
181118
  }
180962
181119
  async function createAndroidEmulator(params) {
180963
181120
  const { avdName, port } = params;
180964
- const spawnFn = params.deps?.spawn ?? defaultSpawn2;
181121
+ const spawnFn = params.deps?.spawn ?? defaultSpawnEmulator;
180965
181122
  const adbFn = params.deps?.adb ?? defaultAdb;
180966
181123
  const timeoutMs3 = params.options?.bootTimeoutMs ?? defaultBootTimeoutMs;
180967
181124
  const serial = `emulator-${port}`;
180968
- const proc = spawnFn(emulatorBin(), [
181125
+ const proc = spawnFn(emulatorBin(androidSdkHome(), process.platform), [
180969
181126
  "-avd",
180970
181127
  avdName,
180971
181128
  "-no-audio",
@@ -181052,10 +181209,10 @@ function createEmulatorPool(params) {
181052
181209
  const next = freeSlots.get(avdName)?.shift();
181053
181210
  if (next)
181054
181211
  return Promise.resolve(next);
181055
- return new Promise((resolve9, reject) => {
181212
+ return new Promise((resolve10, reject) => {
181056
181213
  const pending = waiters.get(avdName) ?? [];
181057
181214
  waiters.set(avdName, pending);
181058
- pending.push({ resolve: resolve9, reject });
181215
+ pending.push({ resolve: resolve10, reject });
181059
181216
  });
181060
181217
  },
181061
181218
  checkIn(slot) {
@@ -181095,61 +181252,6 @@ function createEmulatorPool(params) {
181095
181252
  return pool;
181096
181253
  }
181097
181254
 
181098
- // src/shell/appium/emulatorSetup.ts
181099
- import { execFile as execFile2 } from "node:child_process";
181100
- import { promisify as promisify2 } from "node:util";
181101
- var execFileAsync2 = promisify2(execFile2);
181102
- function adbBin2() {
181103
- const home = process.env["ANDROID_HOME"] ?? process.env["ANDROID_SDK_ROOT"];
181104
- return home ? `${home}/platform-tools/adb` : "adb";
181105
- }
181106
- var defaultAdb2 = async (args) => {
181107
- const { stdout: stdout2 } = await execFileAsync2(adbBin2(), args);
181108
- return { stdout: stdout2 };
181109
- };
181110
- async function disableAnimations(adb, serial) {
181111
- await Promise.all([
181112
- adb([
181113
- "-s",
181114
- serial,
181115
- "shell",
181116
- "settings",
181117
- "put",
181118
- "global",
181119
- "window_animation_scale",
181120
- "0.0"
181121
- ]),
181122
- adb([
181123
- "-s",
181124
- serial,
181125
- "shell",
181126
- "settings",
181127
- "put",
181128
- "global",
181129
- "transition_animation_scale",
181130
- "0.0"
181131
- ]),
181132
- adb([
181133
- "-s",
181134
- serial,
181135
- "shell",
181136
- "settings",
181137
- "put",
181138
- "global",
181139
- "animator_duration_scale",
181140
- "0.0"
181141
- ])
181142
- ]);
181143
- }
181144
- async function dismissKeyguard(adb, serial) {
181145
- await adb(["-s", serial, "shell", "input", "keyevent", "KEYCODE_WAKEUP"]);
181146
- await adb(["-s", serial, "shell", "wm", "dismiss-keyguard"]);
181147
- }
181148
- async function configureEmulator(adb, serial) {
181149
- await disableAnimations(adb, serial);
181150
- await dismissKeyguard(adb, serial);
181151
- }
181152
-
181153
181255
  // src/domains/runner/runAndroidFlowDeps.ts
181154
181256
  async function createSession(port, serial) {
181155
181257
  const { remote: remote2 } = await Promise.resolve().then(() => (init_node3(), exports_node));
@@ -181171,7 +181273,7 @@ async function createSession(port, serial) {
181171
181273
  };
181172
181274
  }
181173
181275
  function createAndroidDeps(envDir, signals) {
181174
- const pool = createEmulatorPool({ signals, deps: { adb: defaultAdb2 } });
181276
+ const pool = createEmulatorPool({ signals, deps: { adb: defaultAdb } });
181175
181277
  const serverHandle = { port: 0, home: "", stop: () => {} };
181176
181278
  let serverStarted = false;
181177
181279
  const deps = {
@@ -181179,11 +181281,10 @@ function createAndroidDeps(envDir, signals) {
181179
181281
  appiumServer: serverHandle,
181180
181282
  emulatorPool: pool,
181181
181283
  createSession,
181182
- adb: defaultAdb2
181284
+ adb: defaultAdb
181183
181285
  };
181184
181286
  const boot = async (avdNames) => {
181185
- const androidHome2 = process.env["ANDROID_HOME"] ?? process.env["ANDROID_SDK_ROOT"];
181186
- if (!androidHome2) {
181287
+ if (!androidSdkHome()) {
181187
181288
  throw new Error(`ANDROID_HOME is not set. Set it to the Android SDK path.
181188
181289
  Install Android Studio and open Tools > SDK Manager.`);
181189
181290
  }
@@ -181233,11 +181334,18 @@ async function findFlowStamp(flowAbsPath) {
181233
181334
 
181234
181335
  // src/domains/install/browsers.ts
181235
181336
  async function installBrowserList(ctx, browsers, deps) {
181337
+ const candidates = playwrightCliCandidates(deps.envDir, deps.platform);
181338
+ const cliPath = candidates.find(deps.checkExists);
181339
+ if (!cliPath) {
181340
+ throw new Error(installMessages.playwrightNotFound(candidates[0] ?? deps.envDir));
181341
+ }
181236
181342
  await ctx.ui.withProgress(browsers.map((browser) => ({
181237
181343
  message: installMessages.installingBrowser(browser),
181238
181344
  task: async () => {
181239
181345
  const args = buildArgs(browser, deps.platform, deps.browserDeps);
181240
- const result = await deps.spawn(deps.playwrightCliPath, args);
181346
+ const result = await deps.spawn(cliPath, args, {
181347
+ platform: deps.platform
181348
+ });
181241
181349
  if (result.exitCode !== 0) {
181242
181350
  throw new Error(formatError2(browser, result));
181243
181351
  }
@@ -181252,12 +181360,12 @@ async function installBrowsers(ctx, pattern, deps) {
181252
181360
  ctx.ui.info(installMessages.noBrowserFlows);
181253
181361
  return;
181254
181362
  }
181255
- const playwrightCliPath = await deps.resolvePlaywrightCliPath(files);
181256
181363
  await installBrowserList(ctx, browsers, {
181257
181364
  spawn: deps.spawn,
181258
181365
  platform: deps.platform,
181259
181366
  browserDeps: deps.browserDeps,
181260
- playwrightCliPath
181367
+ envDir: await deps.resolveDepsRoot(files),
181368
+ checkExists: deps.checkExists
181261
181369
  });
181262
181370
  }
181263
181371
  async function collectBrowsers(files, peekFlowMeta) {
@@ -181289,12 +181397,58 @@ import path12 from "node:path";
181289
181397
  // src/shell/appium/createAndroidLaunchContext.ts
181290
181398
  import { writeFile } from "node:fs/promises";
181291
181399
  import path8 from "node:path";
181400
+
181401
+ // src/shell/appium/emulatorSetup.ts
181402
+ async function disableAnimations(adb, serial) {
181403
+ await Promise.all([
181404
+ adb([
181405
+ "-s",
181406
+ serial,
181407
+ "shell",
181408
+ "settings",
181409
+ "put",
181410
+ "global",
181411
+ "window_animation_scale",
181412
+ "0.0"
181413
+ ]),
181414
+ adb([
181415
+ "-s",
181416
+ serial,
181417
+ "shell",
181418
+ "settings",
181419
+ "put",
181420
+ "global",
181421
+ "transition_animation_scale",
181422
+ "0.0"
181423
+ ]),
181424
+ adb([
181425
+ "-s",
181426
+ serial,
181427
+ "shell",
181428
+ "settings",
181429
+ "put",
181430
+ "global",
181431
+ "animator_duration_scale",
181432
+ "0.0"
181433
+ ])
181434
+ ]);
181435
+ }
181436
+ async function dismissKeyguard(adb, serial) {
181437
+ await adb(["-s", serial, "shell", "input", "keyevent", "KEYCODE_WAKEUP"]);
181438
+ await adb(["-s", serial, "shell", "wm", "dismiss-keyguard"]);
181439
+ }
181440
+ async function configureEmulator(adb, serial) {
181441
+ await disableAnimations(adb, serial);
181442
+ await dismissKeyguard(adb, serial);
181443
+ }
181444
+
181445
+ // src/shell/appium/createAndroidLaunchContext.ts
181292
181446
  var defaultWriteFile = (filePath, data2) => writeFile(filePath, data2);
181293
181447
  function createAndroidLaunchContext({
181294
181448
  deps,
181295
181449
  options
181296
181450
  }) {
181297
- const adbFn = deps.adb ?? defaultAdb2;
181451
+ const adbFn = deps.adb ?? defaultAdb;
181298
181452
  const writeFileFn = deps.writeFile ?? defaultWriteFile;
181299
181453
  let slot;
181300
181454
  let driver;
@@ -181349,7 +181503,7 @@ function createAndroidLaunchContext({
181349
181503
 
181350
181504
  // src/domains/runner/loadFlowDefault.ts
181351
181505
  import path11 from "node:path";
181352
- import { pathToFileURL } from "node:url";
181506
+ import { pathToFileURL as pathToFileURL2 } from "node:url";
181353
181507
 
181354
181508
  // src/shell/resolver/detectRuntimeCapabilities.ts
181355
181509
  import nodeModule2 from "node:module";
@@ -181550,7 +181704,7 @@ async function importBundledFlow(flowPath, code, fs9) {
181550
181704
  const tempPath = path11.join(path11.dirname(flowPath), `.${path11.basename(flowPath)}.qawolf-bundle.mjs`);
181551
181705
  await fs9.writeFile(tempPath, code);
181552
181706
  try {
181553
- return await importDefaultExport(pathToFileURL(tempPath).href, flowPath);
181707
+ return await importDefaultExport(pathToFileURL2(tempPath).href, flowPath);
181554
181708
  } finally {
181555
181709
  await fs9.rm(tempPath, { force: true });
181556
181710
  }
@@ -181564,7 +181718,7 @@ async function loadFlowDefault(args) {
181564
181718
  } = args;
181565
181719
  if (bundleFlow === undefined) {
181566
181720
  await registerFlowLoader();
181567
- return importDefaultExport(pathToFileURL(flowPath).href, flowPath);
181721
+ return importDefaultExport(pathToFileURL2(flowPath).href, flowPath);
181568
181722
  }
181569
181723
  const code = await bundleFlow(flowPath, depsRoot);
181570
181724
  return importBundledFlow(flowPath, code, fs9);
@@ -181741,7 +181895,7 @@ import path17 from "node:path";
181741
181895
 
181742
181896
  // src/domains/runner/initFlowRuntime.ts
181743
181897
  import path13 from "node:path";
181744
- import { pathToFileURL as pathToFileURL2 } from "node:url";
181898
+ import { pathToFileURL as pathToFileURL3 } from "node:url";
181745
181899
  async function runnerPathInDir(dir, fs9) {
181746
181900
  const pkgPath = path13.join(dir, "node_modules", "@qawolf", "flows", "package.json");
181747
181901
  try {
@@ -181782,7 +181936,7 @@ async function doInit(flowPath, timeout, fs9, depsRoot) {
181782
181936
  } else {
181783
181937
  runnerPath = await findFlowsRunnerPath(flowPath, fs9);
181784
181938
  }
181785
- const mod = await import(pathToFileURL2(runnerPath).href);
181939
+ const mod = await import(pathToFileURL3(runnerPath).href);
181786
181940
  if (typeof mod.configureFlowRuntime !== "function")
181787
181941
  throw new Error(`@qawolf/flows _runner at ${runnerPath} does not export configureFlowRuntime`);
181788
181942
  await mod.configureFlowRuntime({
@@ -182190,8 +182344,8 @@ function lastNonEmptyLine(text3) {
182190
182344
  return lines[lines.length - 1];
182191
182345
  }
182192
182346
  async function runWorkerOnce(args) {
182193
- const { spawn: spawn4, command, prefixArgs, flow, optionsJson, workerEnv } = args;
182194
- const result = await spawn4(command, [...prefixArgs, "flows", "__run-worker", flow.file], workerEnv !== undefined ? { stdin: optionsJson, env: workerEnv } : { stdin: optionsJson });
182347
+ const { spawn: spawn4, command, prefixArgs, flow, optionsJson, platform, workerEnv } = args;
182348
+ const result = await spawn4(command, [...prefixArgs, "flows", "__run-worker", flow.file], workerEnv !== undefined ? { stdin: optionsJson, env: workerEnv, platform } : { stdin: optionsJson, platform });
182195
182349
  const line = lastNonEmptyLine(result.stdout);
182196
182350
  if (line !== undefined) {
182197
182351
  try {
@@ -182214,6 +182368,7 @@ function createSubprocessDispatch(env3) {
182214
182368
  spawn: env3.spawn,
182215
182369
  command: env3.command,
182216
182370
  prefixArgs: env3.prefixArgs,
182371
+ platform: env3.platform,
182217
182372
  workerEnv: env3.workerEnv,
182218
182373
  flow,
182219
182374
  optionsJson: serializeWorkerInput({
@@ -182233,6 +182388,7 @@ function makePooledDispatch(resolvedDir) {
182233
182388
  spawn: defaultSpawn,
182234
182389
  command,
182235
182390
  prefixArgs,
182391
+ platform: process.platform,
182236
182392
  workerEnv,
182237
182393
  resolvedDir,
182238
182394
  webOptions,
@@ -182495,7 +182651,8 @@ function buildFlowsRunDeps(args) {
182495
182651
  spawn: defaultSpawn,
182496
182652
  platform: process.platform,
182497
182653
  browserDeps: flags.browserDeps,
182498
- playwrightCliPath: resolvePlaywrightCli(resolvedDir, process.platform)
182654
+ envDir: resolvedDir,
182655
+ checkExists: (path9) => ctx.fs.existsSync(path9)
182499
182656
  }),
182500
182657
  runWebFlow,
182501
182658
  runWebFlowDeps: { ...runWebFlowDeps, flowRuntimeDeps },
@@ -182546,6 +182703,7 @@ async function runStagedFlows(args) {
182546
182703
  message: runnerMessages.preparingEnvironment,
182547
182704
  task: () => deps.resolveDepsRoot({
182548
182705
  files,
182706
+ platform: process.platform,
182549
182707
  ...flags.deps !== undefined ? { overrideDir: flags.deps } : {}
182550
182708
  })
182551
182709
  }
@@ -182623,7 +182781,7 @@ async function handleFlowsRun(ctx, pattern, flags, deps) {
182623
182781
  }
182624
182782
 
182625
182783
  // src/commands/flows/hybridRunDefaults.ts
182626
- import { join as join36, resolve as resolve9 } from "node:path";
182784
+ import { join as join36, resolve as resolve10 } from "node:path";
182627
182785
  function makeDefaultHybridDeps(fs9) {
182628
182786
  return {
182629
182787
  expandPatterns: (patterns, cwd, logger) => expandPatterns(patterns, cwd, logger, fs9),
@@ -182642,7 +182800,7 @@ async function handleHybridFlowsRun(ctx, pattern, flags, deps) {
182642
182800
  if (validation !== "ok") {
182643
182801
  return { error: validation.error, exitCode: 2 };
182644
182802
  }
182645
- const envDir = resolve9(join36(".qawolf", flags.env));
182803
+ const envDir = resolve10(join36(".qawolf", flags.env));
182646
182804
  const patternArgs = buildPatternArgs(pattern);
182647
182805
  const globFlows = () => resolvedDeps.expandPatterns(patternArgs, envDir, ctx.log("flows"));
182648
182806
  let files = await globFlows();
@@ -182918,27 +183076,29 @@ Examples:
182918
183076
  });
182919
183077
  }
182920
183078
 
182921
- // src/commands/install/android.ts
182922
- import { join as join40 } from "node:path";
182923
-
182924
183079
  // src/domains/install/android/index.ts
182925
183080
  import { parseExecutionTarget as parseExecutionTarget4 } from "@qawolf/flow-targets";
182926
183081
 
182927
183082
  // src/domains/install/android/avd.ts
182928
183083
  import { join as join38 } from "node:path";
182929
183084
  async function installAvds(ctx, specs, deps) {
182930
- const versionResult = await deps.spawn(deps.sdkManagerPath, ["--version"]);
183085
+ const sdkManagerPath = sdkManagerBin(deps.androidHome, deps.platform);
183086
+ const avdManagerPath = avdManagerBin(deps.androidHome, deps.platform);
183087
+ const versionResult = await deps.spawn(sdkManagerPath, ["--version"], {
183088
+ platform: deps.platform
183089
+ });
182931
183090
  if (versionResult.exitCode !== 0) {
182932
- throw new Error(installMessages.android.sdkmanagerNotFound(deps.sdkManagerPath));
183091
+ throw new Error(installMessages.android.sdkmanagerNotFound(sdkManagerPath));
182933
183092
  }
182934
183093
  const licenseFile = join38(deps.androidHome, "licenses", "android-sdk-license");
182935
183094
  if (deps.checkExists(licenseFile)) {
182936
183095
  ctx.ui.info(installMessages.android.licensesAlreadyAccepted);
182937
183096
  } else {
182938
183097
  ctx.ui.step(installMessages.android.acceptingLicenses);
182939
- await deps.spawn(deps.sdkManagerPath, ["--licenses"], {
183098
+ await deps.spawn(sdkManagerPath, ["--licenses"], {
182940
183099
  stdin: `y
182941
- `.repeat(20)
183100
+ `.repeat(20),
183101
+ platform: deps.platform
182942
183102
  });
182943
183103
  }
182944
183104
  const installedImages = new Set;
@@ -182952,7 +183112,9 @@ async function installAvds(ctx, specs, deps) {
182952
183112
  continue;
182953
183113
  }
182954
183114
  ctx.ui.step(installMessages.android.installingSystemImage(spec.systemImage));
182955
- const result = await deps.spawn(deps.sdkManagerPath, [spec.systemImage]);
183115
+ const result = await deps.spawn(sdkManagerPath, [spec.systemImage], {
183116
+ platform: deps.platform
183117
+ });
182956
183118
  if (result.exitCode !== 0) {
182957
183119
  const detail = (result.stderr || result.stdout).split(`
182958
183120
  `).map((l2) => l2.trim()).find(Boolean) ?? `exit code ${result.exitCode}`;
@@ -182960,11 +183122,9 @@ async function installAvds(ctx, specs, deps) {
182960
183122
  }
182961
183123
  installedImages.add(spec.systemImage);
182962
183124
  }
182963
- const listResult = await deps.spawn(deps.avdManagerPath, [
182964
- "list",
182965
- "avd",
182966
- "-c"
182967
- ]);
183125
+ const listResult = await deps.spawn(avdManagerPath, ["list", "avd", "-c"], {
183126
+ platform: deps.platform
183127
+ });
182968
183128
  const existingAvds = new Set(listResult.stdout.split(`
182969
183129
  `).map((s3) => s3.trim()).filter(Boolean));
182970
183130
  for (const spec of specs) {
@@ -182973,7 +183133,7 @@ async function installAvds(ctx, specs, deps) {
182973
183133
  continue;
182974
183134
  }
182975
183135
  ctx.ui.step(installMessages.android.creatingAvd(spec.avdName));
182976
- const result = await deps.spawn(deps.avdManagerPath, [
183136
+ const result = await deps.spawn(avdManagerPath, [
182977
183137
  "create",
182978
183138
  "avd",
182979
183139
  "-n",
@@ -182983,7 +183143,7 @@ async function installAvds(ctx, specs, deps) {
182983
183143
  "-d",
182984
183144
  spec.deviceId,
182985
183145
  "--force"
182986
- ]);
183146
+ ], { platform: deps.platform });
182987
183147
  if (result.exitCode !== 0) {
182988
183148
  const detail = (result.stderr || result.stdout).split(`
182989
183149
  `).map((l2) => l2.trim()).find(Boolean) ?? `exit code ${result.exitCode}`;
@@ -182993,18 +183153,20 @@ async function installAvds(ctx, specs, deps) {
182993
183153
  }
182994
183154
 
182995
183155
  // src/domains/install/android/driver.ts
182996
- import { join as join39 } from "node:path";
182997
- var appiumEnv = {
182998
- APPIUM_HOME: join39(envPaths("qawolf").data, "appium")
182999
- };
183000
183156
  async function installUiautomator2Driver(ctx, deps) {
183001
- const listResult = await deps.spawn(deps.appiumBinPath, ["driver", "list", "--installed"], { env: appiumEnv });
183157
+ const appiumEnv = { APPIUM_HOME: getAppiumHome() };
183158
+ const candidates = appiumCliCandidates(deps.envDir, deps.platform);
183159
+ const appiumBinPath = candidates.find(deps.checkExists);
183160
+ if (!appiumBinPath) {
183161
+ throw new Error(installMessages.android.appiumNotFound(candidates[0] ?? deps.envDir));
183162
+ }
183163
+ const listResult = await deps.spawn(appiumBinPath, ["driver", "list", "--installed"], { env: appiumEnv, platform: deps.platform });
183002
183164
  if ((listResult.stdout + listResult.stderr).includes("uiautomator2")) {
183003
183165
  ctx.ui.info(installMessages.android.uiautomator2AlreadyInstalled);
183004
183166
  return;
183005
183167
  }
183006
183168
  ctx.ui.step(installMessages.android.installingUiautomator2);
183007
- const installResult = await deps.spawn(deps.appiumBinPath, ["driver", "install", `uiautomator2@${appiumUiautomator2DriverVersion}`], { env: appiumEnv });
183169
+ const installResult = await deps.spawn(appiumBinPath, ["driver", "install", `uiautomator2@${appiumUiautomator2DriverVersion}`], { env: appiumEnv, platform: deps.platform });
183008
183170
  if (installResult.exitCode !== 0) {
183009
183171
  const output = installResult.stderr + installResult.stdout;
183010
183172
  if (output.includes("already installed")) {
@@ -183029,15 +183191,15 @@ async function installAndroid(ctx, pattern, deps) {
183029
183191
  const specs = buildAvdSpecs(targets, deps.arch);
183030
183192
  await installAvds(ctx, specs, {
183031
183193
  spawn: deps.spawn,
183032
- sdkManagerPath: deps.sdkManagerPath,
183033
- avdManagerPath: deps.avdManagerPath,
183034
183194
  androidHome: deps.androidHome,
183035
- checkExists: deps.checkExists
183195
+ checkExists: deps.checkExists,
183196
+ platform: deps.platform
183036
183197
  });
183037
- const depsRoot = await deps.resolveDepsRoot(files);
183038
183198
  await installUiautomator2Driver(ctx, {
183039
183199
  spawn: deps.spawn,
183040
- appiumBinPath: deps.resolveAppiumBin(depsRoot)
183200
+ envDir: await deps.resolveDepsRoot(files),
183201
+ platform: deps.platform,
183202
+ checkExists: deps.checkExists
183041
183203
  });
183042
183204
  ctx.ui.success(`Android install complete. ${pluralize(specs.length, "unique AVD")} ready.`);
183043
183205
  }
@@ -183071,8 +183233,8 @@ function buildAvdSpecs(targets, arch) {
183071
183233
 
183072
183234
  // src/commands/install/android.ts
183073
183235
  async function handleInstallAndroid(ctx, pattern, envDir) {
183074
- const androidHome2 = process.env["ANDROID_HOME"] ?? process.env["ANDROID_SDK_ROOT"];
183075
- if (!androidHome2) {
183236
+ const androidHome = androidSdkHome();
183237
+ if (!androidHome) {
183076
183238
  return { error: installMessages.androidSdkNotFound };
183077
183239
  }
183078
183240
  const { fs: fs9 } = ctx;
@@ -183080,14 +183242,12 @@ async function handleInstallAndroid(ctx, pattern, envDir) {
183080
183242
  cwd: process.cwd(),
183081
183243
  spawn: defaultSpawn,
183082
183244
  arch: process.arch,
183083
- androidHome: androidHome2,
183245
+ androidHome,
183084
183246
  checkExists: (path9) => fs9.existsSync(path9),
183085
- sdkManagerPath: join40(androidHome2, "cmdline-tools", "latest", "bin", "sdkmanager"),
183086
- avdManagerPath: join40(androidHome2, "cmdline-tools", "latest", "bin", "avdmanager"),
183247
+ platform: process.platform,
183087
183248
  expandPatterns: (patterns, cwd) => expandPatterns(patterns, cwd ?? process.cwd(), undefined, fs9),
183088
183249
  peekFlowMeta: makePeekFlowMeta(fs9),
183089
- resolveDepsRoot: async (files) => envDir ?? (await resolveDepsRoot({ files, fs: fs9 })).depsRoot,
183090
- resolveAppiumBin
183250
+ resolveDepsRoot: async (files) => envDir ?? (await resolveDepsRoot({ files, fs: fs9, platform: process.platform })).depsRoot
183091
183251
  });
183092
183252
  }
183093
183253
 
@@ -183103,10 +183263,8 @@ async function handleInstallBrowsers(ctx, pattern, options) {
183103
183263
  browserDeps,
183104
183264
  expandPatterns: (patterns, dir) => expandPatterns(patterns, dir ?? cwd, undefined, fs9),
183105
183265
  peekFlowMeta: makePeekFlowMeta(fs9),
183106
- resolvePlaywrightCliPath: async (files) => {
183107
- const depsRoot = envDir ?? (await resolveDepsRoot({ files, fs: fs9 })).depsRoot;
183108
- return resolvePlaywrightCli(depsRoot, process.platform);
183109
- }
183266
+ checkExists: (path9) => fs9.existsSync(path9),
183267
+ resolveDepsRoot: async (files) => envDir ?? (await resolveDepsRoot({ files, fs: fs9, platform: process.platform })).depsRoot
183110
183268
  });
183111
183269
  }
183112
183270
 
@@ -183171,7 +183329,7 @@ async function handleInstall(ctx, pattern, options) {
183171
183329
  cwd: process.cwd(),
183172
183330
  expandPatterns: (patterns, cwd) => expandPatterns(patterns, cwd ?? process.cwd(), undefined, fs9),
183173
183331
  peekFlowMeta: makePeekFlowMeta(fs9),
183174
- resolveDepsRoot: (files) => resolveDepsRoot({ files, fs: fs9 }),
183332
+ resolveDepsRoot: (files) => resolveDepsRoot({ files, fs: fs9, platform: process.platform }),
183175
183333
  installBrowsers: (innerCtx, innerPattern, envDir) => handleInstallBrowsers(innerCtx, innerPattern, {
183176
183334
  envDir,
183177
183335
  browserDeps: options.browserDeps
@@ -183507,7 +183665,7 @@ async function handlePublicApiCommand(ctx, spec, options) {
183507
183665
  const parsed = spec.contract.input.safeParse(assembled.input);
183508
183666
  if (!parsed.success)
183509
183667
  return { error: exports_external.prettifyError(parsed.error) };
183510
- const result = await ctx.platform.callPublicApi(spec.contract, parsed.data);
183668
+ const result = await ctx.platformClient.callPublicApi(spec.contract, parsed.data);
183511
183669
  if (!result.ok)
183512
183670
  return { error: result.error };
183513
183671
  ctx.ui.output(result.value, renderHuman(result.value));
@@ -183587,4 +183745,4 @@ createProgram({ signals }).parseAsync().catch(() => {
183587
183745
  process.exitCode = 1;
183588
183746
  }).finally(() => flushAndExit(typeof process.exitCode === "number" ? process.exitCode : 0));
183589
183747
 
183590
- //# debugId=F2AE77060354D60864756E2164756E21
183748
+ //# debugId=393CFE300FA7E35C64756E2164756E21