@arcote.tech/arc-cli 0.5.1 → 0.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -8974,6 +8974,134 @@ var require_chokidar = __commonJS((exports) => {
8974
8974
  exports.watch = watch;
8975
8975
  });
8976
8976
 
8977
+ // ../../node_modules/.bun/sisteransi@1.0.5/node_modules/sisteransi/src/index.js
8978
+ var require_src = __commonJS((exports, module) => {
8979
+ var ESC2 = "\x1B";
8980
+ var CSI = `${ESC2}[`;
8981
+ var beep2 = "\x07";
8982
+ var cursor = {
8983
+ to(x, y) {
8984
+ if (!y)
8985
+ return `${CSI}${x + 1}G`;
8986
+ return `${CSI}${y + 1};${x + 1}H`;
8987
+ },
8988
+ move(x, y) {
8989
+ let ret = "";
8990
+ if (x < 0)
8991
+ ret += `${CSI}${-x}D`;
8992
+ else if (x > 0)
8993
+ ret += `${CSI}${x}C`;
8994
+ if (y < 0)
8995
+ ret += `${CSI}${-y}A`;
8996
+ else if (y > 0)
8997
+ ret += `${CSI}${y}B`;
8998
+ return ret;
8999
+ },
9000
+ up: (count = 1) => `${CSI}${count}A`,
9001
+ down: (count = 1) => `${CSI}${count}B`,
9002
+ forward: (count = 1) => `${CSI}${count}C`,
9003
+ backward: (count = 1) => `${CSI}${count}D`,
9004
+ nextLine: (count = 1) => `${CSI}E`.repeat(count),
9005
+ prevLine: (count = 1) => `${CSI}F`.repeat(count),
9006
+ left: `${CSI}G`,
9007
+ hide: `${CSI}?25l`,
9008
+ show: `${CSI}?25h`,
9009
+ save: `${ESC2}7`,
9010
+ restore: `${ESC2}8`
9011
+ };
9012
+ var scroll = {
9013
+ up: (count = 1) => `${CSI}S`.repeat(count),
9014
+ down: (count = 1) => `${CSI}T`.repeat(count)
9015
+ };
9016
+ var erase = {
9017
+ screen: `${CSI}2J`,
9018
+ up: (count = 1) => `${CSI}1J`.repeat(count),
9019
+ down: (count = 1) => `${CSI}J`.repeat(count),
9020
+ line: `${CSI}2K`,
9021
+ lineEnd: `${CSI}K`,
9022
+ lineStart: `${CSI}1K`,
9023
+ lines(count) {
9024
+ let clear = "";
9025
+ for (let i = 0;i < count; i++)
9026
+ clear += this.line + (i < count - 1 ? cursor.up() : "");
9027
+ if (count)
9028
+ clear += cursor.left;
9029
+ return clear;
9030
+ }
9031
+ };
9032
+ module.exports = { cursor, scroll, erase, beep: beep2 };
9033
+ });
9034
+
9035
+ // ../../node_modules/.bun/picocolors@1.1.1/node_modules/picocolors/picocolors.js
9036
+ var require_picocolors = __commonJS((exports, module) => {
9037
+ var p = process || {};
9038
+ var argv2 = p.argv || [];
9039
+ var env2 = p.env || {};
9040
+ var isColorSupported2 = !(!!env2.NO_COLOR || argv2.includes("--no-color")) && (!!env2.FORCE_COLOR || argv2.includes("--color") || p.platform === "win32" || (p.stdout || {}).isTTY && env2.TERM !== "dumb" || !!env2.CI);
9041
+ var formatter = (open, close, replace = open) => (input) => {
9042
+ let string = "" + input, index = string.indexOf(close, open.length);
9043
+ return ~index ? open + replaceClose2(string, close, replace, index) + close : open + string + close;
9044
+ };
9045
+ var replaceClose2 = (string, close, replace, index) => {
9046
+ let result = "", cursor = 0;
9047
+ do {
9048
+ result += string.substring(cursor, index) + replace;
9049
+ cursor = index + close.length;
9050
+ index = string.indexOf(close, cursor);
9051
+ } while (~index);
9052
+ return result + string.substring(cursor);
9053
+ };
9054
+ var createColors2 = (enabled = isColorSupported2) => {
9055
+ let f = enabled ? formatter : () => String;
9056
+ return {
9057
+ isColorSupported: enabled,
9058
+ reset: f("\x1B[0m", "\x1B[0m"),
9059
+ bold: f("\x1B[1m", "\x1B[22m", "\x1B[22m\x1B[1m"),
9060
+ dim: f("\x1B[2m", "\x1B[22m", "\x1B[22m\x1B[2m"),
9061
+ italic: f("\x1B[3m", "\x1B[23m"),
9062
+ underline: f("\x1B[4m", "\x1B[24m"),
9063
+ inverse: f("\x1B[7m", "\x1B[27m"),
9064
+ hidden: f("\x1B[8m", "\x1B[28m"),
9065
+ strikethrough: f("\x1B[9m", "\x1B[29m"),
9066
+ black: f("\x1B[30m", "\x1B[39m"),
9067
+ red: f("\x1B[31m", "\x1B[39m"),
9068
+ green: f("\x1B[32m", "\x1B[39m"),
9069
+ yellow: f("\x1B[33m", "\x1B[39m"),
9070
+ blue: f("\x1B[34m", "\x1B[39m"),
9071
+ magenta: f("\x1B[35m", "\x1B[39m"),
9072
+ cyan: f("\x1B[36m", "\x1B[39m"),
9073
+ white: f("\x1B[37m", "\x1B[39m"),
9074
+ gray: f("\x1B[90m", "\x1B[39m"),
9075
+ bgBlack: f("\x1B[40m", "\x1B[49m"),
9076
+ bgRed: f("\x1B[41m", "\x1B[49m"),
9077
+ bgGreen: f("\x1B[42m", "\x1B[49m"),
9078
+ bgYellow: f("\x1B[43m", "\x1B[49m"),
9079
+ bgBlue: f("\x1B[44m", "\x1B[49m"),
9080
+ bgMagenta: f("\x1B[45m", "\x1B[49m"),
9081
+ bgCyan: f("\x1B[46m", "\x1B[49m"),
9082
+ bgWhite: f("\x1B[47m", "\x1B[49m"),
9083
+ blackBright: f("\x1B[90m", "\x1B[39m"),
9084
+ redBright: f("\x1B[91m", "\x1B[39m"),
9085
+ greenBright: f("\x1B[92m", "\x1B[39m"),
9086
+ yellowBright: f("\x1B[93m", "\x1B[39m"),
9087
+ blueBright: f("\x1B[94m", "\x1B[39m"),
9088
+ magentaBright: f("\x1B[95m", "\x1B[39m"),
9089
+ cyanBright: f("\x1B[96m", "\x1B[39m"),
9090
+ whiteBright: f("\x1B[97m", "\x1B[39m"),
9091
+ bgBlackBright: f("\x1B[100m", "\x1B[49m"),
9092
+ bgRedBright: f("\x1B[101m", "\x1B[49m"),
9093
+ bgGreenBright: f("\x1B[102m", "\x1B[49m"),
9094
+ bgYellowBright: f("\x1B[103m", "\x1B[49m"),
9095
+ bgBlueBright: f("\x1B[104m", "\x1B[49m"),
9096
+ bgMagentaBright: f("\x1B[105m", "\x1B[49m"),
9097
+ bgCyanBright: f("\x1B[106m", "\x1B[49m"),
9098
+ bgWhiteBright: f("\x1B[107m", "\x1B[49m")
9099
+ };
9100
+ };
9101
+ module.exports = createColors2();
9102
+ module.exports.createColors = createColors2;
9103
+ });
9104
+
8977
9105
  // ../../node_modules/.bun/safe-buffer@5.2.1/node_modules/safe-buffer/index.js
