main
  1"use strict";
  2const {
  3  __pow,
  4  __export,
  5  __reExport,
  6  __toESM,
  7  __toCommonJS,
  8  __async,
  9  __forAwait
 10} = require('./esblib.cjs');
 11
 12
 13// src/index.ts
 14var index_exports = {};
 15__export(index_exports, {
 16  MAML: () => import_vendor2.MAML,
 17  VERSION: () => VERSION,
 18  YAML: () => import_vendor2.YAML,
 19  argv: () => argv,
 20  dotenv: () => import_vendor2.dotenv,
 21  echo: () => echo,
 22  expBackoff: () => expBackoff,
 23  fetch: () => fetch,
 24  fs: () => import_vendor2.fs,
 25  glob: () => import_vendor2.glob,
 26  globby: () => import_vendor2.glob,
 27  minimist: () => import_vendor2.minimist,
 28  nothrow: () => nothrow,
 29  parseArgv: () => parseArgv,
 30  question: () => question,
 31  quiet: () => quiet,
 32  retry: () => retry,
 33  sleep: () => sleep,
 34  spinner: () => spinner,
 35  stdin: () => stdin,
 36  tempdir: () => tempdir,
 37  tempfile: () => tempfile,
 38  tmpdir: () => tempdir,
 39  tmpfile: () => tempfile,
 40  updateArgv: () => updateArgv,
 41  version: () => version,
 42  versions: () => versions
 43});
 44module.exports = __toCommonJS(index_exports);
 45var import_core2 = require("./core.cjs");
 46
 47// src/goods.ts
 48var import_node_buffer = require("buffer");
 49var import_node_process = __toESM(require("process"), 1);
 50var import_node_readline = require("readline");
 51var import_node_stream = require("stream");
 52var import_core = require("./core.cjs");
 53var import_util = require("./util.cjs");
 54var import_vendor = require("./vendor.cjs");
 55
 56// src/versions.ts
 57var versions = {
 58  zx: "8.9.0",
 59  chalk: "5.6.2",
 60  depseek: "0.4.3",
 61  dotenv: "0.2.3",
 62  fetch: "1.6.7",
 63  fs: "11.3.2",
 64  glob: "16.0.0",
 65  minimist: "1.2.8",
 66  ps: "1.0.0",
 67  which: "6.0.0",
 68  yaml: "2.8.1"
 69};
 70
 71// src/goods.ts
 72function tempdir(prefix = `zx-${(0, import_util.randomId)()}`, mode) {
 73  const dirpath = import_core.path.join(import_core.os.tmpdir(), prefix);
 74  import_vendor.fs.mkdirSync(dirpath, { recursive: true, mode });
 75  return dirpath;
 76}
 77function tempfile(name, data, mode) {
 78  const filepath = name ? import_core.path.join(tempdir(), name) : import_core.path.join(import_core.os.tmpdir(), `zx-${(0, import_util.randomId)()}`);
 79  if (data === void 0) import_vendor.fs.closeSync(import_vendor.fs.openSync(filepath, "w", mode));
 80  else import_vendor.fs.writeFileSync(filepath, data, { mode });
 81  return filepath;
 82}
 83var parseArgv = (args = import_node_process.default.argv.slice(2), opts = {}, defs = {}) => Object.entries((0, import_vendor.minimist)(args, opts)).reduce(
 84  (m, [k, v]) => {
 85    const kTrans = opts.camelCase ? import_util.toCamelCase : import_util.identity;
 86    const vTrans = opts.parseBoolean ? import_util.parseBool : import_util.identity;
 87    const [_k, _v] = k === "--" || k === "_" ? [k, v] : [kTrans(k), vTrans(v)];
 88    m[_k] = _v;
 89    return m;
 90  },
 91  defs
 92);
 93function updateArgv(args, opts) {
 94  for (const k in argv) delete argv[k];
 95  parseArgv(args, opts, argv);
 96}
 97var argv = parseArgv();
 98function sleep(duration) {
 99  return new Promise((resolve) => {
100    setTimeout(resolve, (0, import_util.parseDuration)(duration));
101  });
102}
103var responseToReadable = (response, rs) => {
104  var _a;
105  const reader = (_a = response.body) == null ? void 0 : _a.getReader();
106  if (!reader) {
107    rs.push(null);
108    return rs;
109  }
110  rs._read = () => __async(null, null, function* () {
111    const result = yield reader.read();
112    rs.push(result.done ? null : import_node_buffer.Buffer.from(result.value));
113  });
114  return rs;
115};
116function fetch(url, init) {
117  import_core.$.log({ kind: "fetch", url, init, verbose: !import_core.$.quiet && import_core.$.verbose });
118  const p = (0, import_vendor.nodeFetch)(url, init);
119  return Object.assign(p, {
120    pipe(dest, ...args) {
121      const rs = new import_node_stream.Readable();
122      const _dest = (0, import_util.isStringLiteral)(dest, ...args) ? (0, import_core.$)({
123        halt: true,
124        signal: init == null ? void 0 : init.signal
125      })(dest, ...args) : dest;
126      p.then(
127        (r) => {
128          var _a;
129          return responseToReadable(r, rs).pipe((_a = _dest.run) == null ? void 0 : _a.call(_dest));
130        },
131        (err) => {
132          var _a;
133          return (_a = _dest.abort) == null ? void 0 : _a.call(_dest, err);
134        }
135      );
136      return _dest;
137    }
138  });
139}
140function echo(pieces, ...args) {
141  const msg = (0, import_util.isStringLiteral)(pieces, ...args) ? args.map((a, i) => pieces[i] + stringify(a)).join("") + (0, import_util.getLast)(pieces) : [pieces, ...args].map(stringify).join(" ");
142  console.log(msg);
143}
144function stringify(arg) {
145  return arg instanceof import_core.ProcessOutput ? arg.toString().trimEnd() : `${arg}`;
146}
147function question(_0) {
148  return __async(this, arguments, function* (query, {
149    choices,
150    input = import_node_process.default.stdin,
151    output = import_node_process.default.stdout
152  } = {}) {
153    const completer = Array.isArray(choices) ? (line) => {
154      const hits = choices.filter((c) => c.startsWith(line));
155      return [hits.length ? hits : choices, line];
156    } : void 0;
157    const rl = (0, import_node_readline.createInterface)({
158      input,
159      output,
160      terminal: true,
161      completer
162    });
163    return new Promise(
164      (resolve) => rl.question(query != null ? query : "", (answer) => {
165        rl.close();
166        resolve(answer);
167      })
168    );
169  });
170}
171function stdin() {
172  return __async(this, arguments, function* (stream = import_node_process.default.stdin) {
173    let buf = "";
174    try {
175      for (var iter = __forAwait(stream.setEncoding("utf8")), more, temp, error; more = !(temp = yield iter.next()).done; more = false) {
176        const chunk = temp.value;
177        buf += chunk;
178      }
179    } catch (temp) {
180      error = [temp];
181    } finally {
182      try {
183        more && (temp = iter.return) && (yield temp.call(iter));
184      } finally {
185        if (error)
186          throw error[0];
187      }
188    }
189    return buf;
190  });
191}
192function retry(count, d, cb) {
193  return __async(this, null, function* () {
194    if (typeof d === "function") return retry(count, 0, d);
195    if (!cb) throw new import_core.Fail("Callback is required for retry");
196    const total = count;
197    const gen = typeof d === "object" ? d : (function* (d2) {
198      while (true) yield d2;
199    })((0, import_util.parseDuration)(d));
200    let attempt = 0;
201    let lastErr;
202    while (count-- > 0) {
203      attempt++;
204      try {
205        return yield cb();
206      } catch (err) {
207        lastErr = err;
208        const delay = gen.next().value;
209        import_core.$.log({
210          kind: "retry",
211          total,
212          attempt,
213          delay,
214          exception: err,
215          verbose: !import_core.$.quiet && import_core.$.verbose,
216          error: `FAIL Attempt: ${attempt}/${total}, next: ${delay}`
217          // legacy
218        });
219        if (delay > 0) yield sleep(delay);
220      }
221    }
222    throw lastErr;
223  });
224}
225function* expBackoff(max = "60s", delay = "100ms") {
226  const maxMs = (0, import_util.parseDuration)(max);
227  const randMs = (0, import_util.parseDuration)(delay);
228  let n = 0;
229  while (true) {
230    yield Math.min(randMs * __pow(2, n++), maxMs);
231  }
232}
233function spinner(title, callback) {
234  return __async(this, null, function* () {
235    if (typeof title === "function") return spinner("", title);
236    if (import_core.$.quiet || import_node_process.default.env.CI) return callback();
237    let i = 0;
238    const stream = import_core.$.log.output || import_node_process.default.stderr;
239    const spin = () => stream.write(`  ${"\u280B\u2819\u2839\u2838\u283C\u2834\u2826\u2827\u2807\u280F"[i++ % 10]} ${title}\r`);
240    return (0, import_core.within)(() => __async(null, null, function* () {
241      import_core.$.verbose = false;
242      const id = setInterval(spin, 100);
243      try {
244        return yield callback();
245      } finally {
246        clearInterval(id);
247        stream.write(" ".repeat((import_node_process.default.stdout.columns || 1) - 1) + "\r");
248      }
249    }));
250  });
251}
252
253// src/index.ts
254__reExport(index_exports, require("./core.cjs"), module.exports);
255var import_vendor2 = require("./vendor.cjs");
256import_core2.bus.lock();
257var VERSION = versions.zx || "0.0.0";
258var version = VERSION;
259function nothrow(promise) {
260  return promise.nothrow();
261}
262function quiet(promise) {
263  return promise.quiet();
264}
265/* c8 ignore next 100 */
266// Annotate the CommonJS export names for ESM import in node:
2670 && (module.exports = {
268  MAML,
269  VERSION,
270  YAML,
271  argv,
272  dotenv,
273  echo,
274  expBackoff,
275  fetch,
276  fs,
277  glob,
278  globby,
279  minimist,
280  nothrow,
281  parseArgv,
282  question,
283  quiet,
284  retry,
285  sleep,
286  spinner,
287  stdin,
288  tempdir,
289  tempfile,
290  tmpdir,
291  tmpfile,
292  updateArgv,
293  version,
294  versions,
295  ...require("./core.cjs")
296});