8978
9106
  var require_safe_buffer = __commonJS((exports, module) => {
8979
9107
  /*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
@@ -9240,18 +9368,18 @@ var require_buffer_equal_constant_time = __commonJS((exports, module) => {
9240
9368
  var Buffer2 = __require("buffer").Buffer;
9241
9369
  var SlowBuffer = __require("buffer").SlowBuffer;
9242
9370
  module.exports = bufferEq;
9243
- function bufferEq(a, b) {
9244
- if (!Buffer2.isBuffer(a) || !Buffer2.isBuffer(b)) {
9371
+ function bufferEq(a2, b2) {
9372
+ if (!Buffer2.isBuffer(a2) || !Buffer2.isBuffer(b2)) {
9245
9373
  return false;
9246
9374
  }
9247
- if (a.length !== b.length) {
9375
+ if (a2.length !== b2.length) {
9248
9376
  return false;
9249
9377
  }
9250
- var c = 0;
9251
- for (var i = 0;i < a.length; i++) {
9252
- c |= a[i] ^ b[i];
9378
+ var c2 = 0;
9379
+ for (var i = 0;i < a2.length; i++) {
9380
+ c2 |= a2[i] ^ b2[i];
9253
9381
  }
9254
- return c === 0;
9382
+ return c2 === 0;
9255
9383
  }
9256
9384
  bufferEq.install = function() {
9257
9385
  Buffer2.prototype.equal = SlowBuffer.prototype.equal = function equal(that) {
@@ -9374,16 +9502,16 @@ var require_jwa = __commonJS((exports, module) => {
9374
9502
  };
9375
9503
  }
9376
9504
  var bufferEqual;
9377
- var timingSafeEqual = "timingSafeEqual" in crypto2 ? function timingSafeEqual2(a, b) {
9378
- if (a.byteLength !== b.byteLength) {
9505
+ var timingSafeEqual = "timingSafeEqual" in crypto2 ? function timingSafeEqual2(a2, b2) {
9506
+ if (a2.byteLength !== b2.byteLength) {
9379
9507
  return false;
9380
9508
  }
9381
- return crypto2.timingSafeEqual(a, b);
9382
- } : function timingSafeEqual2(a, b) {
9509
+ return crypto2.timingSafeEqual(a2, b2);
9510
+ } : function timingSafeEqual2(a2, b2) {
9383
9511
  if (!bufferEqual) {
9384
9512
  bufferEqual = require_buffer_equal_constant_time();
9385
9513
  }
9386
- return bufferEqual(a, b);
9514
+ return bufferEqual(a2, b2);
9387
9515
  };
9388
9516
  function createHmacVerifier(bits) {
9389
9517
  return function verify(thing, signature, secret) {
@@ -9565,9 +9693,9 @@ var require_sign_stream = __commonJS((exports, module) => {
9565
9693
  this.emit("end");
9566
9694
  this.readable = false;
9567
9695
  return signature;
9568
- } catch (e) {
9696
+ } catch (e2) {
9569
9697
  this.readable = false;
9570
- this.emit("error", e);
9698
+ this.emit("error", e2);
9571
9699
  this.emit("close");
9572
9700
  }
9573
9701
  };
@@ -9584,15 +9712,15 @@ var require_verify_stream = __commonJS((exports, module) => {
9584
9712
  var toString = require_tostring();
9585
9713
  var util = __require("util");
9586
9714
  var JWS_REGEX = /^[a-zA-Z0-9\-_]+?\.[a-zA-Z0-9\-_]+?\.([a-zA-Z0-9\-_]+)?$/;
9587
- function isObject(thing) {
9715
+ function isObject2(thing) {
9588
9716
  return Object.prototype.toString.call(thing) === "[object Object]";
9589
9717
  }
9590
9718
  function safeJsonParse(thing) {
9591
- if (isObject(thing))
9719
+ if (isObject2(thing))
9592
9720
  return thing;
9593
9721
  try {
9594
9722
  return JSON.parse(thing);
9595
- } catch (e) {
9723
+ } catch (e2) {
9596
9724
  return;
9597
9725
  }
9598
9726
  }
@@ -9616,9 +9744,9 @@ var require_verify_stream = __commonJS((exports, module) => {
9616
9744
  }
9617
9745
  function jwsVerify(jwsSig, algorithm, secretOrKey) {
9618
9746
  if (!algorithm) {
9619
- var err2 = new Error("Missing algorithm parameter for jws.verify");
9620
- err2.code = "MISSING_ALGORITHM";
9621
- throw err2;
9747
+ var err3 = new Error("Missing algorithm parameter for jws.verify");
9748
+ err3.code = "MISSING_ALGORITHM";
9749
+ throw err3;
9622
9750
  }
9623
9751
  jwsSig = toString(jwsSig);
9624
9752
  var signature = signatureFromJWS(jwsSig);
@@ -9676,9 +9804,9 @@ var require_verify_stream = __commonJS((exports, module) => {
9676
9804
  this.emit("end");
9677
9805
  this.readable = false;
9678
9806
  return valid;
9679
- } catch (e) {
9807
+ } catch (e2) {
9680
9808
  this.readable = false;
9681
- this.emit("error", e);
9809
+ this.emit("error", e2);
9682
9810
  this.emit("close");
9683
9811
  }
9684
9812
  };
@@ -9735,7 +9863,7 @@ var require_decode = __commonJS((exports, module) => {
9735
9863
  if (obj !== null && typeof obj === "object") {
9736
9864
  payload = obj;
9737
9865
  }
9738
- } catch (e) {}
9866
+ } catch (e2) {}
9739
9867
  }
9740
9868
  if (options.complete === true) {
9741
9869
  return {
@@ -9794,11 +9922,11 @@ var require_TokenExpiredError = __commonJS((exports, module) => {
9794
9922
  // ../../node_modules/.bun/ms@2.1.3/node_modules/ms/index.js
9795
9923
  var require_ms = __commonJS((exports, module) => {
9796
9924
  var s = 1000;
9797
- var m = s * 60;
9798
- var h = m * 60;
9799
- var d = h * 24;
9800
- var w = d * 7;
9801
- var y = d * 365.25;
9925
+ var m3 = s * 60;
9926
+ var h2 = m3 * 60;
9927
+ var d2 = h2 * 24;
9928
+ var w2 = d2 * 7;
9929
+ var y3 = d2 * 365.25;
9802
9930
  module.exports = function(val, options) {
9803
9931
  options = options || {};
9804
9932
  var type = typeof val;
@@ -9826,27 +9954,27 @@ var require_ms = __commonJS((exports, module) => {
9826
9954
  case "yrs":
9827
9955
  case "yr":
9828
9956
  case "y":
9829
- return n * y;
9957
+ return n * y3;
9830
9958
  case "weeks":
9831
9959
  case "week":
9832
9960
  case "w":
9833
- return n * w;
9961
+ return n * w2;
9834
9962
  case "days":
9835
9963
  case "day":
9836
9964
  case "d":
9837
- return n * d;
9965
+ return n * d2;
9838
9966
  case "hours":
9839
9967
  case "hour":
9840
9968
  case "hrs":
9841
9969
  case "hr":
9842
9970
  case "h":
9843
- return n * h;
9971
+ return n * h2;
9844
9972
  case "minutes":
9845
9973
  case "minute":
9846
9974
  case "mins":
9847
9975
  case "min":
9848
9976
  case "m":
9849
- return n * m;
9977
+ return n * m3;
9850
9978
  case "seconds":
9851
9979
  case "second":
9852
9980
  case "secs":
@@ -9865,14 +9993,14 @@ var require_ms = __commonJS((exports, module) => {
9865
9993
  }
9866
9994
  function fmtShort(ms) {
9867
9995
  var msAbs = Math.abs(ms);
9868
- if (msAbs >= d) {
9869
- return Math.round(ms / d) + "d";
9996
+ if (msAbs >= d2) {
9997
+ return Math.round(ms / d2) + "d";
9870
9998
  }
9871
- if (msAbs >= h) {
9872
- return Math.round(ms / h) + "h";
9999
+ if (msAbs >= h2) {
10000
+ return Math.round(ms / h2) + "h";
9873
10001
  }
9874
- if (msAbs >= m) {
9875
- return Math.round(ms / m) + "m";
10002
+ if (msAbs >= m3) {
10003
+ return Math.round(ms / m3) + "m";
9876
10004
  }
9877
10005
  if (msAbs >= s) {
9878
10006
  return Math.round(ms / s) + "s";
@@ -9881,14 +10009,14 @@ var require_ms = __commonJS((exports, module) => {
9881
10009
  }
9882
10010
  function fmtLong(ms) {
9883
10011
  var msAbs = Math.abs(ms);
9884
- if (msAbs >= d) {
9885
- return plural(ms, msAbs, d, "day");
10012
+ if (msAbs >= d2) {
10013
+ return plural(ms, msAbs, d2, "day");
9886
10014
  }
9887
- if (msAbs >= h) {
9888
- return plural(ms, msAbs, h, "hour");
10015
+ if (msAbs >= h2) {
10016
+ return plural(ms, msAbs, h2, "hour");
9889
10017
  }
9890
- if (msAbs >= m) {
9891
- return plural(ms, msAbs, m, "minute");
10018
+ if (msAbs >= m3) {
10019
+ return plural(ms, msAbs, m3, "minute");
9892
10020
  }
9893
10021
  if (msAbs >= s) {
9894
10022
  return plural(ms, msAbs, s, "second");
@@ -9963,12 +10091,12 @@ var require_re = __commonJS((exports, module) => {
9963
10091
  } = require_constants4();
9964
10092
  var debug = require_debug();
9965
10093
  exports = module.exports = {};
9966
- var re = exports.re = [];
10094
+ var re2 = exports.re = [];
9967
10095
  var safeRe = exports.safeRe = [];
9968
10096
  var src = exports.src = [];
9969
10097
  var safeSrc = exports.safeSrc = [];
9970
10098
  var t = exports.t = {};
9971
- var R = 0;
10099
+ var R3 = 0;
9972
10100
  var LETTERDASHNUMBER = "[a-zA-Z0-9-]";
9973
10101
  var safeRegexReplacements = [
9974
10102
  ["\\s", 1],
@@ -9983,12 +10111,12 @@ var require_re = __commonJS((exports, module) => {
9983
10111
  };
9984
10112
  var createToken = (name, value, isGlobal) => {
9985
10113
  const safe = makeSafeRegex(value);
9986
- const index = R++;
10114
+ const index = R3++;
9987
10115
  debug(name, index, value);
9988
10116
  t[name] = index;
9989
10117
  src[index] = value;
9990
10118
  safeSrc[index] = safe;
9991
- re[index] = new RegExp(value, isGlobal ? "g" : undefined);
10119
+ re2[index] = new RegExp(value, isGlobal ? "g" : undefined);
9992
10120
  safeRe[index] = new RegExp(safe, isGlobal ? "g" : undefined);
9993
10121
  };
9994
10122
  createToken("NUMERICIDENTIFIER", "0|[1-9]\\d*");
@@ -10058,19 +10186,19 @@ var require_parse_options = __commonJS((exports, module) => {
10058
10186
  // ../../node_modules/.bun/semver@7.7.4/node_modules/semver/internal/identifiers.js
10059
10187
  var require_identifiers = __commonJS((exports, module) => {
10060
10188
  var numeric = /^[0-9]+$/;
10061
- var compareIdentifiers = (a, b) => {
10062
- if (typeof a === "number" && typeof b === "number") {
10063
- return a === b ? 0 : a < b ? -1 : 1;
10189
+ var compareIdentifiers = (a2, b2) => {
10190
+ if (typeof a2 === "number" && typeof b2 === "number") {
10191
+ return a2 === b2 ? 0 : a2 < b2 ? -1 : 1;
10064
10192
  }
10065
- const anum = numeric.test(a);
10066
- const bnum = numeric.test(b);
10193
+ const anum = numeric.test(a2);
10194
+ const bnum = numeric.test(b2);
10067
10195
  if (anum && bnum) {
10068
- a = +a;
10069
- b = +b;
10196
+ a2 = +a2;
10197
+ b2 = +b2;
10070
10198
  }
10071
- return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1;
10199
+ return a2 === b2 ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a2 < b2 ? -1 : 1;
10072
10200
  };
10073
- var rcompareIdentifiers = (a, b) => compareIdentifiers(b, a);
10201
+ var rcompareIdentifiers = (a2, b2) => compareIdentifiers(b2, a2);
10074
10202
  module.exports = {
10075
10203
  compareIdentifiers,
10076
10204
  rcompareIdentifiers
@@ -10081,7 +10209,7 @@ var require_identifiers = __commonJS((exports, module) => {
10081
10209
  var require_semver = __commonJS((exports, module) => {
10082
10210
  var debug = require_debug();
10083
10211
  var { MAX_LENGTH, MAX_SAFE_INTEGER } = require_constants4();
10084
- var { safeRe: re, t } = require_re();
10212
+ var { safeRe: re2, t } = require_re();
10085
10213
  var parseOptions = require_parse_options();
10086
10214
  var { compareIdentifiers } = require_identifiers();
10087
10215
 
@@ -10104,14 +10232,14 @@ var require_semver = __commonJS((exports, module) => {
10104
10232
  this.options = options;
10105
10233
  this.loose = !!options.loose;
10106
10234
  this.includePrerelease = !!options.includePrerelease;
10107
- const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]);
10108
- if (!m) {
10235
+ const m3 = version.trim().match(options.loose ? re2[t.LOOSE] : re2[t.FULL]);
10236
+ if (!m3) {
10109
10237
  throw new TypeError(`Invalid Version: ${version}`);
10110
10238
  }
10111
10239
  this.raw = version;
10112
- this.major = +m[1];
10113
- this.minor = +m[2];
10114
- this.patch = +m[3];
10240
+ this.major = +m3[1];
10241
+ this.minor = +m3[2];
10242
+ this.patch = +m3[3];
10115
10243
  if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
10116
10244
  throw new TypeError("Invalid major version");
10117
10245
  }
@@ -10121,10 +10249,10 @@ var require_semver = __commonJS((exports, module) => {
10121
10249
  if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
10122
10250
  throw new TypeError("Invalid patch version");
10123
10251
  }
10124
- if (!m[4]) {
10252
+ if (!m3[4]) {
10125
10253
  this.prerelease = [];
10126
10254
  } else {
10127
- this.prerelease = m[4].split(".").map((id) => {
10255
+ this.prerelease = m3[4].split(".").map((id) => {
10128
10256
  if (/^[0-9]+$/.test(id)) {
10129
10257
  const num = +id;
10130
10258
  if (num >= 0 && num < MAX_SAFE_INTEGER) {
@@ -10134,7 +10262,7 @@ var require_semver = __commonJS((exports, module) => {
10134
10262
  return id;
10135
10263
  });
10136
10264
  }
10137
- this.build = m[5] ? m[5].split(".") : [];
10265
+ this.build = m3[5] ? m3[5].split(".") : [];
10138
10266
  this.format();
10139
10267
  }
10140
10268
  format() {
@@ -10197,19 +10325,19 @@ var require_semver = __commonJS((exports, module) => {
10197
10325
  }
10198
10326
  let i = 0;
10199
10327
  do {
10200
- const a = this.prerelease[i];
10201
- const b = other.prerelease[i];
10202
- debug("prerelease compare", i, a, b);
10203
- if (a === undefined && b === undefined) {
10328
+ const a2 = this.prerelease[i];
10329
+ const b2 = other.prerelease[i];
10330
+ debug("prerelease compare", i, a2, b2);
10331
+ if (a2 === undefined && b2 === undefined) {
10204
10332
  return 0;
10205
- } else if (b === undefined) {
10333
+ } else if (b2 === undefined) {
10206
10334
  return 1;
10207
- } else if (a === undefined) {
10335
+ } else if (a2 === undefined) {
10208
10336
  return -1;
10209
- } else if (a === b) {
10337
+ } else if (a2 === b2) {
10210
10338
  continue;
10211
10339
  } else {
10212
- return compareIdentifiers(a, b);
10340
+ return compareIdentifiers(a2, b2);
10213
10341
  }
10214
10342
  } while (++i);
10215
10343
  }
@@ -10219,19 +10347,19 @@ var require_semver = __commonJS((exports, module) => {
10219
10347
  }
10220
10348
  let i = 0;
10221
10349
  do {
10222
- const a = this.build[i];
10223
- const b = other.build[i];
10224
- debug("build compare", i, a, b);
10225
- if (a === undefined && b === undefined) {
10350
+ const a2 = this.build[i];
10351
+ const b2 = other.build[i];
10352
+ debug("build compare", i, a2, b2);
10353
+ if (a2 === undefined && b2 === undefined) {
10226
10354
  return 0;
10227
- } else if (b === undefined) {
10355
+ } else if (b2 === undefined) {
10228
10356
  return 1;
10229
- } else if (a === undefined) {
10357
+ } else if (a2 === undefined) {
10230
10358
  return -1;
10231
- } else if (a === b) {
10359
+ } else if (a2 === b2) {
10232
10360
  continue;
10233
10361
  } else {
10234
- return compareIdentifiers(a, b);
10362
+ return compareIdentifiers(a2, b2);
10235
10363
  }
10236
10364
  } while (++i);
10237
10365
  }
@@ -10241,7 +10369,7 @@ var require_semver = __commonJS((exports, module) => {
10241
10369
  throw new Error("invalid increment argument: identifier is empty");
10242
10370
  }
10243
10371
  if (identifier) {
10244
- const match2 = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE]);
10372
+ const match2 = `-${identifier}`.match(this.options.loose ? re2[t.PRERELEASELOOSE] : re2[t.PRERELEASE]);
10245
10373
  if (!match2 || match2[1] !== identifier) {
10246
10374
  throw new Error(`invalid identifier: ${identifier}`);
10247
10375
  }
@@ -10369,8 +10497,8 @@ var require_parse3 = __commonJS((exports, module) => {
10369
10497
  var require_valid = __commonJS((exports, module) => {
10370
10498
  var parse = require_parse3();
10371
10499
  var valid = (version, options) => {
10372
- const v = parse(version, options);
10373
- return v ? v.version : null;
10500
+ const v2 = parse(version, options);
10501
+ return v2 ? v2.version : null;
10374
10502
  };
10375
10503
  module.exports = valid;
10376
10504
  });
@@ -10447,21 +10575,21 @@ var require_diff = __commonJS((exports, module) => {
10447
10575
  // ../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/major.js
10448
10576
  var require_major = __commonJS((exports, module) => {
10449
10577
  var SemVer = require_semver();
10450
- var major = (a, loose) => new SemVer(a, loose).major;
10578
+ var major = (a2, loose) => new SemVer(a2, loose).major;
10451
10579
  module.exports = major;
10452
10580
  });
10453
10581
 
10454
10582
  // ../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/minor.js
10455
10583
  var require_minor = __commonJS((exports, module) => {
10456
10584
  var SemVer = require_semver();
10457
- var minor = (a, loose) => new SemVer(a, loose).minor;
10585
+ var minor = (a2, loose) => new SemVer(a2, loose).minor;
10458
10586
  module.exports = minor;
10459
10587
  });
10460
10588
 
10461
10589
  // ../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/patch.js
10462
10590
  var require_patch = __commonJS((exports, module) => {
10463
10591
  var SemVer = require_semver();
10464
- var patch = (a, loose) => new SemVer(a, loose).patch;
10592
+ var patch = (a2, loose) => new SemVer(a2, loose).patch;
10465
10593
  module.exports = patch;
10466
10594
  });
10467
10595
 
@@ -10478,30 +10606,30 @@ var require_prerelease = __commonJS((exports, module) => {
10478
10606
  // ../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/compare.js
10479
10607
  var require_compare = __commonJS((exports, module) => {
10480
10608
  var SemVer = require_semver();
10481
- var compare = (a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose));
10609
+ var compare = (a2, b2, loose) => new SemVer(a2, loose).compare(new SemVer(b2, loose));
10482
10610
  module.exports = compare;
10483
10611
  });
10484
10612
 
10485
10613
  // ../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/rcompare.js
10486
10614
  var require_rcompare = __commonJS((exports, module) => {
10487
10615
  var compare = require_compare();
10488
- var rcompare = (a, b, loose) => compare(b, a, loose);
10616
+ var rcompare = (a2, b2, loose) => compare(b2, a2, loose);
10489
10617
  module.exports = rcompare;
10490
10618
  });
10491
10619
 
10492
10620
  // ../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/compare-loose.js
10493
10621
  var require_compare_loose = __commonJS((exports, module) => {
10494
10622
  var compare = require_compare();
10495
- var compareLoose = (a, b) => compare(a, b, true);
10623
+ var compareLoose = (a2, b2) => compare(a2, b2, true);
10496
10624
  module.exports = compareLoose;
10497
10625
  });
10498
10626
 
10499
10627
  // ../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/compare-build.js
10500
10628
  var require_compare_build = __commonJS((exports, module) => {
10501
10629
  var SemVer = require_semver();
10502
- var compareBuild = (a, b, loose) => {
10503
- const versionA = new SemVer(a, loose);
10504
- const versionB = new SemVer(b, loose);
10630
+ var compareBuild = (a2, b2, loose) => {
10631
+ const versionA = new SemVer(a2, loose);
10632
+ const versionB = new SemVer(b2, loose);
10505
10633
  return versionA.compare(versionB) || versionA.compareBuild(versionB);
10506
10634
  };
10507
10635
  module.exports = compareBuild;
@@ -10510,56 +10638,56 @@ var require_compare_build = __commonJS((exports, module) => {
10510
10638
  // ../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/sort.js
10511
10639
  var require_sort = __commonJS((exports, module) => {
10512
10640
  var compareBuild = require_compare_build();
10513
- var sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose));
10641
+ var sort = (list, loose) => list.sort((a2, b2) => compareBuild(a2, b2, loose));
10514
10642
  module.exports = sort;
10515
10643
  });
10516
10644
 
10517
10645
  // ../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/rsort.js
10518
10646
  var require_rsort = __commonJS((exports, module) => {
10519
10647
  var compareBuild = require_compare_build();
10520
- var rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose));
10648
+ var rsort = (list, loose) => list.sort((a2, b2) => compareBuild(b2, a2, loose));
10521
10649
  module.exports = rsort;
10522
10650
  });
10523
10651
 
10524
10652
  // ../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/gt.js
10525
10653
  var require_gt = __commonJS((exports, module) => {
10526
10654
  var compare = require_compare();
10527
- var gt = (a, b, loose) => compare(a, b, loose) > 0;
10655
+ var gt = (a2, b2, loose) => compare(a2, b2, loose) > 0;
10528
10656
  module.exports = gt;
10529
10657
  });
10530
10658
 
10531
10659
  // ../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/lt.js
10532
10660
  var require_lt = __commonJS((exports, module) => {
10533
10661
  var compare = require_compare();
10534
- var lt = (a, b, loose) => compare(a, b, loose) < 0;
10662
+ var lt = (a2, b2, loose) => compare(a2, b2, loose) < 0;
10535
10663
  module.exports = lt;
10536
10664
  });
10537
10665
 
10538
10666
  // ../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/eq.js
10539
10667
  var require_eq = __commonJS((exports, module) => {
10540
10668
  var compare = require_compare();
10541
- var eq = (a, b, loose) => compare(a, b, loose) === 0;
10669
+ var eq = (a2, b2, loose) => compare(a2, b2, loose) === 0;
10542
10670
  module.exports = eq;
10543
10671
  });
10544
10672
 
10545
10673
  // ../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/neq.js
10546
10674
  var require_neq = __commonJS((exports, module) => {
10547
10675
  var compare = require_compare();
10548
- var neq = (a, b, loose) => compare(a, b, loose) !== 0;
10676
+ var neq = (a2, b2, loose) => compare(a2, b2, loose) !== 0;
10549
10677
  module.exports = neq;
10550
10678
  });
10551
10679
 
10552
10680
  // ../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/gte.js
10553
10681
  var require_gte = __commonJS((exports, module) => {
10554
10682
  var compare = require_compare();
10555
- var gte = (a, b, loose) => compare(a, b, loose) >= 0;
10683
+ var gte = (a2, b2, loose) => compare(a2, b2, loose) >= 0;
10556
10684
  module.exports = gte;
10557
10685
  });
10558
10686
 
10559
10687
  // ../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/lte.js
10560
10688
  var require_lte = __commonJS((exports, module) => {
10561
10689
  var compare = require_compare();
10562
- var lte = (a, b, loose) => compare(a, b, loose) <= 0;
10690
+ var lte = (a2, b2, loose) => compare(a2, b2, loose) <= 0;
10563
10691
  module.exports = lte;
10564
10692
  });
10565
10693
 
@@ -10571,38 +10699,38 @@ var require_cmp = __commonJS((exports, module) => {
10571
10699
  var gte = require_gte();
10572
10700
  var lt = require_lt();
10573
10701
  var lte = require_lte();
10574
- var cmp = (a, op, b, loose) => {
10702
+ var cmp = (a2, op, b2, loose) => {
10575
10703
  switch (op) {
10576
10704
  case "===":
10577
- if (typeof a === "object") {
10578
- a = a.version;
10705
+ if (typeof a2 === "object") {
10706
+ a2 = a2.version;
10579
10707
  }
10580
- if (typeof b === "object") {
10581
- b = b.version;
10708
+ if (typeof b2 === "object") {
10709
+ b2 = b2.version;
10582
10710
  }
10583
- return a === b;
10711
+ return a2 === b2;
10584
10712
  case "!==":
10585
- if (typeof a === "object") {
10586
- a = a.version;
10713
+ if (typeof a2 === "object") {
10714
+ a2 = a2.version;
10587
10715
  }
10588
- if (typeof b === "object") {
10589
- b = b.version;
10716
+ if (typeof b2 === "object") {
10717
+ b2 = b2.version;
10590
10718
  }
10591
- return a !== b;
10719
+ return a2 !== b2;
10592
10720
  case "":
10593
10721
  case "=":
10594
10722
  case "==":
10595
- return eq(a, b, loose);
10723
+ return eq(a2, b2, loose);
10596
10724
  case "!=":
10597
- return neq(a, b, loose);
10725
+ return neq(a2, b2, loose);
10598
10726
  case ">":
10599
- return gt(a, b, loose);
10727
+ return gt(a2, b2, loose);
10600
10728
  case ">=":
10601
- return gte(a, b, loose);
10729
+ return gte(a2, b2, loose);
10602
10730
  case "<":
10603
- return lt(a, b, loose);
10731
+ return lt(a2, b2, loose);
10604
10732
  case "<=":
10605
- return lte(a, b, loose);
10733
+ return lte(a2, b2, loose);
10606
10734
  default:
10607
10735
  throw new TypeError(`Invalid operator: ${op}`);
10608
10736
  }
@@ -10614,7 +10742,7 @@ var require_cmp = __commonJS((exports, module) => {
10614
10742
  var require_coerce = __commonJS((exports, module) => {
10615
10743
  var SemVer = require_semver();
10616
10744
  var parse = require_parse3();
10617
- var { safeRe: re, t } = require_re();
10745
+ var { safeRe: re2, t } = require_re();
10618
10746
  var coerce = (version, options) => {
10619
10747
  if (version instanceof SemVer) {
10620
10748
  return version;
@@ -10628,9 +10756,9 @@ var require_coerce = __commonJS((exports, module) => {
10628
10756
  options = options || {};
10629
10757
  let match2 = null;
10630
10758
  if (!options.rtl) {
10631
- match2 = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE]);
10759
+ match2 = version.match(options.includePrerelease ? re2[t.COERCEFULL] : re2[t.COERCE]);
10632
10760
  } else {
10633
- const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL];
10761
+ const coerceRtlRegex = options.includePrerelease ? re2[t.COERCERTLFULL] : re2[t.COERCERTL];
10634
10762
  let next;
10635
10763
  while ((next = coerceRtlRegex.exec(version)) && (!match2 || match2.index + match2[0].length !== version.length)) {
10636
10764
  if (!match2 || next.index + next[0].length !== match2.index + match2[0].length) {
@@ -10712,19 +10840,19 @@ var require_range = __commonJS((exports, module) => {
10712
10840
  this.loose = !!options.loose;
10713
10841
  this.includePrerelease = !!options.includePrerelease;
10714
10842
  this.raw = range.trim().replace(SPACE_CHARACTERS, " ");
10715
- this.set = this.raw.split("||").map((r) => this.parseRange(r.trim())).filter((c) => c.length);
10843
+ this.set = this.raw.split("||").map((r2) => this.parseRange(r2.trim())).filter((c2) => c2.length);
10716
10844
  if (!this.set.length) {
10717
10845
  throw new TypeError(`Invalid SemVer Range: ${this.raw}`);
10718
10846
  }
10719
10847
  if (this.set.length > 1) {
10720
10848
  const first = this.set[0];
10721
- this.set = this.set.filter((c) => !isNullSet(c[0]));
10849
+ this.set = this.set.filter((c2) => !isNullSet(c2[0]));
10722
10850
  if (this.set.length === 0) {
10723
10851
  this.set = [first];
10724
10852
  } else if (this.set.length > 1) {
10725
- for (const c of this.set) {
10726
- if (c.length === 1 && isAny(c[0])) {
10727
- this.set = [c];
10853
+ for (const c2 of this.set) {
10854
+ if (c2.length === 1 && isAny(c2[0])) {
10855
+ this.set = [c2];
10728
10856
  break;
10729
10857
  }
10730
10858
  }
@@ -10740,11 +10868,11 @@ var require_range = __commonJS((exports, module) => {
10740
10868
  this.formatted += "||";
10741
10869
  }
10742
10870
  const comps = this.set[i];
10743
- for (let k = 0;k < comps.length; k++) {
10744
- if (k > 0) {
10871
+ for (let k3 = 0;k3 < comps.length; k3++) {
10872
+ if (k3 > 0) {
10745
10873
  this.formatted += " ";
10746
10874
  }
10747
- this.formatted += comps[k].toString().trim();
10875
+ this.formatted += comps[k3].toString().trim();
10748
10876
  }
10749
10877
  }
10750
10878
  }
@@ -10764,20 +10892,20 @@ var require_range = __commonJS((exports, module) => {
10764
10892
  return cached;
10765
10893
  }
10766
10894
  const loose = this.options.loose;
10767
- const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE];
10895
+ const hr = loose ? re2[t.HYPHENRANGELOOSE] : re2[t.HYPHENRANGE];
10768
10896
  range = range.replace(hr, hyphenReplace(this.options.includePrerelease));
10769
10897
  debug("hyphen replace", range);
10770
- range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace);
10898
+ range = range.replace(re2[t.COMPARATORTRIM], comparatorTrimReplace);
10771
10899
  debug("comparator trim", range);
10772
- range = range.replace(re[t.TILDETRIM], tildeTrimReplace);
10900
+ range = range.replace(re2[t.TILDETRIM], tildeTrimReplace);
10773
10901
  debug("tilde trim", range);
10774
- range = range.replace(re[t.CARETTRIM], caretTrimReplace);
10902
+ range = range.replace(re2[t.CARETTRIM], caretTrimReplace);
10775
10903
  debug("caret trim", range);
10776
10904
  let rangeList = range.split(" ").map((comp) => parseComparator(comp, this.options)).join(" ").split(/\s+/).map((comp) => replaceGTE0(comp, this.options));
10777
10905
  if (loose) {
10778
10906
  rangeList = rangeList.filter((comp) => {
10779
10907
  debug("loose invalid filter", comp, this.options);
10780
- return !!comp.match(re[t.COMPARATORLOOSE]);
10908
+ return !!comp.match(re2[t.COMPARATORLOOSE]);
10781
10909
  });
10782
10910
  }
10783
10911
  debug("range list", rangeList);
@@ -10837,15 +10965,15 @@ var require_range = __commonJS((exports, module) => {
10837
10965
  var debug = require_debug();
10838
10966
  var SemVer = require_semver();
10839
10967
  var {
10840
- safeRe: re,
10968
+ safeRe: re2,
10841
10969
  t,
10842
10970
  comparatorTrimReplace,
10843
10971
  tildeTrimReplace,
10844
10972
  caretTrimReplace
10845
10973
  } = require_re();
10846
10974
  var { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require_constants4();
10847
- var isNullSet = (c) => c.value === "<0.0.0-0";
10848
- var isAny = (c) => c.value === "";
10975
+ var isNullSet = (c2) => c2.value === "<0.0.0-0";
10976
+ var isAny = (c2) => c2.value === "";
10849
10977
  var isSatisfiable = (comparators, options) => {
10850
10978
  let result = true;
10851
10979
  const remainingComparators = comparators.slice();
@@ -10859,7 +10987,7 @@ var require_range = __commonJS((exports, module) => {
10859
10987
  return result;
10860
10988
  };
10861
10989
  var parseComparator = (comp, options) => {
10862
- comp = comp.replace(re[t.BUILD], "");
10990
+ comp = comp.replace(re2[t.BUILD], "");
10863
10991
  debug("comp", comp, options);
10864
10992
  comp = replaceCarets(comp, options);
10865
10993
  debug("caret", comp);
@@ -10873,70 +11001,70 @@ var require_range = __commonJS((exports, module) => {
10873
11001
  };
10874
11002
  var isX = (id) => !id || id.toLowerCase() === "x" || id === "*";
10875
11003
  var replaceTildes = (comp, options) => {
10876
- return comp.trim().split(/\s+/).map((c) => replaceTilde(c, options)).join(" ");
11004
+ return comp.trim().split(/\s+/).map((c2) => replaceTilde(c2, options)).join(" ");
10877
11005
  };
10878
11006
  var replaceTilde = (comp, options) => {
10879
- const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE];
10880
- return comp.replace(r, (_, M, m, p, pr) => {
10881
- debug("tilde", comp, _, M, m, p, pr);
11007
+ const r2 = options.loose ? re2[t.TILDELOOSE] : re2[t.TILDE];
11008
+ return comp.replace(r2, (_2, M3, m3, p2, pr) => {
11009
+ debug("tilde", comp, _2, M3, m3, p2, pr);
10882
11010
  let ret;
10883
- if (isX(M)) {
11011
+ if (isX(M3)) {
10884
11012
  ret = "";
10885
- } else if (isX(m)) {
10886
- ret = `>=${M}.0.0 <${+M + 1}.0.0-0`;
10887
- } else if (isX(p)) {
10888
- ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`;
11013
+ } else if (isX(m3)) {
11014
+ ret = `>=${M3}.0.0 <${+M3 + 1}.0.0-0`;
11015
+ } else if (isX(p2)) {
11016
+ ret = `>=${M3}.${m3}.0 <${M3}.${+m3 + 1}.0-0`;
10889
11017
  } else if (pr) {
10890
11018
  debug("replaceTilde pr", pr);
10891
- ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;
11019
+ ret = `>=${M3}.${m3}.${p2}-${pr} <${M3}.${+m3 + 1}.0-0`;
10892
11020
  } else {
10893
- ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`;
11021
+ ret = `>=${M3}.${m3}.${p2} <${M3}.${+m3 + 1}.0-0`;
10894
11022
  }
10895
11023
  debug("tilde return", ret);
10896
11024
  return ret;
10897
11025
  });
10898
11026
  };
10899
11027
  var replaceCarets = (comp, options) => {
10900
- return comp.trim().split(/\s+/).map((c) => replaceCaret(c, options)).join(" ");
11028
+ return comp.trim().split(/\s+/).map((c2) => replaceCaret(c2, options)).join(" ");
10901
11029
  };
10902
11030
  var replaceCaret = (comp, options) => {
10903
11031
  debug("caret", comp, options);
10904
- const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET];
10905
- const z = options.includePrerelease ? "-0" : "";
10906
- return comp.replace(r, (_, M, m, p, pr) => {
10907
- debug("caret", comp, _, M, m, p, pr);
11032
+ const r2 = options.loose ? re2[t.CARETLOOSE] : re2[t.CARET];
11033
+ const z2 = options.includePrerelease ? "-0" : "";
11034
+ return comp.replace(r2, (_2, M3, m3, p2, pr) => {
11035
+ debug("caret", comp, _2, M3, m3, p2, pr);
10908
11036
  let ret;
10909
- if (isX(M)) {
11037
+ if (isX(M3)) {
10910
11038
  ret = "";
10911
- } else if (isX(m)) {
10912
- ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`;
10913
- } else if (isX(p)) {
10914
- if (M === "0") {
10915
- ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`;
11039
+ } else if (isX(m3)) {
11040
+ ret = `>=${M3}.0.0${z2} <${+M3 + 1}.0.0-0`;
11041
+ } else if (isX(p2)) {
11042
+ if (M3 === "0") {
11043
+ ret = `>=${M3}.${m3}.0${z2} <${M3}.${+m3 + 1}.0-0`;
10916
11044
  } else {
10917
- ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`;
11045
+ ret = `>=${M3}.${m3}.0${z2} <${+M3 + 1}.0.0-0`;
10918
11046
  }
10919
11047
  } else if (pr) {
10920
11048
  debug("replaceCaret pr", pr);
10921
- if (M === "0") {
10922
- if (m === "0") {
10923
- ret = `>=${M}.${m}.${p}-${pr} <${M}.${m}.${+p + 1}-0`;
11049
+ if (M3 === "0") {
11050
+ if (m3 === "0") {
11051
+ ret = `>=${M3}.${m3}.${p2}-${pr} <${M3}.${m3}.${+p2 + 1}-0`;
10924
11052
  } else {
10925
- ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;
11053
+ ret = `>=${M3}.${m3}.${p2}-${pr} <${M3}.${+m3 + 1}.0-0`;
10926
11054
  }
10927
11055
  } else {
10928
- ret = `>=${M}.${m}.${p}-${pr} <${+M + 1}.0.0-0`;
11056
+ ret = `>=${M3}.${m3}.${p2}-${pr} <${+M3 + 1}.0.0-0`;
10929
11057
  }
10930
11058
  } else {
10931
11059
  debug("no pr");
10932
- if (M === "0") {
10933
- if (m === "0") {
10934
- ret = `>=${M}.${m}.${p}${z} <${M}.${m}.${+p + 1}-0`;
11060
+ if (M3 === "0") {
11061
+ if (m3 === "0") {
11062
+ ret = `>=${M3}.${m3}.${p2}${z2} <${M3}.${m3}.${+p2 + 1}-0`;
10935
11063
  } else {
10936
- ret = `>=${M}.${m}.${p}${z} <${M}.${+m + 1}.0-0`;
11064
+ ret = `>=${M3}.${m3}.${p2}${z2} <${M3}.${+m3 + 1}.0-0`;
10937
11065
  }
10938
11066
  } else {
10939
- ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`;
11067
+ ret = `>=${M3}.${m3}.${p2} <${+M3 + 1}.0.0-0`;
10940
11068
  }
10941
11069
  }
10942
11070
  debug("caret return", ret);
@@ -10945,16 +11073,16 @@ var require_range = __commonJS((exports, module) => {
10945
11073
  };
10946
11074
  var replaceXRanges = (comp, options) => {
10947
11075
  debug("replaceXRanges", comp, options);
10948
- return comp.split(/\s+/).map((c) => replaceXRange(c, options)).join(" ");
11076
+ return comp.split(/\s+/).map((c2) => replaceXRange(c2, options)).join(" ");
10949
11077
  };
10950
11078
  var replaceXRange = (comp, options) => {
10951
11079
  comp = comp.trim();
10952
- const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE];
10953
- return comp.replace(r, (ret, gtlt, M, m, p, pr) => {
10954
- debug("xRange", comp, ret, gtlt, M, m, p, pr);
10955
- const xM = isX(M);
10956
- const xm = xM || isX(m);
10957
- const xp = xm || isX(p);
11080
+ const r2 = options.loose ? re2[t.XRANGELOOSE] : re2[t.XRANGE];
11081
+ return comp.replace(r2, (ret, gtlt, M3, m3, p2, pr) => {
11082
+ debug("xRange", comp, ret, gtlt, M3, m3, p2, pr);
11083
+ const xM = isX(M3);
11084
+ const xm = xM || isX(m3);
11085
+ const xp = xm || isX(p2);
10958
11086
  const anyX = xp;
10959
11087
  if (gtlt === "=" && anyX) {
10960
11088
  gtlt = "";
@@ -10968,35 +11096,35 @@ var require_range = __commonJS((exports, module) => {
10968
11096
  }
10969
11097
  } else if (gtlt && anyX) {
10970
11098
  if (xm) {
10971
- m = 0;
11099
+ m3 = 0;
10972
11100
  }
10973
- p = 0;
11101
+ p2 = 0;
10974
11102
  if (gtlt === ">") {
10975
11103
  gtlt = ">=";
10976
11104
  if (xm) {
10977
- M = +M + 1;
10978
- m = 0;
10979
- p = 0;
11105
+ M3 = +M3 + 1;
11106
+ m3 = 0;
11107
+ p2 = 0;
10980
11108
  } else {
10981
- m = +m + 1;
10982
- p = 0;
11109
+ m3 = +m3 + 1;
11110
+ p2 = 0;
10983
11111
  }
10984
11112
  } else if (gtlt === "<=") {
10985
11113
  gtlt = "<";
10986
11114
  if (xm) {
10987
- M = +M + 1;
11115
+ M3 = +M3 + 1;
10988
11116
  } else {
10989
- m = +m + 1;
11117
+ m3 = +m3 + 1;
10990
11118
  }
10991
11119
  }
10992
11120
  if (gtlt === "<") {
10993
11121
  pr = "-0";
10994
11122
  }
10995
- ret = `${gtlt + M}.${m}.${p}${pr}`;
11123
+ ret = `${gtlt + M3}.${m3}.${p2}${pr}`;
10996
11124
  } else if (xm) {
10997
- ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`;
11125
+ ret = `>=${M3}.0.0${pr} <${+M3 + 1}.0.0-0`;
10998
11126
  } else if (xp) {
10999
- ret = `>=${M}.${m}.0${pr} <${M}.${+m + 1}.0-0`;
11127
+ ret = `>=${M3}.${m3}.0${pr} <${M3}.${+m3 + 1}.0-0`;
11000
11128
  }
11001
11129
  debug("xRange return", ret);
11002
11130
  return ret;
@@ -11004,11 +11132,11 @@ var require_range = __commonJS((exports, module) => {
11004
11132
  };
11005
11133
  var replaceStars = (comp, options) => {
11006
11134
  debug("replaceStars", comp, options);
11007
- return comp.trim().replace(re[t.STAR], "");
11135
+ return comp.trim().replace(re2[t.STAR], "");
11008
11136
  };
11009
11137
  var replaceGTE0 = (comp, options) => {
11010
11138
  debug("replaceGTE0", comp, options);
11011
- return comp.trim().replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], "");
11139
+ return comp.trim().replace(re2[options.includePrerelease ? t.GTE0PRE : t.GTE0], "");
11012
11140
  };
11013
11141
  var hyphenReplace = (incPr) => ($0, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr) => {
11014
11142
  if (isX(fM)) {
@@ -11092,19 +11220,19 @@ var require_comparator = __commonJS((exports, module) => {
11092
11220
  debug("comp", this);
11093
11221
  }
11094
11222
  parse(comp) {
11095
- const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR];
11096
- const m = comp.match(r);
11097
- if (!m) {
11223
+ const r2 = this.options.loose ? re2[t.COMPARATORLOOSE] : re2[t.COMPARATOR];
11224
+ const m3 = comp.match(r2);
11225
+ if (!m3) {
11098
11226
  throw new TypeError(`Invalid comparator: ${comp}`);
11099
11227
  }
11100
- this.operator = m[1] !== undefined ? m[1] : "";
11228
+ this.operator = m3[1] !== undefined ? m3[1] : "";
11101
11229
  if (this.operator === "=") {
11102
11230
  this.operator = "";
11103
11231
  }
11104
- if (!m[2]) {
11232
+ if (!m3[2]) {
11105
11233
  this.semver = ANY;
11106
11234
  } else {
11107
- this.semver = new SemVer(m[2], this.options.loose);
11235
+ this.semver = new SemVer(m3[2], this.options.loose);
11108
11236
  }
11109
11237
  }
11110
11238
  toString() {
@@ -11166,7 +11294,7 @@ var require_comparator = __commonJS((exports, module) => {
11166
11294
  }
11167
11295
  module.exports = Comparator;
11168
11296
  var parseOptions = require_parse_options();
11169
- var { safeRe: re, t } = require_re();
11297
+ var { safeRe: re2, t } = require_re();
11170
11298
  var cmp = require_cmp();
11171
11299
  var debug = require_debug();
11172
11300
  var SemVer = require_semver();
@@ -11190,7 +11318,7 @@ var require_satisfies = __commonJS((exports, module) => {
11190
11318
  // ../../node_modules/.bun/semver@7.7.4/node_modules/semver/ranges/to-comparators.js
11191
11319
  var require_to_comparators = __commonJS((exports, module) => {
11192
11320
  var Range = require_range();
11193
- var toComparators = (range, options) => new Range(range, options).set.map((comp) => comp.map((c) => c.value).join(" ").trim().split(" "));
11321
+ var toComparators = (range, options) => new Range(range, options).set.map((comp) => comp.map((c2) => c2.value).join(" ").trim().split(" "));
11194
11322
  module.exports = toComparators;
11195
11323
  });
11196
11324
 
@@ -11207,10 +11335,10 @@ var require_max_satisfying = __commonJS((exports, module) => {
11207
11335
  } catch (er) {
11208
11336
  return null;
11209
11337
  }
11210
- versions.forEach((v) => {
11211
- if (rangeObj.test(v)) {
11212
- if (!max || maxSV.compare(v) === -1) {
11213
- max = v;
11338
+ versions.forEach((v2) => {
11339
+ if (rangeObj.test(v2)) {
11340
+ if (!max || maxSV.compare(v2) === -1) {
11341
+ max = v2;
11214
11342
  maxSV = new SemVer(max, options);
11215
11343
  }
11216
11344
  }
@@ -11233,10 +11361,10 @@ var require_min_satisfying = __commonJS((exports, module) => {
11233
11361
  } catch (er) {
11234
11362
  return null;
11235
11363
  }
11236
- versions.forEach((v) => {
11237
- if (rangeObj.test(v)) {
11238
- if (!min || minSV.compare(v) === 1) {
11239
- min = v;
11364
+ versions.forEach((v2) => {
11365
+ if (rangeObj.test(v2)) {
11366
+ if (!min || minSV.compare(v2) === 1) {
11367
+ min = v2;
11240
11368
  minSV = new SemVer(min, options);
11241
11369
  }
11242
11370
  }
@@ -11412,8 +11540,8 @@ var require_simplify = __commonJS((exports, module) => {
11412
11540
  const set = [];
11413
11541
  let first = null;
11414
11542
  let prev = null;
11415
- const v = versions.sort((a, b) => compare(a, b, options));
11416
- for (const version of v) {
11543
+ const v2 = versions.sort((a2, b2) => compare(a2, b2, options));
11544
+ for (const version of v2) {
11417
11545
  const included = satisfies(version, range, options);
11418
11546
  if (included) {
11419
11547
  prev = version;
@@ -11435,11 +11563,11 @@ var require_simplify = __commonJS((exports, module) => {
11435
11563
  for (const [min, max] of set) {
11436
11564
  if (min === max) {
11437
11565
  ranges.push(min);
11438
- } else if (!max && min === v[0]) {
11566
+ } else if (!max && min === v2[0]) {
11439
11567
  ranges.push("*");
11440
11568
  } else if (!max) {
11441
11569
  ranges.push(`>=${min}`);
11442
- } else if (min === v[0]) {
11570
+ } else if (min === v2[0]) {
11443
11571
  ranges.push(`<=${max}`);
11444
11572
  } else {
11445
11573
  ranges.push(`${min} - ${max}`);
@@ -11504,13 +11632,13 @@ var require_subset = __commonJS((exports, module) => {
11504
11632
  }
11505
11633
  const eqSet = new Set;
11506
11634
  let gt, lt;
11507
- for (const c of sub) {
11508
- if (c.operator === ">" || c.operator === ">=") {
11509
- gt = higherGT(gt, c, options);
11510
- } else if (c.operator === "<" || c.operator === "<=") {
11511
- lt = lowerLT(lt, c, options);
11635
+ for (const c2 of sub) {
11636
+ if (c2.operator === ">" || c2.operator === ">=") {
11637
+ gt = higherGT(gt, c2, options);
11638
+ } else if (c2.operator === "<" || c2.operator === "<=") {
11639
+ lt = lowerLT(lt, c2, options);
11512
11640
  } else {
11513
- eqSet.add(c.semver);
11641
+ eqSet.add(c2.semver);
11514
11642
  }
11515
11643
  }
11516
11644
  if (eqSet.size > 1) {
@@ -11532,8 +11660,8 @@ var require_subset = __commonJS((exports, module) => {
11532
11660
  if (lt && !satisfies(eq, String(lt), options)) {
11533
11661
  return null;
11534
11662
  }
11535
- for (const c of dom) {
11536
- if (!satisfies(eq, String(c), options)) {
11663
+ for (const c2 of dom) {
11664
+ if (!satisfies(eq, String(c2), options)) {
11537
11665
  return false;
11538
11666
  }
11539
11667
  }
@@ -11546,40 +11674,40 @@ var require_subset = __commonJS((exports, module) => {
11546
11674
  if (needDomLTPre && needDomLTPre.prerelease.length === 1 && lt.operator === "<" && needDomLTPre.prerelease[0] === 0) {
11547
11675
  needDomLTPre = false;
11548
11676
  }
11549
- for (const c of dom) {
11550
- hasDomGT = hasDomGT || c.operator === ">" || c.operator === ">=";
11551
- hasDomLT = hasDomLT || c.operator === "<" || c.operator === "<=";
11677
+ for (const c2 of dom) {
11678
+ hasDomGT = hasDomGT || c2.operator === ">" || c2.operator === ">=";
11679
+ hasDomLT = hasDomLT || c2.operator === "<" || c2.operator === "<=";
11552
11680
  if (gt) {
11553
11681
  if (needDomGTPre) {
11554
- if (c.semver.prerelease && c.semver.prerelease.length && c.semver.major === needDomGTPre.major && c.semver.minor === needDomGTPre.minor && c.semver.patch === needDomGTPre.patch) {
11682
+ if (c2.semver.prerelease && c2.semver.prerelease.length && c2.semver.major === needDomGTPre.major && c2.semver.minor === needDomGTPre.minor && c2.semver.patch === needDomGTPre.patch) {
11555
11683
  needDomGTPre = false;
11556
11684
  }
11557
11685
  }
11558
- if (c.operator === ">" || c.operator === ">=") {
11559
- higher = higherGT(gt, c, options);
11560
- if (higher === c && higher !== gt) {
11686
+ if (c2.operator === ">" || c2.operator === ">=") {
11687
+ higher = higherGT(gt, c2, options);
11688
+ if (higher === c2 && higher !== gt) {
11561
11689
  return false;
11562
11690
  }
11563
- } else if (gt.operator === ">=" && !satisfies(gt.semver, String(c), options)) {
11691
+ } else if (gt.operator === ">=" && !satisfies(gt.semver, String(c2), options)) {
11564
11692
  return false;
11565
11693
  }
11566
11694
  }
11567
11695
  if (lt) {
11568
11696
  if (needDomLTPre) {
11569
- if (c.semver.prerelease && c.semver.prerelease.length && c.semver.major === needDomLTPre.major && c.semver.minor === needDomLTPre.minor && c.semver.patch === needDomLTPre.patch) {
11697
+ if (c2.semver.prerelease && c2.semver.prerelease.length && c2.semver.major === needDomLTPre.major && c2.semver.minor === needDomLTPre.minor && c2.semver.patch === needDomLTPre.patch) {
11570
11698
  needDomLTPre = false;
11571
11699
  }
11572
11700
  }
11573
- if (c.operator === "<" || c.operator === "<=") {
11574
- lower = lowerLT(lt, c, options);
11575
- if (lower === c && lower !== lt) {
11701
+ if (c2.operator === "<" || c2.operator === "<=") {
11702
+ lower = lowerLT(lt, c2, options);
11703
+ if (lower === c2 && lower !== lt) {
11576
11704
  return false;
11577
11705
  }
11578
- } else if (lt.operator === "<=" && !satisfies(lt.semver, String(c), options)) {
11706
+ } else if (lt.operator === "<=" && !satisfies(lt.semver, String(c2), options)) {
11579
11707
  return false;
11580
11708
  }
11581
11709
  }
11582
- if (!c.operator && (lt || gt) && gtltComp !== 0) {
11710
+ if (!c2.operator && (lt || gt) && gtltComp !== 0) {
11583
11711
  return false;
11584
11712
  }
11585
11713
  }
@@ -11594,19 +11722,19 @@ var require_subset = __commonJS((exports, module) => {
11594
11722
  }
11595
11723
  return true;
11596
11724
  };
11597
- var higherGT = (a, b, options) => {
11598
- if (!a) {
11599
- return b;
11725
+ var higherGT = (a2, b2, options) => {
11726
+ if (!a2) {
11727
+ return b2;
11600
11728
  }
11601
- const comp = compare(a.semver, b.semver, options);
11602
- return comp > 0 ? a : comp < 0 ? b : b.operator === ">" && a.operator === ">=" ? b : a;
11729
+ const comp = compare(a2.semver, b2.semver, options);
11730
+ return comp > 0 ? a2 : comp < 0 ? b2 : b2.operator === ">" && a2.operator === ">=" ? b2 : a2;
11603
11731
  };
11604
- var lowerLT = (a, b, options) => {
11605
- if (!a) {
11606
- return b;
11732
+ var lowerLT = (a2, b2, options) => {
11733
+ if (!a2) {
11734
+ return b2;
11607
11735
  }
11608
- const comp = compare(a.semver, b.semver, options);
11609
- return comp < 0 ? a : comp > 0 ? b : b.operator === "<" && a.operator === "<=" ? b : a;
11736
+ const comp = compare(a2.semver, b2.semver, options);
11737
+ return comp < 0 ? a2 : comp > 0 ? b2 : b2.operator === "<" && a2.operator === "<=" ? b2 : a2;
11610
11738
  };
11611
11739
  module.exports = subset;
11612
11740
  });
@@ -11806,9 +11934,9 @@ var require_verify = __commonJS((exports, module) => {
11806
11934
  if (callback) {
11807
11935
  done = callback;
11808
11936
  } else {
11809
- done = function(err2, data) {
11810
- if (err2)
11811
- throw err2;
11937
+ done = function(err3, data) {
11938
+ if (err3)
11939
+ throw err3;
11812
11940
  return data;
11813
11941
  };
11814
11942
  }
@@ -11835,8 +11963,8 @@ var require_verify = __commonJS((exports, module) => {
11835
11963
  let decodedToken;
11836
11964
  try {
11837
11965
  decodedToken = decode(jwtString, { complete: true });
11838
- } catch (err2) {
11839
- return done(err2);
11966
+ } catch (err3) {
11967
+ return done(err3);
11840
11968
  }
11841
11969
  if (!decodedToken) {
11842
11970
  return done(new JsonWebTokenError("invalid token"));
@@ -11853,9 +11981,9 @@ var require_verify = __commonJS((exports, module) => {
11853
11981
  return secretCallback(null, secretOrPublicKey);
11854
11982
  };
11855
11983
  }
11856
- return getSecret(header, function(err2, secretOrPublicKey2) {
11857
- if (err2) {
11858
- return done(new JsonWebTokenError("error in secret or public key callback: " + err2.message));
11984
+ return getSecret(header, function(err3, secretOrPublicKey2) {
11985
+ if (err3) {
11986
+ return done(new JsonWebTokenError("error in secret or public key callback: " + err3.message));
11859
11987
  }
11860
11988
  const hasSignature = parts[2].trim() !== "";
11861
11989
  if (!hasSignature && secretOrPublicKey2) {
@@ -11870,10 +11998,10 @@ var require_verify = __commonJS((exports, module) => {
11870
11998
  if (secretOrPublicKey2 != null && !(secretOrPublicKey2 instanceof KeyObject)) {
11871
11999
  try {
11872
12000
  secretOrPublicKey2 = createPublicKey(secretOrPublicKey2);
11873
- } catch (_) {
12001
+ } catch (_2) {
11874
12002
  try {
11875
12003
  secretOrPublicKey2 = createSecretKey(typeof secretOrPublicKey2 === "string" ? Buffer.from(secretOrPublicKey2) : secretOrPublicKey2);
11876
- } catch (_2) {
12004
+ } catch (_3) {
11877
12005
  return done(new JsonWebTokenError("secretOrPublicKey is not valid key material"));
11878
12006
  }
11879
12007
  }
@@ -11900,15 +12028,15 @@ var require_verify = __commonJS((exports, module) => {
11900
12028
  if (!options.allowInvalidAsymmetricKeyTypes) {
11901
12029
  try {
11902
12030
  validateAsymmetricKey(header.alg, secretOrPublicKey2);
11903
- } catch (e) {
11904
- return done(e);
12031
+ } catch (e2) {
12032
+ return done(e2);
11905
12033
  }
11906
12034
  }
11907
12035
  let valid;
11908
12036
  try {
11909
12037
  valid = jws.verify(jwtString, decodedToken.header.alg, secretOrPublicKey2);
11910
- } catch (e) {
11911
- return done(e);
12038
+ } catch (e2) {
12039
+ return done(e2);
11912
12040
  }
11913
12041
  if (!valid) {
11914
12042
  return done(new JsonWebTokenError("invalid signature"));
@@ -12109,13 +12237,13 @@ var require_lodash = __commonJS((exports, module) => {
12109
12237
  return isObjectLike(value) && isArrayLike(value);
12110
12238
  }
12111
12239
  function isFunction(value) {
12112
- var tag = isObject(value) ? objectToString.call(value) : "";
12240
+ var tag = isObject2(value) ? objectToString.call(value) : "";
12113
12241
  return tag == funcTag || tag == genTag;
12114
12242
  }
12115
12243
  function isLength(value) {
12116
12244
  return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
12117
12245
  }
12118
- function isObject(value) {
12246
+ function isObject2(value) {
12119
12247
  var type = typeof value;
12120
12248
  return !!value && (type == "object" || type == "function");
12121
12249
  }
@@ -12150,9 +12278,9 @@ var require_lodash = __commonJS((exports, module) => {
12150
12278
  if (isSymbol(value)) {
12151
12279
  return NAN;
12152
12280
  }
12153
- if (isObject(value)) {
12281
+ if (isObject2(value)) {
12154
12282
  var other = typeof value.valueOf == "function" ? value.valueOf() : value;
12155
- value = isObject(other) ? other + "" : other;
12283
+ value = isObject2(other) ? other + "" : other;
12156
12284
  }
12157
12285
  if (typeof value != "string") {
12158
12286
  return value === 0 ? value : +value;
@@ -12200,7 +12328,7 @@ var require_lodash3 = __commonJS((exports, module) => {
12200
12328
  function isInteger(value) {
12201
12329
  return typeof value == "number" && value == toInteger(value);
12202
12330
  }
12203
- function isObject(value) {
12331
+ function isObject2(value) {
12204
12332
  var type = typeof value;
12205
12333
  return !!value && (type == "object" || type == "function");
12206
12334
  }
@@ -12232,9 +12360,9 @@ var require_lodash3 = __commonJS((exports, module) => {
12232
12360
  if (isSymbol(value)) {
12233
12361
  return NAN;
12234
12362
  }
12235
- if (isObject(value)) {
12363
+ if (isObject2(value)) {
12236
12364
  var other = typeof value.valueOf == "function" ? value.valueOf() : value;
12237
- value = isObject(other) ? other + "" : other;
12365
+ value = isObject2(other) ? other + "" : other;
12238
12366
  }
12239
12367
  if (typeof value != "string") {
12240
12368
  return value === 0 ? value : +value;
@@ -12268,7 +12396,7 @@ var require_lodash5 = __commonJS((exports, module) => {
12268
12396
  if (value != null && typeof value.toString != "function") {
12269
12397
  try {
12270
12398
  result = !!(value + "");
12271
- } catch (e) {}
12399
+ } catch (e2) {}
12272
12400
  }
12273
12401
  return result;
12274
12402
  }
@@ -12349,7 +12477,7 @@ var require_lodash7 = __commonJS((exports, module) => {
12349
12477
  function once(func) {
12350
12478
  return before(2, func);
12351
12479
  }
12352
- function isObject(value) {
12480
+ function isObject2(value) {
12353
12481
  var type = typeof value;
12354
12482
  return !!value && (type == "object" || type == "function");
12355
12483
  }
@@ -12381,9 +12509,9 @@ var require_lodash7 = __commonJS((exports, module) => {
12381
12509
  if (isSymbol(value)) {
12382
12510
  return NAN;
12383
12511
  }
12384
- if (isObject(value)) {
12512
+ if (isObject2(value)) {
12385
12513
  var other = typeof value.valueOf == "function" ? value.valueOf() : value;
12386
- value = isObject(other) ? other + "" : other;
12514
+ value = isObject2(other) ? other + "" : other;
12387
12515
  }
12388
12516
  if (typeof value != "string") {
12389
12517
  return value === 0 ? value : +value;
@@ -12491,11 +12619,11 @@ var require_sign = __commonJS((exports, module) => {
12491
12619
  typ: isObjectPayload ? "JWT" : undefined,
12492
12620
  kid: options.keyid
12493
12621
  }, options.header);
12494
- function failure(err2) {
12622
+ function failure(err3) {
12495
12623
  if (callback) {
12496
- return callback(err2);
12624
+ return callback(err3);
12497
12625
  }
12498
- throw err2;
12626
+ throw err3;
12499
12627
  }
12500
12628
  if (!secretOrPrivateKey && options.algorithm !== "none") {
12501
12629
  return failure(new Error("secretOrPrivateKey must have a value"));
@@ -12503,10 +12631,10 @@ var require_sign = __commonJS((exports, module) => {
12503
12631
  if (secretOrPrivateKey != null && !(secretOrPrivateKey instanceof KeyObject)) {
12504
12632
  try {
12505
12633
  secretOrPrivateKey = createPrivateKey(secretOrPrivateKey);
12506
- } catch (_) {
12634
+ } catch (_2) {
12507
12635
  try {
12508
12636
  secretOrPrivateKey = createSecretKey(typeof secretOrPrivateKey === "string" ? Buffer.from(secretOrPrivateKey) : secretOrPrivateKey);
12509
- } catch (_2) {
12637
+ } catch (_3) {
12510
12638
  return failure(new Error("secretOrPrivateKey is not valid key material"));
12511
12639
  }
12512
12640
  }
@@ -12567,8 +12695,8 @@ var require_sign = __commonJS((exports, module) => {
12567
12695
  if (typeof options.notBefore !== "undefined") {
12568
12696
  try {
12569
12697
  payload.nbf = timespan(options.notBefore, timestamp2);
12570
- } catch (err2) {
12571
- return failure(err2);
12698
+ } catch (err3) {
12699
+ return failure(err3);
12572
12700
  }
12573
12701
  if (typeof payload.nbf === "undefined") {
12574
12702
  return failure(new Error('"notBefore" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60'));
@@ -12577,8 +12705,8 @@ var require_sign = __commonJS((exports, module) => {
12577
12705
  if (typeof options.expiresIn !== "undefined" && typeof payload === "object") {
12578
12706
  try {
12579
12707
  payload.exp = timespan(options.expiresIn, timestamp2);
12580
- } catch (err2) {
12581
- return failure(err2);
12708
+ } catch (err3) {
12709
+ return failure(err3);
12582
12710
  }
12583
12711
  if (typeof payload.exp === "undefined") {
12584
12712
  return failure(new Error('"expiresIn" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60'));
@@ -12630,8 +12758,8 @@ var require_jsonwebtoken = __commonJS((exports, module) => {
12630
12758
  });
12631
12759
 
12632
12760
  // ../adapters/db/sqlite/dist/index.js
12633
- var exports_dist = {};
12634
- __export(exports_dist, {
12761
+ var exports_dist2 = {};
12762
+ __export(exports_dist2, {
12635
12763
  createSQLiteAdapterFactory: () => createSQLiteAdapterFactory,
12636
12764
  createBunSQLiteAdapterFactory: () => createBunSQLiteAdapterFactory,
12637
12765
  SQLiteAdapter: () => SQLiteAdapter,
@@ -12701,7 +12829,7 @@ function getPath(target, path4 = []) {
12701
12829
  path4.reverse();
12702
12830
  try {
12703
12831
  resolvePath(target.copy, path4);
12704
- } catch (e) {
12832
+ } catch (e2) {
12705
12833
  return null;
12706
12834
  }
12707
12835
  return path4;
@@ -12731,11 +12859,11 @@ function peek(target, key) {
12731
12859
  const source = state ? latest(state) : target;
12732
12860
  return source[key];
12733
12861
  }
12734
- function isEqual(x, y2) {
12735
- if (x === y2) {
12736
- return x !== 0 || 1 / x === 1 / y2;
12862
+ function isEqual(x2, y4) {
12863
+ if (x2 === y4) {
12864
+ return x2 !== 0 || 1 / x2 === 1 / y4;
12737
12865
  } else {
12738
- return x !== x && y2 !== y2;
12866
+ return x2 !== x2 && y4 !== y4;
12739
12867
  }
12740
12868
  }
12741
12869
  function revokeProxy(proxyDraft) {
@@ -12844,9 +12972,9 @@ function deepClone(target) {
12844
12972
  if (Array.isArray(target))
12845
12973
  return target.map(deepClone);
12846
12974
  if (target instanceof Map) {
12847
- const iterable = Array.from(target.entries()).map(([k2, v2]) => [
12848
- k2,
12849
- deepClone(v2)
12975
+ const iterable = Array.from(target.entries()).map(([k4, v3]) => [
12976
+ k4,
12977
+ deepClone(v3)
12850
12978
  ]);
12851
12979
  if (!isBaseMapInstance(target)) {
12852
12980
  const SubClass = Object.getPrototypeOf(target).constructor;
@@ -13633,8 +13761,8 @@ class EventWire {
13633
13761
  try {
13634
13762
  const message = JSON.parse(event.data);
13635
13763
  this.handleMessage(message);
13636
- } catch (err2) {
13637
- console.error("EventWire: Failed to parse message", err2);
13764
+ } catch (err3) {
13765
+ console.error("EventWire: Failed to parse message", err3);
13638
13766
  }
13639
13767
  };
13640
13768
  this.ws.onclose = (event) => {
@@ -13643,17 +13771,17 @@ class EventWire {
13643
13771
  console.log("EventWire disconnected");
13644
13772
  this.scheduleReconnect();
13645
13773
  };
13646
- this.ws.onerror = (err2) => {
13647
- console.error("EventWire error:", err2);
13774
+ this.ws.onerror = (err3) => {
13775
+ console.error("EventWire error:", err3);
13648
13776
  if (this.state === "connecting") {
13649
13777
  this.state = "disconnected";
13650
13778
  this.ws = null;
13651
13779
  }
13652
13780
  };
13653
- } catch (err2) {
13781
+ } catch (err3) {
13654
13782
  this.state = "disconnected";
13655
13783
  this.ws = null;
13656
- console.error("EventWire: Failed to connect", err2);
13784
+ console.error("EventWire: Failed to connect", err3);
13657
13785
  this.scheduleReconnect();
13658
13786
  }
13659
13787
  }
@@ -13684,11 +13812,11 @@ class EventWire {
13684
13812
  if (this.ws) {
13685
13813
  this.ws.send(JSON.stringify({
13686
13814
  type: "sync-events",
13687
- events: events.map((e) => ({
13688
- localId: e.localId,
13689
- type: e.type,
13690
- payload: e.payload,
13691
- createdAt: e.createdAt
13815
+ events: events.map((e2) => ({
13816
+ localId: e2.localId,
13817
+ type: e2.type,
13818
+ payload: e2.payload,
13819
+ createdAt: e2.createdAt
13692
13820
  }))
13693
13821
  }));
13694
13822
  }
@@ -13904,9 +14032,7 @@ class LocalEventPublisher2 {
13904
14032
  }
13905
14033
  }
13906
14034
  }
13907
- console.log(`[Arc:EventPublisher] notifySubscribers type="${event.type}" subscriberKeys=${JSON.stringify([...this.subscribers.keys()])}`);
13908
14035
  const subs = this.subscribers.get(event.type);
13909
- console.log(`[Arc:EventPublisher] matched=${subs?.size ?? 0} subscribers`);
13910
14036
  if (!subs || subs.size === 0)
13911
14037
  return;
13912
14038
  const promises = [];
@@ -13921,7 +14047,7 @@ class LocalEventPublisher2 {
13921
14047
  }
13922
14048
  }
13923
14049
  if (promises.length > 0) {
13924
- await Promise.all(promises.map((p2) => p2.catch((e) => console.error(e))));
14050
+ await Promise.all(promises.map((p3) => p3.catch((e2) => console.error(e2))));
13925
14051
  }
13926
14052
  }
13927
14053
  async markSynced(eventIds) {
@@ -14266,6 +14392,81 @@ function typeValidatorBuilder(typeName, comparatorStrategy) {
14266
14392
  }
14267
14393
  };
14268
14394
  }
14395
+
14396
+ class DataStorage {
14397
+ async commitChanges(changes) {
14398
+ await Promise.all(changes.map(({ store, changes: changes2 }) => this.getStore(store).applyChanges(changes2)));
14399
+ }
14400
+ }
14401
+
14402
+ class ScopedStore {
14403
+ #inner;
14404
+ #restrictions;
14405
+ #canWrite;
14406
+ #storeName;
14407
+ constructor(inner, restrictions, canWrite) {
14408
+ this.#inner = inner;
14409
+ this.#restrictions = restrictions;
14410
+ this.#canWrite = canWrite;
14411
+ this.#storeName = inner.storeName;
14412
+ }
14413
+ get storeName() {
14414
+ return this.#storeName;
14415
+ }
14416
+ async find(options, listener) {
14417
+ const restricted = this.#applyReadRestrictions(options);
14418
+ return this.#inner.find(restricted, listener);
14419
+ }
14420
+ async set(item) {
14421
+ this.#assertWriteAccess();
14422
+ this.#validateScopeFields(item);
14423
+ return this.#inner.set(item);
14424
+ }
14425
+ async remove(id) {
14426
+ this.#assertWriteAccess();
14427
+ return this.#inner.remove(id);
14428
+ }
14429
+ async modify(id, data) {
14430
+ this.#assertWriteAccess();
14431
+ this.#validateScopeFields(data);
14432
+ return this.#inner.modify(id, data);
14433
+ }
14434
+ async applyChanges(changes) {
14435
+ this.#assertWriteAccess();
14436
+ for (const change of changes) {
14437
+ if (change.type === "set") {
14438
+ this.#validateScopeFields(change.data);
14439
+ } else if (change.type === "modify") {
14440
+ this.#validateScopeFields(change.data);
14441
+ }
14442
+ }
14443
+ return this.#inner.applyChanges(changes);
14444
+ }
14445
+ unsubscribe(listener) {
14446
+ this.#inner.unsubscribe(listener);
14447
+ }
14448
+ #applyReadRestrictions(options) {
14449
+ if (Object.keys(this.#restrictions).length === 0) {
14450
+ return options ?? {};
14451
+ }
14452
+ return {
14453
+ ...options,
14454
+ where: { ...options?.where ?? {}, ...this.#restrictions }
14455
+ };
14456
+ }
14457
+ #assertWriteAccess() {
14458
+ if (!this.#canWrite) {
14459
+ throw new Error(`Scope violation: write access denied to store "${this.#storeName}" (read-only)`);
14460
+ }
14461
+ }
14462
+ #validateScopeFields(data) {
14463
+ for (const [key, value] of Object.entries(this.#restrictions)) {
14464
+ if (key in data && data[key] !== value) {
14465
+ throw new Error(`Scope violation: field "${key}" must be "${value}", got "${data[key]}" in store "${this.#storeName}"`);
14466
+ }
14467
+ }
14468
+ }
14469
+ }
14269
14470
  function string() {
14270
14471
  return new ArcString;
14271
14472
  }
@@ -14275,9 +14476,6 @@ class ArcFragmentBase {
14275
14476
  return this.types.includes(type);
14276
14477
  }
14277
14478
  }
14278
- function id(name, generateFn) {
14279
- return new ArcId(name, generateFn);
14280
- }
14281
14479
  function buildElementContext(queryElements, mutationElements, adapters) {
14282
14480
  const queryMap = new Map;
14283
14481
  const mutateMap = new Map;
@@ -14326,6 +14524,9 @@ function buildElementContext(queryElements, mutationElements, adapters) {
14326
14524
  mutate: mutateFn
14327
14525
  };
14328
14526
  }
14527
+ function id(name, generateFn) {
14528
+ return new ArcId(name, generateFn);
14529
+ }
14329
14530
 
14330
14531
  class ArcFunction {
14331
14532
  data;
@@ -14458,12 +14659,6 @@ class AggregateBase {
14458
14659
  }
14459
14660
  }
14460
14661
 
14461
- class DataStorage {
14462
- async commitChanges(changes) {
14463
- await Promise.all(changes.map(({ store, changes: changes2 }) => this.getStore(store).applyChanges(changes2)));
14464
- }
14465
- }
14466
-
14467
14662
  class StoreState {
14468
14663
  storeName;
14469
14664
  dataStorage;
@@ -14505,7 +14700,7 @@ class StoreState {
14505
14700
  const object2 = result[0];
14506
14701
  const [draft, finalize] = create(object2 || {}, { enablePatches: true });
14507
14702
  await editCallback(draft);
14508
- const [_2, patches] = finalize();
14703
+ const [_3, patches] = finalize();
14509
14704
  const change = {
14510
14705
  type: "mutate",
14511
14706
  id: id2,
@@ -14548,7 +14743,7 @@ function isPlainObject(item) {
14548
14743
  return item && typeof item === "object" && !Array.isArray(item) && !(item instanceof Date) && Object.prototype.toString.call(item) === "[object Object]";
14549
14744
  }
14550
14745
  function resolveQueryChange(currentResult, event3, options) {
14551
- const index = currentResult.findIndex((e) => e._id === event3.id);
14746
+ const index = currentResult.findIndex((e2) => e2._id === event3.id);
14552
14747
  const isInCurrentResult = index !== -1;
14553
14748
  if (event3.type === "delete") {
14554
14749
  if (isInCurrentResult) {
@@ -14606,10 +14801,10 @@ function checkItemMatchesWhere(item, where) {
14606
14801
  function applyOrderByAndLimit(result, options) {
14607
14802
  let sorted = result;
14608
14803
  if (options.orderBy) {
14609
- sorted = [...result].sort((a, b2) => {
14804
+ sorted = [...result].sort((a2, b3) => {
14610
14805
  for (const [key, direction] of Object.entries(options.orderBy)) {
14611
- const aVal = a[key];
14612
- const bVal = b2[key];
14806
+ const aVal = a2[key];
14807
+ const bVal = b3[key];
14613
14808
  if (aVal < bVal)
14614
14809
  return direction === "asc" ? -1 : 1;
14615
14810
  if (aVal > bVal)
@@ -15191,7 +15386,7 @@ class StreamingEventPublisher {
15191
15386
  }
15192
15387
  }
15193
15388
  if (promises.length > 0) {
15194
- await Promise.all(promises.map((p2) => p2.catch((e) => console.error(e))));
15389
+ await Promise.all(promises.map((p3) => p3.catch((e2) => console.error(e2))));
15195
15390
  }
15196
15391
  }
15197
15392
  }
@@ -16027,7 +16222,7 @@ var Operation, PROXY_DRAFT, RAW_RETURN_SYMBOL, iteratorSymbol, dataTypes, intern
16027
16222
  }
16028
16223
  return returnValue(result);
16029
16224
  };
16030
- }, create, constructorString, TOKEN_PREFIX = "arc:token:", eventWireInstanceCounter = 0, EVENT_TABLES, arrayValidator, ArcArray, objectValidator, ArcObject, ArcPrimitive, stringValidator, ArcString, ArcContextElement, ArcBoolean, ArcId, numberValidator, ArcNumber, ArcEvent, ArcCommand, ArcListener, ArcRoute, ForkedStoreState, ForkedDataStorage, MasterStoreState, MasterDataStorage2, dateValidator, SQLiteReadWriteTransaction, createSQLiteAdapterFactory = (db) => {
16225
+ }, create, constructorString, TOKEN_PREFIX = "arc:token:", eventWireInstanceCounter = 0, EVENT_TABLES, arrayValidator, ArcArray, objectValidator, ArcObject, ScopedDataStorage, ArcPrimitive, stringValidator, ArcString, ArcContextElement, ArcBoolean, ArcId, numberValidator, ArcNumber, ArcEvent, ArcCommand, ArcListener, ArcRoute, ForkedStoreState, ForkedDataStorage, MasterStoreState, MasterDataStorage2, dateValidator, SQLiteReadWriteTransaction, createSQLiteAdapterFactory = (db) => {
16031
16226
  return async (context) => {
16032
16227
  const adapter = new SQLiteAdapter(db, context);
16033
16228
  await adapter.initialize();
@@ -16507,15 +16702,15 @@ var init_dist = __esm(() => {
16507
16702
  });
16508
16703
  }
16509
16704
  parse(value) {
16510
- return value.map((v2) => this.parent.parse(v2));
16705
+ return value.map((v3) => this.parent.parse(v3));
16511
16706
  }
16512
16707
  serialize(value) {
16513
- return value.map((v2) => this.parent.serialize(v2));
16708
+ return value.map((v3) => this.parent.serialize(v3));
16514
16709
  }
16515
16710
  deserialize(value) {
16516
16711
  if (!Array.isArray(value))
16517
16712
  return [];
16518
- return value.map((v2) => this.parent.deserialize(v2));
16713
+ return value.map((v3) => this.parent.deserialize(v3));
16519
16714
  }
16520
16715
  deserializePath(path4, value) {
16521
16716
  if (path4.length === 0) {
@@ -16707,6 +16902,34 @@ var init_dist = __esm(() => {
16707
16902
  return new ArcObject(partialShape);
16708
16903
  }
16709
16904
  };
16905
+ ScopedDataStorage = class ScopedDataStorage extends DataStorage {
16906
+ #inner;
16907
+ #allowedStores;
16908
+ #restrictions;
16909
+ constructor(inner, allowedStores, restrictions) {
16910
+ super();
16911
+ this.#inner = inner;
16912
+ this.#allowedStores = allowedStores;
16913
+ this.#restrictions = restrictions;
16914
+ }
16915
+ getStore(storeName) {
16916
+ const permission = this.#allowedStores.get(storeName);
16917
+ if (!permission) {
16918
+ throw new Error(`Scope violation: access denied to store "${storeName}" (not declared in query/mutate)`);
16919
+ }
16920
+ const inner = this.#inner.getStore(storeName);
16921
+ return new ScopedStore(inner, this.#restrictions, permission === "read-write");
16922
+ }
16923
+ fork() {
16924
+ return this.#inner.fork();
16925
+ }
16926
+ getReadTransaction() {
16927
+ return this.#inner.getReadTransaction();
16928
+ }
16929
+ getReadWriteTransaction() {
16930
+ return this.#inner.getReadWriteTransaction();
16931
+ }
16932
+ };
16710
16933
  ArcPrimitive = class ArcPrimitive extends ArcAbstract {
16711
16934
  serialize(value) {
16712
16935
  return value;
@@ -17265,9 +17488,10 @@ var init_dist = __esm(() => {
17265
17488
  async handleEvent(event2, adapters) {
17266
17489
  if (!this.data.handler)
17267
17490
  return;
17268
- const context2 = this.#fn.buildContext(adapters);
17269
- if (adapters.authAdapter) {
17270
- const decoded = adapters.authAdapter.getDecoded();
17491
+ const scopedAdapters = this.buildScopedAdapters(event2, adapters);
17492
+ const context2 = this.#fn.buildContext(scopedAdapters);
17493
+ if (scopedAdapters.authAdapter) {
17494
+ const decoded = scopedAdapters.authAdapter.getDecoded();
17271
17495
  if (decoded) {
17272
17496
  context2.$auth = {
17273
17497
  params: decoded.params,
@@ -17283,6 +17507,37 @@ var init_dist = __esm(() => {
17283
17507
  await this.data.handler(context2, event2);
17284
17508
  }
17285
17509
  }
17510
+ buildScopedAdapters(event2, adapters) {
17511
+ if (adapters.authAdapter?.isAuthenticated()) {
17512
+ return adapters;
17513
+ }
17514
+ const allElements = [
17515
+ ...this.data.queryElements,
17516
+ ...this.data.mutationElements
17517
+ ];
17518
+ let tokenName = null;
17519
+ for (const element of allElements) {
17520
+ const protections = element.__aggregateProtections ?? element.data?.protections;
17521
+ if (protections?.length > 0) {
17522
+ tokenName = protections[0].token.name;
17523
+ break;
17524
+ }
17525
+ }
17526
+ if (!tokenName || !event2.payload) {
17527
+ return adapters;
17528
+ }
17529
+ const scopedAuth = new AuthAdapter;
17530
+ scopedAuth.scopes = new Map([
17531
+ ["default", {
17532
+ raw: "",
17533
+ decoded: {
17534
+ tokenName,
17535
+ params: event2.payload
17536
+ }
17537
+ }]
17538
+ ]);
17539
+ return { ...adapters, authAdapter: scopedAuth };
17540
+ }
17286
17541
  destroy() {
17287
17542
  for (const unsubscribe of this.unsubscribers) {
17288
17543
  unsubscribe();
@@ -17769,7 +18024,7 @@ var init_dist = __esm(() => {
17769
18024
  if (store === "events") {
17770
18025
  const simpleInsertSql = `
17771
18026
  INSERT INTO "${table.name}"
17772
- (${columnNames.map((c) => `"${c}"`).join(", ")})
18027
+ (${columnNames.map((c2) => `"${c2}"`).join(", ")})
17773
18028
  VALUES (${placeholders})
17774
18029
  `;
17775
18030
  this.queries.push({
@@ -17779,7 +18034,7 @@ var init_dist = __esm(() => {
17779
18034
  } else {
17780
18035
  const sql = `
17781
18036
  INSERT OR REPLACE INTO "${table.name}"
17782
- (${columnNames.map((c) => `"${c}"`).join(", ")})
18037
+ (${columnNames.map((c2) => `"${c2}"`).join(", ")})
17783
18038
  VALUES (${placeholders})
17784
18039
  `;
17785
18040
  this.queries.push({
@@ -17809,7 +18064,7 @@ var init_dist = __esm(() => {
17809
18064
  RETURNING last_version
17810
18065
  )
17811
18066
  INSERT OR REPLACE INTO "${table.name}"
17812
- (${columnNames.map((c) => `"${c}"`).join(", ")})
18067
+ (${columnNames.map((c2) => `"${c2}"`).join(", ")})
17813
18068
  VALUES (${placeholders}, (SELECT last_version FROM next_version))
17814
18069
  `;
17815
18070
  this.queries.push({
@@ -26093,7 +26348,7 @@ ${colors3.yellow}Type declaration errors:${colors3.reset}`);
26093
26348
  }
26094
26349
 
26095
26350
  // src/platform/shared.ts
26096
- import { copyFileSync, existsSync as existsSync6, mkdirSync as mkdirSync6, readFileSync as readFileSync6 } from "fs";
26351
+ import { copyFileSync, existsSync as existsSync6, mkdirSync as mkdirSync6, readFileSync as readFileSync6, readdirSync as readdirSync4, writeFileSync as writeFileSync6 } from "fs";
26097
26352
  import { dirname as dirname6, join as join7 } from "path";
26098
26353
 
26099
26354
  // src/builder/module-builder.ts
@@ -26428,6 +26683,22 @@ var SHELL_EXTERNALS = [
26428
26683
  "@arcote.tech/arc-workspace",
26429
26684
  "@arcote.tech/platform"
26430
26685
  ];
26686
+ function sha256Hex(bytes) {
26687
+ const hasher = new Bun.CryptoHasher("sha256");
26688
+ hasher.update(bytes);
26689
+ return hasher.digest("hex");
26690
+ }
26691
+ function sha256OfFiles(paths) {
26692
+ const hasher = new Bun.CryptoHasher("sha256");
26693
+ const sorted = [...paths].sort();
26694
+ for (const p of sorted) {
26695
+ if (!existsSync5(p))
26696
+ continue;
26697
+ hasher.update(readFileSync5(p));
26698
+ hasher.update("\x00");
26699
+ }
26700
+ return hasher.digest("hex");
26701
+ }
26431
26702
  function discoverPackages(rootDir) {
26432
26703
  const rootPkg = JSON.parse(readFileSync5(join6(rootDir, "package.json"), "utf-8"));
26433
26704
  const workspaceGlobs = rootPkg.workspaces ?? [];
@@ -26548,10 +26819,17 @@ async function buildPackages(rootDir, outDir, packages) {
26548
26819
  const moduleEntries = result.outputs.filter((o) => o.kind === "entry-point").map((o) => {
26549
26820
  const file = o.path.split("/").pop();
26550
26821
  const safeName = file.replace(/\.js$/, "");
26551
- return { file, name: fileToName.get(safeName) ?? safeName };
26822
+ const bytes = readFileSync5(o.path);
26823
+ return {
26824
+ file,
26825
+ name: fileToName.get(safeName) ?? safeName,
26826
+ hash: sha256Hex(bytes)
26827
+ };
26552
26828
  });
26553
26829
  const manifest = {
26554
26830
  modules: moduleEntries,
26831
+ shellHash: "",
26832
+ stylesHash: "",
26555
26833
  buildTime: new Date().toISOString()
26556
26834
  };
26557
26835
  writeFileSync5(join6(outDir, "manifest.json"), JSON.stringify(manifest, null, 2));
@@ -26704,7 +26982,35 @@ async function buildAll(ws) {
26704
26982
  log2("Building shell...");
26705
26983
  await buildShell(ws.shellDir, ws.packages);
26706
26984
  ok("Shell built");
26707
- return manifest;
26985
+ const finalManifest = finalizeManifest(ws, manifest);
26986
+ writeFileSync6(join7(ws.modulesDir, "manifest.json"), JSON.stringify(finalManifest, null, 2));
26987
+ return finalManifest;
26988
+ }
26989
+ function finalizeManifest(ws, manifest) {
26990
+ const shellFiles = listFilesRec(ws.shellDir);
26991
+ const stylesFiles = [
26992
+ join7(ws.arcDir, "styles.css"),
26993
+ join7(ws.arcDir, "theme.css")
26994
+ ].filter((p) => existsSync6(p));
26995
+ return {
26996
+ modules: manifest.modules,
26997
+ shellHash: sha256OfFiles(shellFiles),
26998
+ stylesHash: sha256OfFiles(stylesFiles),
26999
+ buildTime: manifest.buildTime
27000
+ };
27001
+ }
27002
+ function listFilesRec(dir) {
27003
+ if (!existsSync6(dir))
27004
+ return [];
27005
+ const out = [];
27006
+ for (const entry of readdirSync4(dir, { withFileTypes: true })) {
27007
+ const p = join7(dir, entry.name);
27008
+ if (entry.isDirectory())
27009
+ out.push(...listFilesRec(p));
27010
+ else if (entry.isFile())
27011
+ out.push(p);
27012
+ }
27013
+ return out;
26708
27014
  }
26709
27015
  function collectArcPeerDeps(packages) {
26710
27016
  const seen = new Set;
@@ -26862,9 +27168,1815 @@ async function platformBuild() {
26862
27168
  ok(`Platform built \u2014 ${manifest.modules.length} module(s)`);
26863
27169
  }
26864
27170
 
26865
- // src/commands/platform-dev.ts
26866
- import { existsSync as existsSync8, watch } from "fs";
27171
+ // src/commands/platform-deploy.ts
27172
+ import { existsSync as existsSync10, readFileSync as readFileSync9 } from "fs";
27173
+ import { join as join13 } from "path";
27174
+
27175
+ // src/deploy/bootstrap.ts
27176
+ import { mkdirSync as mkdirSync9, writeFileSync as writeFileSync10 } from "fs";
27177
+ import { tmpdir as tmpdir3 } from "os";
27178
+ import { join as join11 } from "path";
27179
+
27180
+ // src/deploy/ansible.ts
27181
+ var {spawn: spawn2 } = globalThis.Bun;
27182
+ import { mkdirSync as mkdirSync7, writeFileSync as writeFileSync7 } from "fs";
27183
+ import { tmpdir } from "os";
27184
+ import { join as join8 } from "path";
27185
+
27186
+ // src/deploy/assets.ts
27187
+ var TERRAFORM_MAIN_TF = `terraform {
27188
+ required_providers {
27189
+ hcloud = {
27190
+ source = "hetznercloud/hcloud"
27191
+ version = "~> 1.51"
27192
+ }
27193
+ }
27194
+ }
27195
+
27196
+ provider "hcloud" {
27197
+ token = var.hcloud_token
27198
+ }
27199
+
27200
+ resource "hcloud_ssh_key" "deploy" {
27201
+ name = "\${var.server_name}-deploy"
27202
+ public_key = file(var.ssh_public_key)
27203
+ }
27204
+
27205
+ resource "hcloud_server" "arc" {
27206
+ name = var.server_name
27207
+ image = var.server_image
27208
+ server_type = var.server_type
27209
+ location = var.server_location
27210
+ ssh_keys = [hcloud_ssh_key.deploy.id]
27211
+
27212
+ public_net {
27213
+ ipv4_enabled = true
27214
+ ipv6_enabled = true
27215
+ }
27216
+ }
27217
+
27218
+ output "server_ip" {
27219
+ value = hcloud_server.arc.ipv4_address
27220
+ }
27221
+
27222
+ output "server_name" {
27223
+ value = hcloud_server.arc.name
27224
+ }
27225
+ `;
27226
+ var TERRAFORM_VARIABLES_TF = `variable "hcloud_token" {
27227
+ description = "Hetzner Cloud API token"
27228
+ type = string
27229
+ sensitive = true
27230
+ }
27231
+
27232
+ variable "server_name" {
27233
+ description = "Name of the Hetzner server (shown in the console)"
27234
+ type = string
27235
+ default = "arc-platform"
27236
+ }
27237
+
27238
+ variable "server_type" {
27239
+ description = "Hetzner server type (cx22, cx32, cx42, ...)"
27240
+ type = string
27241
+ default = "cx32"
27242
+ }
27243
+
27244
+ variable "server_location" {
27245
+ description = "Hetzner datacenter location (nbg1, fsn1, hel1, ...)"
27246
+ type = string
27247
+ default = "nbg1"
27248
+ }
27249
+
27250
+ variable "server_image" {
27251
+ description = "OS image"
27252
+ type = string
27253
+ default = "ubuntu-22.04"
27254
+ }
27255
+
27256
+ variable "ssh_public_key" {
27257
+ description = "Path to the public key uploaded to the server"
27258
+ type = string
27259
+ default = "~/.ssh/id_ed25519.pub"
27260
+ }
27261
+ `;
27262
+ var ANSIBLE_SITE_YML = `---
27263
+ # Arc platform bootstrap playbook \u2014 minimal hardened Docker host.
27264
+ - name: Bootstrap Arc host
27265
+ hosts: all
27266
+ become: true
27267
+ gather_facts: true
27268
+ vars:
27269
+ deploy_user: "{{ username | default('deploy') }}"
27270
+ ssh_port: "{{ ssh_port | default(22) }}"
27271
+ extra_allowed_ips: "{{ extra_allowed_ips | default([]) }}"
27272
+
27273
+ tasks:
27274
+ - name: Update apt cache
27275
+ apt:
27276
+ update_cache: true
27277
+ cache_valid_time: 3600
27278
+
27279
+ - name: Install base packages
27280
+ apt:
27281
+ name:
27282
+ - ca-certificates
27283
+ - curl
27284
+ - gnupg
27285
+ - ufw
27286
+ - fail2ban
27287
+ - unattended-upgrades
27288
+ - python3-docker
27289
+ state: present
27290
+
27291
+ - name: Create deploy user
27292
+ user:
27293
+ name: "{{ deploy_user }}"
27294
+ shell: /bin/bash
27295
+ groups: sudo
27296
+ append: true
27297
+ create_home: true
27298
+ state: present
27299
+
27300
+ - name: Copy SSH key from root to deploy user
27301
+ shell: |
27302
+ mkdir -p /home/{{ deploy_user }}/.ssh
27303
+ cp /root/.ssh/authorized_keys /home/{{ deploy_user }}/.ssh/authorized_keys
27304
+ chown -R {{ deploy_user }}:{{ deploy_user }} /home/{{ deploy_user }}/.ssh
27305
+ chmod 700 /home/{{ deploy_user }}/.ssh
27306
+ chmod 600 /home/{{ deploy_user }}/.ssh/authorized_keys
27307
+ args:
27308
+ creates: "/home/{{ deploy_user }}/.ssh/authorized_keys"
27309
+
27310
+ - name: Passwordless sudo for deploy user
27311
+ copy:
27312
+ dest: /etc/sudoers.d/99-{{ deploy_user }}
27313
+ content: "{{ deploy_user }} ALL=(ALL) NOPASSWD:ALL\\n"
27314
+ mode: "0440"
27315
+ validate: "visudo -cf %s"
27316
+
27317
+ - name: Harden sshd
27318
+ lineinfile:
27319
+ path: /etc/ssh/sshd_config
27320
+ regexp: "{{ item.re }}"
27321
+ line: "{{ item.line }}"
27322
+ state: present
27323
+ loop:
27324
+ - { re: "^#?PermitRootLogin", line: "PermitRootLogin no" }
27325
+ - { re: "^#?PasswordAuthentication", line: "PasswordAuthentication no" }
27326
+ - { re: "^#?PubkeyAuthentication", line: "PubkeyAuthentication yes" }
27327
+ - { re: "^#?MaxAuthTries", line: "MaxAuthTries 3" }
27328
+ notify: restart ssh
27329
+
27330
+ - name: Install Docker via official convenience script
27331
+ shell: |
27332
+ curl -fsSL https://get.docker.com | sh
27333
+ args:
27334
+ creates: /usr/bin/docker
27335
+
27336
+ - name: Enable and start docker
27337
+ systemd:
27338
+ name: docker
27339
+ enabled: true
27340
+ state: started
27341
+
27342
+ - name: Add deploy user to docker group
27343
+ user:
27344
+ name: "{{ deploy_user }}"
27345
+ groups: docker
27346
+ append: true
27347
+
27348
+ - name: Configure docker log rotation
27349
+ copy:
27350
+ dest: /etc/docker/daemon.json
27351
+ content: |
27352
+ {
27353
+ "log-driver": "json-file",
27354
+ "log-opts": {
27355
+ "max-size": "10m",
27356
+ "max-file": "3"
27357
+ }
27358
+ }
27359
+ mode: "0644"
27360
+ notify: restart docker
27361
+
27362
+ - name: Ensure /opt/arc exists
27363
+ file:
27364
+ path: /opt/arc
27365
+ state: directory
27366
+ owner: "{{ deploy_user }}"
27367
+ group: "{{ deploy_user }}"
27368
+ mode: "0755"
27369
+
27370
+ - name: Configure ufw defaults
27371
+ ufw:
27372
+ policy: "{{ item.policy }}"
27373
+ direction: "{{ item.dir }}"
27374
+ loop:
27375
+ - { policy: deny, dir: incoming }
27376
+ - { policy: allow, dir: outgoing }
27377
+
27378
+ - name: Open firewall ports
27379
+ ufw:
27380
+ rule: allow
27381
+ port: "{{ item }}"
27382
+ proto: tcp
27383
+ loop:
27384
+ - "{{ ssh_port }}"
27385
+ - "80"
27386
+ - "443"
27387
+
27388
+ - name: Enable ufw
27389
+ ufw:
27390
+ state: enabled
27391
+
27392
+ - name: Configure fail2ban for sshd
27393
+ copy:
27394
+ dest: /etc/fail2ban/jail.local
27395
+ content: |
27396
+ [sshd]
27397
+ enabled = true
27398
+ port = {{ ssh_port }}
27399
+ maxretry = 5
27400
+ findtime = 600
27401
+ bantime = 3600
27402
+ ignoreip = 127.0.0.1/8 ::1 {{ extra_allowed_ips | join(' ') }}
27403
+ mode: "0644"
27404
+ notify: restart fail2ban
27405
+
27406
+ - name: Enable unattended upgrades
27407
+ copy:
27408
+ dest: /etc/apt/apt.conf.d/20auto-upgrades
27409
+ content: |
27410
+ APT::Periodic::Update-Package-Lists "1";
27411
+ APT::Periodic::Unattended-Upgrade "1";
27412
+ APT::Periodic::AutocleanInterval "7";
27413
+ mode: "0644"
27414
+
27415
+ handlers:
27416
+ - name: restart ssh
27417
+ systemd:
27418
+ name: ssh
27419
+ state: restarted
27420
+
27421
+ - name: restart docker
27422
+ systemd:
27423
+ name: docker
27424
+ state: restarted
27425
+
27426
+ - name: restart fail2ban
27427
+ systemd:
27428
+ name: fail2ban
27429
+ state: restarted
27430
+ `;
27431
+ var ASSETS = {
27432
+ terraform: {
27433
+ "main.tf": TERRAFORM_MAIN_TF,
27434
+ "variables.tf": TERRAFORM_VARIABLES_TF
27435
+ },
27436
+ ansible: {
27437
+ "site.yml": ANSIBLE_SITE_YML
27438
+ }
27439
+ };
27440
+ async function materializeAssets(targetDir, files) {
27441
+ const { mkdirSync: mkdirSync7, writeFileSync: writeFileSync7 } = await import("fs");
27442
+ const { join: join8 } = await import("path");
27443
+ mkdirSync7(targetDir, { recursive: true });
27444
+ for (const [name, content] of Object.entries(files)) {
27445
+ writeFileSync7(join8(targetDir, name), content);
27446
+ }
27447
+ }
27448
+
27449
+ // src/deploy/ansible.ts
27450
+ async function runAnsible(inputs) {
27451
+ const workDir = join8(tmpdir(), "arc-deploy", `ansible-${Date.now()}`);
27452
+ mkdirSync7(workDir, { recursive: true });
27453
+ await materializeAssets(workDir, ASSETS.ansible);
27454
+ const user = inputs.asRoot ? "root" : inputs.target.user;
27455
+ const port = inputs.ansible?.sshPort ?? inputs.target.port;
27456
+ const inventory = [
27457
+ "[arc]",
27458
+ `${inputs.target.host} ansible_user=${user} ansible_port=${port}`,
27459
+ "",
27460
+ "[arc:vars]",
27461
+ "ansible_ssh_common_args='-o StrictHostKeyChecking=accept-new -o BatchMode=yes'",
27462
+ "ansible_python_interpreter=/usr/bin/python3",
27463
+ ""
27464
+ ].join(`
27465
+ `);
27466
+ writeFileSync7(join8(workDir, "inventory.ini"), inventory);
27467
+ const extraVars = [
27468
+ `username=${inputs.target.user}`,
27469
+ `ssh_port=${port}`
27470
+ ];
27471
+ if (inputs.ansible?.extraAllowedIps?.length) {
27472
+ extraVars.push(`extra_allowed_ips=${JSON.stringify(inputs.ansible.extraAllowedIps)}`);
27473
+ }
27474
+ const proc2 = spawn2({
27475
+ cmd: [
27476
+ "ansible-playbook",
27477
+ "-i",
27478
+ "inventory.ini",
27479
+ "site.yml",
27480
+ "-e",
27481
+ extraVars.join(" ")
27482
+ ],
27483
+ cwd: workDir,
27484
+ stdout: "inherit",
27485
+ stderr: "inherit",
27486
+ env: { ...process.env, ANSIBLE_HOST_KEY_CHECKING: "False" }
27487
+ });
27488
+ const exit = await proc2.exited;
27489
+ if (exit !== 0) {
27490
+ throw new Error(`ansible-playbook failed (exit ${exit})`);
27491
+ }
27492
+ }
27493
+
27494
+ // src/deploy/caddyfile.ts
27495
+ function generateCaddyfile(cfg) {
27496
+ const email = cfg.caddy.email === "internal" ? "" : `
27497
+ email ${cfg.caddy.email}`;
27498
+ const tlsDirective = cfg.caddy.email === "internal" ? `
27499
+ tls internal` : "";
27500
+ const lines = [];
27501
+ lines.push("# Generated by `arc platform deploy` \u2014 do not edit by hand.");
27502
+ lines.push("");
27503
+ lines.push("{");
27504
+ lines.push(" admin off");
27505
+ if (email)
27506
+ lines.push(` ${email.trim()}`);
27507
+ lines.push("}");
27508
+ lines.push("");
27509
+ for (const [name, env2] of Object.entries(cfg.envs)) {
27510
+ lines.push(`${env2.domain} {${tlsDirective}`);
27511
+ lines.push(" @deploy path /api/deploy /api/deploy/*");
27512
+ lines.push(" respond @deploy 404");
27513
+ lines.push("");
27514
+ lines.push(` reverse_proxy arc-${name}:5005`);
27515
+ lines.push("}");
27516
+ lines.push("");
27517
+ }
27518
+ lines.push("# Loopback-only management listener (SSH tunnel access).");
27519
+ lines.push("http://127.0.0.1:2019 {");
27520
+ lines.push(" bind 127.0.0.1");
27521
+ for (const [name] of Object.entries(cfg.envs)) {
27522
+ lines.push(` handle_path /env/${name}/* {`);
27523
+ lines.push(` reverse_proxy arc-${name}:5005`);
27524
+ lines.push(` }`);
27525
+ }
27526
+ lines.push(" respond 404");
27527
+ lines.push("}");
27528
+ return lines.join(`
27529
+ `) + `
27530
+ `;
27531
+ }
27532
+
27533
+ // src/deploy/compose.ts
27534
+ function generateCompose({ cfg }) {
27535
+ const lines = [];
27536
+ lines.push("# Generated by `arc platform deploy` \u2014 do not edit by hand.");
27537
+ lines.push("");
27538
+ lines.push("services:");
27539
+ lines.push(" caddy:");
27540
+ lines.push(" image: caddy:2-alpine");
27541
+ lines.push(" restart: unless-stopped");
27542
+ lines.push(" ports:");
27543
+ lines.push(' - "80:80"');
27544
+ lines.push(' - "443:443"');
27545
+ lines.push(' - "127.0.0.1:2019:2019"');
27546
+ lines.push(" volumes:");
27547
+ lines.push(" - ./Caddyfile:/etc/caddy/Caddyfile:ro");
27548
+ lines.push(" - caddy_data:/data");
27549
+ lines.push(" - caddy_config:/config");
27550
+ lines.push(" networks:");
27551
+ lines.push(" - arc-net");
27552
+ lines.push("");
27553
+ for (const [name, env2] of Object.entries(cfg.envs)) {
27554
+ lines.push(` arc-${name}:`);
27555
+ lines.push(" image: oven/bun:1-alpine");
27556
+ lines.push(" restart: unless-stopped");
27557
+ lines.push(` working_dir: /app`);
27558
+ lines.push(" volumes:");
27559
+ lines.push(` - ${cfg.target.remoteDir}/${name}:/app`);
27560
+ lines.push(` - arc-data-${name}:/app/.arc/data`);
27561
+ lines.push(" environment:");
27562
+ lines.push(" PORT: 5005");
27563
+ lines.push(' ARC_DEPLOY_API: "1"');
27564
+ lines.push(" NODE_ENV: production");
27565
+ for (const [k, v] of Object.entries(env2.envVars ?? {})) {
27566
+ lines.push(` ${k}: ${JSON.stringify(v)}`);
27567
+ }
27568
+ lines.push(' command: ["node_modules/.bin/arc", "platform", "start"]');
27569
+ lines.push(" networks:");
27570
+ lines.push(" - arc-net");
27571
+ lines.push(" expose:");
27572
+ lines.push(' - "5005"');
27573
+ lines.push("");
27574
+ }
27575
+ lines.push("networks:");
27576
+ lines.push(" arc-net:");
27577
+ lines.push("");
27578
+ lines.push("volumes:");
27579
+ lines.push(" caddy_data:");
27580
+ lines.push(" caddy_config:");
27581
+ for (const [name] of Object.entries(cfg.envs)) {
27582
+ lines.push(` arc-data-${name}:`);
27583
+ }
27584
+ return lines.join(`
27585
+ `) + `
27586
+ `;
27587
+ }
27588
+
27589
+ // src/deploy/terraform.ts
27590
+ var {spawn: spawn3 } = globalThis.Bun;
27591
+ import { existsSync as existsSync7, mkdirSync as mkdirSync8, writeFileSync as writeFileSync8 } from "fs";
27592
+ import { tmpdir as tmpdir2 } from "os";
26867
27593
  import { join as join9 } from "path";
27594
+ async function runTerraform(inputs) {
27595
+ const workDir = join9(tmpdir2(), "arc-deploy", `tf-${Date.now()}`);
27596
+ mkdirSync8(workDir, { recursive: true });
27597
+ await materializeAssets(workDir, ASSETS.terraform);
27598
+ const sshPubKey = inputs.tf.sshPublicKey ?? expandHome("~/.ssh/id_ed25519.pub");
27599
+ if (!existsSync7(expandHome(sshPubKey))) {
27600
+ throw new Error(`SSH public key not found at ${sshPubKey}. Set provision.terraform.sshPublicKey in deploy.arc.json.`);
27601
+ }
27602
+ const tfvars = [
27603
+ `hcloud_token = "${inputs.token}"`,
27604
+ `server_name = "${inputs.serverName}"`,
27605
+ `server_type = "${inputs.tf.serverType}"`,
27606
+ `server_location = "${inputs.tf.location}"`,
27607
+ `server_image = "${inputs.tf.image}"`,
27608
+ `ssh_public_key = "${expandHome(sshPubKey)}"`
27609
+ ].join(`
27610
+ `) + `
27611
+ `;
27612
+ writeFileSync8(join9(workDir, "terraform.tfvars"), tfvars);
27613
+ await runTf(workDir, ["init", "-input=false", "-no-color"]);
27614
+ await runTf(workDir, [
27615
+ "apply",
27616
+ "-auto-approve",
27617
+ "-input=false",
27618
+ "-no-color"
27619
+ ]);
27620
+ const ip = await runTfCapture(workDir, [
27621
+ "output",
27622
+ "-raw",
27623
+ "server_ip",
27624
+ "-no-color"
27625
+ ]);
27626
+ return { serverIp: ip.trim(), serverName: inputs.serverName, workDir };
27627
+ }
27628
+ async function runTf(workDir, args) {
27629
+ const proc2 = spawn3({
27630
+ cmd: ["terraform", ...args],
27631
+ cwd: workDir,
27632
+ stdout: "inherit",
27633
+ stderr: "inherit"
27634
+ });
27635
+ const exit = await proc2.exited;
27636
+ if (exit !== 0) {
27637
+ throw new Error(`terraform ${args[0]} failed (exit ${exit})`);
27638
+ }
27639
+ }
27640
+ async function runTfCapture(workDir, args) {
27641
+ const proc2 = spawn3({
27642
+ cmd: ["terraform", ...args],
27643
+ cwd: workDir,
27644
+ stdout: "pipe",
27645
+ stderr: "pipe"
27646
+ });
27647
+ const [stdout, exit] = await Promise.all([
27648
+ new Response(proc2.stdout).text(),
27649
+ proc2.exited
27650
+ ]);
27651
+ if (exit !== 0) {
27652
+ throw new Error(`terraform ${args[0]} failed (exit ${exit})`);
27653
+ }
27654
+ return stdout;
27655
+ }
27656
+ function expandHome(p) {
27657
+ if (p.startsWith("~/")) {
27658
+ return p.replace(/^~/, process.env.HOME ?? "~");
27659
+ }
27660
+ return p;
27661
+ }
27662
+
27663
+ // src/deploy/config.ts
27664
+ import { existsSync as existsSync8, readFileSync as readFileSync7, writeFileSync as writeFileSync9 } from "fs";
27665
+ import { join as join10 } from "path";
27666
+ var DEPLOY_CONFIG_FILE = "deploy.arc.json";
27667
+ function deployConfigPath(rootDir) {
27668
+ return join10(rootDir, DEPLOY_CONFIG_FILE);
27669
+ }
27670
+ function deployConfigExists(rootDir) {
27671
+ return existsSync8(deployConfigPath(rootDir));
27672
+ }
27673
+ function loadDeployConfig(rootDir) {
27674
+ const path4 = deployConfigPath(rootDir);
27675
+ if (!existsSync8(path4)) {
27676
+ throw new Error(`Missing ${DEPLOY_CONFIG_FILE} at ${path4}`);
27677
+ }
27678
+ const raw = readFileSync7(path4, "utf-8");
27679
+ let parsed;
27680
+ try {
27681
+ parsed = JSON.parse(raw);
27682
+ } catch (e) {
27683
+ throw new Error(`Invalid JSON in ${DEPLOY_CONFIG_FILE}: ${e.message}`);
27684
+ }
27685
+ const expanded = expandEnvVars(parsed, process.env);
27686
+ return validateDeployConfig(expanded);
27687
+ }
27688
+ function saveDeployConfig(rootDir, cfg) {
27689
+ writeFileSync9(deployConfigPath(rootDir), JSON.stringify(cfg, null, 2) + `
27690
+ `);
27691
+ }
27692
+ var VAR_REGEX = /\$\{([A-Z0-9_]+)\}|\$([A-Z0-9_]+)/g;
27693
+ function expandEnvVars(value, env2) {
27694
+ if (typeof value === "string") {
27695
+ return value.replace(VAR_REGEX, (_, a, b) => env2[a ?? b] ?? "");
27696
+ }
27697
+ if (Array.isArray(value)) {
27698
+ return value.map((v) => expandEnvVars(v, env2));
27699
+ }
27700
+ if (value && typeof value === "object") {
27701
+ const out = {};
27702
+ for (const [k, v] of Object.entries(value)) {
27703
+ out[k] = expandEnvVars(v, env2);
27704
+ }
27705
+ return out;
27706
+ }
27707
+ return value;
27708
+ }
27709
+ function validateDeployConfig(input) {
27710
+ if (!isObject(input))
27711
+ throw cfgErr("root", "object");
27712
+ const target = requireObject(input, "target");
27713
+ const envs = requireObject(input, "envs");
27714
+ const caddy = requireObject(input, "caddy");
27715
+ const validated = {
27716
+ target: {
27717
+ host: requireString(target, "target.host"),
27718
+ user: optionalString(target, "target.user") ?? "deploy",
27719
+ port: optionalNumber(target, "target.port") ?? 22,
27720
+ remoteDir: optionalString(target, "target.remoteDir") ?? "/opt/arc",
27721
+ sshKey: optionalString(target, "target.sshKey")
27722
+ },
27723
+ envs: {},
27724
+ caddy: {
27725
+ email: requireString(caddy, "caddy.email")
27726
+ }
27727
+ };
27728
+ const envKeys = Object.keys(envs);
27729
+ if (envKeys.length === 0) {
27730
+ throw new Error("deploy.arc.json: envs must contain at least one environment");
27731
+ }
27732
+ for (const name of envKeys) {
27733
+ if (!/^[a-z][a-z0-9-]*$/.test(name)) {
27734
+ throw new Error(`deploy.arc.json: env name "${name}" must match [a-z][a-z0-9-]*`);
27735
+ }
27736
+ const env2 = requireObject(envs, `envs.${name}`);
27737
+ const domain = requireString(env2, `envs.${name}.domain`);
27738
+ if (!/^[a-z0-9.-]+\.[a-z]{2,}$/i.test(domain)) {
27739
+ throw new Error(`deploy.arc.json: envs.${name}.domain "${domain}" doesn't look like a domain`);
27740
+ }
27741
+ const envVarsRaw = env2.envVars;
27742
+ let envVars;
27743
+ if (envVarsRaw !== undefined) {
27744
+ if (!isObject(envVarsRaw))
27745
+ throw cfgErr(`envs.${name}.envVars`, "object");
27746
+ envVars = {};
27747
+ for (const [k, v] of Object.entries(envVarsRaw)) {
27748
+ if (typeof v !== "string") {
27749
+ throw new Error(`deploy.arc.json: envs.${name}.envVars.${k} must be a string`);
27750
+ }
27751
+ envVars[k] = v;
27752
+ }
27753
+ }
27754
+ validated.envs[name] = { domain, envVars };
27755
+ }
27756
+ const provision = input.provision;
27757
+ if (provision !== undefined) {
27758
+ if (!isObject(provision))
27759
+ throw cfgErr("provision", "object");
27760
+ const tf = requireObject(provision, "provision.terraform");
27761
+ const providerVal = requireString(tf, "provision.terraform.provider");
27762
+ if (providerVal !== "hcloud") {
27763
+ throw new Error(`deploy.arc.json: provision.terraform.provider must be "hcloud" (got "${providerVal}")`);
27764
+ }
27765
+ const terraform = {
27766
+ provider: "hcloud",
27767
+ serverType: requireString(tf, "provision.terraform.serverType"),
27768
+ location: requireString(tf, "provision.terraform.location"),
27769
+ image: optionalString(tf, "provision.terraform.image") ?? "ubuntu-22.04",
27770
+ tokenEnv: requireString(tf, "provision.terraform.tokenEnv"),
27771
+ sshPublicKey: optionalString(tf, "provision.terraform.sshPublicKey")
27772
+ };
27773
+ let ansible;
27774
+ const ansibleRaw = provision.ansible;
27775
+ if (ansibleRaw !== undefined) {
27776
+ if (!isObject(ansibleRaw))
27777
+ throw cfgErr("provision.ansible", "object");
27778
+ const allowed = ansibleRaw.extraAllowedIps;
27779
+ let extraAllowedIps;
27780
+ if (allowed !== undefined) {
27781
+ if (!Array.isArray(allowed)) {
27782
+ throw cfgErr("provision.ansible.extraAllowedIps", "string[]");
27783
+ }
27784
+ extraAllowedIps = allowed.map((v, i) => {
27785
+ if (typeof v !== "string") {
27786
+ throw cfgErr(`provision.ansible.extraAllowedIps[${i}]`, "string");
27787
+ }
27788
+ return v;
27789
+ });
27790
+ }
27791
+ ansible = {
27792
+ sshPort: optionalNumber(ansibleRaw, "provision.ansible.sshPort"),
27793
+ extraAllowedIps
27794
+ };
27795
+ }
27796
+ validated.provision = { terraform, ansible };
27797
+ }
27798
+ return validated;
27799
+ }
27800
+ function isObject(v) {
27801
+ return typeof v === "object" && v !== null && !Array.isArray(v);
27802
+ }
27803
+ function requireObject(parent, key) {
27804
+ const bare = key.includes(".") ? key.split(".").pop() : key;
27805
+ const v = parent[bare];
27806
+ if (!isObject(v))
27807
+ throw cfgErr(key, "object");
27808
+ return v;
27809
+ }
27810
+ function requireString(parent, key) {
27811
+ const bare = key.includes(".") ? key.split(".").pop() : key;
27812
+ const v = parent[bare];
27813
+ if (typeof v !== "string" || v.length === 0)
27814
+ throw cfgErr(key, "non-empty string");
27815
+ return v;
27816
+ }
27817
+ function optionalString(parent, key) {
27818
+ const bare = key.includes(".") ? key.split(".").pop() : key;
27819
+ const v = parent[bare];
27820
+ if (v === undefined)
27821
+ return;
27822
+ if (typeof v !== "string")
27823
+ throw cfgErr(key, "string");
27824
+ return v;
27825
+ }
27826
+ function optionalNumber(parent, key) {
27827
+ const bare = key.includes(".") ? key.split(".").pop() : key;
27828
+ const v = parent[bare];
27829
+ if (v === undefined)
27830
+ return;
27831
+ if (typeof v !== "number")
27832
+ throw cfgErr(key, "number");
27833
+ return v;
27834
+ }
27835
+ function cfgErr(path4, expected) {
27836
+ return new Error(`deploy.arc.json: ${path4} must be ${expected}`);
27837
+ }
27838
+
27839
+ // src/deploy/ssh.ts
27840
+ var {spawn: spawn4 } = globalThis.Bun;
27841
+ async function streamToString(stream2) {
27842
+ if (!stream2 || typeof stream2 === "number")
27843
+ return "";
27844
+ return new Response(stream2).text();
27845
+ }
27846
+ function baseSshArgs(target) {
27847
+ const args = [
27848
+ "-o",
27849
+ "BatchMode=yes",
27850
+ "-o",
27851
+ "StrictHostKeyChecking=accept-new",
27852
+ "-p",
27853
+ String(target.port)
27854
+ ];
27855
+ if (target.sshKey)
27856
+ args.push("-i", target.sshKey);
27857
+ return args;
27858
+ }
27859
+ async function sshExec(target, cmd, opts = {}) {
27860
+ const args = [
27861
+ ...baseSshArgs(target),
27862
+ `${target.user}@${target.host}`,
27863
+ "--",
27864
+ cmd
27865
+ ];
27866
+ const proc2 = spawn4({
27867
+ cmd: ["ssh", ...args],
27868
+ stdin: opts.stdin ? "pipe" : "ignore",
27869
+ stdout: "pipe",
27870
+ stderr: "pipe"
27871
+ });
27872
+ if (opts.stdin && proc2.stdin) {
27873
+ const data = typeof opts.stdin === "string" ? new TextEncoder().encode(opts.stdin) : opts.stdin;
27874
+ await proc2.stdin.write(data);
27875
+ await proc2.stdin.end?.();
27876
+ }
27877
+ const [stdout, stderr, exitCode] = await Promise.all([
27878
+ streamToString(proc2.stdout),
27879
+ streamToString(proc2.stderr),
27880
+ proc2.exited
27881
+ ]);
27882
+ if (!opts.quiet && exitCode !== 0) {
27883
+ process.stderr.write(stderr);
27884
+ }
27885
+ return { stdout, stderr, exitCode };
27886
+ }
27887
+ async function assertExec(target, cmd) {
27888
+ const res = await sshExec(target, cmd);
27889
+ if (res.exitCode !== 0) {
27890
+ throw new Error(`SSH command failed (exit ${res.exitCode}): ${cmd}
27891
+ ${res.stderr}`);
27892
+ }
27893
+ return res.stdout;
27894
+ }
27895
+ async function canSsh(target) {
27896
+ const res = await sshExec(target, "true", { quiet: true });
27897
+ return res.exitCode === 0;
27898
+ }
27899
+ async function waitForSsh(target, opts = {}) {
27900
+ const timeout = opts.timeoutMs ?? 300000;
27901
+ const interval = opts.intervalMs ?? 1e4;
27902
+ const start = Date.now();
27903
+ while (Date.now() - start < timeout) {
27904
+ if (await canSsh(target))
27905
+ return;
27906
+ await Bun.sleep(interval);
27907
+ }
27908
+ throw new Error(`Timed out waiting for SSH on ${target.user}@${target.host}`);
27909
+ }
27910
+ async function scpUpload(target, localPath, remotePath) {
27911
+ const args = [
27912
+ "-o",
27913
+ "BatchMode=yes",
27914
+ "-o",
27915
+ "StrictHostKeyChecking=accept-new",
27916
+ "-P",
27917
+ String(target.port)
27918
+ ];
27919
+ if (target.sshKey)
27920
+ args.push("-i", target.sshKey);
27921
+ args.push(localPath, `${target.user}@${target.host}:${remotePath}`);
27922
+ const proc2 = spawn4({ cmd: ["scp", ...args], stderr: "pipe" });
27923
+ const [stderr, exitCode] = await Promise.all([
27924
+ streamToString(proc2.stderr),
27925
+ proc2.exited
27926
+ ]);
27927
+ if (exitCode !== 0) {
27928
+ throw new Error(`scp failed (${exitCode}): ${stderr}`);
27929
+ }
27930
+ }
27931
+ async function rsyncDir(target, localDir, remoteDir, opts = {}) {
27932
+ const sshCmdParts = ["ssh", "-p", String(target.port)];
27933
+ if (target.sshKey)
27934
+ sshCmdParts.push("-i", target.sshKey);
27935
+ const sshCmd = sshCmdParts.join(" ");
27936
+ const args = ["-azL", "-e", sshCmd];
27937
+ if (opts.delete)
27938
+ args.push("--delete");
27939
+ const src = localDir.endsWith("/") ? localDir : `${localDir}/`;
27940
+ args.push(src, `${target.user}@${target.host}:${remoteDir}`);
27941
+ const proc2 = spawn4({
27942
+ cmd: ["rsync", ...args],
27943
+ stderr: "pipe",
27944
+ stdout: "pipe"
27945
+ });
27946
+ const [stderr, exitCode] = await Promise.all([
27947
+ streamToString(proc2.stderr),
27948
+ proc2.exited
27949
+ ]);
27950
+ if (exitCode !== 0) {
27951
+ throw new Error(`rsync failed (${exitCode}): ${stderr}`);
27952
+ }
27953
+ }
27954
+ async function openTunnel(target, localPort, remoteHost, remotePort) {
27955
+ const args = [
27956
+ ...baseSshArgs(target),
27957
+ "-N",
27958
+ "-L",
27959
+ `${localPort}:${remoteHost}:${remotePort}`,
27960
+ `${target.user}@${target.host}`
27961
+ ];
27962
+ const proc2 = spawn4({
27963
+ cmd: ["ssh", ...args],
27964
+ stdin: "ignore",
27965
+ stdout: "pipe",
27966
+ stderr: "pipe"
27967
+ });
27968
+ const deadline = Date.now() + 1e4;
27969
+ let lastErr;
27970
+ while (Date.now() < deadline) {
27971
+ if (proc2.exitCode !== null) {
27972
+ const stderr = await streamToString(proc2.stderr);
27973
+ throw new Error(`ssh tunnel exited early: ${stderr}`);
27974
+ }
27975
+ try {
27976
+ const probe = await Bun.connect({
27977
+ hostname: "127.0.0.1",
27978
+ port: localPort,
27979
+ socket: { data() {}, open() {}, close() {}, error() {} }
27980
+ });
27981
+ probe.end();
27982
+ return {
27983
+ localPort,
27984
+ close() {
27985
+ try {
27986
+ proc2.kill();
27987
+ } catch {}
27988
+ }
27989
+ };
27990
+ } catch (e) {
27991
+ lastErr = e;
27992
+ await Bun.sleep(200);
27993
+ }
27994
+ }
27995
+ try {
27996
+ proc2.kill();
27997
+ } catch {}
27998
+ throw new Error(`Failed to establish SSH tunnel on localhost:${localPort}: ${String(lastErr)}`);
27999
+ }
28000
+
28001
+ // src/deploy/remote-state.ts
28002
+ var STATE_MARKER_PATH = "/opt/arc/.arc-state.json";
28003
+ async function detectRemoteState(cfg) {
28004
+ if (cfg.target.host === "PENDING_TERRAFORM" || !cfg.target.host) {
28005
+ return { kind: "unreachable", reason: "target.host not yet set" };
28006
+ }
28007
+ if (!await canSsh(cfg.target)) {
28008
+ return { kind: "unreachable", reason: "ssh connection failed" };
28009
+ }
28010
+ const dockerCheck = await sshExec(cfg.target, "command -v docker", {
28011
+ quiet: true
28012
+ });
28013
+ if (dockerCheck.exitCode !== 0) {
28014
+ return { kind: "no-docker" };
28015
+ }
28016
+ const composeDir = `${cfg.target.remoteDir}`;
28017
+ const psCheck = await sshExec(cfg.target, `test -f ${composeDir}/docker-compose.yml && cd ${composeDir} && docker compose ps --format '{{.Service}}' || true`, { quiet: true });
28018
+ if (psCheck.exitCode !== 0 || psCheck.stdout.trim() === "") {
28019
+ return { kind: "no-stack" };
28020
+ }
28021
+ const running = psCheck.stdout.split(`
28022
+ `).map((l) => l.trim()).filter((l) => l.startsWith("arc-")).map((l) => l.replace(/^arc-/, ""));
28023
+ const markerRaw = await sshExec(cfg.target, `cat ${STATE_MARKER_PATH}`, {
28024
+ quiet: true
28025
+ });
28026
+ let marker = null;
28027
+ if (markerRaw.exitCode === 0) {
28028
+ try {
28029
+ marker = JSON.parse(markerRaw.stdout);
28030
+ } catch {
28031
+ marker = null;
28032
+ }
28033
+ }
28034
+ return { kind: "ready", runningEnvs: running, marker };
28035
+ }
28036
+ async function writeStateMarker(target, marker) {
28037
+ const json = JSON.stringify(marker, null, 2);
28038
+ await assertExec(target, `sudo tee ${STATE_MARKER_PATH} > /dev/null <<'JSON'
28039
+ ${json}
28040
+ JSON`);
28041
+ }
28042
+
28043
+ // src/deploy/bootstrap.ts
28044
+ async function bootstrap(inputs) {
28045
+ const { cfg, state, rootDir } = inputs;
28046
+ if (state.kind === "unreachable") {
28047
+ if (!cfg.provision?.terraform) {
28048
+ throw new Error(`Server ${cfg.target.host} is unreachable and deploy.arc.json has no provision.terraform section. Either fix SSH access or add a provision block.`);
28049
+ }
28050
+ log2("Provisioning server via Terraform...");
28051
+ const token = process.env[cfg.provision.terraform.tokenEnv];
28052
+ if (!token) {
28053
+ throw new Error(`Environment variable ${cfg.provision.terraform.tokenEnv} is not set`);
28054
+ }
28055
+ const tfOut = await runTerraform({
28056
+ tf: cfg.provision.terraform,
28057
+ token,
28058
+ serverName: `arc-${Object.keys(cfg.envs)[0] ?? "host"}`
28059
+ });
28060
+ ok(`Server provisioned: ${tfOut.serverIp}`);
28061
+ cfg.target.host = tfOut.serverIp;
28062
+ saveDeployConfig(rootDir, cfg);
28063
+ log2("Waiting for SSH to come up...");
28064
+ await waitForSsh({ ...cfg.target, user: "root" });
28065
+ ok("SSH reachable");
28066
+ }
28067
+ if (state.kind === "unreachable" || state.kind === "no-docker") {
28068
+ log2("Running Ansible bootstrap (Docker + firewall + SSH hardening)...");
28069
+ const asRoot = state.kind === "unreachable";
28070
+ await runAnsible({
28071
+ target: cfg.target,
28072
+ ansible: cfg.provision?.ansible,
28073
+ asRoot
28074
+ });
28075
+ ok("Host bootstrapped");
28076
+ }
28077
+ if (state.kind !== "ready") {
28078
+ await upStack(inputs);
28079
+ ok("Docker stack up");
28080
+ }
28081
+ await writeStateMarker(cfg.target, {
28082
+ cliVersion: inputs.cliVersion,
28083
+ configHash: inputs.configHash,
28084
+ updatedAt: new Date().toISOString()
28085
+ });
28086
+ }
28087
+ async function upStack(inputs) {
28088
+ const { cfg } = inputs;
28089
+ const workDir = join11(tmpdir3(), "arc-deploy", `stack-${Date.now()}`);
28090
+ mkdirSync9(workDir, { recursive: true });
28091
+ writeFileSync10(join11(workDir, "Caddyfile"), generateCaddyfile(cfg));
28092
+ writeFileSync10(join11(workDir, "docker-compose.yml"), generateCompose({ cfg }));
28093
+ await assertExec(cfg.target, `sudo mkdir -p ${cfg.target.remoteDir} && sudo chown ${cfg.target.user}:${cfg.target.user} ${cfg.target.remoteDir}`);
28094
+ for (const name of Object.keys(cfg.envs)) {
28095
+ await assertExec(cfg.target, `mkdir -p ${cfg.target.remoteDir}/${name}`);
28096
+ }
28097
+ await scpUpload(cfg.target, join11(workDir, "Caddyfile"), `${cfg.target.remoteDir}/Caddyfile`);
28098
+ await scpUpload(cfg.target, join11(workDir, "docker-compose.yml"), `${cfg.target.remoteDir}/docker-compose.yml`);
28099
+ await assertExec(cfg.target, `cd ${cfg.target.remoteDir} && docker compose pull --ignore-pull-failures && docker compose up -d`);
28100
+ }
28101
+
28102
+ // src/deploy/remote-sync.ts
28103
+ import { existsSync as existsSync9, readFileSync as readFileSync8 } from "fs";
28104
+ import { join as join12, relative as relative3 } from "path";
28105
+ function diffManifests(local, remote) {
28106
+ const remoteByName = new Map(remote.modules.map((m) => [m.name, m]));
28107
+ const changedModules = local.modules.filter((m) => remoteByName.get(m.name)?.hash !== m.hash);
28108
+ return {
28109
+ changedModules: [...changedModules],
28110
+ shellChanged: local.shellHash !== remote.shellHash,
28111
+ stylesChanged: local.stylesHash !== remote.stylesHash
28112
+ };
28113
+ }
28114
+ async function syncEnv(inputs) {
28115
+ const { cfg, env: env2, ws, projectDir } = inputs;
28116
+ const envConfig = cfg.envs[env2];
28117
+ if (!envConfig)
28118
+ throw new Error(`Unknown env: ${env2}`);
28119
+ const remotePath = `${cfg.target.remoteDir}/${env2}`;
28120
+ await rsyncDir(cfg.target, projectDir, remotePath);
28121
+ const localManifestPath = join12(ws.modulesDir, "manifest.json");
28122
+ if (!existsSync9(localManifestPath)) {
28123
+ throw new Error(`Local build missing at ${localManifestPath}. Run arc platform build first.`);
28124
+ }
28125
+ const localManifest = JSON.parse(readFileSync8(localManifestPath, "utf-8"));
28126
+ const localPort = 15500 + hashEnvToOffset(env2);
28127
+ const tunnel = await openTunnel(cfg.target, localPort, "127.0.0.1", 2019);
28128
+ try {
28129
+ const base2 = `http://127.0.0.1:${localPort}/env/${env2}`;
28130
+ const remoteManifestRes = await fetch(`${base2}/api/deploy/manifest`);
28131
+ if (!remoteManifestRes.ok) {
28132
+ throw new Error(`Failed to fetch remote manifest: ${remoteManifestRes.status}`);
28133
+ }
28134
+ const remoteManifest = await remoteManifestRes.json();
28135
+ const diff = diffManifests(localManifest, remoteManifest);
28136
+ if (diff.shellChanged) {
28137
+ const shellFiles = collectFiles(ws.shellDir);
28138
+ const form = new FormData;
28139
+ for (const absPath of shellFiles) {
28140
+ const rel = relative3(ws.shellDir, absPath);
28141
+ form.append(rel, new Blob([readFileSync8(absPath)]), rel);
28142
+ }
28143
+ const res2 = await fetch(`${base2}/api/deploy/shell`, {
28144
+ method: "POST",
28145
+ body: form
28146
+ });
28147
+ if (!res2.ok)
28148
+ throw new Error(`Shell upload failed: ${res2.status} ${await res2.text()}`);
28149
+ }
28150
+ if (diff.stylesChanged) {
28151
+ const form = new FormData;
28152
+ for (const name of ["styles.css", "theme.css"]) {
28153
+ const p = join12(ws.arcDir, name);
28154
+ if (existsSync9(p)) {
28155
+ form.append(name, new Blob([readFileSync8(p)]), name);
28156
+ }
28157
+ }
28158
+ const res2 = await fetch(`${base2}/api/deploy/shell`, {
28159
+ method: "POST",
28160
+ body: form
28161
+ });
28162
+ if (!res2.ok)
28163
+ throw new Error(`Styles upload failed: ${res2.status} ${await res2.text()}`);
28164
+ }
28165
+ if (diff.changedModules.length > 0) {
28166
+ const form = new FormData;
28167
+ for (const mod of diff.changedModules) {
28168
+ const p = join12(ws.modulesDir, mod.file);
28169
+ form.append(mod.file, new Blob([readFileSync8(p)]), mod.file);
28170
+ }
28171
+ const res2 = await fetch(`${base2}/api/deploy/modules`, {
28172
+ method: "POST",
28173
+ body: form
28174
+ });
28175
+ if (!res2.ok)
28176
+ throw new Error(`Modules upload failed: ${res2.status} ${await res2.text()}`);
28177
+ }
28178
+ const res = await fetch(`${base2}/api/deploy/manifest`, {
28179
+ method: "POST",
28180
+ headers: { "Content-Type": "application/json" },
28181
+ body: JSON.stringify(localManifest)
28182
+ });
28183
+ if (!res.ok)
28184
+ throw new Error(`Manifest update failed: ${res.status} ${await res.text()}`);
28185
+ return {
28186
+ env: env2,
28187
+ changedModules: diff.changedModules.map((m) => m.name),
28188
+ shellChanged: diff.shellChanged,
28189
+ stylesChanged: diff.stylesChanged
28190
+ };
28191
+ } finally {
28192
+ tunnel.close();
28193
+ }
28194
+ }
28195
+ function collectFiles(dir) {
28196
+ if (!existsSync9(dir))
28197
+ return [];
28198
+ const { readdirSync: readdirSync5 } = __require("fs");
28199
+ const out = [];
28200
+ for (const entry of readdirSync5(dir, { withFileTypes: true })) {
28201
+ const p = join12(dir, entry.name);
28202
+ if (entry.isDirectory())
28203
+ out.push(...collectFiles(p));
28204
+ else if (entry.isFile())
28205
+ out.push(p);
28206
+ }
28207
+ return out;
28208
+ }
28209
+ function hashEnvToOffset(env2) {
28210
+ let h = 0;
28211
+ for (const ch of env2)
28212
+ h = h * 31 + ch.charCodeAt(0) >>> 0;
28213
+ return h % 100;
28214
+ }
28215
+
28216
+ // ../../node_modules/.bun/@clack+core@0.4.1/node_modules/@clack/core/dist/index.mjs
28217
+ var import_sisteransi = __toESM(require_src(), 1);
28218
+ import { stdin as $, stdout as j } from "process";
28219
+ var import_picocolors = __toESM(require_picocolors(), 1);
28220
+ import M from "readline";
28221
+ import { WriteStream as U } from "tty";
28222
+ function J({ onlyFirst: t = false } = {}) {
28223
+ const F = ["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))", "(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");
28224
+ return new RegExp(F, t ? undefined : "g");
28225
+ }
28226
+ var Q = J();
28227
+ function T(t) {
28228
+ if (typeof t != "string")
28229
+ throw new TypeError(`Expected a \`string\`, got \`${typeof t}\``);
28230
+ return t.replace(Q, "");
28231
+ }
28232
+ function O(t) {
28233
+ return t && t.__esModule && Object.prototype.hasOwnProperty.call(t, "default") ? t.default : t;
28234
+ }
28235
+ var P = { exports: {} };
28236
+ (function(t) {
28237
+ var u = {};
28238
+ t.exports = u, u.eastAsianWidth = function(e) {
28239
+ var s = e.charCodeAt(0), i = e.length == 2 ? e.charCodeAt(1) : 0, D = s;
28240
+ return 55296 <= s && s <= 56319 && 56320 <= i && i <= 57343 && (s &= 1023, i &= 1023, D = s << 10 | i, D += 65536), D == 12288 || 65281 <= D && D <= 65376 || 65504 <= D && D <= 65510 ? "F" : D == 8361 || 65377 <= D && D <= 65470 || 65474 <= D && D <= 65479 || 65482 <= D && D <= 65487 || 65490 <= D && D <= 65495 || 65498 <= D && D <= 65500 || 65512 <= D && D <= 65518 ? "H" : 4352 <= D && D <= 4447 || 4515 <= D && D <= 4519 || 4602 <= D && D <= 4607 || 9001 <= D && D <= 9002 || 11904 <= D && D <= 11929 || 11931 <= D && D <= 12019 || 12032 <= D && D <= 12245 || 12272 <= D && D <= 12283 || 12289 <= D && D <= 12350 || 12353 <= D && D <= 12438 || 12441 <= D && D <= 12543 || 12549 <= D && D <= 12589 || 12593 <= D && D <= 12686 || 12688 <= D && D <= 12730 || 12736 <= D && D <= 12771 || 12784 <= D && D <= 12830 || 12832 <= D && D <= 12871 || 12880 <= D && D <= 13054 || 13056 <= D && D <= 19903 || 19968 <= D && D <= 42124 || 42128 <= D && D <= 42182 || 43360 <= D && D <= 43388 || 44032 <= D && D <= 55203 || 55216 <= D && D <= 55238 || 55243 <= D && D <= 55291 || 63744 <= D && D <= 64255 || 65040 <= D && D <= 65049 || 65072 <= D && D <= 65106 || 65108 <= D && D <= 65126 || 65128 <= D && D <= 65131 || 110592 <= D && D <= 110593 || 127488 <= D && D <= 127490 || 127504 <= D && D <= 127546 || 127552 <= D && D <= 127560 || 127568 <= D && D <= 127569 || 131072 <= D && D <= 194367 || 177984 <= D && D <= 196605 || 196608 <= D && D <= 262141 ? "W" : 32 <= D && D <= 126 || 162 <= D && D <= 163 || 165 <= D && D <= 166 || D == 172 || D == 175 || 10214 <= D && D <= 10221 || 10629 <= D && D <= 10630 ? "Na" : D == 161 || D == 164 || 167 <= D && D <= 168 || D == 170 || 173 <= D && D <= 174 || 176 <= D && D <= 180 || 182 <= D && D <= 186 || 188 <= D && D <= 191 || D == 198 || D == 208 || 215 <= D && D <= 216 || 222 <= D && D <= 225 || D == 230 || 232 <= D && D <= 234 || 236 <= D && D <= 237 || D == 240 || 242 <= D && D <= 243 || 247 <= D && D <= 250 || D == 252 || D == 254 || D == 257 || D == 273 || D == 275 || D == 283 || 294 <= D && D <= 295 || D == 299 || 305 <= D && D <= 307 || D == 312 || 319 <= D && D <= 322 || D == 324 || 328 <= D && D <= 331 || D == 333 || 338 <= D && D <= 339 || 358 <= D && D <= 359 || D == 363 || D == 462 || D == 464 || D == 466 || D == 468 || D == 470 || D == 472 || D == 474 || D == 476 || D == 593 || D == 609 || D == 708 || D == 711 || 713 <= D && D <= 715 || D == 717 || D == 720 || 728 <= D && D <= 731 || D == 733 || D == 735 || 768 <= D && D <= 879 || 913 <= D && D <= 929 || 931 <= D && D <= 937 || 945 <= D && D <= 961 || 963 <= D && D <= 969 || D == 1025 || 1040 <= D && D <= 1103 || D == 1105 || D == 8208 || 8211 <= D && D <= 8214 || 8216 <= D && D <= 8217 || 8220 <= D && D <= 8221 || 8224 <= D && D <= 8226 || 8228 <= D && D <= 8231 || D == 8240 || 8242 <= D && D <= 8243 || D == 8245 || D == 8251 || D == 8254 || D == 8308 || D == 8319 || 8321 <= D && D <= 8324 || D == 8364 || D == 8451 || D == 8453 || D == 8457 || D == 8467 || D == 8470 || 8481 <= D && D <= 8482 || D == 8486 || D == 8491 || 8531 <= D && D <= 8532 || 8539 <= D && D <= 8542 || 8544 <= D && D <= 8555 || 8560 <= D && D <= 8569 || D == 8585 || 8592 <= D && D <= 8601 || 8632 <= D && D <= 8633 || D == 8658 || D == 8660 || D == 8679 || D == 8704 || 8706 <= D && D <= 8707 || 8711 <= D && D <= 8712 || D == 8715 || D == 8719 || D == 8721 || D == 8725 || D == 8730 || 8733 <= D && D <= 8736 || D == 8739 || D == 8741 || 8743 <= D && D <= 8748 || D == 8750 || 8756 <= D && D <= 8759 || 8764 <= D && D <= 8765 || D == 8776 || D == 8780 || D == 8786 || 8800 <= D && D <= 8801 || 8804 <= D && D <= 8807 || 8810 <= D && D <= 8811 || 8814 <= D && D <= 8815 || 8834 <= D && D <= 8835 || 8838 <= D && D <= 8839 || D == 8853 || D == 8857 || D == 8869 || D == 8895 || D == 8978 || 9312 <= D && D <= 9449 || 9451 <= D && D <= 9547 || 9552 <= D && D <= 9587 || 9600 <= D && D <= 9615 || 9618 <= D && D <= 9621 || 9632 <= D && D <= 9633 || 9635 <= D && D <= 9641 || 9650 <= D && D <= 9651 || 9654 <= D && D <= 9655 || 9660 <= D && D <= 9661 || 9664 <= D && D <= 9665 || 9670 <= D && D <= 9672 || D == 9675 || 9678 <= D && D <= 9681 || 9698 <= D && D <= 9701 || D == 9711 || 9733 <= D && D <= 9734 || D == 9737 || 9742 <= D && D <= 9743 || 9748 <= D && D <= 9749 || D == 9756 || D == 9758 || D == 9792 || D == 9794 || 9824 <= D && D <= 9825 || 9827 <= D && D <= 9829 || 9831 <= D && D <= 9834 || 9836 <= D && D <= 9837 || D == 9839 || 9886 <= D && D <= 9887 || 9918 <= D && D <= 9919 || 9924 <= D && D <= 9933 || 9935 <= D && D <= 9953 || D == 9955 || 9960 <= D && D <= 9983 || D == 10045 || D == 10071 || 10102 <= D && D <= 10111 || 11093 <= D && D <= 11097 || 12872 <= D && D <= 12879 || 57344 <= D && D <= 63743 || 65024 <= D && D <= 65039 || D == 65533 || 127232 <= D && D <= 127242 || 127248 <= D && D <= 127277 || 127280 <= D && D <= 127337 || 127344 <= D && D <= 127386 || 917760 <= D && D <= 917999 || 983040 <= D && D <= 1048573 || 1048576 <= D && D <= 1114109 ? "A" : "N";
28241
+ }, u.characterLength = function(e) {
28242
+ var s = this.eastAsianWidth(e);
28243
+ return s == "F" || s == "W" || s == "A" ? 2 : 1;
28244
+ };
28245
+ function F(e) {
28246
+ return e.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g) || [];
28247
+ }
28248
+ u.length = function(e) {
28249
+ for (var s = F(e), i = 0, D = 0;D < s.length; D++)
28250
+ i = i + this.characterLength(s[D]);
28251
+ return i;
28252
+ }, u.slice = function(e, s, i) {
28253
+ textLen = u.length(e), s = s || 0, i = i || 1, s < 0 && (s = textLen + s), i < 0 && (i = textLen + i);
28254
+ for (var D = "", C2 = 0, o = F(e), E = 0;E < o.length; E++) {
28255
+ var a = o[E], n = u.length(a);
28256
+ if (C2 >= s - (n == 2 ? 1 : 0))
28257
+ if (C2 + n <= i)
28258
+ D += a;
28259
+ else
28260
+ break;
28261
+ C2 += n;
28262
+ }
28263
+ return D;
28264
+ };
28265
+ })(P);
28266
+ var X = P.exports;
28267
+ var DD = O(X);
28268
+ var uD = function() {
28269
+ return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g;
28270
+ };
28271
+ var FD = O(uD);
28272
+ function A(t, u = {}) {
28273
+ if (typeof t != "string" || t.length === 0 || (u = { ambiguousIsNarrow: true, ...u }, t = T(t), t.length === 0))
28274
+ return 0;
28275
+ t = t.replace(FD(), " ");
28276
+ const F = u.ambiguousIsNarrow ? 1 : 2;
28277
+ let e = 0;
28278
+ for (const s of t) {
28279
+ const i = s.codePointAt(0);
28280
+ if (i <= 31 || i >= 127 && i <= 159 || i >= 768 && i <= 879)
28281
+ continue;
28282
+ switch (DD.eastAsianWidth(s)) {
28283
+ case "F":
28284
+ case "W":
28285
+ e += 2;
28286
+ break;
28287
+ case "A":
28288
+ e += F;
28289
+ break;
28290
+ default:
28291
+ e += 1;
28292
+ }
28293
+ }
28294
+ return e;
28295
+ }
28296
+ var m = 10;
28297
+ var L = (t = 0) => (u) => `\x1B[${u + t}m`;
28298
+ var N = (t = 0) => (u) => `\x1B[${38 + t};5;${u}m`;
28299
+ var I = (t = 0) => (u, F, e) => `\x1B[${38 + t};2;${u};${F};${e}m`;
28300
+ var r = { modifier: { reset: [0, 0], bold: [1, 22], dim: [2, 22], italic: [3, 23], underline: [4, 24], overline: [53, 55], inverse: [7, 27], hidden: [8, 28], strikethrough: [9, 29] }, color: { black: [30, 39], red: [31, 39], green: [32, 39], yellow: [33, 39], blue: [34, 39], magenta: [35, 39], cyan: [36, 39], white: [37, 39], blackBright: [90, 39], gray: [90, 39], grey: [90, 39], redBright: [91, 39], greenBright: [92, 39], yellowBright: [93, 39], blueBright: [94, 39], magentaBright: [95, 39], cyanBright: [96, 39], whiteBright: [97, 39] }, bgColor: { bgBlack: [40, 49], bgRed: [41, 49], bgGreen: [42, 49], bgYellow: [43, 49], bgBlue: [44, 49], bgMagenta: [45, 49], bgCyan: [46, 49], bgWhite: [47, 49], bgBlackBright: [100, 49], bgGray: [100, 49], bgGrey: [100, 49], bgRedBright: [101, 49], bgGreenBright: [102, 49], bgYellowBright: [103, 49], bgBlueBright: [104, 49], bgMagentaBright: [105, 49], bgCyanBright: [106, 49], bgWhiteBright: [107, 49] } };
28301
+ Object.keys(r.modifier);
28302
+ var tD = Object.keys(r.color);
28303
+ var eD = Object.keys(r.bgColor);
28304
+ [...tD, ...eD];
28305
+ function sD() {
28306
+ const t = new Map;
28307
+ for (const [u, F] of Object.entries(r)) {
28308
+ for (const [e, s] of Object.entries(F))
28309
+ r[e] = { open: `\x1B[${s[0]}m`, close: `\x1B[${s[1]}m` }, F[e] = r[e], t.set(s[0], s[1]);
28310
+ Object.defineProperty(r, u, { value: F, enumerable: false });
28311
+ }
28312
+ return Object.defineProperty(r, "codes", { value: t, enumerable: false }), r.color.close = "\x1B[39m", r.bgColor.close = "\x1B[49m", r.color.ansi = L(), r.color.ansi256 = N(), r.color.ansi16m = I(), r.bgColor.ansi = L(m), r.bgColor.ansi256 = N(m), r.bgColor.ansi16m = I(m), Object.defineProperties(r, { rgbToAnsi256: { value: (u, F, e) => u === F && F === e ? u < 8 ? 16 : u > 248 ? 231 : Math.round((u - 8) / 247 * 24) + 232 : 16 + 36 * Math.round(u / 255 * 5) + 6 * Math.round(F / 255 * 5) + Math.round(e / 255 * 5), enumerable: false }, hexToRgb: { value: (u) => {
28313
+ const F = /[a-f\d]{6}|[a-f\d]{3}/i.exec(u.toString(16));
28314
+ if (!F)
28315
+ return [0, 0, 0];
28316
+ let [e] = F;
28317
+ e.length === 3 && (e = [...e].map((i) => i + i).join(""));
28318
+ const s = Number.parseInt(e, 16);
28319
+ return [s >> 16 & 255, s >> 8 & 255, s & 255];
28320
+ }, enumerable: false }, hexToAnsi256: { value: (u) => r.rgbToAnsi256(...r.hexToRgb(u)), enumerable: false }, ansi256ToAnsi: { value: (u) => {
28321
+ if (u < 8)
28322
+ return 30 + u;
28323
+ if (u < 16)
28324
+ return 90 + (u - 8);
28325
+ let F, e, s;
28326
+ if (u >= 232)
28327
+ F = ((u - 232) * 10 + 8) / 255, e = F, s = F;
28328
+ else {
28329
+ u -= 16;
28330
+ const C2 = u % 36;
28331
+ F = Math.floor(u / 36) / 5, e = Math.floor(C2 / 6) / 5, s = C2 % 6 / 5;
28332
+ }
28333
+ const i = Math.max(F, e, s) * 2;
28334
+ if (i === 0)
28335
+ return 30;
28336
+ let D = 30 + (Math.round(s) << 2 | Math.round(e) << 1 | Math.round(F));
28337
+ return i === 2 && (D += 60), D;
28338
+ }, enumerable: false }, rgbToAnsi: { value: (u, F, e) => r.ansi256ToAnsi(r.rgbToAnsi256(u, F, e)), enumerable: false }, hexToAnsi: { value: (u) => r.ansi256ToAnsi(r.hexToAnsi256(u)), enumerable: false } }), r;
28339
+ }
28340
+ var iD = sD();
28341
+ var v = new Set(["\x1B", "\x9B"]);
28342
+ var CD = 39;
28343
+ var w = "\x07";
28344
+ var W = "[";
28345
+ var rD = "]";
28346
+ var R = "m";
28347
+ var y = `${rD}8;;`;
28348
+ var V = (t) => `${v.values().next().value}${W}${t}${R}`;
28349
+ var z = (t) => `${v.values().next().value}${y}${t}${w}`;
28350
+ var ED = (t) => t.split(" ").map((u) => A(u));
28351
+ var _ = (t, u, F) => {
28352
+ const e = [...u];
28353
+ let s = false, i = false, D = A(T(t[t.length - 1]));
28354
+ for (const [C2, o] of e.entries()) {
28355
+ const E = A(o);
28356
+ if (D + E <= F ? t[t.length - 1] += o : (t.push(o), D = 0), v.has(o) && (s = true, i = e.slice(C2 + 1).join("").startsWith(y)), s) {
28357
+ i ? o === w && (s = false, i = false) : o === R && (s = false);
28358
+ continue;
28359
+ }
28360
+ D += E, D === F && C2 < e.length - 1 && (t.push(""), D = 0);
28361
+ }
28362
+ !D && t[t.length - 1].length > 0 && t.length > 1 && (t[t.length - 2] += t.pop());
28363
+ };
28364
+ var nD = (t) => {
28365
+ const u = t.split(" ");
28366
+ let F = u.length;
28367
+ for (;F > 0 && !(A(u[F - 1]) > 0); )
28368
+ F--;
28369
+ return F === u.length ? t : u.slice(0, F).join(" ") + u.slice(F).join("");
28370
+ };
28371
+ var oD = (t, u, F = {}) => {
28372
+ if (F.trim !== false && t.trim() === "")
28373
+ return "";
28374
+ let e = "", s, i;
28375
+ const D = ED(t);
28376
+ let C2 = [""];
28377
+ for (const [E, a] of t.split(" ").entries()) {
28378
+ F.trim !== false && (C2[C2.length - 1] = C2[C2.length - 1].trimStart());
28379
+ let n = A(C2[C2.length - 1]);
28380
+ if (E !== 0 && (n >= u && (F.wordWrap === false || F.trim === false) && (C2.push(""), n = 0), (n > 0 || F.trim === false) && (C2[C2.length - 1] += " ", n++)), F.hard && D[E] > u) {
28381
+ const B = u - n, p = 1 + Math.floor((D[E] - B - 1) / u);
28382
+ Math.floor((D[E] - 1) / u) < p && C2.push(""), _(C2, a, u);
28383
+ continue;
28384
+ }
28385
+ if (n + D[E] > u && n > 0 && D[E] > 0) {
28386
+ if (F.wordWrap === false && n < u) {
28387
+ _(C2, a, u);
28388
+ continue;
28389
+ }
28390
+ C2.push("");
28391
+ }
28392
+ if (n + D[E] > u && F.wordWrap === false) {
28393
+ _(C2, a, u);
28394
+ continue;
28395
+ }
28396
+ C2[C2.length - 1] += a;
28397
+ }
28398
+ F.trim !== false && (C2 = C2.map((E) => nD(E)));
28399
+ const o = [...C2.join(`
28400
+ `)];
28401
+ for (const [E, a] of o.entries()) {
28402
+ if (e += a, v.has(a)) {
28403
+ const { groups: B } = new RegExp(`(?:\\${W}(?<code>\\d+)m|\\${y}(?<uri>.*)${w})`).exec(o.slice(E).join("")) || { groups: {} };
28404
+ if (B.code !== undefined) {
28405
+ const p = Number.parseFloat(B.code);
28406
+ s = p === CD ? undefined : p;
28407
+ } else
28408
+ B.uri !== undefined && (i = B.uri.length === 0 ? undefined : B.uri);
28409
+ }
28410
+ const n = iD.codes.get(Number(s));
28411
+ o[E + 1] === `
28412
+ ` ? (i && (e += z("")), s && n && (e += V(n))) : a === `
28413
+ ` && (s && n && (e += V(s)), i && (e += z(i)));
28414
+ }
28415
+ return e;
28416
+ };
28417
+ function G(t, u, F) {
28418
+ return String(t).normalize().replace(/\r\n/g, `
28419
+ `).split(`
28420
+ `).map((e) => oD(e, u, F)).join(`
28421
+ `);
28422
+ }
28423
+ var aD = ["up", "down", "left", "right", "space", "enter", "cancel"];
28424
+ var c = { actions: new Set(aD), aliases: new Map([["k", "up"], ["j", "down"], ["h", "left"], ["l", "right"], ["\x03", "cancel"], ["escape", "cancel"]]) };
28425
+ function k(t, u) {
28426
+ if (typeof t == "string")
28427
+ return c.aliases.get(t) === u;
28428
+ for (const F of t)
28429
+ if (F !== undefined && k(F, u))
28430
+ return true;
28431
+ return false;
28432
+ }
28433
+ function lD(t, u) {
28434
+ if (t === u)
28435
+ return;
28436
+ const F = t.split(`
28437
+ `), e = u.split(`
28438
+ `), s = [];
28439
+ for (let i = 0;i < Math.max(F.length, e.length); i++)
28440
+ F[i] !== e[i] && s.push(i);
28441
+ return s;
28442
+ }
28443
+ var xD = globalThis.process.platform.startsWith("win");
28444
+ var S = Symbol("clack:cancel");
28445
+ function BD(t) {
28446
+ return t === S;
28447
+ }
28448
+ function d(t, u) {
28449
+ const F = t;
28450
+ F.isTTY && F.setRawMode(u);
28451
+ }
28452
+ var AD = Object.defineProperty;
28453
+ var pD = (t, u, F) => (u in t) ? AD(t, u, { enumerable: true, configurable: true, writable: true, value: F }) : t[u] = F;
28454
+ var h = (t, u, F) => (pD(t, typeof u != "symbol" ? u + "" : u, F), F);
28455
+
28456
+ class x {
28457
+ constructor(u, F = true) {
28458
+ h(this, "input"), h(this, "output"), h(this, "_abortSignal"), h(this, "rl"), h(this, "opts"), h(this, "_render"), h(this, "_track", false), h(this, "_prevFrame", ""), h(this, "_subscribers", new Map), h(this, "_cursor", 0), h(this, "state", "initial"), h(this, "error", ""), h(this, "value");
28459
+ const { input: e = $, output: s = j, render: i, signal: D, ...C2 } = u;
28460
+ this.opts = C2, this.onKeypress = this.onKeypress.bind(this), this.close = this.close.bind(this), this.render = this.render.bind(this), this._render = i.bind(this), this._track = F, this._abortSignal = D, this.input = e, this.output = s;
28461
+ }
28462
+ unsubscribe() {
28463
+ this._subscribers.clear();
28464
+ }
28465
+ setSubscriber(u, F) {
28466
+ const e = this._subscribers.get(u) ?? [];
28467
+ e.push(F), this._subscribers.set(u, e);
28468
+ }
28469
+ on(u, F) {
28470
+ this.setSubscriber(u, { cb: F });
28471
+ }
28472
+ once(u, F) {
28473
+ this.setSubscriber(u, { cb: F, once: true });
28474
+ }
28475
+ emit(u, ...F) {
28476
+ const e = this._subscribers.get(u) ?? [], s = [];
28477
+ for (const i of e)
28478
+ i.cb(...F), i.once && s.push(() => e.splice(e.indexOf(i), 1));
28479
+ for (const i of s)
28480
+ i();
28481
+ }
28482
+ prompt() {
28483
+ return new Promise((u, F) => {
28484
+ if (this._abortSignal) {
28485
+ if (this._abortSignal.aborted)
28486
+ return this.state = "cancel", this.close(), u(S);
28487
+ this._abortSignal.addEventListener("abort", () => {
28488
+ this.state = "cancel", this.close();
28489
+ }, { once: true });
28490
+ }
28491
+ const e = new U(0);
28492
+ e._write = (s, i, D) => {
28493
+ this._track && (this.value = this.rl?.line.replace(/\t/g, ""), this._cursor = this.rl?.cursor ?? 0, this.emit("value", this.value)), D();
28494
+ }, this.input.pipe(e), this.rl = M.createInterface({ input: this.input, output: e, tabSize: 2, prompt: "", escapeCodeTimeout: 50 }), M.emitKeypressEvents(this.input, this.rl), this.rl.prompt(), this.opts.initialValue !== undefined && this._track && this.rl.write(this.opts.initialValue), this.input.on("keypress", this.onKeypress), d(this.input, true), this.output.on("resize", this.render), this.render(), this.once("submit", () => {
28495
+ this.output.write(import_sisteransi.cursor.show), this.output.off("resize", this.render), d(this.input, false), u(this.value);
28496
+ }), this.once("cancel", () => {
28497
+ this.output.write(import_sisteransi.cursor.show), this.output.off("resize", this.render), d(this.input, false), u(S);
28498
+ });
28499
+ });
28500
+ }
28501
+ onKeypress(u, F) {
28502
+ if (this.state === "error" && (this.state = "active"), F?.name && (!this._track && c.aliases.has(F.name) && this.emit("cursor", c.aliases.get(F.name)), c.actions.has(F.name) && this.emit("cursor", F.name)), u && (u.toLowerCase() === "y" || u.toLowerCase() === "n") && this.emit("confirm", u.toLowerCase() === "y"), u === "\t" && this.opts.placeholder && (this.value || (this.rl?.write(this.opts.placeholder), this.emit("value", this.opts.placeholder))), u && this.emit("key", u.toLowerCase()), F?.name === "return") {
28503
+ if (this.opts.validate) {
28504
+ const e = this.opts.validate(this.value);
28505
+ e && (this.error = e instanceof Error ? e.message : e, this.state = "error", this.rl?.write(this.value));
28506
+ }
28507
+ this.state !== "error" && (this.state = "submit");
28508
+ }
28509
+ k([u, F?.name, F?.sequence], "cancel") && (this.state = "cancel"), (this.state === "submit" || this.state === "cancel") && this.emit("finalize"), this.render(), (this.state === "submit" || this.state === "cancel") && this.close();
28510
+ }
28511
+ close() {
28512
+ this.input.unpipe(), this.input.removeListener("keypress", this.onKeypress), this.output.write(`
28513
+ `), d(this.input, false), this.rl?.close(), this.rl = undefined, this.emit(`${this.state}`, this.value), this.unsubscribe();
28514
+ }
28515
+ restoreCursor() {
28516
+ const u = G(this._prevFrame, process.stdout.columns, { hard: true }).split(`
28517
+ `).length - 1;
28518
+ this.output.write(import_sisteransi.cursor.move(-999, u * -1));
28519
+ }
28520
+ render() {
28521
+ const u = G(this._render(this) ?? "", process.stdout.columns, { hard: true });
28522
+ if (u !== this._prevFrame) {
28523
+ if (this.state === "initial")
28524
+ this.output.write(import_sisteransi.cursor.hide);
28525
+ else {
28526
+ const F = lD(this._prevFrame, u);
28527
+ if (this.restoreCursor(), F && F?.length === 1) {
28528
+ const e = F[0];
28529
+ this.output.write(import_sisteransi.cursor.move(0, e)), this.output.write(import_sisteransi.erase.lines(1));
28530
+ const s = u.split(`
28531
+ `);
28532
+ this.output.write(s[e]), this._prevFrame = u, this.output.write(import_sisteransi.cursor.move(0, s.length - e - 1));
28533
+ return;
28534
+ }
28535
+ if (F && F?.length > 1) {
28536
+ const e = F[0];
28537
+ this.output.write(import_sisteransi.cursor.move(0, e)), this.output.write(import_sisteransi.erase.down());
28538
+ const s = u.split(`
28539
+ `).slice(e);
28540
+ this.output.write(s.join(`
28541
+ `)), this._prevFrame = u;
28542
+ return;
28543
+ }
28544
+ this.output.write(import_sisteransi.erase.down());
28545
+ }
28546
+ this.output.write(u), this.state === "initial" && (this.state = "active"), this._prevFrame = u;
28547
+ }
28548
+ }
28549
+ }
28550
+
28551
+ class fD extends x {
28552
+ get cursor() {
28553
+ return this.value ? 0 : 1;
28554
+ }
28555
+ get _value() {
28556
+ return this.cursor === 0;
28557
+ }
28558
+ constructor(u) {
28559
+ super(u, false), this.value = !!u.initialValue, this.on("value", () => {
28560
+ this.value = this._value;
28561
+ }), this.on("confirm", (F) => {
28562
+ this.output.write(import_sisteransi.cursor.move(0, -1)), this.value = F, this.state = "submit", this.close();
28563
+ }), this.on("cursor", () => {
28564
+ this.value = !this.value;
28565
+ });
28566
+ }
28567
+ }
28568
+ var SD = Object.defineProperty;
28569
+ var $D = (t, u, F) => (u in t) ? SD(t, u, { enumerable: true, configurable: true, writable: true, value: F }) : t[u] = F;
28570
+ var q = (t, u, F) => ($D(t, typeof u != "symbol" ? u + "" : u, F), F);
28571
+
28572
+ class jD extends x {
28573
+ constructor(u) {
28574
+ super(u, false), q(this, "options"), q(this, "cursor", 0), this.options = u.options, this.cursor = this.options.findIndex(({ value: F }) => F === u.initialValue), this.cursor === -1 && (this.cursor = 0), this.changeValue(), this.on("cursor", (F) => {
28575
+ switch (F) {
28576
+ case "left":
28577
+ case "up":
28578
+ this.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;
28579
+ break;
28580
+ case "down":
28581
+ case "right":
28582
+ this.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;
28583
+ break;
28584
+ }
28585
+ this.changeValue();
28586
+ });
28587
+ }
28588
+ get _value() {
28589
+ return this.options[this.cursor];
28590
+ }
28591
+ changeValue() {
28592
+ this.value = this._value.value;
28593
+ }
28594
+ }
28595
+ class PD extends x {
28596
+ get valueWithCursor() {
28597
+ if (this.state === "submit")
28598
+ return this.value;
28599
+ if (this.cursor >= this.value.length)
28600
+ return `${this.value}\u2588`;
28601
+ const u = this.value.slice(0, this.cursor), [F, ...e] = this.value.slice(this.cursor);
28602
+ return `${u}${import_picocolors.default.inverse(F)}${e.join("")}`;
28603
+ }
28604
+ get cursor() {
28605
+ return this._cursor;
28606
+ }
28607
+ constructor(u) {
28608
+ super(u), this.on("finalize", () => {
28609
+ this.value || (this.value = u.defaultValue);
28610
+ });
28611
+ }
28612
+ }
28613
+
28614
+ // ../../node_modules/.bun/@clack+prompts@0.9.1/node_modules/@clack/prompts/dist/index.mjs
28615
+ var import_picocolors2 = __toESM(require_picocolors(), 1);
28616
+ var import_sisteransi2 = __toESM(require_src(), 1);
28617
+ import p from "process";
28618
+ function X2() {
28619
+ return p.platform !== "win32" ? p.env.TERM !== "linux" : !!p.env.CI || !!p.env.WT_SESSION || !!p.env.TERMINUS_SUBLIME || p.env.ConEmuTask === "{cmd::Cmder}" || p.env.TERM_PROGRAM === "Terminus-Sublime" || p.env.TERM_PROGRAM === "vscode" || p.env.TERM === "xterm-256color" || p.env.TERM === "alacritty" || p.env.TERMINAL_EMULATOR === "JetBrains-JediTerm";
28620
+ }
28621
+ var E = X2();
28622
+ var u = (s, n) => E ? s : n;
28623
+ var ee = u("\u25C6", "*");
28624
+ var A2 = u("\u25A0", "x");
28625
+ var B = u("\u25B2", "x");
28626
+ var S2 = u("\u25C7", "o");
28627
+ var te = u("\u250C", "T");
28628
+ var a = u("\u2502", "|");
28629
+ var m2 = u("\u2514", "\u2014");
28630
+ var j2 = u("\u25CF", ">");
28631
+ var R2 = u("\u25CB", " ");
28632
+ var V2 = u("\u25FB", "[\u2022]");
28633
+ var M2 = u("\u25FC", "[+]");
28634
+ var G2 = u("\u25FB", "[ ]");
28635
+ var se = u("\u25AA", "\u2022");
28636
+ var N2 = u("\u2500", "-");
28637
+ var re = u("\u256E", "+");
28638
+ var ie = u("\u251C", "+");
28639
+ var ne = u("\u256F", "+");
28640
+ var ae = u("\u25CF", "\u2022");
28641
+ var oe = u("\u25C6", "*");
28642
+ var ce = u("\u25B2", "!");
28643
+ var le = u("\u25A0", "x");
28644
+ var y2 = (s) => {
28645
+ switch (s) {
28646
+ case "initial":
28647
+ case "active":
28648
+ return import_picocolors2.default.cyan(ee);
28649
+ case "cancel":
28650
+ return import_picocolors2.default.red(A2);
28651
+ case "error":
28652
+ return import_picocolors2.default.yellow(B);
28653
+ case "submit":
28654
+ return import_picocolors2.default.green(S2);
28655
+ }
28656
+ };
28657
+ var k2 = (s) => {
28658
+ const { cursor: n, options: t, style: i } = s, r2 = s.maxItems ?? Number.POSITIVE_INFINITY, c2 = Math.max(process.stdout.rows - 4, 0), o = Math.min(c2, Math.max(r2, 5));
28659
+ let l2 = 0;
28660
+ n >= l2 + o - 3 ? l2 = Math.max(Math.min(n - o + 3, t.length - o), 0) : n < l2 + 2 && (l2 = Math.max(n - 2, 0));
28661
+ const $2 = o < t.length && l2 > 0, d2 = o < t.length && l2 + o < t.length;
28662
+ return t.slice(l2, l2 + o).map((w2, b2, C2) => {
28663
+ const I2 = b2 === 0 && $2, x2 = b2 === C2.length - 1 && d2;
28664
+ return I2 || x2 ? import_picocolors2.default.dim("...") : i(w2, b2 + l2 === n);
28665
+ });
28666
+ };
28667
+ var ue = (s) => new PD({ validate: s.validate, placeholder: s.placeholder, defaultValue: s.defaultValue, initialValue: s.initialValue, render() {
28668
+ const n = `${import_picocolors2.default.gray(a)}
28669
+ ${y2(this.state)} ${s.message}
28670
+ `, t = s.placeholder ? import_picocolors2.default.inverse(s.placeholder[0]) + import_picocolors2.default.dim(s.placeholder.slice(1)) : import_picocolors2.default.inverse(import_picocolors2.default.hidden("_")), i = this.value ? this.valueWithCursor : t;
28671
+ switch (this.state) {
28672
+ case "error":
28673
+ return `${n.trim()}
28674
+ ${import_picocolors2.default.yellow(a)} ${i}
28675
+ ${import_picocolors2.default.yellow(m2)} ${import_picocolors2.default.yellow(this.error)}
28676
+ `;
28677
+ case "submit":
28678
+ return `${n}${import_picocolors2.default.gray(a)} ${import_picocolors2.default.dim(this.value || s.placeholder)}`;
28679
+ case "cancel":
28680
+ return `${n}${import_picocolors2.default.gray(a)} ${import_picocolors2.default.strikethrough(import_picocolors2.default.dim(this.value ?? ""))}${this.value?.trim() ? `
28681
+ ${import_picocolors2.default.gray(a)}` : ""}`;
28682
+ default:
28683
+ return `${n}${import_picocolors2.default.cyan(a)} ${i}
28684
+ ${import_picocolors2.default.cyan(m2)}
28685
+ `;
28686
+ }
28687
+ } }).prompt();
28688
+ var me = (s) => {
28689
+ const n = s.active ?? "Yes", t = s.inactive ?? "No";
28690
+ return new fD({ active: n, inactive: t, initialValue: s.initialValue ?? true, render() {
28691
+ const i = `${import_picocolors2.default.gray(a)}
28692
+ ${y2(this.state)} ${s.message}
28693
+ `, r2 = this.value ? n : t;
28694
+ switch (this.state) {
28695
+ case "submit":
28696
+ return `${i}${import_picocolors2.default.gray(a)} ${import_picocolors2.default.dim(r2)}`;
28697
+ case "cancel":
28698
+ return `${i}${import_picocolors2.default.gray(a)} ${import_picocolors2.default.strikethrough(import_picocolors2.default.dim(r2))}
28699
+ ${import_picocolors2.default.gray(a)}`;
28700
+ default:
28701
+ return `${i}${import_picocolors2.default.cyan(a)} ${this.value ? `${import_picocolors2.default.green(j2)} ${n}` : `${import_picocolors2.default.dim(R2)} ${import_picocolors2.default.dim(n)}`} ${import_picocolors2.default.dim("/")} ${this.value ? `${import_picocolors2.default.dim(R2)} ${import_picocolors2.default.dim(t)}` : `${import_picocolors2.default.green(j2)} ${t}`}
28702
+ ${import_picocolors2.default.cyan(m2)}
28703
+ `;
28704
+ }
28705
+ } }).prompt();
28706
+ };
28707
+ var de = (s) => {
28708
+ const n = (t, i) => {
28709
+ const r2 = t.label ?? String(t.value);
28710
+ switch (i) {
28711
+ case "selected":
28712
+ return `${import_picocolors2.default.dim(r2)}`;
28713
+ case "active":
28714
+ return `${import_picocolors2.default.green(j2)} ${r2} ${t.hint ? import_picocolors2.default.dim(`(${t.hint})`) : ""}`;
28715
+ case "cancelled":
28716
+ return `${import_picocolors2.default.strikethrough(import_picocolors2.default.dim(r2))}`;
28717
+ default:
28718
+ return `${import_picocolors2.default.dim(R2)} ${import_picocolors2.default.dim(r2)}`;
28719
+ }
28720
+ };
28721
+ return new jD({ options: s.options, initialValue: s.initialValue, render() {
28722
+ const t = `${import_picocolors2.default.gray(a)}
28723
+ ${y2(this.state)} ${s.message}
28724
+ `;
28725
+ switch (this.state) {
28726
+ case "submit":
28727
+ return `${t}${import_picocolors2.default.gray(a)} ${n(this.options[this.cursor], "selected")}`;
28728
+ case "cancel":
28729
+ return `${t}${import_picocolors2.default.gray(a)} ${n(this.options[this.cursor], "cancelled")}
28730
+ ${import_picocolors2.default.gray(a)}`;
28731
+ default:
28732
+ return `${t}${import_picocolors2.default.cyan(a)} ${k2({ cursor: this.cursor, options: this.options, maxItems: s.maxItems, style: (i, r2) => n(i, r2 ? "active" : "inactive") }).join(`
28733
+ ${import_picocolors2.default.cyan(a)} `)}
28734
+ ${import_picocolors2.default.cyan(m2)}
28735
+ `;
28736
+ }
28737
+ } }).prompt();
28738
+ };
28739
+ var ve = (s = "") => {
28740
+ process.stdout.write(`${import_picocolors2.default.gray(m2)} ${import_picocolors2.default.red(s)}
28741
+
28742
+ `);
28743
+ };
28744
+ var we = (s = "") => {
28745
+ process.stdout.write(`${import_picocolors2.default.gray(te)} ${s}
28746
+ `);
28747
+ };
28748
+ var fe = (s = "") => {
28749
+ process.stdout.write(`${import_picocolors2.default.gray(a)}
28750
+ ${import_picocolors2.default.gray(m2)} ${s}
28751
+
28752
+ `);
28753
+ };
28754
+
28755
+ // src/deploy/survey.ts
28756
+ async function runSurvey() {
28757
+ we("arc platform deploy \u2014 initial setup");
28758
+ const mode = await de({
28759
+ message: "How should deploy reach the target server?",
28760
+ options: [
28761
+ {
28762
+ value: "existing",
28763
+ label: "Use an existing server (I have SSH access)"
28764
+ },
28765
+ {
28766
+ value: "provision",
28767
+ label: "Provision a new server via Terraform (Hetzner Cloud)"
28768
+ }
28769
+ ],
28770
+ initialValue: "existing"
28771
+ });
28772
+ if (BD(mode))
28773
+ cancel();
28774
+ const host = await ue({
28775
+ message: mode === "provision" ? "Alias for the server (leave blank \u2014 will be filled after terraform apply)" : "SSH host (IP or alias from ~/.ssh/config)",
28776
+ placeholder: mode === "provision" ? "auto" : "example.com or 1.2.3.4",
28777
+ validate: (v2) => {
28778
+ if (mode === "provision")
28779
+ return;
28780
+ if (!v2 || v2.length === 0)
28781
+ return "Host is required";
28782
+ return;
28783
+ }
28784
+ });
28785
+ if (BD(host))
28786
+ cancel();
28787
+ const user = await ue({
28788
+ message: "SSH user",
28789
+ initialValue: "deploy",
28790
+ validate: (v2) => /^[a-z_][a-z0-9_-]*$/.test(v2) ? undefined : "Invalid username"
28791
+ });
28792
+ if (BD(user))
28793
+ cancel();
28794
+ const portRaw = await ue({
28795
+ message: "SSH port",
28796
+ initialValue: "22",
28797
+ validate: (v2) => {
28798
+ const n = Number(v2);
28799
+ return Number.isInteger(n) && n > 0 && n < 65536 ? undefined : "Must be a port number";
28800
+ }
28801
+ });
28802
+ if (BD(portRaw))
28803
+ cancel();
28804
+ const port = Number(portRaw);
28805
+ const envs = {};
28806
+ let more = true;
28807
+ while (more) {
28808
+ const name = await ue({
28809
+ message: `Environment name (lowercase, e.g. "prod", "staging")`,
28810
+ initialValue: Object.keys(envs).length === 0 ? "prod" : "staging",
28811
+ validate: (v2) => {
28812
+ if (!/^[a-z][a-z0-9-]*$/.test(v2))
28813
+ return "Must match [a-z][a-z0-9-]*";
28814
+ if (envs[v2])
28815
+ return "Already defined";
28816
+ return;
28817
+ }
28818
+ });
28819
+ if (BD(name))
28820
+ cancel();
28821
+ const domain = await ue({
28822
+ message: `Domain for "${name}" (Caddy will route by Host header)`,
28823
+ placeholder: `${name === "prod" ? "app" : name}.example.com`,
28824
+ validate: (v2) => /^[a-z0-9.-]+\.[a-z]{2,}$/i.test(v2) ? undefined : "Expected a domain like app.example.com"
28825
+ });
28826
+ if (BD(domain))
28827
+ cancel();
28828
+ envs[name] = { domain };
28829
+ const addAnother = await me({
28830
+ message: "Add another environment?",
28831
+ initialValue: false
28832
+ });
28833
+ if (BD(addAnother))
28834
+ cancel();
28835
+ more = addAnother;
28836
+ }
28837
+ let provision;
28838
+ if (mode === "provision") {
28839
+ const tokenEnv = await ue({
28840
+ message: "Name of env var holding your Hetzner Cloud API token",
28841
+ initialValue: "HCLOUD_TOKEN",
28842
+ validate: (v2) => /^[A-Z_][A-Z0-9_]*$/.test(v2) ? undefined : "Must be SCREAMING_SNAKE_CASE"
28843
+ });
28844
+ if (BD(tokenEnv))
28845
+ cancel();
28846
+ const serverType = await ue({
28847
+ message: "Hetzner server type",
28848
+ initialValue: "cx32"
28849
+ });
28850
+ if (BD(serverType))
28851
+ cancel();
28852
+ const location = await ue({
28853
+ message: "Hetzner datacenter location",
28854
+ initialValue: "nbg1"
28855
+ });
28856
+ if (BD(location))
28857
+ cancel();
28858
+ const terraform = {
28859
+ provider: "hcloud",
28860
+ serverType,
28861
+ location,
28862
+ image: "ubuntu-22.04",
28863
+ tokenEnv
28864
+ };
28865
+ provision = { terraform };
28866
+ }
28867
+ const email = await ue({
28868
+ message: `Email for Let's Encrypt (use "internal" for self-signed certs)`,
28869
+ placeholder: "admin@example.com",
28870
+ validate: (v2) => {
28871
+ if (v2 === "internal")
28872
+ return;
28873
+ if (!/^\S+@\S+\.\S+$/.test(v2))
28874
+ return "Expected an email or 'internal'";
28875
+ return;
28876
+ }
28877
+ });
28878
+ if (BD(email))
28879
+ cancel();
28880
+ fe("Configuration ready \u2014 writing deploy.arc.json");
28881
+ return {
28882
+ target: {
28883
+ host: host || "PENDING_TERRAFORM",
28884
+ user,
28885
+ port,
28886
+ remoteDir: "/opt/arc"
28887
+ },
28888
+ envs,
28889
+ caddy: { email },
28890
+ provision
28891
+ };
28892
+ }
28893
+ function cancel() {
28894
+ ve("Cancelled.");
28895
+ process.exit(0);
28896
+ }
28897
+
28898
+ // src/commands/platform-deploy.ts
28899
+ async function platformDeploy(envArg, options = {}) {
28900
+ const ws = resolveWorkspace();
28901
+ let cfg;
28902
+ if (!deployConfigExists(ws.rootDir)) {
28903
+ log2("No deploy.arc.json found \u2014 launching survey.");
28904
+ cfg = await runSurvey();
28905
+ saveDeployConfig(ws.rootDir, cfg);
28906
+ ok("Saved deploy.arc.json");
28907
+ }
28908
+ cfg = loadDeployConfig(ws.rootDir);
28909
+ const targetEnvs = envArg ? envArg in cfg.envs ? [envArg] : (() => {
28910
+ err(`Unknown env "${envArg}". Known: ${Object.keys(cfg.envs).join(", ")}`);
28911
+ process.exit(1);
28912
+ })() : Object.keys(cfg.envs);
28913
+ const manifestPath = join13(ws.modulesDir, "manifest.json");
28914
+ const needBuild = options.rebuild || !existsSync10(manifestPath);
28915
+ if (needBuild && !options.skipBuild) {
28916
+ log2("Building platform...");
28917
+ await buildAll(ws);
28918
+ ok("Build complete");
28919
+ } else if (!existsSync10(manifestPath)) {
28920
+ err("No build found and --skip-build was set.");
28921
+ process.exit(1);
28922
+ }
28923
+ log2("Inspecting remote server...");
28924
+ const state = await detectRemoteState(cfg);
28925
+ log2(`Remote state: ${state.kind}`);
28926
+ const cliVersion = readCliVersion();
28927
+ const configHash = await hashDeployConfig(ws.rootDir);
28928
+ if (state.kind !== "ready") {
28929
+ await bootstrap({
28930
+ cfg,
28931
+ rootDir: ws.rootDir,
28932
+ state,
28933
+ cliVersion,
28934
+ configHash
28935
+ });
28936
+ }
28937
+ for (const env2 of targetEnvs) {
28938
+ log2(`Syncing env "${env2}"...`);
28939
+ const outcome = await syncEnv({
28940
+ cfg,
28941
+ env: env2,
28942
+ ws,
28943
+ projectDir: ws.rootDir
28944
+ });
28945
+ if (outcome.changedModules.length === 0 && !outcome.shellChanged && !outcome.stylesChanged) {
28946
+ ok(`${env2}: already up to date`);
28947
+ } else {
28948
+ const parts = [];
28949
+ if (outcome.changedModules.length > 0) {
28950
+ parts.push(`${outcome.changedModules.length} module(s): ${outcome.changedModules.join(", ")}`);
28951
+ }
28952
+ if (outcome.shellChanged)
28953
+ parts.push("shell");
28954
+ if (outcome.stylesChanged)
28955
+ parts.push("styles");
28956
+ ok(`${env2}: updated ${parts.join(", ")}`);
28957
+ }
28958
+ }
28959
+ }
28960
+ function readCliVersion() {
28961
+ try {
28962
+ const pkgPath = join13(import.meta.dir, "..", "..", "package.json");
28963
+ const pkg = JSON.parse(readFileSync9(pkgPath, "utf-8"));
28964
+ return pkg.version ?? "unknown";
28965
+ } catch {
28966
+ return "unknown";
28967
+ }
28968
+ }
28969
+ async function hashDeployConfig(rootDir) {
28970
+ const p2 = join13(rootDir, "deploy.arc.json");
28971
+ const content = readFileSync9(p2);
28972
+ const hasher = new Bun.CryptoHasher("sha256");
28973
+ hasher.update(content);
28974
+ return hasher.digest("hex").slice(0, 16);
28975
+ }
28976
+
28977
+ // src/commands/platform-dev.ts
28978
+ import { existsSync as existsSync13, watch } from "fs";
28979
+ import { join as join16 } from "path";
26868
28980
 
26869
28981
  // ../host/src/create-server.ts
26870
28982
  var import_jsonwebtoken = __toESM(require_jsonwebtoken(), 1);
@@ -26911,7 +29023,7 @@ class ConnectionManager {
26911
29023
  const client = this.clients.get(clientId);
26912
29024
  if (!client)
26913
29025
  return [];
26914
- return Array.from(client.scopeTokens.values()).map((v) => v.decoded);
29026
+ return Array.from(client.scopeTokens.values()).map((v2) => v2.decoded);
26915
29027
  }
26916
29028
  updateLastSyncedEventId(clientId, hostEventId) {
26917
29029
  const client = this.clients.get(clientId);
@@ -27125,19 +29237,22 @@ class ContextHandler {
27125
29237
  continue;
27126
29238
  }
27127
29239
  const hostId = `host_${++this.hostEventIdCounter}_${Date.now()}`;
29240
+ const eventAuthContext = event.authContext ?? null;
27128
29241
  const syncableEvent = {
27129
29242
  localId: event.localId,
27130
29243
  hostId,
27131
29244
  type: event.type,
27132
29245
  payload: event.payload,
27133
29246
  createdAt: event.createdAt,
27134
- clientId
29247
+ clientId,
29248
+ authContext: eventAuthContext
27135
29249
  };
27136
29250
  await this.eventPublisher.publish({
27137
29251
  id: hostId,
27138
29252
  type: event.type,
27139
29253
  payload: event.payload,
27140
- createdAt: new Date(event.createdAt)
29254
+ createdAt: new Date(event.createdAt),
29255
+ authContext: eventAuthContext
27141
29256
  });
27142
29257
  persistedEvents.push(syncableEvent);
27143
29258
  }
@@ -27150,28 +29265,29 @@ class ContextHandler {
27150
29265
  if (lastHostEventId) {
27151
29266
  const parts = lastHostEventId.split("_");
27152
29267
  const lastTimestamp = parts.length >= 3 ? parseInt(parts[2], 10) : 0;
27153
- filteredEvents = allEvents.filter((e) => {
27154
- if (!e._id.startsWith("host_"))
29268
+ filteredEvents = allEvents.filter((e2) => {
29269
+ if (!e2._id.startsWith("host_"))
27155
29270
  return false;
27156
- const eventParts = e._id.split("_");
29271
+ const eventParts = e2._id.split("_");
27157
29272
  const eventTimestamp = eventParts.length >= 3 ? parseInt(eventParts[2], 10) : 0;
27158
29273
  return eventTimestamp > lastTimestamp;
27159
29274
  });
27160
29275
  } else {
27161
- filteredEvents = allEvents.filter((e) => e._id.startsWith("host_"));
29276
+ filteredEvents = allEvents.filter((e2) => e2._id.startsWith("host_"));
27162
29277
  }
27163
- filteredEvents.sort((a, b) => {
27164
- const aTimestamp = parseInt(a._id.split("_")[2] || "0", 10);
27165
- const bTimestamp = parseInt(b._id.split("_")[2] || "0", 10);
29278
+ filteredEvents.sort((a2, b2) => {
29279
+ const aTimestamp = parseInt(a2._id.split("_")[2] || "0", 10);
29280
+ const bTimestamp = parseInt(b2._id.split("_")[2] || "0", 10);
27166
29281
  return aTimestamp - bTimestamp;
27167
29282
  });
27168
- const syncableEvents = filteredEvents.map((e) => ({
27169
- localId: e._id,
27170
- hostId: e._id,
27171
- type: e.type,
27172
- payload: typeof e.payload === "string" ? JSON.parse(e.payload) : e.payload,
27173
- createdAt: e.createdAt,
27174
- clientId: "host"
29283
+ const syncableEvents = filteredEvents.map((e2) => ({
29284
+ localId: e2._id,
29285
+ hostId: e2._id,
29286
+ type: e2.type,
29287
+ payload: typeof e2.payload === "string" ? JSON.parse(e2.payload) : e2.payload,
29288
+ createdAt: e2.createdAt,
29289
+ clientId: "host",
29290
+ authContext: typeof e2.authContext === "string" ? JSON.parse(e2.authContext) : e2.authContext ?? null
27175
29291
  }));
27176
29292
  return filterEventsForToken(token, syncableEvents, this.eventDefinitions);
27177
29293
  }
@@ -27190,46 +29306,46 @@ class ContextHandler {
27190
29306
  }
27191
29307
 
27192
29308
  // ../../node_modules/.bun/croner@9.1.0/node_modules/croner/dist/croner.js
27193
- function h(n, t, e, r, s, i, a, l) {
27194
- return h.fromTZ(h.tp(n, t, e, r, s, i, a), l);
29309
+ function h2(n, t, e2, r2, s, i, a2, l2) {
29310
+ return h2.fromTZ(h2.tp(n, t, e2, r2, s, i, a2), l2);
27195
29311
  }
27196
- h.fromTZISO = (n, t, e) => h.fromTZ(k(n, t), e);
27197
- h.fromTZ = function(n, t) {
27198
- let e = new Date(Date.UTC(n.y, n.m - 1, n.d, n.h, n.i, n.s)), r = D(n.tz, e), s = new Date(e.getTime() - r), i = D(n.tz, s);
27199
- if (i - r === 0)
29312
+ h2.fromTZISO = (n, t, e2) => h2.fromTZ(k3(n, t), e2);
29313
+ h2.fromTZ = function(n, t) {
29314
+ let e2 = new Date(Date.UTC(n.y, n.m - 1, n.d, n.h, n.i, n.s)), r2 = D(n.tz, e2), s = new Date(e2.getTime() - r2), i = D(n.tz, s);
29315
+ if (i - r2 === 0)
27200
29316
  return s;
27201
29317
  {
27202
- let a = new Date(e.getTime() - i), l = D(n.tz, a);
27203
- if (l - i === 0)
27204
- return a;
27205
- if (!t && l - i > 0)
27206
- return a;
29318
+ let a2 = new Date(e2.getTime() - i), l2 = D(n.tz, a2);
29319
+ if (l2 - i === 0)
29320
+ return a2;
29321
+ if (!t && l2 - i > 0)
29322
+ return a2;
27207
29323
  if (t)
27208
29324
  throw new Error("Invalid date passed to fromTZ()");
27209
29325
  return s;
27210
29326
  }
27211
29327
  };
27212
- h.toTZ = function(n, t) {
27213
- let e = n.toLocaleString("en-US", { timeZone: t }).replace(/[\u202f]/, " "), r = new Date(e);
27214
- return { y: r.getFullYear(), m: r.getMonth() + 1, d: r.getDate(), h: r.getHours(), i: r.getMinutes(), s: r.getSeconds(), tz: t };
29328
+ h2.toTZ = function(n, t) {
29329
+ let e2 = n.toLocaleString("en-US", { timeZone: t }).replace(/[\u202f]/, " "), r2 = new Date(e2);
29330
+ return { y: r2.getFullYear(), m: r2.getMonth() + 1, d: r2.getDate(), h: r2.getHours(), i: r2.getMinutes(), s: r2.getSeconds(), tz: t };
27215
29331
  };
27216
- h.tp = (n, t, e, r, s, i, a) => ({ y: n, m: t, d: e, h: r, i: s, s: i, tz: a });
29332
+ h2.tp = (n, t, e2, r2, s, i, a2) => ({ y: n, m: t, d: e2, h: r2, i: s, s: i, tz: a2 });
27217
29333
  function D(n, t = new Date) {
27218
- let e = t.toLocaleString("en-US", { timeZone: n, timeZoneName: "shortOffset" }).split(" ").slice(-1)[0], r = t.toLocaleString("en-US").replace(/[\u202f]/, " ");
27219
- return Date.parse(`${r} GMT`) - Date.parse(`${r} ${e}`);
29334
+ let e2 = t.toLocaleString("en-US", { timeZone: n, timeZoneName: "shortOffset" }).split(" ").slice(-1)[0], r2 = t.toLocaleString("en-US").replace(/[\u202f]/, " ");
29335
+ return Date.parse(`${r2} GMT`) - Date.parse(`${r2} ${e2}`);
27220
29336
  }
27221
- function k(n, t) {
27222
- let e = new Date(Date.parse(n));
27223
- if (isNaN(e))
29337
+ function k3(n, t) {
29338
+ let e2 = new Date(Date.parse(n));
29339
+ if (isNaN(e2))
27224
29340
  throw new Error("minitz: Invalid ISO8601 passed to parser.");
27225
- let r = n.substring(9);
27226
- return n.includes("Z") || r.includes("-") || r.includes("+") ? h.tp(e.getUTCFullYear(), e.getUTCMonth() + 1, e.getUTCDate(), e.getUTCHours(), e.getUTCMinutes(), e.getUTCSeconds(), "Etc/UTC") : h.tp(e.getFullYear(), e.getMonth() + 1, e.getDate(), e.getHours(), e.getMinutes(), e.getSeconds(), t);
27227
- }
27228
- h.minitz = h;
27229
- var b = 32;
27230
- var p = 31 | b;
27231
- var v = [1, 2, 4, 8, 16];
27232
- var d = class {
29341
+ let r2 = n.substring(9);
29342
+ return n.includes("Z") || r2.includes("-") || r2.includes("+") ? h2.tp(e2.getUTCFullYear(), e2.getUTCMonth() + 1, e2.getUTCDate(), e2.getUTCHours(), e2.getUTCMinutes(), e2.getUTCSeconds(), "Etc/UTC") : h2.tp(e2.getFullYear(), e2.getMonth() + 1, e2.getDate(), e2.getHours(), e2.getMinutes(), e2.getSeconds(), t);
29343
+ }
29344
+ h2.minitz = h2;
29345
+ var b2 = 32;
29346
+ var p2 = 31 | b2;
29347
+ var v2 = [1, 2, 4, 8, 16];
29348
+ var d2 = class {
27233
29349
  pattern;
27234
29350
  timezone;
27235
29351
  second;
@@ -27241,8 +29357,8 @@ var d = class {
27241
29357
  lastDayOfMonth;
27242
29358
  starDOM;
27243
29359
  starDOW;
27244
- constructor(t, e) {
27245
- this.pattern = t, this.timezone = e, this.second = Array(60).fill(0), this.minute = Array(60).fill(0), this.hour = Array(24).fill(0), this.day = Array(31).fill(0), this.month = Array(12).fill(0), this.dayOfWeek = Array(7).fill(0), this.lastDayOfMonth = false, this.starDOM = false, this.starDOW = false, this.parse();
29360
+ constructor(t, e2) {
29361
+ this.pattern = t, this.timezone = e2, this.second = Array(60).fill(0), this.minute = Array(60).fill(0), this.hour = Array(24).fill(0), this.day = Array(31).fill(0), this.month = Array(12).fill(0), this.dayOfWeek = Array(7).fill(0), this.lastDayOfMonth = false, this.starDOM = false, this.starDOW = false, this.parse();
27246
29362
  }
27247
29363
  parse() {
27248
29364
  if (!(typeof this.pattern == "string" || this.pattern instanceof String))
@@ -27252,116 +29368,116 @@ var d = class {
27252
29368
  if (t.length < 5 || t.length > 6)
27253
29369
  throw new TypeError("CronPattern: invalid configuration format ('" + this.pattern + "'), exactly five or six space separated parts are required.");
27254
29370
  if (t.length === 5 && t.unshift("0"), t[3].indexOf("L") >= 0 && (t[3] = t[3].replace("L", ""), this.lastDayOfMonth = true), t[3] == "*" && (this.starDOM = true), t[4].length >= 3 && (t[4] = this.replaceAlphaMonths(t[4])), t[5].length >= 3 && (t[5] = this.replaceAlphaDays(t[5])), t[5] == "*" && (this.starDOW = true), this.pattern.indexOf("?") >= 0) {
27255
- let e = new f(new Date, this.timezone).getDate(true);
27256
- t[0] = t[0].replace("?", e.getSeconds().toString()), t[1] = t[1].replace("?", e.getMinutes().toString()), t[2] = t[2].replace("?", e.getHours().toString()), this.starDOM || (t[3] = t[3].replace("?", e.getDate().toString())), t[4] = t[4].replace("?", (e.getMonth() + 1).toString()), this.starDOW || (t[5] = t[5].replace("?", e.getDay().toString()));
29371
+ let e2 = new f(new Date, this.timezone).getDate(true);
29372
+ t[0] = t[0].replace("?", e2.getSeconds().toString()), t[1] = t[1].replace("?", e2.getMinutes().toString()), t[2] = t[2].replace("?", e2.getHours().toString()), this.starDOM || (t[3] = t[3].replace("?", e2.getDate().toString())), t[4] = t[4].replace("?", (e2.getMonth() + 1).toString()), this.starDOW || (t[5] = t[5].replace("?", e2.getDay().toString()));
27257
29373
  }
27258
- this.throwAtIllegalCharacters(t), this.partToArray("second", t[0], 0, 1), this.partToArray("minute", t[1], 0, 1), this.partToArray("hour", t[2], 0, 1), this.partToArray("day", t[3], -1, 1), this.partToArray("month", t[4], -1, 1), this.partToArray("dayOfWeek", t[5], 0, p), this.dayOfWeek[7] && (this.dayOfWeek[0] = this.dayOfWeek[7]);
29374
+ this.throwAtIllegalCharacters(t), this.partToArray("second", t[0], 0, 1), this.partToArray("minute", t[1], 0, 1), this.partToArray("hour", t[2], 0, 1), this.partToArray("day", t[3], -1, 1), this.partToArray("month", t[4], -1, 1), this.partToArray("dayOfWeek", t[5], 0, p2), this.dayOfWeek[7] && (this.dayOfWeek[0] = this.dayOfWeek[7]);
27259
29375
  }
27260
- partToArray(t, e, r, s) {
27261
- let i = this[t], a = t === "day" && this.lastDayOfMonth;
27262
- if (e === "" && !a)
27263
- throw new TypeError("CronPattern: configuration entry " + t + " (" + e + ") is empty, check for trailing spaces.");
27264
- if (e === "*")
29376
+ partToArray(t, e2, r2, s) {
29377
+ let i = this[t], a2 = t === "day" && this.lastDayOfMonth;
29378
+ if (e2 === "" && !a2)
29379
+ throw new TypeError("CronPattern: configuration entry " + t + " (" + e2 + ") is empty, check for trailing spaces.");
29380
+ if (e2 === "*")
27265
29381
  return i.fill(s);
27266
- let l = e.split(",");
27267
- if (l.length > 1)
27268
- for (let o = 0;o < l.length; o++)
27269
- this.partToArray(t, l[o], r, s);
29382
+ let l2 = e2.split(",");
29383
+ if (l2.length > 1)
29384
+ for (let o = 0;o < l2.length; o++)
29385
+ this.partToArray(t, l2[o], r2, s);
27270
29386
  else
27271
- e.indexOf("-") !== -1 && e.indexOf("/") !== -1 ? this.handleRangeWithStepping(e, t, r, s) : e.indexOf("-") !== -1 ? this.handleRange(e, t, r, s) : e.indexOf("/") !== -1 ? this.handleStepping(e, t, r, s) : e !== "" && this.handleNumber(e, t, r, s);
29387
+ e2.indexOf("-") !== -1 && e2.indexOf("/") !== -1 ? this.handleRangeWithStepping(e2, t, r2, s) : e2.indexOf("-") !== -1 ? this.handleRange(e2, t, r2, s) : e2.indexOf("/") !== -1 ? this.handleStepping(e2, t, r2, s) : e2 !== "" && this.handleNumber(e2, t, r2, s);
27272
29388
  }
27273
29389
  throwAtIllegalCharacters(t) {
27274
- for (let e = 0;e < t.length; e++)
27275
- if ((e === 5 ? /[^/*0-9,\-#L]+/ : /[^/*0-9,-]+/).test(t[e]))
27276
- throw new TypeError("CronPattern: configuration entry " + e + " (" + t[e] + ") contains illegal characters.");
29390
+ for (let e2 = 0;e2 < t.length; e2++)
29391
+ if ((e2 === 5 ? /[^/*0-9,\-#L]+/ : /[^/*0-9,-]+/).test(t[e2]))
29392
+ throw new TypeError("CronPattern: configuration entry " + e2 + " (" + t[e2] + ") contains illegal characters.");
27277
29393
  }
27278
- handleNumber(t, e, r, s) {
27279
- let i = this.extractNth(t, e), a = parseInt(i[0], 10) + r;
27280
- if (isNaN(a))
27281
- throw new TypeError("CronPattern: " + e + " is not a number: '" + t + "'");
27282
- this.setPart(e, a, i[1] || s);
29394
+ handleNumber(t, e2, r2, s) {
29395
+ let i = this.extractNth(t, e2), a2 = parseInt(i[0], 10) + r2;
29396
+ if (isNaN(a2))
29397
+ throw new TypeError("CronPattern: " + e2 + " is not a number: '" + t + "'");
29398
+ this.setPart(e2, a2, i[1] || s);
27283
29399
  }
27284
- setPart(t, e, r) {
29400
+ setPart(t, e2, r2) {
27285
29401
  if (!Object.prototype.hasOwnProperty.call(this, t))
27286
29402
  throw new TypeError("CronPattern: Invalid part specified: " + t);
27287
29403
  if (t === "dayOfWeek") {
27288
- if (e === 7 && (e = 0), e < 0 || e > 6)
27289
- throw new RangeError("CronPattern: Invalid value for dayOfWeek: " + e);
27290
- this.setNthWeekdayOfMonth(e, r);
29404
+ if (e2 === 7 && (e2 = 0), e2 < 0 || e2 > 6)
29405
+ throw new RangeError("CronPattern: Invalid value for dayOfWeek: " + e2);
29406
+ this.setNthWeekdayOfMonth(e2, r2);
27291
29407
  return;
27292
29408
  }
27293
29409
  if (t === "second" || t === "minute") {
27294
- if (e < 0 || e >= 60)
27295
- throw new RangeError("CronPattern: Invalid value for " + t + ": " + e);
29410
+ if (e2 < 0 || e2 >= 60)
29411
+ throw new RangeError("CronPattern: Invalid value for " + t + ": " + e2);
27296
29412
  } else if (t === "hour") {
27297
- if (e < 0 || e >= 24)
27298
- throw new RangeError("CronPattern: Invalid value for " + t + ": " + e);
29413
+ if (e2 < 0 || e2 >= 24)
29414
+ throw new RangeError("CronPattern: Invalid value for " + t + ": " + e2);
27299
29415
  } else if (t === "day") {
27300
- if (e < 0 || e >= 31)
27301
- throw new RangeError("CronPattern: Invalid value for " + t + ": " + e);
27302
- } else if (t === "month" && (e < 0 || e >= 12))
27303
- throw new RangeError("CronPattern: Invalid value for " + t + ": " + e);
27304
- this[t][e] = r;
27305
- }
27306
- handleRangeWithStepping(t, e, r, s) {
27307
- let i = this.extractNth(t, e), a = i[0].match(/^(\d+)-(\d+)\/(\d+)$/);
27308
- if (a === null)
29416
+ if (e2 < 0 || e2 >= 31)
29417
+ throw new RangeError("CronPattern: Invalid value for " + t + ": " + e2);
29418
+ } else if (t === "month" && (e2 < 0 || e2 >= 12))
29419
+ throw new RangeError("CronPattern: Invalid value for " + t + ": " + e2);
29420
+ this[t][e2] = r2;
29421
+ }
29422
+ handleRangeWithStepping(t, e2, r2, s) {
29423
+ let i = this.extractNth(t, e2), a2 = i[0].match(/^(\d+)-(\d+)\/(\d+)$/);
29424
+ if (a2 === null)
27309
29425
  throw new TypeError("CronPattern: Syntax error, illegal range with stepping: '" + t + "'");
27310
- let [, l, o, u] = a, c = parseInt(l, 10) + r, w = parseInt(o, 10) + r, C2 = parseInt(u, 10);
27311
- if (isNaN(c))
29426
+ let [, l2, o, u2] = a2, c2 = parseInt(l2, 10) + r2, w2 = parseInt(o, 10) + r2, C2 = parseInt(u2, 10);
29427
+ if (isNaN(c2))
27312
29428
  throw new TypeError("CronPattern: Syntax error, illegal lower range (NaN)");
27313
- if (isNaN(w))
29429
+ if (isNaN(w2))
27314
29430
  throw new TypeError("CronPattern: Syntax error, illegal upper range (NaN)");
27315
29431
  if (isNaN(C2))
27316
29432
  throw new TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");
27317
29433
  if (C2 === 0)
27318
29434
  throw new TypeError("CronPattern: Syntax error, illegal stepping: 0");
27319
- if (C2 > this[e].length)
27320
- throw new TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part (" + this[e].length + ")");
27321
- if (c > w)
29435
+ if (C2 > this[e2].length)
29436
+ throw new TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part (" + this[e2].length + ")");
29437
+ if (c2 > w2)
27322
29438
  throw new TypeError("CronPattern: From value is larger than to value: '" + t + "'");
27323
- for (let T = c;T <= w; T += C2)
27324
- this.setPart(e, T, i[1] || s);
29439
+ for (let T2 = c2;T2 <= w2; T2 += C2)
29440
+ this.setPart(e2, T2, i[1] || s);
27325
29441
  }
27326
- extractNth(t, e) {
27327
- let r = t, s;
27328
- if (r.includes("#")) {
27329
- if (e !== "dayOfWeek")
29442
+ extractNth(t, e2) {
29443
+ let r2 = t, s;
29444
+ if (r2.includes("#")) {
29445
+ if (e2 !== "dayOfWeek")
27330
29446
  throw new Error("CronPattern: nth (#) only allowed in day-of-week field");
27331
- s = r.split("#")[1], r = r.split("#")[0];
29447
+ s = r2.split("#")[1], r2 = r2.split("#")[0];
27332
29448
  }
27333
- return [r, s];
29449
+ return [r2, s];
27334
29450
  }
27335
- handleRange(t, e, r, s) {
27336
- let i = this.extractNth(t, e), a = i[0].split("-");
27337
- if (a.length !== 2)
29451
+ handleRange(t, e2, r2, s) {
29452
+ let i = this.extractNth(t, e2), a2 = i[0].split("-");
29453
+ if (a2.length !== 2)
27338
29454
  throw new TypeError("CronPattern: Syntax error, illegal range: '" + t + "'");
27339
- let l = parseInt(a[0], 10) + r, o = parseInt(a[1], 10) + r;
27340
- if (isNaN(l))
29455
+ let l2 = parseInt(a2[0], 10) + r2, o = parseInt(a2[1], 10) + r2;
29456
+ if (isNaN(l2))
27341
29457
  throw new TypeError("CronPattern: Syntax error, illegal lower range (NaN)");
27342
29458
  if (isNaN(o))
27343
29459
  throw new TypeError("CronPattern: Syntax error, illegal upper range (NaN)");
27344
- if (l > o)
29460
+ if (l2 > o)
27345
29461
  throw new TypeError("CronPattern: From value is larger than to value: '" + t + "'");
27346
- for (let u = l;u <= o; u++)
27347
- this.setPart(e, u, i[1] || s);
29462
+ for (let u2 = l2;u2 <= o; u2++)
29463
+ this.setPart(e2, u2, i[1] || s);
27348
29464
  }
27349
- handleStepping(t, e, r, s) {
27350
- let i = this.extractNth(t, e), a = i[0].split("/");
27351
- if (a.length !== 2)
29465
+ handleStepping(t, e2, r2, s) {
29466
+ let i = this.extractNth(t, e2), a2 = i[0].split("/");
29467
+ if (a2.length !== 2)
27352
29468
  throw new TypeError("CronPattern: Syntax error, illegal stepping: '" + t + "'");
27353
- a[0] === "" && (a[0] = "*");
27354
- let l = 0;
27355
- a[0] !== "*" && (l = parseInt(a[0], 10) + r);
27356
- let o = parseInt(a[1], 10);
29469
+ a2[0] === "" && (a2[0] = "*");
29470
+ let l2 = 0;
29471
+ a2[0] !== "*" && (l2 = parseInt(a2[0], 10) + r2);
29472
+ let o = parseInt(a2[1], 10);
27357
29473
  if (isNaN(o))
27358
29474
  throw new TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");
27359
29475
  if (o === 0)
27360
29476
  throw new TypeError("CronPattern: Syntax error, illegal stepping: 0");
27361
- if (o > this[e].length)
27362
- throw new TypeError("CronPattern: Syntax error, max steps for part is (" + this[e].length + ")");
27363
- for (let u = l;u < this[e].length; u += o)
27364
- this.setPart(e, u, i[1] || s);
29477
+ if (o > this[e2].length)
29478
+ throw new TypeError("CronPattern: Syntax error, max steps for part is (" + this[e2].length + ")");
29479
+ for (let u2 = l2;u2 < this[e2].length; u2 += o)
29480
+ this.setPart(e2, u2, i[1] || s);
27365
29481
  }
27366
29482
  replaceAlphaDays(t) {
27367
29483
  return t.replace(/-sun/gi, "-7").replace(/sun/gi, "0").replace(/mon/gi, "1").replace(/tue/gi, "2").replace(/wed/gi, "3").replace(/thu/gi, "4").replace(/fri/gi, "5").replace(/sat/gi, "6");
@@ -27370,22 +29486,22 @@ var d = class {
27370
29486
  return t.replace(/jan/gi, "1").replace(/feb/gi, "2").replace(/mar/gi, "3").replace(/apr/gi, "4").replace(/may/gi, "5").replace(/jun/gi, "6").replace(/jul/gi, "7").replace(/aug/gi, "8").replace(/sep/gi, "9").replace(/oct/gi, "10").replace(/nov/gi, "11").replace(/dec/gi, "12");
27371
29487
  }
27372
29488
  handleNicknames(t) {
27373
- let e = t.trim().toLowerCase();
27374
- return e === "@yearly" || e === "@annually" ? "0 0 1 1 *" : e === "@monthly" ? "0 0 1 * *" : e === "@weekly" ? "0 0 * * 0" : e === "@daily" ? "0 0 * * *" : e === "@hourly" ? "0 * * * *" : t;
27375
- }
27376
- setNthWeekdayOfMonth(t, e) {
27377
- if (typeof e != "number" && e === "L")
27378
- this.dayOfWeek[t] = this.dayOfWeek[t] | b;
27379
- else if (e === p)
27380
- this.dayOfWeek[t] = p;
27381
- else if (e < 6 && e > 0)
27382
- this.dayOfWeek[t] = this.dayOfWeek[t] | v[e - 1];
29489
+ let e2 = t.trim().toLowerCase();
29490
+ return e2 === "@yearly" || e2 === "@annually" ? "0 0 1 1 *" : e2 === "@monthly" ? "0 0 1 * *" : e2 === "@weekly" ? "0 0 * * 0" : e2 === "@daily" ? "0 0 * * *" : e2 === "@hourly" ? "0 * * * *" : t;
29491
+ }
29492
+ setNthWeekdayOfMonth(t, e2) {
29493
+ if (typeof e2 != "number" && e2 === "L")
29494
+ this.dayOfWeek[t] = this.dayOfWeek[t] | b2;
29495
+ else if (e2 === p2)
29496
+ this.dayOfWeek[t] = p2;
29497
+ else if (e2 < 6 && e2 > 0)
29498
+ this.dayOfWeek[t] = this.dayOfWeek[t] | v2[e2 - 1];
27383
29499
  else
27384
- throw new TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${e}, Type: ${typeof e}`);
29500
+ throw new TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${e2}, Type: ${typeof e2}`);
27385
29501
  }
27386
29502
  };
27387
- var O = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
27388
- var m = [["month", "year", 0], ["day", "month", -1], ["hour", "day", 0], ["minute", "hour", 0], ["second", "minute", 0]];
29503
+ var O2 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
29504
+ var m3 = [["month", "year", 0], ["day", "month", -1], ["hour", "day", 0], ["minute", "hour", 0], ["second", "minute", 0]];
27389
29505
  var f = class n {
27390
29506
  tz;
27391
29507
  ms;
@@ -27395,8 +29511,8 @@ var f = class n {
27395
29511
  day;
27396
29512
  month;
27397
29513
  year;
27398
- constructor(t, e) {
27399
- if (this.tz = e, t && t instanceof Date)
29514
+ constructor(t, e2) {
29515
+ if (this.tz = e2, t && t instanceof Date)
27400
29516
  if (!isNaN(t))
27401
29517
  this.fromDate(t);
27402
29518
  else
@@ -27410,16 +29526,16 @@ var f = class n {
27410
29526
  else
27411
29527
  throw new TypeError("CronDate: Invalid type (" + typeof t + ") passed to CronDate constructor");
27412
29528
  }
27413
- isNthWeekdayOfMonth(t, e, r, s) {
27414
- let a = new Date(Date.UTC(t, e, r)).getUTCDay(), l = 0;
27415
- for (let o = 1;o <= r; o++)
27416
- new Date(Date.UTC(t, e, o)).getUTCDay() === a && l++;
27417
- if (s & p && v[l - 1] & s)
29529
+ isNthWeekdayOfMonth(t, e2, r2, s) {
29530
+ let a2 = new Date(Date.UTC(t, e2, r2)).getUTCDay(), l2 = 0;
29531
+ for (let o = 1;o <= r2; o++)
29532
+ new Date(Date.UTC(t, e2, o)).getUTCDay() === a2 && l2++;
29533
+ if (s & p2 && v2[l2 - 1] & s)
27418
29534
  return true;
27419
- if (s & b) {
27420
- let o = new Date(Date.UTC(t, e + 1, 0)).getUTCDate();
27421
- for (let u = r + 1;u <= o; u++)
27422
- if (new Date(Date.UTC(t, e, u)).getUTCDay() === a)
29535
+ if (s & b2) {
29536
+ let o = new Date(Date.UTC(t, e2 + 1, 0)).getUTCDate();
29537
+ for (let u2 = r2 + 1;u2 <= o; u2++)
29538
+ if (new Date(Date.UTC(t, e2, u2)).getUTCDay() === a2)
27423
29539
  return false;
27424
29540
  return true;
27425
29541
  }
@@ -27430,8 +29546,8 @@ var f = class n {
27430
29546
  if (typeof this.tz == "number")
27431
29547
  this.ms = t.getUTCMilliseconds(), this.second = t.getUTCSeconds(), this.minute = t.getUTCMinutes() + this.tz, this.hour = t.getUTCHours(), this.day = t.getUTCDate(), this.month = t.getUTCMonth(), this.year = t.getUTCFullYear(), this.apply();
27432
29548
  else {
27433
- let e = h.toTZ(t, this.tz);
27434
- this.ms = t.getMilliseconds(), this.second = e.s, this.minute = e.i, this.hour = e.h, this.day = e.d, this.month = e.m - 1, this.year = e.y;
29549
+ let e2 = h2.toTZ(t, this.tz);
29550
+ this.ms = t.getMilliseconds(), this.second = e2.s, this.minute = e2.i, this.hour = e2.h, this.day = e2.d, this.month = e2.m - 1, this.year = e2.y;
27435
29551
  }
27436
29552
  else
27437
29553
  this.ms = t.getMilliseconds(), this.second = t.getSeconds(), this.minute = t.getMinutes(), this.hour = t.getHours(), this.day = t.getDate(), this.month = t.getMonth(), this.year = t.getFullYear();
@@ -27440,7 +29556,7 @@ var f = class n {
27440
29556
  this.tz = t.tz, this.year = t.year, this.month = t.month, this.day = t.day, this.hour = t.hour, this.minute = t.minute, this.second = t.second, this.ms = t.ms;
27441
29557
  }
27442
29558
  apply() {
27443
- if (this.month > 11 || this.day > O[this.month] || this.hour > 59 || this.minute > 59 || this.second > 59 || this.hour < 0 || this.minute < 0 || this.second < 0) {
29559
+ if (this.month > 11 || this.day > O2[this.month] || this.hour > 59 || this.minute > 59 || this.second > 59 || this.hour < 0 || this.minute < 0 || this.second < 0) {
27444
29560
  let t = new Date(Date.UTC(this.year, this.month, this.day, this.hour, this.minute, this.second, this.ms));
27445
29561
  return this.ms = t.getUTCMilliseconds(), this.second = t.getUTCSeconds(), this.minute = t.getUTCMinutes(), this.hour = t.getUTCHours(), this.day = t.getUTCDate(), this.month = t.getUTCMonth(), this.year = t.getUTCFullYear(), true;
27446
29562
  } else
@@ -27448,54 +29564,54 @@ var f = class n {
27448
29564
  }
27449
29565
  fromString(t) {
27450
29566
  if (typeof this.tz == "number") {
27451
- let e = h.fromTZISO(t);
27452
- this.ms = e.getUTCMilliseconds(), this.second = e.getUTCSeconds(), this.minute = e.getUTCMinutes(), this.hour = e.getUTCHours(), this.day = e.getUTCDate(), this.month = e.getUTCMonth(), this.year = e.getUTCFullYear(), this.apply();
29567
+ let e2 = h2.fromTZISO(t);
29568
+ this.ms = e2.getUTCMilliseconds(), this.second = e2.getUTCSeconds(), this.minute = e2.getUTCMinutes(), this.hour = e2.getUTCHours(), this.day = e2.getUTCDate(), this.month = e2.getUTCMonth(), this.year = e2.getUTCFullYear(), this.apply();
27453
29569
  } else
27454
- return this.fromDate(h.fromTZISO(t, this.tz));
27455
- }
27456
- findNext(t, e, r, s) {
27457
- let i = this[e], a;
27458
- r.lastDayOfMonth && (this.month !== 1 ? a = O[this.month] : a = new Date(Date.UTC(this.year, this.month + 1, 0, 0, 0, 0, 0)).getUTCDate());
27459
- let l = !r.starDOW && e == "day" ? new Date(Date.UTC(this.year, this.month, 1, 0, 0, 0, 0)).getUTCDay() : undefined;
27460
- for (let o = this[e] + s;o < r[e].length; o++) {
27461
- let u = r[e][o];
27462
- if (e === "day" && r.lastDayOfMonth && o - s == a && (u = 1), e === "day" && !r.starDOW) {
27463
- let c = r.dayOfWeek[(l + (o - s - 1)) % 7];
27464
- if (c && c & p)
27465
- c = this.isNthWeekdayOfMonth(this.year, this.month, o - s, c) ? 1 : 0;
27466
- else if (c)
27467
- throw new Error(`CronDate: Invalid value for dayOfWeek encountered. ${c}`);
27468
- t.legacyMode && !r.starDOM ? u = u || c : u = u && c;
27469
- }
27470
- if (u)
27471
- return this[e] = o - s, i !== this[e] ? 2 : 1;
29570
+ return this.fromDate(h2.fromTZISO(t, this.tz));
29571
+ }
29572
+ findNext(t, e2, r2, s) {
29573
+ let i = this[e2], a2;
29574
+ r2.lastDayOfMonth && (this.month !== 1 ? a2 = O2[this.month] : a2 = new Date(Date.UTC(this.year, this.month + 1, 0, 0, 0, 0, 0)).getUTCDate());
29575
+ let l2 = !r2.starDOW && e2 == "day" ? new Date(Date.UTC(this.year, this.month, 1, 0, 0, 0, 0)).getUTCDay() : undefined;
29576
+ for (let o = this[e2] + s;o < r2[e2].length; o++) {
29577
+ let u2 = r2[e2][o];
29578
+ if (e2 === "day" && r2.lastDayOfMonth && o - s == a2 && (u2 = 1), e2 === "day" && !r2.starDOW) {
29579
+ let c2 = r2.dayOfWeek[(l2 + (o - s - 1)) % 7];
29580
+ if (c2 && c2 & p2)
29581
+ c2 = this.isNthWeekdayOfMonth(this.year, this.month, o - s, c2) ? 1 : 0;
29582
+ else if (c2)
29583
+ throw new Error(`CronDate: Invalid value for dayOfWeek encountered. ${c2}`);
29584
+ t.legacyMode && !r2.starDOM ? u2 = u2 || c2 : u2 = u2 && c2;
29585
+ }
29586
+ if (u2)
29587
+ return this[e2] = o - s, i !== this[e2] ? 2 : 1;
27472
29588
  }
27473
29589
  return 3;
27474
29590
  }
27475
- recurse(t, e, r) {
27476
- let s = this.findNext(e, m[r][0], t, m[r][2]);
29591
+ recurse(t, e2, r2) {
29592
+ let s = this.findNext(e2, m3[r2][0], t, m3[r2][2]);
27477
29593
  if (s > 1) {
27478
- let i = r + 1;
27479
- for (;i < m.length; )
27480
- this[m[i][0]] = -m[i][2], i++;
29594
+ let i = r2 + 1;
29595
+ for (;i < m3.length; )
29596
+ this[m3[i][0]] = -m3[i][2], i++;
27481
29597
  if (s === 3)
27482
- return this[m[r][1]]++, this[m[r][0]] = -m[r][2], this.apply(), this.recurse(t, e, 0);
29598
+ return this[m3[r2][1]]++, this[m3[r2][0]] = -m3[r2][2], this.apply(), this.recurse(t, e2, 0);
27483
29599
  if (this.apply())
27484
- return this.recurse(t, e, r - 1);
29600
+ return this.recurse(t, e2, r2 - 1);
27485
29601
  }
27486
- return r += 1, r >= m.length ? this : this.year >= 3000 ? null : this.recurse(t, e, r);
29602
+ return r2 += 1, r2 >= m3.length ? this : this.year >= 3000 ? null : this.recurse(t, e2, r2);
27487
29603
  }
27488
- increment(t, e, r) {
27489
- return this.second += e.interval !== undefined && e.interval > 1 && r ? e.interval : 1, this.ms = 0, this.apply(), this.recurse(t, e, 0);
29604
+ increment(t, e2, r2) {
29605
+ return this.second += e2.interval !== undefined && e2.interval > 1 && r2 ? e2.interval : 1, this.ms = 0, this.apply(), this.recurse(t, e2, 0);
27490
29606
  }
27491
29607
  getDate(t) {
27492
- return t || this.tz === undefined ? new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.ms) : typeof this.tz == "number" ? new Date(Date.UTC(this.year, this.month, this.day, this.hour, this.minute - this.tz, this.second, this.ms)) : h.fromTZ(h.tp(this.year, this.month + 1, this.day, this.hour, this.minute, this.second, this.tz), false);
29608
+ return t || this.tz === undefined ? new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.ms) : typeof this.tz == "number" ? new Date(Date.UTC(this.year, this.month, this.day, this.hour, this.minute - this.tz, this.second, this.ms)) : h2.fromTZ(h2.tp(this.year, this.month + 1, this.day, this.hour, this.minute, this.second, this.tz), false);
27493
29609
  }
27494
29610
  getTime() {
27495
29611
  return this.getDate(false).getTime();
27496
29612
  }
27497
29613
  };
27498
- function N(n2) {
29614
+ function N3(n2) {
27499
29615
  if (n2 === undefined && (n2 = {}), delete n2.name, n2.legacyMode = n2.legacyMode === undefined ? true : n2.legacyMode, n2.paused = n2.paused === undefined ? false : n2.paused, n2.maxRuns = n2.maxRuns === undefined ? 1 / 0 : n2.maxRuns, n2.catch = n2.catch === undefined ? false : n2.catch, n2.interval = n2.interval === undefined ? 0 : parseInt(n2.interval.toString(), 10), n2.utcOffset = n2.utcOffset === undefined ? undefined : parseInt(n2.utcOffset.toString(), 10), n2.unref = n2.unref === undefined ? false : n2.unref, n2.startAt && (n2.startAt = new f(n2.startAt, n2.timezone)), n2.stopAt && (n2.stopAt = new f(n2.stopAt, n2.timezone)), n2.interval !== null) {
27500
29616
  if (isNaN(n2.interval))
27501
29617
  throw new Error("CronOptions: Supplied value for interval is not a number");
@@ -27514,60 +29630,60 @@ function N(n2) {
27514
29630
  throw new Error("CronOptions: Unref should be either true, false or undefined(false).");
27515
29631
  return n2;
27516
29632
  }
27517
- function g(n2) {
29633
+ function g2(n2) {
27518
29634
  return Object.prototype.toString.call(n2) === "[object Function]" || typeof n2 == "function" || n2 instanceof Function;
27519
29635
  }
27520
- function S(n2) {
27521
- return g(n2);
29636
+ function S3(n2) {
29637
+ return g2(n2);
27522
29638
  }
27523
- function P(n2) {
29639
+ function P2(n2) {
27524
29640
  typeof Deno < "u" && typeof Deno.unrefTimer < "u" ? Deno.unrefTimer(n2) : n2 && typeof n2.unref < "u" && n2.unref();
27525
29641
  }
27526
- var _ = 30 * 1000;
27527
- var y = [];
27528
- var R = class {
29642
+ var _2 = 30 * 1000;
29643
+ var y3 = [];
29644
+ var R3 = class {
27529
29645
  name;
27530
29646
  options;
27531
29647
  _states;
27532
29648
  fn;
27533
- constructor(t, e, r) {
29649
+ constructor(t, e2, r2) {
27534
29650
  let s, i;
27535
- if (g(e))
27536
- i = e;
27537
- else if (typeof e == "object")
27538
- s = e;
27539
- else if (e !== undefined)
29651
+ if (g2(e2))
29652
+ i = e2;
29653
+ else if (typeof e2 == "object")
29654
+ s = e2;
29655
+ else if (e2 !== undefined)
27540
29656
  throw new Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");
27541
- if (g(r))
27542
- i = r;
27543
- else if (typeof r == "object")
27544
- s = r;
27545
- else if (r !== undefined)
29657
+ if (g2(r2))
29658
+ i = r2;
29659
+ else if (typeof r2 == "object")
29660
+ s = r2;
29661
+ else if (r2 !== undefined)
27546
29662
  throw new Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");
27547
- if (this.name = s?.name, this.options = N(s), this._states = { kill: false, blocking: false, previousRun: undefined, currentRun: undefined, once: undefined, currentTimeout: undefined, maxRuns: s ? s.maxRuns : undefined, paused: s ? s.paused : false, pattern: new d("* * * * *") }, t && (t instanceof Date || typeof t == "string" && t.indexOf(":") > 0) ? this._states.once = new f(t, this.options.timezone || this.options.utcOffset) : this._states.pattern = new d(t, this.options.timezone), this.name) {
27548
- if (y.find((l) => l.name === this.name))
29663
+ if (this.name = s?.name, this.options = N3(s), this._states = { kill: false, blocking: false, previousRun: undefined, currentRun: undefined, once: undefined, currentTimeout: undefined, maxRuns: s ? s.maxRuns : undefined, paused: s ? s.paused : false, pattern: new d2("* * * * *") }, t && (t instanceof Date || typeof t == "string" && t.indexOf(":") > 0) ? this._states.once = new f(t, this.options.timezone || this.options.utcOffset) : this._states.pattern = new d2(t, this.options.timezone), this.name) {
29664
+ if (y3.find((l2) => l2.name === this.name))
27549
29665
  throw new Error("Cron: Tried to initialize new named job '" + this.name + "', but name already taken.");
27550
- y.push(this);
29666
+ y3.push(this);
27551
29667
  }
27552
- return i !== undefined && S(i) && (this.fn = i, this.schedule()), this;
29668
+ return i !== undefined && S3(i) && (this.fn = i, this.schedule()), this;
27553
29669
  }
27554
29670
  nextRun(t) {
27555
- let e = this._next(t);
27556
- return e ? e.getDate(false) : null;
29671
+ let e2 = this._next(t);
29672
+ return e2 ? e2.getDate(false) : null;
27557
29673
  }
27558
- nextRuns(t, e) {
29674
+ nextRuns(t, e2) {
27559
29675
  this._states.maxRuns !== undefined && t > this._states.maxRuns && (t = this._states.maxRuns);
27560
- let r = [], s = e || this._states.currentRun || undefined;
29676
+ let r2 = [], s = e2 || this._states.currentRun || undefined;
27561
29677
  for (;t-- && (s = this.nextRun(s)); )
27562
- r.push(s);
27563
- return r;
29678
+ r2.push(s);
29679
+ return r2;
27564
29680
  }
27565
29681
  getPattern() {
27566
29682
  return this._states.pattern ? this._states.pattern.pattern : undefined;
27567
29683
  }
27568
29684
  isRunning() {
27569
- let t = this.nextRun(this._states.currentRun), e = !this._states.paused, r = this.fn !== undefined, s = !this._states.kill;
27570
- return e && r && s && t !== null;
29685
+ let t = this.nextRun(this._states.currentRun), e2 = !this._states.paused, r2 = this.fn !== undefined, s = !this._states.kill;
29686
+ return e2 && r2 && s && t !== null;
27571
29687
  }
27572
29688
  isStopped() {
27573
29689
  return this._states.kill;
@@ -27582,13 +29698,13 @@ var R = class {
27582
29698
  return this._states.previousRun ? this._states.previousRun.getDate() : null;
27583
29699
  }
27584
29700
  msToNext(t) {
27585
- let e = this._next(t);
27586
- return e ? t instanceof f || t instanceof Date ? e.getTime() - t.getTime() : e.getTime() - new f(t).getTime() : null;
29701
+ let e2 = this._next(t);
29702
+ return e2 ? t instanceof f || t instanceof Date ? e2.getTime() - t.getTime() : e2.getTime() - new f(t).getTime() : null;
27587
29703
  }
27588
29704
  stop() {
27589
29705
  this._states.kill = true, this._states.currentTimeout && clearTimeout(this._states.currentTimeout);
27590
- let t = y.indexOf(this);
27591
- t >= 0 && y.splice(t, 1);
29706
+ let t = y3.indexOf(this);
29707
+ t >= 0 && y3.splice(t, 1);
27592
29708
  }
27593
29709
  pause() {
27594
29710
  return this._states.paused = true, !this._states.kill;
@@ -27600,15 +29716,15 @@ var R = class {
27600
29716
  if (t && this.fn)
27601
29717
  throw new Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");
27602
29718
  t && (this.fn = t);
27603
- let e = this.msToNext(), r = this.nextRun(this._states.currentRun);
27604
- return e == null || isNaN(e) || r === null ? this : (e > _ && (e = _), this._states.currentTimeout = setTimeout(() => this._checkTrigger(r), e), this._states.currentTimeout && this.options.unref && P(this._states.currentTimeout), this);
29719
+ let e2 = this.msToNext(), r2 = this.nextRun(this._states.currentRun);
29720
+ return e2 == null || isNaN(e2) || r2 === null ? this : (e2 > _2 && (e2 = _2), this._states.currentTimeout = setTimeout(() => this._checkTrigger(r2), e2), this._states.currentTimeout && this.options.unref && P2(this._states.currentTimeout), this);
27605
29721
  }
27606
29722
  async _trigger(t) {
27607
29723
  if (this._states.blocking = true, this._states.currentRun = new f(undefined, this.options.timezone || this.options.utcOffset), this.options.catch)
27608
29724
  try {
27609
29725
  this.fn !== undefined && await this.fn(this, this.options.context);
27610
- } catch (e) {
27611
- g(this.options.catch) && this.options.catch(e, this);
29726
+ } catch (e2) {
29727
+ g2(this.options.catch) && this.options.catch(e2, this);
27612
29728
  }
27613
29729
  else
27614
29730
  this.fn !== undefined && await this.fn(this, this.options.context);
@@ -27621,25 +29737,25 @@ var R = class {
27621
29737
  return this._states.maxRuns;
27622
29738
  }
27623
29739
  _checkTrigger(t) {
27624
- let e = new Date, r = !this._states.paused && e.getTime() >= t.getTime(), s = this._states.blocking && this.options.protect;
27625
- r && !s ? (this._states.maxRuns !== undefined && this._states.maxRuns--, this._trigger()) : r && s && g(this.options.protect) && setTimeout(() => this.options.protect(this), 0), this.schedule();
29740
+ let e2 = new Date, r2 = !this._states.paused && e2.getTime() >= t.getTime(), s = this._states.blocking && this.options.protect;
29741
+ r2 && !s ? (this._states.maxRuns !== undefined && this._states.maxRuns--, this._trigger()) : r2 && s && g2(this.options.protect) && setTimeout(() => this.options.protect(this), 0), this.schedule();
27626
29742
  }
27627
29743
  _next(t) {
27628
- let e = !!(t || this._states.currentRun), r = false;
27629
- !t && this.options.startAt && this.options.interval && ([t, e] = this._calculatePreviousRun(t, e), r = !t), t = new f(t, this.options.timezone || this.options.utcOffset), this.options.startAt && t && t.getTime() < this.options.startAt.getTime() && (t = this.options.startAt);
29744
+ let e2 = !!(t || this._states.currentRun), r2 = false;
29745
+ !t && this.options.startAt && this.options.interval && ([t, e2] = this._calculatePreviousRun(t, e2), r2 = !t), t = new f(t, this.options.timezone || this.options.utcOffset), this.options.startAt && t && t.getTime() < this.options.startAt.getTime() && (t = this.options.startAt);
27630
29746
  let s = this._states.once || new f(t, this.options.timezone || this.options.utcOffset);
27631
- return !r && s !== this._states.once && (s = s.increment(this._states.pattern, this.options, e)), this._states.once && this._states.once.getTime() <= t.getTime() || s === null || this._states.maxRuns !== undefined && this._states.maxRuns <= 0 || this._states.kill || this.options.stopAt && s.getTime() >= this.options.stopAt.getTime() ? null : s;
29747
+ return !r2 && s !== this._states.once && (s = s.increment(this._states.pattern, this.options, e2)), this._states.once && this._states.once.getTime() <= t.getTime() || s === null || this._states.maxRuns !== undefined && this._states.maxRuns <= 0 || this._states.kill || this.options.stopAt && s.getTime() >= this.options.stopAt.getTime() ? null : s;
27632
29748
  }
27633
- _calculatePreviousRun(t, e) {
27634
- let r = new f(undefined, this.options.timezone || this.options.utcOffset), s = t;
27635
- if (this.options.startAt.getTime() <= r.getTime()) {
29749
+ _calculatePreviousRun(t, e2) {
29750
+ let r2 = new f(undefined, this.options.timezone || this.options.utcOffset), s = t;
29751
+ if (this.options.startAt.getTime() <= r2.getTime()) {
27636
29752
  s = this.options.startAt;
27637
29753
  let i = s.getTime() + this.options.interval * 1000;
27638
- for (;i <= r.getTime(); )
29754
+ for (;i <= r2.getTime(); )
27639
29755
  s = new f(s, this.options.timezone || this.options.utcOffset).increment(this._states.pattern, this.options, true), i = s.getTime() + this.options.interval * 1000;
27640
- e = true;
29756
+ e2 = true;
27641
29757
  }
27642
- return s === null && (s = undefined), [s, e];
29758
+ return s === null && (s = undefined), [s, e2];
27643
29759
  }
27644
29760
  };
27645
29761
 
@@ -27658,7 +29774,7 @@ class CronScheduler {
27658
29774
  console.log(`[ARC:Cron] Discovered ${cronEntries.length} cron method(s):`);
27659
29775
  for (const entry of cronEntries) {
27660
29776
  console.log(`[ARC:Cron] ${entry.aggregateName}.${entry.methodName} \u2192 "${entry.cronExpression}"`);
27661
- const task = new R(entry.cronExpression, async () => {
29777
+ const task = new R3(entry.cronExpression, async () => {
27662
29778
  await this.executeCronMethod(entry);
27663
29779
  });
27664
29780
  this.jobs.push({ entry, task });
@@ -27874,13 +29990,13 @@ function eventSyncHandler(ch) {
27874
29990
  try {
27875
29991
  const body = await req.json();
27876
29992
  const events = body.events || [];
27877
- const persisted = await ch.persistEvents(events.map((e) => ({
27878
- localId: e.localId,
27879
- type: e.type,
27880
- payload: e.payload,
27881
- createdAt: e.createdAt
29993
+ const persisted = await ch.persistEvents(events.map((e2) => ({
29994
+ localId: e2.localId,
29995
+ type: e2.type,
29996
+ payload: e2.payload,
29997
+ createdAt: e2.createdAt
27882
29998
  })), "http-sync", ctx.tokenPayload);
27883
- return Response.json({ success: true, syncedIds: persisted.map((e) => e.localId) }, { headers: ctx.corsHeaders });
29999
+ return Response.json({ success: true, syncedIds: persisted.map((e2) => e2.localId) }, { headers: ctx.corsHeaders });
27884
30000
  } catch (error) {
27885
30001
  return Response.json({ success: false, error: error.message }, { status: 500, headers: ctx.corsHeaders });
27886
30002
  }
@@ -28008,13 +30124,13 @@ function syncEventsHandler() {
28008
30124
  const persisted = await ctx.contextHandler.persistEvents(message.events, client.id, token);
28009
30125
  if (persisted.length === 0)
28010
30126
  return true;
28011
- for (const c of ctx.connectionManager.getAllClients()) {
28012
- if (c.id === client.id)
30127
+ for (const c2 of ctx.connectionManager.getAllClients()) {
30128
+ if (c2.id === client.id)
28013
30129
  continue;
28014
- const clientTokens = ctx.connectionManager.getAllScopeTokens(c.id);
30130
+ const clientTokens = ctx.connectionManager.getAllScopeTokens(c2.id);
28015
30131
  const authorized = filterEventsForTokens(clientTokens, persisted, ctx.contextHandler.getEventDefinitions());
28016
30132
  if (authorized.length > 0) {
28017
- ctx.connectionManager.sendToClient(c.id, {
30133
+ ctx.connectionManager.sendToClient(c2.id, {
28018
30134
  type: "events",
28019
30135
  events: authorized
28020
30136
  });
@@ -28106,8 +30222,8 @@ function querySubscriptionHandler() {
28106
30222
  subscriptionId,
28107
30223
  data: data ?? null
28108
30224
  });
28109
- } catch (err2) {
28110
- console.error(`[Arc] Query subscription error:`, err2);
30225
+ } catch (err3) {
30226
+ console.error(`[Arc] Query subscription error:`, err3);
28111
30227
  }
28112
30228
  };
28113
30229
  sendData();
@@ -28307,8 +30423,101 @@ async function createArcServer(config) {
28307
30423
  };
28308
30424
  }
28309
30425
  // src/platform/server.ts
28310
- import { existsSync as existsSync7, mkdirSync as mkdirSync7 } from "fs";
28311
- import { join as join8 } from "path";
30426
+ import { existsSync as existsSync12, mkdirSync as mkdirSync11 } from "fs";
30427
+ import { join as join15 } from "path";
30428
+
30429
+ // src/platform/deploy-api.ts
30430
+ import { existsSync as existsSync11, mkdirSync as mkdirSync10, readFileSync as readFileSync10, writeFileSync as writeFileSync11 } from "fs";
30431
+ import { dirname as dirname7, join as join14, normalize as normalize2, relative as relative4, resolve } from "path";
30432
+ function createDeployApiHandler(opts) {
30433
+ return async (req, url, ctx) => {
30434
+ const p3 = url.pathname;
30435
+ if (!p3.startsWith("/api/deploy/"))
30436
+ return null;
30437
+ if (p3 === "/api/deploy/health" && req.method === "GET") {
30438
+ return Response.json({ ok: true, modules: opts.getManifest().modules.length }, { headers: ctx.corsHeaders });
30439
+ }
30440
+ if (p3 === "/api/deploy/manifest" && req.method === "GET") {
30441
+ return Response.json(opts.getManifest(), { headers: ctx.corsHeaders });
30442
+ }
30443
+ if (p3 === "/api/deploy/manifest" && req.method === "POST") {
30444
+ const body = await req.json();
30445
+ if (!validateManifest(body)) {
30446
+ return Response.json({ error: "Invalid manifest body" }, { status: 400, headers: ctx.corsHeaders });
30447
+ }
30448
+ writeFileSync11(join14(opts.ws.modulesDir, "manifest.json"), JSON.stringify(body, null, 2));
30449
+ opts.setManifest(body);
30450
+ opts.notifyReload(body);
30451
+ return Response.json({ ok: true, moduleCount: body.modules.length }, { headers: ctx.corsHeaders });
30452
+ }
30453
+ if (p3 === "/api/deploy/modules" && req.method === "POST") {
30454
+ const form = await req.formData();
30455
+ const written = await writeUploadedFiles(form, opts.ws.modulesDir);
30456
+ return Response.json({ ok: true, written }, { headers: ctx.corsHeaders });
30457
+ }
30458
+ if (p3 === "/api/deploy/shell" && req.method === "POST") {
30459
+ const form = await req.formData();
30460
+ const shellFiles = [];
30461
+ const rootFiles = [];
30462
+ for (const [name, value] of form.entries()) {
30463
+ if (!isFile(value))
30464
+ continue;
30465
+ if (name === "styles.css" || name === "theme.css") {
30466
+ rootFiles.push({ name, file: value });
30467
+ } else {
30468
+ shellFiles.push(value);
30469
+ }
30470
+ }
30471
+ const writtenShell = await writeUploadedFileList(shellFiles, opts.ws.shellDir);
30472
+ const writtenRoot = [];
30473
+ for (const { name, file } of rootFiles) {
30474
+ const target = join14(opts.ws.arcDir, name);
30475
+ writeFileSync11(target, Buffer.from(await file.arrayBuffer()));
30476
+ writtenRoot.push(name);
30477
+ }
30478
+ return Response.json({ ok: true, written: [...writtenShell, ...writtenRoot] }, { headers: ctx.corsHeaders });
30479
+ }
30480
+ return new Response("Not Found", {
30481
+ status: 404,
30482
+ headers: ctx.corsHeaders
30483
+ });
30484
+ };
30485
+ }
30486
+ async function writeUploadedFiles(form, targetDir) {
30487
+ const files = [];
30488
+ for (const [, value] of form.entries()) {
30489
+ if (isFile(value))
30490
+ files.push(value);
30491
+ }
30492
+ return writeUploadedFileList(files, targetDir);
30493
+ }
30494
+ function isFile(v3) {
30495
+ return typeof v3 === "object" && v3 !== null && typeof v3.arrayBuffer === "function" && typeof v3.name === "string";
30496
+ }
30497
+ async function writeUploadedFileList(files, targetDir) {
30498
+ const written = [];
30499
+ const safeRoot = resolve(targetDir);
30500
+ mkdirSync10(safeRoot, { recursive: true });
30501
+ for (const file of files) {
30502
+ const rel = normalize2(file.name);
30503
+ const full = resolve(safeRoot, rel);
30504
+ if (!full.startsWith(safeRoot + "/") && full !== safeRoot) {
30505
+ throw new Error(`Path traversal rejected: ${file.name}`);
30506
+ }
30507
+ mkdirSync10(dirname7(full), { recursive: true });
30508
+ writeFileSync11(full, Buffer.from(await file.arrayBuffer()));
30509
+ written.push(relative4(safeRoot, full) || rel);
30510
+ }
30511
+ return written;
30512
+ }
30513
+ function validateManifest(m4) {
30514
+ if (!m4 || typeof m4 !== "object")
30515
+ return false;
30516
+ const cast = m4;
30517
+ return Array.isArray(cast.modules) && typeof cast.shellHash === "string" && typeof cast.stylesHash === "string" && typeof cast.buildTime === "string";
30518
+ }
30519
+
30520
+ // src/platform/server.ts
28312
30521
  function generateShellHtml(appName, manifest, arcEntries) {
28313
30522
  const arcImports = {};
28314
30523
  if (arcEntries) {
@@ -28371,7 +30580,7 @@ function getMime(path4) {
28371
30580
  return MIME[ext2] ?? "application/octet-stream";
28372
30581
  }
28373
30582
  function serveFile(filePath, headers = {}) {
28374
- if (!existsSync7(filePath))
30583
+ if (!existsSync12(filePath))
28375
30584
  return new Response("Not Found", { status: 404 });
28376
30585
  return new Response(Bun.file(filePath), {
28377
30586
  headers: { "Content-Type": getMime(filePath), ...headers }
@@ -28449,13 +30658,18 @@ async function filterManifestForTokens(manifest, moduleAccessMap, tokenPayloads)
28449
30658
  filtered.push({ ...mod, url: signModuleUrl(mod.file) });
28450
30659
  }
28451
30660
  }
28452
- return { modules: filtered, buildTime: manifest.buildTime };
30661
+ return {
30662
+ modules: filtered,
30663
+ shellHash: manifest.shellHash,
30664
+ stylesHash: manifest.stylesHash,
30665
+ buildTime: manifest.buildTime
30666
+ };
28453
30667
  }
28454
30668
  function staticFilesHandler(ws, devMode, moduleAccessMap) {
28455
30669
  return (_req, url, ctx) => {
28456
30670
  const path4 = url.pathname;
28457
30671
  if (path4.startsWith("/shell/"))
28458
- return serveFile(join8(ws.shellDir, path4.slice(7)), ctx.corsHeaders);
30672
+ return serveFile(join15(ws.shellDir, path4.slice(7)), ctx.corsHeaders);
28459
30673
  if (path4.startsWith("/modules/")) {
28460
30674
  const fileWithParams = path4.slice(9);
28461
30675
  const filename = fileWithParams.split("?")[0];
@@ -28467,23 +30681,23 @@ function staticFilesHandler(ws, devMode, moduleAccessMap) {
28467
30681
  return new Response("Forbidden", { status: 403, headers: ctx.corsHeaders });
28468
30682
  }
28469
30683
  }
28470
- return serveFile(join8(ws.modulesDir, filename), {
30684
+ return serveFile(join15(ws.modulesDir, filename), {
28471
30685
  ...ctx.corsHeaders,
28472
30686
  "Cache-Control": devMode ? "no-cache" : "max-age=31536000,immutable"
28473
30687
  });
28474
30688
  }
28475
30689
  if (path4.startsWith("/locales/"))
28476
- return serveFile(join8(ws.arcDir, path4.slice(1)), ctx.corsHeaders);
30690
+ return serveFile(join15(ws.arcDir, path4.slice(1)), ctx.corsHeaders);
28477
30691
  if (path4 === "/styles.css")
28478
- return serveFile(join8(ws.arcDir, "styles.css"), ctx.corsHeaders);
30692
+ return serveFile(join15(ws.arcDir, "styles.css"), ctx.corsHeaders);
28479
30693
  if (path4 === "/theme.css")
28480
- return serveFile(join8(ws.arcDir, "theme.css"), ctx.corsHeaders);
30694
+ return serveFile(join15(ws.arcDir, "theme.css"), ctx.corsHeaders);
28481
30695
  if ((path4 === "/manifest.json" || path4 === "/manifest.webmanifest") && ws.manifest) {
28482
30696
  return serveFile(ws.manifest.path, ctx.corsHeaders);
28483
30697
  }
28484
30698
  if (path4.lastIndexOf(".") > path4.lastIndexOf("/")) {
28485
- const publicFile = join8(ws.publicDir, path4.slice(1));
28486
- if (existsSync7(publicFile))
30699
+ const publicFile = join15(ws.publicDir, path4.slice(1));
30700
+ if (existsSync12(publicFile))
28487
30701
  return serveFile(publicFile, ctx.corsHeaders);
28488
30702
  }
28489
30703
  return null;
@@ -28552,8 +30766,30 @@ async function startPlatformServer(opts) {
28552
30766
  const moduleAccessMap = opts.moduleAccess ?? new Map;
28553
30767
  let manifest = opts.manifest;
28554
30768
  const getManifest = () => manifest;
30769
+ const setManifest = (m4) => {
30770
+ manifest = m4;
30771
+ };
28555
30772
  const shellHtml = generateShellHtml(ws.appName, ws.manifest, opts.arcEntries);
28556
30773
  const sseClients = new Set;
30774
+ const notifyReload = (m4) => {
30775
+ const data = JSON.stringify(m4);
30776
+ for (const c2 of sseClients) {
30777
+ try {
30778
+ c2.enqueue(`data: ${data}
30779
+
30780
+ `);
30781
+ } catch {
30782
+ sseClients.delete(c2);
30783
+ }
30784
+ }
30785
+ };
30786
+ const deployApiEnabled = opts.deployApi ?? process.env.ARC_DEPLOY_API === "1";
30787
+ const deployApiHandler = deployApiEnabled ? createDeployApiHandler({
30788
+ ws,
30789
+ getManifest,
30790
+ setManifest,
30791
+ notifyReload
30792
+ }) : null;
28557
30793
  if (!context) {
28558
30794
  const cors = {
28559
30795
  "Access-Control-Allow-Origin": "*",
@@ -28562,7 +30798,7 @@ async function startPlatformServer(opts) {
28562
30798
  };
28563
30799
  const server = Bun.serve({
28564
30800
  port,
28565
- fetch(req) {
30801
+ async fetch(req) {
28566
30802
  const url = new URL(req.url);
28567
30803
  if (req.method === "OPTIONS")
28568
30804
  return new Response(null, { headers: cors });
@@ -28572,15 +30808,14 @@ async function startPlatformServer(opts) {
28572
30808
  corsHeaders: cors
28573
30809
  };
28574
30810
  const handlers = [
30811
+ ...deployApiHandler ? [deployApiHandler] : [],
28575
30812
  apiEndpointsHandler(ws, getManifest, null, moduleAccessMap),
28576
- ...devMode ? [devReloadHandler(sseClients)] : [],
30813
+ devReloadHandler(sseClients),
28577
30814
  staticFilesHandler(ws, !!devMode, moduleAccessMap),
28578
30815
  spaFallbackHandler(shellHtml)
28579
30816
  ];
28580
30817
  for (const handler of handlers) {
28581
- const response = handler(req, url, ctx);
28582
- if (response instanceof Promise)
28583
- return response;
30818
+ const response = await handler(req, url, ctx);
28584
30819
  if (response)
28585
30820
  return response;
28586
30821
  }
@@ -28591,36 +30826,24 @@ async function startPlatformServer(opts) {
28591
30826
  server,
28592
30827
  contextHandler: null,
28593
30828
  connectionManager: null,
28594
- setManifest: (m2) => {
28595
- manifest = m2;
28596
- },
28597
- notifyReload: (m2) => {
28598
- const data = JSON.stringify(m2);
28599
- for (const c of sseClients) {
28600
- try {
28601
- c.enqueue(`data: ${data}
28602
-
28603
- `);
28604
- } catch {
28605
- sseClients.delete(c);
28606
- }
28607
- }
28608
- },
30829
+ setManifest,
30830
+ notifyReload,
28609
30831
  stop: () => server.stop()
28610
30832
  };
28611
30833
  }
28612
- const { createBunSQLiteAdapterFactory: createBunSQLiteAdapterFactory2 } = await Promise.resolve().then(() => (init_dist(), exports_dist));
28613
- const dbPath = opts.dbPath || join8(ws.arcDir, "data", "arc.db");
30834
+ const { createBunSQLiteAdapterFactory: createBunSQLiteAdapterFactory2 } = await Promise.resolve().then(() => (init_dist(), exports_dist2));
30835
+ const dbPath = opts.dbPath || join15(ws.arcDir, "data", "arc.db");
28614
30836
  const dbDir = dbPath.substring(0, dbPath.lastIndexOf("/"));
28615
30837
  if (dbDir)
28616
- mkdirSync7(dbDir, { recursive: true });
30838
+ mkdirSync11(dbDir, { recursive: true });
28617
30839
  const arcServer = await createArcServer({
28618
30840
  context,
28619
30841
  dbAdapterFactory: createBunSQLiteAdapterFactory2(dbPath),
28620
30842
  port,
28621
30843
  httpHandlers: [
30844
+ ...deployApiHandler ? [deployApiHandler] : [],
28622
30845
  apiEndpointsHandler(ws, getManifest, null, moduleAccessMap),
28623
- ...devMode ? [devReloadHandler(sseClients)] : [],
30846
+ devReloadHandler(sseClients),
28624
30847
  staticFilesHandler(ws, !!devMode, moduleAccessMap),
28625
30848
  spaFallbackHandler(shellHtml)
28626
30849
  ],
@@ -28630,21 +30853,8 @@ async function startPlatformServer(opts) {
28630
30853
  server: arcServer.server,
28631
30854
  contextHandler: arcServer.contextHandler,
28632
30855
  connectionManager: arcServer.connectionManager,
28633
- setManifest: (m2) => {
28634
- manifest = m2;
28635
- },
28636
- notifyReload: (m2) => {
28637
- const data = JSON.stringify(m2);
28638
- for (const c of sseClients) {
28639
- try {
28640
- c.enqueue(`data: ${data}
28641
-
28642
- `);
28643
- } catch {
28644
- sseClients.delete(c);
28645
- }
28646
- }
28647
- },
30856
+ setManifest,
30857
+ notifyReload,
28648
30858
  stop: () => arcServer.stop()
28649
30859
  };
28650
30860
  }
@@ -28668,7 +30878,7 @@ async function platformDev() {
28668
30878
  manifest,
28669
30879
  context,
28670
30880
  moduleAccess,
28671
- dbPath: join9(ws.rootDir, ".arc", "data", "dev.db"),
30881
+ dbPath: join16(ws.rootDir, ".arc", "data", "dev.db"),
28672
30882
  devMode: true,
28673
30883
  arcEntries
28674
30884
  });
@@ -28679,8 +30889,8 @@ async function platformDev() {
28679
30889
  let rebuildTimer = null;
28680
30890
  let isRebuilding = false;
28681
30891
  for (const pkg of ws.packages) {
28682
- const srcDir = join9(pkg.path, "src");
28683
- if (!existsSync8(srcDir))
30892
+ const srcDir = join16(pkg.path, "src");
30893
+ if (!existsSync13(srcDir))
28684
30894
  continue;
28685
30895
  watch(srcDir, { recursive: true }, (_event, filename) => {
28686
30896
  if (!filename || filename.includes(".arc") || filename.endsWith(".d.ts") || filename.includes("node_modules") || filename.includes("dist"))
@@ -28700,16 +30910,16 @@ async function platformDev() {
28700
30910
  platform3.setManifest(manifest);
28701
30911
  platform3.notifyReload(manifest);
28702
30912
  ok(`Rebuilt ${manifest.modules.length} module(s)`);
28703
- } catch (e) {
28704
- console.error(`Rebuild failed: ${e}`);
30913
+ } catch (e2) {
30914
+ console.error(`Rebuild failed: ${e2}`);
28705
30915
  } finally {
28706
30916
  isRebuilding = false;
28707
30917
  }
28708
30918
  }, 300);
28709
30919
  });
28710
30920
  }
28711
- const localesDir = join9(ws.rootDir, "locales");
28712
- if (existsSync8(localesDir)) {
30921
+ const localesDir = join16(ws.rootDir, "locales");
30922
+ if (existsSync13(localesDir)) {
28713
30923
  let poTimer = null;
28714
30924
  watch(localesDir, { recursive: false }, (_event, filename) => {
28715
30925
  if (!filename?.endsWith(".po"))
@@ -28718,11 +30928,11 @@ async function platformDev() {
28718
30928
  clearTimeout(poTimer);
28719
30929
  poTimer = setTimeout(async () => {
28720
30930
  try {
28721
- compileAllCatalogs(localesDir, join9(ws.arcDir, "locales"));
30931
+ compileAllCatalogs(localesDir, join16(ws.arcDir, "locales"));
28722
30932
  ok("Translations recompiled");
28723
30933
  platform3.notifyReload(manifest);
28724
- } catch (e) {
28725
- console.error(`Translation compile failed: ${e}`);
30934
+ } catch (e2) {
30935
+ console.error(`Translation compile failed: ${e2}`);
28726
30936
  }
28727
30937
  }, 200);
28728
30938
  });
@@ -28736,17 +30946,17 @@ async function platformDev() {
28736
30946
  }
28737
30947
 
28738
30948
  // src/commands/platform-start.ts
28739
- import { existsSync as existsSync9, readFileSync as readFileSync7 } from "fs";
28740
- import { join as join10 } from "path";
30949
+ import { existsSync as existsSync14, readFileSync as readFileSync11 } from "fs";
30950
+ import { join as join17 } from "path";
28741
30951
  async function platformStart() {
28742
30952
  const ws = resolveWorkspace();
28743
30953
  const port = parseInt(process.env.PORT || "5005", 10);
28744
- const manifestPath = join10(ws.modulesDir, "manifest.json");
28745
- if (!existsSync9(manifestPath)) {
30954
+ const manifestPath = join17(ws.modulesDir, "manifest.json");
30955
+ if (!existsSync14(manifestPath)) {
28746
30956
  err("No build found. Run `arc platform build` first.");
28747
30957
  process.exit(1);
28748
30958
  }
28749
- const manifest = JSON.parse(readFileSync7(manifestPath, "utf-8"));
30959
+ const manifest = JSON.parse(readFileSync11(manifestPath, "utf-8"));
28750
30960
  log2("Loading server context...");
28751
30961
  const { context, moduleAccess } = await loadServerContext(ws.packages);
28752
30962
  if (context) {
@@ -28755,14 +30965,18 @@ async function platformStart() {
28755
30965
  log2("No context \u2014 server endpoints skipped");
28756
30966
  }
28757
30967
  const arcEntries = collectArcPeerDeps(ws.packages);
30968
+ const deployApi = process.env.ARC_DEPLOY_API === "1";
30969
+ if (deployApi)
30970
+ ok("Deploy API enabled (/api/deploy/*)");
28758
30971
  const platform3 = await startPlatformServer({
28759
30972
  ws,
28760
30973
  port,
28761
30974
  manifest,
28762
30975
  context,
28763
30976
  moduleAccess,
28764
- dbPath: join10(ws.rootDir, ".arc", "data", "prod.db"),
30977
+ dbPath: join17(ws.rootDir, ".arc", "data", "prod.db"),
28765
30978
  devMode: false,
30979
+ deployApi,
28766
30980
  arcEntries
28767
30981
  });
28768
30982
  ok(`Server on http://localhost:${port}`);
@@ -28785,6 +30999,7 @@ var platform3 = program2.command("platform").description("Platform commands \u20
28785
30999
  platform3.command("dev").description("Start platform in dev mode (Bun server + Vite HMR)").action(platformDev);
28786
31000
  platform3.command("build").description("Build platform for production").action(platformBuild);
28787
31001
  platform3.command("start").description("Start platform in production mode (requires prior build)").action(platformStart);
31002
+ platform3.command("deploy [env]").description("Deploy platform to a remote server (reads deploy.arc.json, surveys if missing)").option("--skip-build", "Skip local build step").option("--rebuild", "Force rebuild before deploy").action((env2, opts) => platformDeploy(env2, opts));
28788
31003
  program2.parse(process.argv);
28789
31004
  if (process.argv.length === 2) {
28790
31005
  program2.help();